web-dev-qa-db-fra.com

AssemblyInfo partagé pour une gestion des versions uniforme dans la solution

J'ai lu sur cette technique: http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-Assembly-info-in-visual-studio-projects.aspx

En gros, cela signifie créer un fichier SharedAssemblyInfo.cs contenant des informations de version sur l’Assembly et ajouter ce fichier en tant que lien vers tous les projets de la solution afin que le fichier réel ne réside qu’à un seul emplacement sur le disque.

Ma question concerne 2 scénarios:

  1. Solution existante qui n'utilise pas ce mécanisme: Existe-t-il un moyen d'ajouter facilement ShareAssemblyInfo à tous les projets? (Disons que j'ai une solution avec 50 projets).

  2. Lors de la création d'un nouveau projet, un nouveau AssemblyInfo.cs est créé. Cependant, je souhaiterais également créer un lien vers SharedAssemblyInfo.

Existe-t-il une solution à ça? Quelle est la pratique courante?

64
lysergic-acid

Le premier point pourrait être résolu avec un simple éditeur de texte pouvant gérer plusieurs fichiers à la fois et rechercher/remplacer. Ouvrez tout votre csproj et remplacez la chaîne <Compile Include="Properties\AssemblyInfo.cs" /> par

<Compile Include="..\SharedAssemblyInfo.cs">
  <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>

Sinon, vous pouvez écrire un utilitaire comme celui-ci:

var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories);
foreach (var f in files) {
  string contents = File.ReadAllText(f);
  string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :)
  File.WriteAllText(f, contents);
}

En ce qui concerne la deuxième question ... Vous pouvez jeter un oeil à Modèles de projets personnalisés Visual Studio , mais je ne suis pas sûr que cela en vaille la peine. Le test d’écriture de l’OMI qui vérifie cela à la place. Ce sera beaucoup plus simple et le résultat est presque identique.

UPD: À propos de l'écriture de tests pour vérifier les fichiers solution/projet par rapport à certaines règles personnalisées. En gros, le format sln/csproj est assez simple pour être analysable sans trop d'effort. Donc, si vous voulez avoir SharedAssemblyInfo.cs lié à chaque projet - analysez simplement celui de csproj et vérifiez-le. Placez ensuite ce vérificateur dans votre serveur de build et exécutez-le sur chaque build. Nous avons un tel système qui fonctionne actuellement et cela nous coûte environ deux jours pour écrire mais nous en a économisé beaucoup plus (nous avons là des règles plus sophistiquées et un projet multi-solutions, les efforts en valaient la peine).

Je ne vais pas écrire sur cette vérification en détail ici pour le moment (ce n'est pas si court), mais je vais bientôt écrire un article à ce sujet sur le blog - probablement jusqu'à la fin de cette semaine. Donc, si cela vous intéresse, il suffit de vérifier mon blog bientôt :)

UPD:Ici c’est.

48
Ivan Danilov

Il est possible de créer un lien vers un fichier d'informations de l'Assemblée partagé dans VS 2010. Ashish Jain a publié un bon article à ce sujet sur son blog: Partage de la version de Assembly entre plusieurs projets d'une solution .

Après avoir créé le fichier d'informations de l'Assemblée partagé au niveau de la solution, ses instructions pour la liaison depuis un projet sont les suivantes:

  1. Cliquez avec le bouton droit sur le projet dans lequel vous souhaitez ajouter le fichier partagé Fichier d'assemblage et sélectionnez Ajouter -> Élément existant ... 

  2. Sélectionnez le fichier «SharedAssemblyInfo.cs» dans le dossier de la solution. 

  3. Au lieu de Ajouter, cliquez sur la flèche en regard de Ajouter et cliquez sur «Ajouter en tant que Lien" 

  4. Faites glisser le fichier lié ajouté à côté de AssemblyInfo.cs dans le fichier même dossier. 

  5. Répétez les étapes 1 à 4 pour tous les projets pour lesquels vous souhaitez ajouter partagé Fichier d'assemblage.

J'ai essayé ça et ça marche.

55
Simon Tewsi

J'ai créé une application pour incrémenter automatiquement la version du fichier.

  1. Télécharger Candidature
  2. ajoute la ligne suivante à la ligne de commande de l'événement de pré-construction

C:\temp\IncrementFileVersion.exe $ (SolutionDir)\Properties\AssemblyInfo.cs Générez le projet Pour rester simple, l'application envoie uniquement des messages en cas d'erreur, pour confirmer que tout fonctionne correctement. vérifier la version du fichier dans 'Informations sur l'assemblage'

Remarque: vous devrez recharger la solution dans Visual studio pour que le bouton 'Informations sur l'assemblage' remplisse les champs. Toutefois, votre fichier de sortie contiendra la version mise à jour.

Pour des suggestions et des demandes s'il vous plaît écrivez-moi à [email protected]

0
Telson Alva

Cela ne fonctionne pas pour une solution comportant à la fois des projets C # et F #. Le projet c # ne peut pas référencer un fichier f # partagé et vice versa.

Dans ce cas, la seule option est de créer un projet séparé et d’y faire référence

0
OverInflatedWalrus