Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Virtual PC et résolution d’écran

Ce billet s’addresse à tout ceux qui utilisent Virtual PC avec des écrans “un peu grand” ( au dessus de 1600x1200)  et qui n’arrivent pas à avoir une résolution de PC virtuel à la hauter de leur écran. Je viens de tomber sur le KB 958162 qui augmente entre autre très largement les résolutions utilisables avec Virtual PC:

 

image

 

Bon téléchargement !

Posté le par Miiitch | 0 commentaire(s)
Classé sous :

Compatibilité entre les différentes versions de TFS et des Team Explorer

Avec la beta 1 de TFS 2010, il n’est pas possible d’y connecter des clients TE 2005 et 2008… mais cela va bientot changer. La prochaine beta sera livrée avec un kit de compatibilité avec les clients 2005 et 2008. Pour plus de détails, voici un billet de l’équique WIT Tools : http://blogs.msdn.com/teams_wit_tools/archive/2009/06/01/forward-compat-gdrs-for-team-foundation-server-2010.aspx

Réciproquement ceux qui essayent de connecter un Team Explorer 2010 vers des clients antérieurs peuvent avoir l’erreur suivante:

“TF31001: Cannot connect to Team Foundation Server at xxx.com. The server returned the following error: The ServicePointManager does not support proxies with the https scheme.”

Dans ce cas, ce billet explique pourquoi et donne une solution: http://blogs.msdn.com/ablock/archive/2009/05/20/for-tfs-2010-beta-1-resolving-tf31001-the-servicepointmanager-does-not-support-proxies-with-the-https-scheme.aspx.

Une fois corrigé je n’ai pas eu de problème pour me connecter à Codeplex par exemple.

La prochaine version de Fissum sortira avec une version spécifique 2010, qui est juste une recompilation de la version 2008 avec les bits de VS 2010. Cela sera l’occasion de faire le point sur quelques changements au niveaux des APIs.

Posté le par Miiitch | 0 commentaire(s)

Rafraîchir le cache d’IntelliSence dans SQL Server Management Studio

Cela arrive que le cache de l’IntelliSence de SSMS se désynchronise (par exemple si la structure de donnée est modifiée par un autre programme comme Visual Studio Team System 2008 Database Edition). Lorsque cela se produit des erreurs sont remotées alors qu’elles ne devraient pas, même si la structure dans l’object explorer a pris en compte les modifications! Le soucis vient du cache d’IntelliSence qu’il faut dans ce cas forcer à se recalculer.

Il suffit d’aller dans Edit > IntelliSence et cliquer sur  “Refresh Local Cache”

 

image

Posté le par Miiitch | 0 commentaire(s)
Classé sous : ,

Une mise à jour pour le Framework 3.5 SP1 est disponible

Je suis tombé dessus par hasard: http://support.microsoft.com/kb/959209

 

Bon téléchargement pour ceux qui en ont besoin! Il y a au moins une quinzaine de problèmes corrigés. Attention lors de l’installation, l’update se présente comme 3 installations: pour les framework 2.0, 3.0 et 3.5.

A+

Posté le par Miiitch | 0 commentaire(s)
Classé sous :

Entity Framework et LINQ : une petite différence, mais une grosse conséquence

Prenons ces 2 requètes:

using (var entities = new NorthwindEntities())

          {

              var q = (from cust in entities.Customers.Include("Orders")

                       where cust.CustomerID == "VINET"

                       select cust).ToArray();

 

          }


using (var entities = new NorthwindEntities())

{

    var q = (from Customers cust in entities.Customers.Include("Orders")

            where cust.CustomerID == "VINET"

            select cust).ToArray();

 

}

La différence c’est que la première fait ce qu’on attend d’elle: elle charge la liste des Orders pour chaque Customer, et l’autre non, elle ne charge que les Customers. Je ne vois pourquoi forcer le type dans le “from” fait changer le comportement de la requète.

A creuser...

Posté le par Miiitch | 5 commentaire(s)
Classé sous : ,

C++ VS 2010 et développement parallèle

Si tous ces sujets vous intéressent, alors il ne faut pas hésiter à aller faire un tour sur le blog de Bruno Boucard qui traite de ce sujet: http://blogs.msdn.com/devpara/default.aspx. Au programme récemment: matrices,et lambda expression en C++!

 

