Question

J'ai une solution avec plusieurs projets. J'essaie d'optimiser les fichiers AssemblyInfo.cs en liant un fichier d'informations d'assemblage à l'échelle de la solution. Quelles sont les meilleures pratiques pour le faire? Quels attributs doivent figurer dans le fichier de la solution et lesquels sont spécifiques à un projet / assemblage?

Modifier: Si vous êtes intéressé, une question complémentaire Quelles sont les différences entre AssemblyVersion, AssemblyFileVersion et AssemblyInformationalVersion?

Était-ce utile?

La solution

Nous utilisons un fichier global appelé GlobalAssemblyInfo.cs et un fichier local appelé AssemblyInfo.cs. Le fichier global contient les attributs 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 attributs 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 ajouter le fichier GlobalAssemblyInfo.cs à l'aide de 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 la petite flèche vers le bas à droite
  • Sélectionnez "Ajouter en tant que lien". dans la liste déroulante des boutons

Autres conseils

Dans mon cas, nous construisons un produit pour lequel nous avons une solution Visual Studio, avec différents composants dans leurs propres projets. Les attributs communs vont. Dans la solution, il y a environ 35 projets et une information d'assemblage commune (CommonAssemblyInfo.cs), qui possède les attributs 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 attributs tels que AssemblyTitle, AssemblyVersion, etc., sont fournis par assemblage. Lors de la construction d'un assemblage AssemblyInfo.cs et CommonAssemblyInfo.cs sont intégrés à chaque assemblage. Cela nous donne le meilleur des deux mondes où vous voudrez peut-être avoir des attributs communs pour tous les projets et des valeurs spécifiques pour certains autres.

L’espoir que cela aide.

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 local AssemblyInfo.cs 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 supposant qu’une solution est une ligne de produit / produit libérable unique. Le fichier d'informations sur l'assemblage commun contient également:

[assembly: AssemblyInformationalVersion("0.9.2.0")]

Ce qui définira la " ProductVersion " valeur affichée par l'explorateur Windows.

Tâches de la communauté MSBuild 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 d’édition manuelle de vos fichiers csproj, mais cela en vaut la peine.

À mon avis, utiliser GlobalAssemblyInfo.cs est un problème, car vous devez modifier chaque fichier de projet et vous rappeler de modifier chaque nouveau projet, alors que vous obtenez un AssemblyInfo.cs par défaut.

Pour les modifications des valeurs globales (c.-à-d. société, produit, etc.), les modifications sont généralement si peu fréquentes et simples à gérer. Je ne pense pas DRY devrait être pris en compte. Exécutez simplement le script MSBuild suivant (en fonction du Pack d'extension MSBuild ) lorsque vous souhaitez modifier manuellement les valeurs. dans tous les projets en une seule fois:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <AllAssemblyInfoFiles Include="..\**\AssemblyInfo.cs" />
    </ItemGroup>

    <Import Project="MSBuild.ExtensionPack.tasks" />

  <Target Name="UpdateAssemblyInfo">
    <Message Text="%(AllAssemblyInfoFiles.FullPath)" />
    <MSBuild.ExtensionPack.Framework.AssemblyInfo 
        AssemblyInfoFiles="@(AllAssemblyInfoFiles)"
        AssemblyCompany="Company"
        AssemblyProduct="Product"
        AssemblyCopyright="Copyright"
        ... etc ...
        />
  </Target>

</Project>

Pour partager un fichier entre plusieurs projets, vous pouvez ajouter un fichier existant sous forme de lien.

Pour ce faire, ajoutez un fichier existant, puis cliquez sur " Ajouter en tant que lien " dans le sélecteur de fichiers.  Ajouter en tant que lien
(source: free.fr )

Pour ce qui est de mettre dans le fichier partagé, je suggérerais de mettre des choses qui seraient partagées entre les assemblys. Des choses comme le copyright, l'entreprise, 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 susceptibles de n'être pertinentes que pour cet assembly spécifique. Les deux informations les plus évidentes sont AssemblyTitle et AssemblyVersion .

Une meilleure solution consisterait peut-être à utiliser le fichier cibles , géré par MSBuild, afin de "injecter". les attributs d'assemblage à plusieurs projets.

Une chose que j'ai trouvée 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 dans le modèle pourrait ressembler à ceci:

[assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$WCUNVER?1:0<*>quot;)]

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

Soit dit en passant, ajoutez AssemblyInfo.wcrev à votre contrôle de version et ignorer AssemblyInfo.cs si vous l'utilisez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top