73 votes

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

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

Fondamentalement, il les moyens de créer un SharedAssemblyInfo.cs avec la gestion des versions d'informations sur l'assemblée, et l'ajout de ce fichier en tant que Lien à l'ensemble des projets de la solution, de sorte que le fichier réel réside uniquement dans 1 emplacement sur le disque.

Ma question porte avec 2 scénarios:

  1. Solution existante qui n'est pas l'utilisation de ce mécanisme: Est-il un moyen d'ajouter facilement de la ShareAssemblyInfo à tous les projets? (disons que j'ai une solution avec 50 projets).

  2. Lors de la création d'un nouveau projet, par défaut, une nouvelle AssemblyInfo.cs est créé. Cependant j'aimerais lier automatiquement à la SharedAssemblyInfo ainsi.

Est-il une solution pour cela? quelle est la pratique courante?

65voto

Simon Tewsi Points 2785

Il est possible de se connecter à un partage de l'assemblée info fichier dans VS 2010. Ashish Jain a un bon billet de blog à ce sujet: le Partage de la version de l'assembly à travers les projets dans une solution.

Après la création du partage de l'assemblée fichier d'information au niveau de la solution, ses instructions de liaison à partir d'un projet sont:

  1. Clic droit sur le projet dans lequel vous souhaitez ajouter le Partagé assemblée fichier, et sélectionnez Ajouter -> Élément Existant...

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

  3. Au lieu d'Ajouter, cliquez sur la flèche en regard du bouton Ajouter et cliquez sur "Ajouter Lien"

  4. Faites glisser vers le bas ajoutée liée aux côtés de fichier AssemblyInfo.cs dans le 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é et ça marche.

54voto

Ivan Danilov Points 5719

Premier point pourrait être résolu avec un simple éditeur de texte capable de traiter plusieurs fichiers à la fois et trouver/remplacer. Il suffit d'ouvrir l'ensemble de vos csproj en elle et remplacer les cordes <Compile Include="Properties\AssemblyInfo.cs" /> avec

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

Mon éditeur de choix est EditPad Pro.

Sinon, vous pouvez simplement écrire absolument trivial utilitaire tel que:

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);
}

Quant à la deuxième question... Vous pouvez prendre un coup d'oeil à Visual Studio de projet personnalisé de modèles , mais je ne suis pas sûr que ça en vaut les efforts. Vous devriez OMI test d'écriture qui va vérifier cela à la place. Il sera beaucoup plus simple et le résultat est presque le même.

UPD: à Propos de l'écriture de tests pour la vérification de la solution/les fichiers de projet à l'encontre de certaines règles personnalisées. Fondamentalement, la sln/csproj format est assez simple pour être parseable sans trop d'efforts. Donc, si vous voulez avoir SharedAssemblyInfo.cs lié à chaque projet - juste parse csproj et vérifier. Puis mettre pion dans votre serveur de build et de l'exécuter sur chaque build. Nous avons un tel système de travail actuellement, et il en coûte quelque chose à propos de deux jours pour écrire, mais nous a sauvé beaucoup d'autres (que nous avons il y a plus de règles complexes et multi-projet de solution, alors il valait la peine d'efforts).

Je ne vais pas écrire à propos de cette vérification en détail ici et maintenant (ce n'est pas que court), mais je vais écrire billet de blog à ce sujet bientôt, sans doute jusqu'à la fin de cette semaine. Donc, si vous êtes intéressés, il suffit de cocher mon blog bientôt :)

UPD: Ici il est.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X