Bonne lecture!

Posté le par Miiitch | 0 commentaire(s)
Classé sous : , ,

Fissum et son provider LINQ dans Visual Studio Talk Show

J’ai croisé la route cet été de Mario Cardinal et Guy Barrette qui anime le Visual Studio Talk Show. Le résultat? un podcast sur Fissum et son provider LINQ:

http://www.visualstudiotalkshow.com/Archives/089-29decembre2008-Michel.html

Je vous conseille aussi de vous abonner à cet excellent podcast. En particulier si la technologie LINQ vous intéresse plus particulièrement Fabrice Marguerie présente la techonolique LINQ dans un précédent podcast.

Bonne écoute!

Posté le par Miiitch | 0 commentaire(s)
Classé sous : , , , ,

Les dessous du databinding

Vous connaissez le databinding et vous voulez savoir comment modifier son comportement? Toutes les réponses sont ici sur TechHeadBrothers!

 

Bonne lecture!

Posté le par Miiitch | 0 commentaire(s)
Classé sous : , ,

http://www.microsoft.com/net/

Je viens de découvrir cette URL. C’est plutot pratique pour retrouver les dernières version du Framework et les différentes ressources associées.

 

image

Dans le même style il y a aussi http://www.microsoft.com/web/, orienté web, et en particulier les liens vers le téléchargement du “Microsoft Web Platform Installer” et “Microsoft Web Application Installer”, 2 outils simplifier l’installation d’outils web microsoft pour son PC ou un serveur.

Posté le par Miiitch | 0 commentaire(s)
Classé sous : , ,

[Linq To WIQL] Les dessous d'un provider (Part 3: Identification des champs)

Episodes précédents:

Maintenant que notre arbre d'expression est prêt à être traitée, il faut s'occuper de  le transformer en WIQL, et en premier lieu de transformer les appels à des propriétés de ma classe WorkItem en leurs champs WIQL correspondants. Ce travail préliminaire va nous permettre de gagner du temps par la suite lorsque nous allons “naviguer” dans l’arbre.

Je reprends la requête du premier billet:

var q = from wi in server.WorkItems()

        where

           (wi.Title.Contains(searchString) ||

           wi.History.Contains(searchString) ||

           wi.Description.Contains(searchString)) &&

           wi.Field<string>(SystemField.AssignedTo) == QueryConstant.Me

        orderby wi.CreatedDate descending, wi.Title

        select wi;

 

"wi.Title" est transformé en [System.Title] dans la requête. Pour cela je passe par des définitions d'attributs qui seront identifiés par le provider. Voici la définition de la propriété Title dans le code de Fissum:

[Field(SystemField.Title)]

public string Title

{

    get

    {

        return _workItem.Title;

    }

    set

    {

        _workItem.Title = value;

    }

}

La correspondance est réalisée par l'attribut Field ("System.Title" n'est pas tel quel dans le code mais accessible via la constante "SystemField.Title"). Le mécanisme de transformation est dans la classe statique FieldUtility:

public static string ExtractFieldReferenceName(ICustomAttributeProvider methodInfo)

{

    FieldAttribute[] array = methodInfo.GetCustomAttributes(typeof(FieldAttribute), false) as FieldAttribute[];

 

    if (array == null)

    {

        return null;

    }

 

    return String.Format("[{0}]", array[0].ReferenceName);

}

