Quelles sont les meilleures pratiques d’utilisation des atsortingbuts d’assemblage?

J’ai une solution avec plusieurs projets. J’essaie d’optimiser les fichiers AssemblyInfo.cs en liant un fichier d’informations d’assembly large de solution. Quelles sont les meilleures pratiques pour ce faire? Quels atsortingbuts doivent être dans un fichier à l’échelle de la solution et quels sont les projets / assemblages spécifiques?


Edit: Si vous êtes intéressé, il y a une question de suivi Quelles sont les différences entre AssemblyVersion, AssemblyFileVersion et AssemblyInformationalVersion?

    Nous utilisons un fichier global appelé GlobalAssemblyInfo.cs et un fichier local appelé AssemblyInfo.cs. Le fichier global contient les atsortingbuts suivants:

    [assembly: AssemblyProduct("Your Product Name")] [assembly: AssemblyCompany("Your Company")] [assembly: AssemblyCopyright("Copyright © 2008 ...")] [assembly: AssemblyTrademark("Your Trademark - if applicable")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyVersion("This is set by build process")] [assembly: AssemblyFileVersion("This is set by build process")] 

    Le fichier AssemblyInfo.cs local contient les atsortingbuts suivants:

      [assembly: AssemblyTitle("Your assembly title")] [assembly: AssemblyDescription("Your assembly description")] [assembly: AssemblyCulture("The culture - if not neutral")] [assembly: ComVisible(true/false)] // unique id per assembly [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")] 

    Vous pouvez append le GlobalAssemblyInfo.cs en utilisant la procédure suivante:

    • Sélectionnez Ajouter / Élément existant … dans le menu contextuel du projet.
    • Sélectionnez GlobalAssemblyInfo.cs
    • Développez le bouton Ajouter en cliquant sur cette petite flèche en bas à droite
    • Sélectionnez “Ajouter en tant que lien” dans la liste déroulante des boutons.

    Dans mon cas, nous construisons un produit pour lequel nous avons une solution Visual Studio, avec différents composants dans leurs propres projets. Les atsortingbuts communs vont. Dans la solution, il y a environ 35 projets et une information d’assemblage commune (CommonAssemblyInfo.cs), qui possède les atsortingbuts suivants:

     [assembly: AssemblyCompany("Company")] [assembly: AssemblyProduct("Product Name")] [assembly: AssemblyCopyright("Copyright © 2007 Company")] [assembly: AssemblyTrademark("Company")] //This shows up as Product Version in Windows Explorer //We make this the same for all files in a particular product version. And increment it globally for all projects. //We then use this as the Product Version in installers as well (for example built using Wix). [assembly: AssemblyInformationalVersion("0.9.2.0")] 

    Les autres atsortingbuts, tels que AssemblyTitle, AssemblyVersion, etc., sont fournis par assemblage. Lors de la construction d’un assembly, AssemblyInfo.cs et CommonAssemblyInfo.cs sont intégrés à chaque assembly. Cela nous donne le meilleur des deux mondes où vous voudrez peut-être avoir des atsortingbuts communs pour tous les projets et des valeurs spécifiques pour certains autres.

    J’espère que cela pourra aider.

    La solution présentée par @JRoppert est presque identique à ce que je fais. La seule différence est que je mets les lignes suivantes dans le fichier AssemblyInfo.cs local car elles peuvent varier avec chaque assembly:

     #if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyVersion("This is set by build process")] [assembly: AssemblyFileVersion("This is set by build process")] [assembly: CLSCompliant(true)] 

    J’utilise également (généralement) une information d’assemblage commune par solution, en partant du principe qu’une solution est une ligne de produits / un produit libérable. Le fichier d’informations sur l’assembly commun a également:

     [assembly: AssemblyInformationalVersion("0.9.2.0")] 

    Qui définira la valeur “ProductVersion” affichée par l’explorateur Windows.

    MSBuild Community Tasks contient une tâche personnalisée appelée AssemblyInfo que vous pouvez utiliser pour générer votre assemblyinfo.cs. Cela nécessite un peu de modification manuelle de vos fichiers csproj à utiliser, mais cela en vaut la peine.

    A mon avis, utiliser un GlobalAssemblyInfo.cs est plus problématique que cela en vaut la peine, car vous devez modifier chaque fichier de projet et ne pas oublier de modifier chaque nouveau projet, alors que vous obtenez un AssemblyInfo.cs par défaut.

    En ce qui concerne les modifications des valeurs globales (société, produit, etc.), les modifications sont généralement peu fréquentes et simples à gérer. Je ne pense pas que DRY devrait être pris en compte. Il vous suffit d’exécuter le script MSBuild suivant (en fonction du pack d’extension MSBuild ) lorsque vous souhaitez modifier manuellement les valeurs de tous les projets en une seule fois:

                

    Pour partager un fichier entre plusieurs projets, vous pouvez append un fichier existant en tant que lien.

    Pour ce faire, ajoutez un fichier existant et cliquez sur “Ajouter en tant que lien” dans le sélecteur de fichier. Ajouter en tant que lien http://soffr.miximages.com/.net/AddLinkedFile03_tn.png

    En ce qui concerne les éléments à inclure dans le fichier partagé, je suggérerais de mettre des éléments qui seraient partagés entre les assemblages. Des choses comme le copyright, la société, peut-être la version.

    L’utilisation d’un seul fichier AseemblyInfo.cs pour plusieurs projets n’est pas recommandée. Le fichier AssemblyInfo contient des informations qui peuvent être pertinentes uniquement pour cet assembly spécifique. Les deux informations les plus évidentes sont AssemblyTitle et AssemblyVersion .

    Une meilleure solution pourrait être d’utiliser un fichier targets , géré par MSBuild, afin d’injecter des atsortingbuts d’assemblage dans plusieurs projets.

    Une chose que j’ai trouvé utile est de générer les éléments AssemblyVersion (etc.) en appliquant une substitution de jeton dans la phase de pré-construction.

    J’utilise TortoiseSvn, et il est facile d’utiliser son SubWCRev.exe pour transformer un modèle AssemblyInfo.wcrev en AssemblyInfo.cs . La ligne correspondante du modèle peut ressembler à ceci:

     [assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")] 

    Le troisième élément est alors le numéro de révision. J’utilise le quasortingème élément pour vérifier que je n’ai pas oublié de valider les fichiers nouveaux ou modifiés (le quasortingème élément est 00 si tout est OK).

    Au fait, ajoutez AssemblyInfo.wcrev à votre contrôle de version et ignorez AssemblyInfo.cs si vous l’utilisez.