Bonjour,
j'ai le plaisir de vous annoncer la sortie de mon livre, que j'ai écrit en partenariat avec le site du zéro.

Il s'agit d'un livre permettant d'apprendre le C#. Il est orienté débutant dans la mesure où vous avez juste besoin de savoir allumer un PC pour le suivre.
Au menu :
Bref, plein de petites choses dans un style où on ne se prend pas la tête, pour vous permettre de démarrer dans l'apprentissage du C#, et tout en couleur !!

Vous devez être identifié pour poster un commentaire.
Après avoir été nominé MVP Visual C++ en 2007, puis MVP ASP.NET en 2010, me voilà désormais MVP Visual C# pour 2012.
Je reconnais que ce blog est de moins en moins mis à jour mais je vais essayer de me rattraper ![]()
Merci encore à Microsoft de me renouveler sa confiance. J'en profite au passage pour vous souhaitez à tous une bonne année, pleine de C# et de .NET.
Vous devez être identifié pour poster un commentaire.
Windows Phone 7 (WP7) est la nouvelle plateforme de développement de Microsoft destinée aux smartphones.
Dans un premier tutoriel, nous avons pu voir une introduction au développement WP7.
Dans le second, nous avons pu voir comment utiliser la ListBox et l'Isolated Storage.
Dans le troisième, vous avez pu découvrir comment utiliser le contrôle pivot, son système de swipe et comment accéder à des ressources sur le net.
Dans celui-ci, nous allons voir comment naviguer entre les pages d'une application Silverlight pour Windows Phone 7. Nous verrons également que le bouton "Back" du téléphone s'interface parfaitement avec le framework de navigation de Silverlight pour WP7. Nous verrons enfin comment faire passer des informations entre les pages.
Bonne lecture
Vous devez être identifié pour poster un commentaire.
Windows Phone 7 (WP7) est la nouvelle plateforme de développement de Microsoft destinée aux smartphones.
Dans un premier tutoriel, nous avons pu voir une introduction au développement WP7.
Dans le second, nous avons pu voir comment utiliser la ListBox et l'Isolated Storage.
Dans celui-ci, à travers la création d'une application de météo, vous découvrirez comment faire appel à des ressources sur le web. Vous verrez également comment utiliser le contrôle Pivot, un des contrôles les plus importants lors du développement d'applications pour Windows Phone 7. Il permet de gérer facilement la navigation horizontale, avec ce qu'on appelle le swipe et qui permet de simuler un comportement où l'utilisateur pose son doigt sur l'écran et le fait glisser vers la droite ou la gauche, comme s'il tournait une page.
Bonne lecture
Vous devez être identifié pour poster un commentaire.
Windows Phone 7 (WP7) est la nouvelle plateforme de développement de Microsoft destinée aux smartphones.
Dans un premier tutoriel, nous avons pu voir une introduction au développement WP7.
Dans ce deuxième tutoriel, vous découvrirez la puissance du contrôle ListBox WP7 et comment il s'adapte au développement sur téléphone.
Vous verrez aussi comment traiter des événements simples, comme un click sur un bouton par exemple.
Vous verrez enfin comment faire persister de l'information entre les différents démarrages du téléphone et lorsque l'application est suspendue.
Bonne lecture
Vous devez être identifié pour poster un commentaire.
, nico-pyright(c) Windows Phone 7 (WP7) est la nouvelle plateforme de développement de Microsoft destinée aux smartphones.
Dans ce premier tutoriel, vous découvrirez comment démarrer le développement d'applications avec Windows Phone 7.
Nous commencerons par installer les outils nécessaires au développement sur WP7 puis nous créerons un premier programme simpliste en utilisant Silverlight pour WP7.
Enfin, nous l'exécuterons sur l'émulateur et découvrirons son fonctionnement.
Bonne lecture : http://nico-pyright.developpez.com/tutoriel/vs2010/csharp/windows-phone-seven/introduction-developpement-windows-phone-seven-wp7-silverlight/
Vous devez être identifié pour poster un commentaire.
, nico-pyright(c) Utiliser les API de Bing ? Rien de plus simple.
Pour cet exemple, nous allons traduire le fameux "Bonjour le monde" dans plusieurs langues, grâce à l'API de traduction de Bing.
Première étape indispensable, obtenir un AppID en s'inscrivant sur http://www.bing.com/developers/createapp.aspx.
Une fois cet AppID obtenu, il ne reste plus qu'à interroger l'API. Pour la simplicité, j'ai choisi de les appeler en SOAP, mais il est possible de les interroger en JSON ou directement en XML.
Pour ce faire, on utilise le fameux Add Service references, et on saisi l'url : http://api.bing.net/search.wsdl?AppID=[MonAppId]&Version=2.2
Une fois le proxy généré, il ne reste plus qu'à utiliser le client. Pour savoir quoi mettre, rendez vous dans la documentation de l'API : http://msdn.microsoft.com/en-us/library/dd251056.aspx. Elle n'est pas parfaite, mais en fouillant un peu, on arrive à se débrouiller et à trouver des exemples de code.
Ecrivons un petit programme d'exemple qui traduit le fameux Hello World dans plusieurs langues :
1: BingPortTypeClient client = new BingPortTypeClient();
2: SearchRequest request = new SearchRequest
3: {
4: AppId = "[MonAppId]",
5: Sources = new[] { SourceType.Translation },
6: Translation = new TranslationRequest { SourceLanguage = "Fr" },
7: Query = "Bonjour le monde"
8: };
9:
10: List<string> codes = new List<string> { "Fr", "En", "Ar", "Nl", "De", "It", "Pl", "Pt", "Es" };
11: foreach (string code in codes)
12: {
13: request.Translation.TargetLanguage = code;
14: SearchResponse response = client.Search(request);
15: Console.WriteLine(response.Translation.Results.First().TranslatedTerm);
16: }
Voilà, c'est terminé. C'est plutôt simple de faire une traduction grâce aux API de Bing.
A noter que la liste des langues se trouve ici : http://msdn.microsoft.com/en-us/library/dd877907.aspx
Vous devez être identifié pour poster un commentaire.
Je vous présente mon dernier article : Utilisez le pattern Model-View-ViewModel dans vos applications Silverlight grâce à MVVM Light toolkit
Cet article constitue une introduction au développement d'applications Silverlight en utilisant le design pattern M-V-VM grâce au MVVM Light Toolkit de Laurent Bugnion.
Bonne lecture
Vous devez être identifié pour poster un commentaire.
MEF (Managed Extensibility Framework) est un framework développé par Microsoft qui permet de créer des applications extensible facilement.
Il fonctionne comme un système de plugin et est capable de composer une application en chargeant des extensions à des endroits prédéfinis. Cela permet d'étendre un logiciel sans avoir besoin de connaitre à l'avance le fonctionnement du plug-in, tant que le celui-ci respecte un contrat ; grâce à la fonctionnalité de découverte de MEF.
MEF fonctionne grâce à des annotations et des attributs.
L'attribut Export permet d'informer MEF qu'il se trouve en présence d'un plugin qui respecte un contrat particulier.
L'attribut Import permet d'indiquer à MEF qu'il doit se débrouiller pour nous fournir quelque chose qui respecte un contrat précis.
MEF est actuellement en développement (Preview 9 à l'heure où j'écris ces lignes), son API est susceptible d'évoluer.
Pour illustrer cette introduction, nous allons construire une petite application de démo.
Pour utiliser MEF, il suffit de récupérer le code à cet emplacement http://www.codeplex.com/MEF et de copier la DLL System.ComponentModel.Composition.dll.
Je créé une application Console que je nomme testMef puis 2 projet de type Class Library que je nomme HelloWorldService.Contract et HelloWorldService.
HelloWorldService.Contract contiendra l'interface suivante :
1: public interface IHelloWorldService
2: {
3: string Hello(string who);
4: }
HelloWorldService contiendra le classe suivante :
1: public class HelloWorldService : IHelloWorldService
2: {
3: public string Hello(string who)
4: {
5: return "Hello " + who;
6: }
7: }
Dans mon application console, je crée une classe ClassicRunner qui va instancier mon service et appeler sa méthode Hello.
1: public class ClassicRunner
2: {
3: public void Run()
4: {
5: IHelloWorldService helloWorldService = new HelloWorldService.HelloWorldService();
6: Console.WriteLine(helloWorldService.Hello("Nico"));
7: }
8: }
Nous introduisons ici une dépendance forte au projet HelloWorldService.
Je peux bien sur utiliser cette classe dans le point d'entrée de mon application console avec :
1: public class Program
2: {
3: public static void Main(string[] args)
4: {
5: ClassicRunner classicRunner = new ClassicRunner();
6: classicRunner.Run();
7: }
8: }
Maintenant, faisons la même chose à la mode MEF.
La première chose à faire est de dire à MEF que la classe HelloWorldService est un plugin et se rend disponible pour un contrat particulier. Comme expliqué en introduction, cela se fait avec l'attribut Export :
1: [Export(typeof(IHelloWorldService))]
2: public class HelloWorldService : IHelloWorldService
3: {
4: public string Hello(string who)
5: {
6: return "Hello " + who;
7: }
8: }
Créons maintenant une classe MefRunner qui va s'occuper d'appeler un plugin respectant le contrat IHelloWorldService.
1: public class MefRunner
2: {
3: [Import]
4: public IHelloWorldService HelloWorldService { get; set; }
5:
6: public void Run()
7: {
8: Compose();
9: Console.WriteLine(HelloWorldService.Hello("Nico"));
10: }
11:
12: private void Compose()
13: {
14: string currentDirectory = new FileInfo(Assembly.GetCallingAssembly().Location).Directory.ToString();
15: AggregateCatalog catalog = new AggregateCatalog(new AssemblyCatalog(Assembly.GetExecutingAssembly()), new DirectoryCatalog(currentDirectory));
16: var container = new CompositionContainer(catalog);
17: container.ComposeParts(this);
18: }
19: }
On voit ici qu'on déclare une propriété de type IHelloWorldService, décorée de l'attribut Import. Cela nous permet de demander à MEF de se débrouiller pour nous fournir quelque chose qui respecte le contrat de la propriété.
Il nous faut maintenant demander à MEF de s'initialiser et d'utiliser sa capacité de découverte de plug-in pour aller fouiller à un emplacement s'il y a un plugin qui pourrait nous être utile.
Pour ce faire, on va utiliser l'objet AggregateCatalog pour lui indiquer de chercher dans l'assembly courante et dans le répertoire de l'exécutable (ce qu'on trouve dans la méthode Compose).
enfin, le CompositionContainer permet d'initialiser MEF.
On voit dans le code du MefRunner qu'aucune référence n'est faite au projet HelloWorldService.
Cependant, la DLL doit bien sur être présente dans le répertoire que nous avons indiqué à MEF (ici, le répertoire de l'exécutable).
Il ne restera qu'à appeler le MefRunner :
1: public class Program
2: {
3: public static void Main(string[] args)
4: {
5: MefRunner mefRunner = new MefRunner();
6: mefRunner.Run();
7: }
8: }
Notez que MEF n'est pas un IOC, comme Unity. Mais il se sert des techniques d'inversions de contrôles pour son système de plugin.
On peut considérer qu'un IOC est approprié quand il s'agit de charger des dépendances connues à l'avance, alors que MEF est plutôt adapté à la découverte de dépendances inconnues.
Vous pouvez télécharger l'application exemple à cet emplacement.
Vous devez être identifié pour poster un commentaire.
Si vous avez des résultats désespérant dans votre couverture de code, ce n'est peut-etre pas votre faute ![]()
En effet, si vous utilisez du code généré (et notamment les datasets typés), ceux-ci ne génèrent pas toujours correctement l'attribut GeneratedCodeAttribute.
C'est un bug connu qui est normalement corrigé dans vs2010 (j'avoue ne pas avoir testé encore).
A noter qu'un nouvel attribut sera disponible avec le framework 4.0, il s'agit de [ExcludeFromCodeCoverage].
Un peu de patience et nous aurons des superbes taux de couverture de code ![]()
Vous devez être identifié pour poster un commentaire.
En fait, c'est plutôt simple.
Il suffit de créer un nouveau projet de type Class Library:
Puis d'ajouter les références à
Ensuite, il faudra créer une classe qui dérivera de Task.
Il suffira d'implémenter le contenu de la méthode Execute.
1: namespace MonNamespace
2: {
3: public class MyTask : Microsoft.Build.Utilities.Task
4: {
5: [Required]
6: public string RequiredInputValue { get; set; }
7:
8: public string InputValue { get; set; }
9:
10: [Output]
11: public string Result { get; set; }
12:
13: public override bool Execute()
14: {
15: // code de la tache ...
16:
17: Result = "Done ...";
18:
19: Log.LogMessage("L'opération s'est correctement déroulée !");
20: return true;
21: }
22: }
23: }
On pourra passer des paramètres à la tache grâce à des propriétés, qui peuvent être obligatoires avec l'attribut [Required].
On pourra récupérer une valeur en sortie dans la script msbuild en lisant le contenu de la propriété marquée [Output].
A noter aussi qu'il est très facile de logguer grâce aux méthodes proposées par le logger.C'est quand même plus propre que de lancer un pauvre exe :)
A noter le tutoriel de Pierre-Emmanuel Dautreppe que je viens d'apercevoir sur le site ...Vous devez être identifié pour poster un commentaire.
, nico-pyright(c) Pour rappel, on utilise l'attribut SuppressMessage pour indiquer à Stylecop de ne pas tenir compte d'une règle pour une partie du code.
Par exemple (extrait de msdn) :
1: [SuppressMessage("Microsoft.Design", "CA1021:Avoid out parameters")]
Pour que la règle soit vraiment ignorée, il ne faut pas oublier de définir le symbole CODE_ANALYSIS.
On peut le faire soit par code :
1: #define CODE_ANALYSIS
soit au niveau des propriétés du projet, onglet build, Conditional compilation symbols :
Vous devez être identifié pour poster un commentaire.
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Copyright © 2000-2012 - www.developpez.com