Revenons sur la requête Linq encore une fois, il existe une autre façon d'identifier un champ avec Linq To WIQL: via la méthode Field. Cette manière est utile lorsque le champs n'est pas un champ identifié dans une propriété du workitem ou de ses classes dérivés (j'aborderai cette partie un peu plus tard). De la même façon que pour la propriété, la classe FieldUtility va nous aider:

public static  string ExtractWIFieldFromMethodCall(MethodCallExpression m)

{

    switch (m.Method.Name)

    {

        case "Field":

            {                     

                if (m.Arguments.Count != 1)

                {

                    throw new InvalidOperationException("MethodCall");

                }

 

                ConstantExpression constant = m.Arguments[0] as ConstantExpression;

 

                if (constant == null)

                {

                    throw new InvalidOperationException("MethodCall");

                }

 

                return "[" + constant.Value + "]";

            }                   

        default:

            return null;

    }

}

Il suffira ensuite d’appeler l’une de ces 2 méthodes lors de la navigation nous serons en présence d’un champ d’un workitem. La syntaxe du WIQL est assez simple pour que ces endroits soient très facilement identifiables dans le code:

  • Dans la partie gauche d’un opérateur binaire si la partie gauche n’est pas elle-même un opérateur
  • Dans les clauses d’ordre.

Nous verrons cela dans la prochaine partie et comment tout s'agence avec la gestion des opérateurs dans la clause Where. Un gros problème nous attend dans la prochaine partie.

Posté le par Miiitch | 0 commentaire(s)

Réparation des templates de Visual Studio

Après une installation d’un plug-in durant laquelle visual studio a planté, j’ai eu l’erreur suivante lors de la création d’un projet winform:

image

Plus bizarre, lorsque j’ouvrais un projet winform déja existant, j’avais des comportements étranges comme un plantage complet de Visual Studio. Dans ce cas, avant d’envisager de réaliser une réparation complête de VS, vous pouvez lancer la réinstallation des templates seulement via la ligne de commande “devenv /installvstemplates”:

image

Normalement tout devrait rentrer dans l’ordre.

Posté le par Miiitch | 1 commentaire(s)
Classé sous :

[Linq To WIQL] Les dessous d'un provider (Part 2: un peu de ménage!)

Avant de commencer à traiter les opérateurs, il faut faire un peu de ménage dans l'arbre d'expression et traiter ce qui est possible de traiter au moment de l'exécution avant même de créer la requête WIQL. Prenons cette requête:

            Node rootNode = nodes[nodes.Length - 1];

            var q = from wi in project.Get<Fissum.Model.Codeplex.WorkItem>()

                    where wi.Iteration.IsUnder(nodes[nodes.Length - 1])

                    select wi;

elle est équivalente en valeurs à :

            Node rootNode = nodes[nodes.Length - 1];

            var q = from wi in project.Get<Fissum.Model.Codeplex.WorkItem>()

                    where wi.Iteration.IsUnder(rootNode)

                    select wi;

En effet nodes[nodes.Lenght-1] n'a aucun rapport avec le WIQL et est seulement une expression locale qui doit être évaluée avant la création de la requête.

Ceci est le rôle de la classe Evaluator: la classe parcours l'arbre d'expression et déduit la partie qui peut être évaluée et renvoie une nouvelle expression avec les parties évaluées.  Cette évaluation est faîte au moment de la traduction, donc de l'exécution de la requête et donc pas au moment de la déclaration. C'est pour cela que l'exécution du code suivant renvoie une liste de 2 valeurs {1,2}:

List<int> list = new List<int>() { 1, 2, 3, 4, 5 };

 

int maxValue = 3;

 

var query = from i in list

            where i <= maxValue

            select i;

 

maxValue = 2;

 

var result = query.ToList();

 

La valeur de maxValue prise en compte est bien 2 et non 3.

 

A bientot pour la suite :)

Posté le par Miiitch | 0 commentaire(s)

Ça aurait été cool si ça avait été vrai!

image  

Il est presque 9h, il faut absolument que je trouve un chargeur avant 15h :)

Posté le par Miiitch | 2 commentaire(s)
Classé sous :

[Linq To WIQL] Les dessous du provider (Part 1: introduction)

Lors de l'écriture d'un provider LINQ, il faut sans cesse essayer d'adapter la souplesse de la syntaxe LINQ avec les contraintes du langage de requête cible.  Ce post est le premier d'une série sur les différents problèmes que j'ai rencontrés et que je rencontre encore lors du développement du provider Linq pour WIQL pour Fissum, le WIQL étant le "Work Item Query Langage" utilisé par Team Foundation Server pour attaquer la base de workitem du serveur.

Pour bien comprendre où j'en suis je vous conseille de lire la série (au moins les 3 premiers) de billets dédié à l'écriture d'un provider Linq To SQL par Matt Warren:

