Petite astuce ASP.NET ... rien de transcendant mais, plutot utile !
Si vous utilisez une page dans laquelle il y a des "updatePanel" et que vous devez exécuter du code javascript avant l'appel ajax /et/ou après l'appel ajax, vous pouvez utiliser le PageRequestManager.
code javascript :
var pageManager = Sys.WebForms.PageRequestManager.getInstance();
pageManager.add_beginRequest(function(sender,args){
MasterPage.DisplayWaitPanel(); // affiche un hypothétique écran d'attente
return true;
});
pageManager.add_endRequest(function(sender,args){
MasterPage.HideWaitPanel(); // cache l'hypothétique écran d'attente
return true;
});
du coup le wait panel est affiché quel que soit l'action provenant de l'updatePanel !
mardi 10 novembre 2009
Windows Seven Preview Panel
Ptit post bien pratique...
Dans l'explorateur de Windows Seven, il est possible d'afficher le contenu des fichier dans le panneau de droite, sans les ouvrir explicitement.
Pour ce faire, il est indispensable qu'une clé de registre existe en face de l'extension de fichier, pour indiquer au système comment interpréter l'aperçu du fichier.
Clé registre :
HKLM \ Software \ Classes \.[extentionFichier]
Vérifier l'existance / ajouter la clé (string) PerceivedType avec pour valeur text.
:)
Dans l'explorateur de Windows Seven, il est possible d'afficher le contenu des fichier dans le panneau de droite, sans les ouvrir explicitement.
Pour ce faire, il est indispensable qu'une clé de registre existe en face de l'extension de fichier, pour indiquer au système comment interpréter l'aperçu du fichier.
Clé registre :
HKLM \ Software \ Classes \.[extentionFichier]
Vérifier l'existance / ajouter la clé (string) PerceivedType avec pour valeur text.
:)
jeudi 5 novembre 2009
Design Pattern
Salut à toi lecteur !
Un petit post sur un coup de coeur que j'ai eu (en fait je me suis fait plaisir avant Noel ;) )
Je suis un adepte du site DoFactory (http://www.dofactory.com) qui présente des design patterns, mais surtout qui vend un kit à +/- 54€ (79$), soit le prix d'un bon livre....
Ce kit comprend :
- Livre (pdf) des patterns du GOF (Gang Of Four - dieux du pattern),
- Livre (pdf) Head First in Design Patterns (à l'époque, je l'avais acheté en francais, et c'est une référence en la matière !), qui présente les DP avec beaucoup de pédagogie et d'humour,
- Livre (pdf) Patterns in Actions,
Ainsi que les exemples de ces livres !
Chaque exemple est traité de trois manière :
- Exemple du pattern théorique,
- Exemple réel du pattern
- Exemple réel du pattern optimisé pour .NET 3.5 (VB ou C# suivant le kit)
Bref une bible à avoir !
@+
Un petit post sur un coup de coeur que j'ai eu (en fait je me suis fait plaisir avant Noel ;) )
Je suis un adepte du site DoFactory (http://www.dofactory.com) qui présente des design patterns, mais surtout qui vend un kit à +/- 54€ (79$), soit le prix d'un bon livre....
Ce kit comprend :
- Livre (pdf) des patterns du GOF (Gang Of Four - dieux du pattern),
- Livre (pdf) Head First in Design Patterns (à l'époque, je l'avais acheté en francais, et c'est une référence en la matière !), qui présente les DP avec beaucoup de pédagogie et d'humour,
- Livre (pdf) Patterns in Actions,
Ainsi que les exemples de ces livres !
Chaque exemple est traité de trois manière :
- Exemple du pattern théorique,
- Exemple réel du pattern
- Exemple réel du pattern optimisé pour .NET 3.5 (VB ou C# suivant le kit)
Bref une bible à avoir !
@+
mardi 20 octobre 2009
Javascript, UpdatePanel et Wait animations
Lorsque l'on utilise des Updatepanel ASP.NET, il est tout a fait possible de les agrémenter de traitements javascript appelés avant / après l'appel du code behind par ajax.
Cela peut être utile (par exemple) pour afficher ou masquer une animation pendant le traitement.
Pour ce faire, il "suffit" (en javascript) d'insufler à l'objet PageRequestManager les fonctions javascript à exécuter en pré/post traitement.
Exemple : (coté aspx)
{script language="javascript" }
var pageManager = Sys.WebForms.PageRequestManager.getInstance();
pageManager.add_beginRequest(function(sender,args){
MasterPageJsMgr.DisplayWaitPanel();
return true;
});
pageManager.add_endRequest(function(sender,args){
MasterPageJsMgr.HideWaitPanel();
return true;
});
{/script}
L'objet MasterPageJsMgr correspondant à un objet JSON (Javascript Object Notation)
définit quelque part et permettant d'afficher ou de masquer une WaitForm.
@+
Cela peut être utile (par exemple) pour afficher ou masquer une animation pendant le traitement.
Pour ce faire, il "suffit" (en javascript) d'insufler à l'objet PageRequestManager les fonctions javascript à exécuter en pré/post traitement.
Exemple : (coté aspx)
{script language="javascript" }
var pageManager = Sys.WebForms.PageRequestManager.getInstance();
pageManager.add_beginRequest(function(sender,args){
MasterPageJsMgr.DisplayWaitPanel();
return true;
});
pageManager.add_endRequest(function(sender,args){
MasterPageJsMgr.HideWaitPanel();
return true;
});
{/script}
L'objet MasterPageJsMgr correspondant à un objet JSON (Javascript Object Notation)
définit quelque part et permettant d'afficher ou de masquer une WaitForm.
@+
mercredi 19 août 2009
Xaml, Enumeration et intellisense !
Un petit post bien sympa pour se faciliter la vie...
Lorsque nous construisons des contrôles graphiques (exemple : librairie de contrôles), il arrive que nous utilisions des propriétés qui retournent des membres d'énumération.
Lorsque l'on vient à déclarer ces contrôles dans un fichier xaml, et que l'on appelle la propriété en question pour lui affecter une valeur ...
rien ne se passe : l'intellisense est dans les choux !
Pour corriger cet "intelli-ignorance", il suffit d'appliquer un geste très simple :
1. déclarer le namespace dans le fichier AssemblyInfo.cs de la façon suivante :
[assembly: XmlnsDefinition("http://monTruxAMoi.com/wpf/", "nameSpaceDeLenumeration")]
où XmlnsDefinition provient de System.Windows.Markup.
2. Je compile,
3. Enfin, dans le Xaml ou je désire utiliser mon contrôle, j'ajoute une déclaration xmlns:monTrux="http://monTruxAMoi.com/wpf/"
Hélas cela ne fonctionne "correctement" qu'en WPF ...
En Silverlight (même 3), Visual Studio ne résoud pas correctement les using dans les fichiers xxx.g.cs
du coup, on perd l'intellisense côté C# ... pas pratique !
Lorsque nous construisons des contrôles graphiques (exemple : librairie de contrôles), il arrive que nous utilisions des propriétés qui retournent des membres d'énumération.
Lorsque l'on vient à déclarer ces contrôles dans un fichier xaml, et que l'on appelle la propriété en question pour lui affecter une valeur ...
rien ne se passe : l'intellisense est dans les choux !
Pour corriger cet "intelli-ignorance", il suffit d'appliquer un geste très simple :
1. déclarer le namespace dans le fichier AssemblyInfo.cs de la façon suivante :
[assembly: XmlnsDefinition("http://monTruxAMoi.com/wpf/", "nameSpaceDeLenumeration")]
où XmlnsDefinition provient de System.Windows.Markup.
2. Je compile,
3. Enfin, dans le Xaml ou je désire utiliser mon contrôle, j'ajoute une déclaration xmlns:monTrux="http://monTruxAMoi.com/wpf/"
Hélas cela ne fonctionne "correctement" qu'en WPF ...
En Silverlight (même 3), Visual Studio ne résoud pas correctement les using dans les fichiers xxx.g.cs
du coup, on perd l'intellisense côté C# ... pas pratique !
mercredi 12 août 2009
Silverligh 3 : Fichiers de Styles
Une nouveauté intéressante de SL3 est la possibilité de sortir les styles utilisés du fichier App.xaml pour les placer dans des fichiers propre (exemple : Style.xaml).
Pour ce faire, créez un fichier de type Dictionnaire de ressource,
Et ensuite, dans le fichier App.xaml, ajouter les lignes suivantes :
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Assets/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Cela aura pour effet de fusionner la liste des fichiers indiqués par la source comme étant des ressources de l'application (utilisable donc par les appels "StaticResource").
@+
Pour ce faire, créez un fichier de type Dictionnaire de ressource,
Et ensuite, dans le fichier App.xaml, ajouter les lignes suivantes :
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Assets/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Cela aura pour effet de fusionner la liste des fichiers indiqués par la source comme étant des ressources de l'application (utilisable donc par les appels "StaticResource").
@+
vendredi 10 juillet 2009
Silverlight 3 !
Nous y sommes !
La version finale de Microsoft Silverlight 3 a été publiée ce vendredi !
A nous le mode Offline, la 3D, le streaming HD, le framework RIA !
Bref que de bonnes nouvelles ...
De là a combiner cela au Cloud Azure...
May the force be with you !
@+
PS : La chaine NBC a annoncé couvrir la diffusion des JO d'hivers de Vancouver en HD (720p) par une plateforme Silverlight 3 !
(Ce qui a été réalisé pour Roland Garros 2009)
La version finale de Microsoft Silverlight 3 a été publiée ce vendredi !
A nous le mode Offline, la 3D, le streaming HD, le framework RIA !
Bref que de bonnes nouvelles ...
De là a combiner cela au Cloud Azure...
May the force be with you !
@+
PS : La chaine NBC a annoncé couvrir la diffusion des JO d'hivers de Vancouver en HD (720p) par une plateforme Silverlight 3 !
(Ce qui a été réalisé pour Roland Garros 2009)
lundi 22 juin 2009
Silverlight et WCF ... pour être propre !
L'utilisation d'un canal de communication WCF par une appli silverlight nécessite un appel asynchrone, et donc, l'abonnement à l'évènement blablablaComplete.
Lors de l'appel de la méthode blablabla, nous pouvons passer en paramètre l'objet proxy afin d'effectuer des opérations de nettoyage (pour être plus propre) :
CloseAsync( ) et le désabonnement à l'évènement.
Exemple :
C'est toujours plus propre de fermer ce que l'on utilise ...
Lors de l'appel de la méthode blablabla, nous pouvons passer en paramètre l'objet proxy afin d'effectuer des opérations de nettoyage (pour être plus propre) :
CloseAsync( ) et le désabonnement à l'évènement.
Exemple :
// méthode sur l'évènement complete (sous la forme d'une expression lambda) EventHandler // Proxy pour l'appel WCF SrvDatasClient proxy = AppDataHelper.GetProxy(); // définition de la méthode lambda methodComplete = (ssender, ee) => { (ee.UserState as SrvDatasClient).SaveCompleted -= methodComplete; // plus propre (ee.UserState as SrvDatasClient).CloseAsync(); // super plus propre }; proxy.GetAllCompleted += methodComplete; proxy.GetAllAsync(proxy); // appel ou je passe en param le proxy |
C'est toujours plus propre de fermer ce que l'on utilise ...
lundi 15 juin 2009
Silverlight 2 et URL
En Silverlight 2 (comme en WPF d'ailleurs), il est fortement conseillé de créer des styles, et de mapper ces derniers aux composants concernés (via leur balise style et le mécanisme de resource statiques).
Dès lors, ces styles sont créés soit dans les ressources du usercontrol concerné, soit dans les ressources de l'application (App.xaml)
Dans le cas d'images (incorporée dans l'assembly comme ressource) il est d'usage d'utiliser les url's absolues pour permettre la récupération des images, quel que soit le niveau du sous namespace, ou sous répertoire du xaml du user control concerné.
Ce chemin se présente de la sorte :
/nomDeLAssembly;component/blablabla
où blablabla correspond au chemin de l'image.
Si le chemin de l'image dans le projet est Images/toto.png
mon chemin sera :
/nomDeLAssembly;component/Images/toto.png
@+
Dès lors, ces styles sont créés soit dans les ressources du usercontrol concerné, soit dans les ressources de l'application (App.xaml)
Dans le cas d'images (incorporée dans l'assembly comme ressource) il est d'usage d'utiliser les url's absolues pour permettre la récupération des images, quel que soit le niveau du sous namespace, ou sous répertoire du xaml du user control concerné.
Ce chemin se présente de la sorte :
/nomDeLAssembly;component/blablabla
où blablabla correspond au chemin de l'image.
Si le chemin de l'image dans le projet est Images/toto.png
mon chemin sera :
/nomDeLAssembly;component/Images/toto.png
@+
Silverlight 2, WCF et les FaultException
Lorsque une équipe travaille en Silverlight, il est nécessaire de communiquer avec un proxy (serveur) pour disposer de données et interagir avec elles.
Pour se faire, nous pouvons utiliser les objets WebRequest ou WebClient (tuto : http://bdevuyst.developpez.com/tutoriels/silverlight/S2-interagir-avec-son-serveur/).
Nous pouvons également utiliser WCF (Windows Communication Fundation). Pour rappel, cette technologie permet de ne maitriser qu'une seule syntaxe (en C#, par exemple), et un fichier de paramètres permettra à WCF de savoir quel est le protocole à utiliser pour les échanges (WebService, NetPipes, ...).
Lorsque l'on manipule du WCF, les exceptions rencontrées sur le serveur peuvent être transférées au client grâce à la classe FaultException (Il s'agit d'une Exception qui peut être sérialisée vers un client).
Tout autre Exception (dérivant de System.Exception) se voit arrêtée par WCF côté serveur.
En effet, pour des raison de sécurité, une System.Exception ne peut traverser WCF.
(Elle contient trop d'informations sur l'architecture de l'application - stacktrace par exemple).
Suite à un souci (l'explication est à trouver ici : msdn), ces erreurs ne peuvent être remontées vers le client Silverlight 2 (ce sera peut être le cas en version 3).
Dès lors, pour pouvoir gérer, côté Silverlight, les exceptions éventuelles de l'application serveur, il faut être un petit peu sioux !
Voici le lien d'une solution Visual Studio 2008, proposant une réponse à ce problème :
ftp://ftp-developpez.com/bdevuyst/tutoriels/silverlight/S2-gestion-exception-wcf/SilverlightApplicationGstException.zip
Globalement, voici le mécanisme :
La solution est divisée en 3 projets :
- Le projet Web qui héberge l'application Silverlight et un Service WCF (.svc),
- Le projet Silverlight,
- Un projet bibliothèque de classe qui "simule" une autre couche, qu'utilise le Service WCF,
Il s'agit d'une classe générique qui contient 3 propriétés :
Je vous invite à télécharger les sources pour bien saisir le mécanisme...
Lien des source de la solution Visual Studio 2008 :
ftp://ftp-developpez.com/bdevuyst/tutoriels/silverlight/S2-gestion-exception-wcf/SilverlightApplicationGstException.zip
@+
Pour se faire, nous pouvons utiliser les objets WebRequest ou WebClient (tuto : http://bdevuyst.developpez.com/tutoriels/silverlight/S2-interagir-avec-son-serveur/).
Nous pouvons également utiliser WCF (Windows Communication Fundation). Pour rappel, cette technologie permet de ne maitriser qu'une seule syntaxe (en C#, par exemple), et un fichier de paramètres permettra à WCF de savoir quel est le protocole à utiliser pour les échanges (WebService, NetPipes, ...).
Lorsque l'on manipule du WCF, les exceptions rencontrées sur le serveur peuvent être transférées au client grâce à la classe FaultException (Il s'agit d'une Exception qui peut être sérialisée vers un client).
Tout autre Exception (dérivant de System.Exception) se voit arrêtée par WCF côté serveur.
En effet, pour des raison de sécurité, une System.Exception ne peut traverser WCF.
(Elle contient trop d'informations sur l'architecture de l'application - stacktrace par exemple).
Suite à un souci (l'explication est à trouver ici : msdn), ces erreurs ne peuvent être remontées vers le client Silverlight 2 (ce sera peut être le cas en version 3).
Dès lors, pour pouvoir gérer, côté Silverlight, les exceptions éventuelles de l'application serveur, il faut être un petit peu sioux !
Voici le lien d'une solution Visual Studio 2008, proposant une réponse à ce problème :
ftp://ftp-developpez.com/bdevuyst/tutoriels/silverlight/S2-gestion-exception-wcf/SilverlightApplicationGstException.zip
Globalement, voici le mécanisme :
La solution est divisée en 3 projets :
- Le projet Web qui héberge l'application Silverlight et un Service WCF (.svc),
- Le projet Silverlight,
- Un projet bibliothèque de classe qui "simule" une autre couche, qu'utilise le Service WCF,
- L'application Silverlight appelle le point de terminaison WCF, (derrière le bouton),
- L'application WCF traite la demande, cherche à obtenir les données, et une exception se produit... (pas de chance ;) )
- La couche WCF catch l'exception, et retourne un objet d'un type particulier
- Cet objet retourné est la clé du mécanisme
Il s'agit d'une classe générique qui contient 3 propriétés :
- Message : Correspond au message de l'exception générée, vide si le traitement s'est bien passé,
- StackTrace : Pour le debug (dans le cas de symbole de debuggage absent, ce champ est vide)
- ObjetAttendu dont le type est précisé lors de la déclaration de la variable. Cette dernière contiendra l'objet attendu si aucune exception ne s'est produite pour le récupérer.
Je vous invite à télécharger les sources pour bien saisir le mécanisme...
Lien des source de la solution Visual Studio 2008 :
ftp://ftp-developpez.com/bdevuyst/tutoriels/silverlight/S2-gestion-exception-wcf/SilverlightApplicationGstException.zip
@+
jeudi 14 mai 2009
Nouveautés Silverlight 3
Silverlight continue de grandir : à l'occasion du Mix 2009 à Las Vegas, Microsoft a levé le voile sur les nouveautés SL3.
Voici une liste non exhaustive :
- Héritage des styles (comme en WPF)
- Effets graphiques 3D (ombres, projections 3D, ...)
- Création d'applications Offline, avec un loader d'application Silverlight qui gère la mise à jour automatique de l'instance Offline à partir de l'Online,
- Gestion de la HD pour les vidéos
Pour une description plus complète :
@+
lundi 23 mars 2009
Books - Apress "Pro Silverlight 2 in C#"
I have bought a e-book about Silverlight 2 and... its one of the best one I have read about this RUI (Rich User Interface) / RUE (Rich User Experience) technology.
If you're looking for that kind of book ... this one is also for you !
URL to the book : http://www.apress.com/book/view/1590599497
@+
If you're looking for that kind of book ... this one is also for you !
URL to the book : http://www.apress.com/book/view/1590599497
@+
vendredi 20 mars 2009
Bonne nouvelle !
Il y a quelque temps, le petit monde de l'informatique francophone constatait avec désarroi la "mort" d'un grand éditeur : Oreilly France.
En effet, pour des questions de rentabilité, la maison mère pris cette lourde décision.
Depuis, de grandes interrogations demeuraient quant à la continuité d'accès aux livres... ne fut ce qu’en format électronique.
C’est chose faite : l’éditeur Immatériel (http://librairie.immateriel.fr/) vend depuis peu les précieux ouvrages.
Profitez-en !
@ce propos, n’hésitez surtout pas à investir dans une des bibles des design patterns : « Tête la première dans les design patterns ». (Livre GENIAL !!!)
En effet, pour des questions de rentabilité, la maison mère pris cette lourde décision.
Depuis, de grandes interrogations demeuraient quant à la continuité d'accès aux livres... ne fut ce qu’en format électronique.
C’est chose faite : l’éditeur Immatériel (http://librairie.immateriel.fr/) vend depuis peu les précieux ouvrages.
Profitez-en !
@ce propos, n’hésitez surtout pas à investir dans une des bibles des design patterns : « Tête la première dans les design patterns ». (Livre GENIAL !!!)
lundi 16 mars 2009
Nouveau tutorial : Créer ses propres classes génériques
Just for pleasure : je viens de pondre un ptit tuto pour éclaircir la question des classes génériques,
Le framework .NET en propose toute une panoplie.
L'exemple le plus connu est probablement les List qui permettent de créer des listes fortement typées.
Ce mécanisme est puissant, et nous pouvons nous aussi définir des classes génériques dans nos développements.
Mais qu'est ce qu'une classe générique ?
Pour ceux que cela intéresse :
http://bdevuyst.developpez.com/tutoriels/dotnet/creer-ses-propres-classes-generiques/
Enjoy !
Le framework .NET en propose toute une panoplie.
L'exemple le plus connu est probablement les List
Ce mécanisme est puissant, et nous pouvons nous aussi définir des classes génériques dans nos développements.
Mais qu'est ce qu'une classe générique ?
Pour ceux que cela intéresse :
http://bdevuyst.developpez.com/tutoriels/dotnet/creer-ses-propres-classes-generiques/
Enjoy !
vendredi 13 mars 2009
Silverlight : 2 Major evolutions !
One step behind in Silverlight Open World :
A new version of Moonlight (Silverlight for Linux World) has been released, it support all Silverlight 1 behaviours. The Silverlight 2 version will be released on Sept 2009, but it is available in pre alpha version for testing... an more !
http://www.mono-project.com/Moonlight
Silverlight 2 Microsoft controls code has just been published. It is under Microsoft Public License, and can be download here : http://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&displaylang=en
Enjoy
A new version of Moonlight (Silverlight for Linux World) has been released, it support all Silverlight 1 behaviours. The Silverlight 2 version will be released on Sept 2009, but it is available in pre alpha version for testing... an more !
http://www.mono-project.com/Moonlight
Silverlight 2 Microsoft controls code has just been published. It is under Microsoft Public License, and can be download here : http://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&displaylang=en
Enjoy
jeudi 12 mars 2009
Principes de securité SQL Server
Deux post sur la semaine !
A mon avis, là on est largement au delà de ce que je ferai dans l'avenir (j'espère 1 post -sérieux- par semaine, ou minimum par mois)...
Ce post vise à simplement re parler d'un tuto SQL Server que j'ai écris en aout 2007.
(modeste tuto)
En voici le résumé... et le lien (dans un avenir proche, je placerai un lien vers un pdf ici !)
SQL Server 2005 adopte une sécurité à deux niveaux : Moteur et base de données.
Que sont les schémas, rôles, rôles de serveur fixe, peut on intégrer la sécurité Active Directory à SQL Server,...
Ce tutorial est une synthèse de la gestion des droits du moteur de bases de données.
http://sqlserver.developpez.com/temp/secu/
@pluche !
A mon avis, là on est largement au delà de ce que je ferai dans l'avenir (j'espère 1 post -sérieux- par semaine, ou minimum par mois)...
Ce post vise à simplement re parler d'un tuto SQL Server que j'ai écris en aout 2007.
(modeste tuto)
En voici le résumé... et le lien (dans un avenir proche, je placerai un lien vers un pdf ici !)
SQL Server 2005 adopte une sécurité à deux niveaux : Moteur et base de données.
Que sont les schémas, rôles, rôles de serveur fixe, peut on intégrer la sécurité Active Directory à SQL Server,...
Ce tutorial est une synthèse de la gestion des droits du moteur de bases de données.
http://sqlserver.developpez.com/temp/secu/
@pluche !
Libellés :
active directory,
administration,
rôles,
sécurité,
serveur,
shémas,
SQL Server,
utilisateurs
mercredi 11 mars 2009
Visual Studio + Attach to process + Compact Framework = ...
Pour ce premier billet, juste une petite astuce ...
Dans Visual Studio 2005 (2008), nous avons la possibilité d'attacher dynamiquement (à chaud) une application IL (.NET) qui s'exécute au code source afin de l'exécuter en pas à pas.
En général, c'est ce que l'on fait pour débugger des service Windows, des services WCF ou des WebServices.
L'autre jour, j'ai été confronté à la nécessité de faire cela mais avec une application Windows CE (mobile) en Compact Framework...
Et là c'est le drame, car par défaut, Windows CE ne permet pas cette fonctionnalité !
Voici le résumé des opérations à faire pour permettre d'attacher dynamiquement une application en cours d'exécution sous Windows CE avec son code source en VS.NET.
1. Modification du registre du périphérique mobile
A VOS RISQUES ET PÉRILS !
Dans Visual Studio, ouvrez le menu Déboguez, Attachez au processus,
Choisissez "Transport : SmartDevice",
et choississez le périphérique dans "Qualificateur",
Choisissez le process, et Validez !
Pour désactiver la fonctionnalité, il suffit de saisir 0 comme valeur pour "AttachEnabled".
Par défaut cette fonctionnalité est désactivée, pour une question de performance.
@+
Accessible aussi à ce lien :
http://www.codes-sources.com/tutoriaux/VISUAL-STUDIO-COMPACT-FRAMEWORK-ATTACH-TO-PROCESS_951.aspx
Dans Visual Studio 2005 (2008), nous avons la possibilité d'attacher dynamiquement (à chaud) une application IL (.NET) qui s'exécute au code source afin de l'exécuter en pas à pas.
En général, c'est ce que l'on fait pour débugger des service Windows, des services WCF ou des WebServices.
L'autre jour, j'ai été confronté à la nécessité de faire cela mais avec une application Windows CE (mobile) en Compact Framework...
Et là c'est le drame, car par défaut, Windows CE ne permet pas cette fonctionnalité !
Voici le résumé des opérations à faire pour permettre d'attacher dynamiquement une application en cours d'exécution sous Windows CE avec son code source en VS.NET.
1. Modification du registre du périphérique mobile
A VOS RISQUES ET PÉRILS !
- Parmis les outils livrés avec Microsoft Visual Studio, se trouve le "Remote Registry Editor"
(Menu démarrer, Tous les programmes, Visual Studio 2005, Visual Studio Remote Tools
Démarrez le... - Sélectionnez le périphérique à connecter, et validez
(Si l'écran de sélection n'est pas ouvert : cliquez sur Target, Connect) - Ouvrez :
"HKEY_LOCAL_MACHINE" \ "SOFTWARE" \ "Microsoft" \ ".NETCompactFramework" - Dans cette clé, ouvrez "Managed Debugger"
- Si ce dernier n'existe pas, créez le !
Bouton droit de la souris sur ".NETCompactFramework", Nouvelle clé,
Saisissez "Managed Debugger" (attention à la casse), et validez,
- Si ce dernier n'existe pas, créez le !
- Dans "Managed Debugger", Modifiez la valeur DWORD "AttachEnabled" à 1,
- Si la valeur n'existe pas, créez là !
Bouton droit de la souris sur "Managed Debugger", Nouvelle valeur DWORD,
Saisissez "AttachEnabled" pour le nom, et 1 pour la valeur,
- Si la valeur n'existe pas, créez là !
Dans Visual Studio, ouvrez le menu Déboguez, Attachez au processus,
Choisissez "Transport : SmartDevice",
et choississez le périphérique dans "Qualificateur",
Choisissez le process, et Validez !
Pour désactiver la fonctionnalité, il suffit de saisir 0 comme valeur pour "AttachEnabled".
Par défaut cette fonctionnalité est désactivée, pour une question de performance.
@+
Accessible aussi à ce lien :
http://www.codes-sources.com/tutoriaux/VISUAL-STUDIO-COMPACT-FRAMEWORK-ATTACH-TO-PROCESS_951.aspx
Inscription à :
Articles (Atom)