Cela suffit à peu près pour Linq To WIQL: le langage a tellement de contraintes que la plupart des fonctionnalités de Linq ne sont pas supportées!

Je reviens sur mon problème: le gros du développement de ce provider est concentré dans la traduction de la clause Where de la requête. Pour cela j'utilise la classe ExpressionVisitor qui est décrite dans la partie 2 des billets de Matt. Au visiteur, je lui associe une classe qui va me permettre de construire le corps de ma requête en WIQL: le QueryBuilder. Essentiellement cette classe garde en mémoire les différents morceaux de la requête pour les compiler à la fin de la traduction.

Voici un exemple des règles à respecter: WIQL supporte les opérateurs binaires, donc pour chaque opérateur binaire je lui associe l'opérateur WIQL associé. WIQL supporte:

  • les opérateurs binaires AND OR (pas le NOT!)
  • les opérateurs de comparaison: <,>, <>,= >=,<=
  • des opérateurs spécifiques comme "ever" "contains"

Autre contrainte: pour un opérateur de comparaison, "a == b" par exemple "a" est forcément un champ du work item et "b" une valeur.

Voici un exemple de requète LINQ To WIQL et sa traduction en WIQL:

var q = from wi in server.WorkItems()

        where

           (wi.Title.Contains(searchString) ||

           wi.History.Contains(searchString) ||

           wi.Description.Contains(searchString)) &&

           wi.Field<string>(SystemField.AssignedTo) == QueryConstant.Me

        orderby wi.CreatedDate descending, wi.Title

        select wi;

 

SELECT [System.Id]
FROM WORKITEMS
WHERE (((([System.Title] contains @P0 OR [System.History] contains @P1) OR [System.Description] contains @P2) AND ([System.AssignedTo] = @Me)))
ORDER BY [System.CreatedDate] desc, [System.Title] asc

Comme je le disais plus haut la syntaxe est étrangement équivalente! Je ne m'attarde pas sur la clause SELECT du WIQLqui n'est pas nécessaire pour le provider, c'est pour cela que je renvoie toujours l'id du work item car dans tout les cas, l'API qui exécutera la requête renverra toujours un workitem complet.

La clause ORDER BY est aussi très simple, j'expliquerai dans un autre billet comment traduire les propriétés en champs de workitem. De la même façon dans la clause WHERE l'appel à Field<T> a aussi été traduit en champs. On peut remarquer aussi que les appels à "Contains" de la classe String sont traduits en l'opérateur WIQL "contains".

Pour résumé: LINQ permet l'utilisation naturelle des API du Framework .Net tout en les transposant dans le langage cible. Plus on utilise ces fonctionnalités, plus l'utilisation du provider sera efficace.

A bientôt pour la suite :)

Posté le par Miiitch | 4 commentaire(s)

MSBuild Extension Pack sur codeplex

Encore une nouvelle bibliothèque de tâches pour MSBuild? Non, c'est juste la suite de FreeToDev MSBuild Task. C'est tout chaud et sur codeplex: http://www.codeplex.com/MSBuildExtensionPack/Release/ProjectReleases.aspx?ReleaseId=18025

La page de présentation sur codeplex présente un aperçu des fonctionnalités disponibles:

Project Description
The MSBuild Extension Pack is the successor to the FreeToDev MSBuild Tasks Suite and provides a collection of over 170 MSBuild tasks designed for the .net 3.5 Framework. A high level summary of what the tasks currently cover includes the following:
• System Items: Certificates, COM+, Console, Date and Time, Drives, Environment Variables, Event Logs, Files and Folders, GAC, Network, Performance Counters, Registry, Services, Sound
• Code: Assemblies, CAB Files, Code Signing, File Detokenisation, GUID’s, Mathematics, Strings, Threads, Zip
• Applications: BizTalk 2006, Email, IIS7, MSBuild, SourceSafe, StyleCop, Team Foundation Server, Visual Basic 6, WMI


It implements a TaskAction based design which improves usability and maintenance whilst reducing the code base, e.g. to start or stop a website, typically two task files would be created to perform each task, whereas the pack accomplishes this in a single task files using TaskAction=”Stop” and TaskAction=”Start”.

 

Voici le billet de l'annonce de l'auteur: http://freetodev.spaces.live.com/blog/cns!EC3C8F2028D842D5!625.entry

Posté le par Miiitch | 0 commentaire(s)
Classé sous : ,

Team System Web Access SP1 est sorti

Première nouveauté: Work Item Web Access est directement inclu dans cette version. Donc plus besoin de garder la CTP!

D'autres nouveautés disponibles: la possibilité de créer des work items avec des valeurs via URL:

 

image

En cliquant sur le bouton, j'obtiens l'URL suivante:

http://tfsrtm08:8090/wi.aspx?pname=AWC-Online&wit=Bug&[System.Title]=Test&[System.AssignedTo]=Larry

Ce qui est très pratique pour préparer des work items à l'avance!

 

 

Pour une liste complète des nouveautés, le billet de l'annonce est ici :http://blogs.msdn.com/edhintz/archive/2008/08/29/team-system-web-access-2008-sp1-power-tool.aspx

Et pour le télécharger, c'est là: Download TSWA 2008 SP1

Posté le par Miiitch | 0 commentaire(s)
Classé sous :

StyleCop SDK disponible

Le SDK (en fait un CHM) est disponible sur Code Gallery : http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&ReleaseId=1425

 

Pour les utilisateurs de Vista, il ne faut pas oublier de débloquer le Chm avant de l'ouvrir:

 

image

 

Voici le post officiel sur le blog de StyleCop: http://blogs.msdn.com/sourceanalysis/archive/2008/08/29/stylecop-4-3-sdk.aspx

Plusieurs points sont abordé en plus de la documentation: l'intégration avec MSBuild et l'utilisation de StyleCop dans le cadre d'un développement de règles.

Posté le par Miiitch | 0 commentaire(s)
Classé sous : , , ,

Mais où est passé l'attribut "DataWebKeyAttribute" ?

Lorsqu'on parcourt le MSDN à la recherche de ressources sur la création de "Data Model" autre que EDM on arrive rapidement sur cette page:

http://msdn.microsoft.com/en-us/library/cc668799.aspx

 

On y apprend qu'il faut que les entités devant être publiées doivent posséder l'attribut "DataWebKeyAttribute" sur leur propriété clé. Sans cet attribut, l'accès au service génère une erreur.

Mais cet attribut, comme nous l'explique Mike Taulty, est introuvable, Il faut en fait utiliser l'attribut "DataServiceKey" au niveau de la déclaration de la classe:

    [DataServiceKey("URL")]

    public class Photo

    {

 

        public string URL { get; set; }

        public string Description { get; set; }

    }

Posté le par Miiitch | 0 commentaire(s)
Classé sous : ,

Sortie du SDK 1.1 de Visual Studio 2008

Cette nouvelle version met à jour le SDK par rapport au dernier Service Pack 1 de Visual Studio:

 

Pour plus d'information, voici l'annonce officielle: http://blogs.msdn.com/vsxteam/archive/2008/08/19/visual-studio-2008-sdk-1-1-has-been-released.aspx

Voici une liste des nouveautés tirée de l'annonce:

  • Significant reduction in size for Visual Studio Shell redistributable packages.
  • Support for progress feedback in a chained installation.
  • Visual Studio Shell development now supports normal user.
  • New XML Tree Editor and TFS sample.
  • DSL Print Preview
  • Updated shell documentation.

 

Et ici le lien pour le téléchargement: http://www.microsoft.com/downloads/details.aspx?FamilyID=59ec6ec3-4273-48a3-ba25-dc925a45584d&DisplayLang=en

StyleCop 4.3 est sorti

La nouvelle version de StyleCop, anciennement "Source Analysis" est disponible. En plus de nouvelles règles, on y retrouve aussi leur documentation. Un SDK permettant de créer nos propres règles est en cours de finalisation chez MS.

 

Voici le lien pour le téléchargement: http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&ReleaseId=1425

Et le lien vers l'annonce:

http://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx

 

Il faut par contre désinstaller la version antérieure avant d'installer celle-ci et renommer les anciens fichiers "*.SourceAnalysis" en ".StyleCop".

Posté le par Miiitch | 0 commentaire(s)
Classé sous : ,
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 10 heures et 35 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 11 heures et 49 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18