9
votes

Mise à jour des références de projet Visual Studio Projectmatiquement

Je souhaite mettre à jour programmatiquement les références dans les projets de ma solution Visual Studio.

J'ai environ 15 projets dans ma solution et quand je développe / débogage, je veux que les références indiquent les projets dans la solution.

Dans le cadre de ma procédure de sortie, je dois parfois effectuer une copie d'un projet, puis mettre à jour les références à pointer sur les DLL construits dans un certain dossier.

Je peux travailler à la structure des fichiers de projet et comment les références travaillent en eux et je pense à la construction d'un outil de ligne de commande pour analyser les fichiers de projet et modifier les références au besoin.

Mes questions sont:
1. Cela sonne-t-il une chose sensible à faire
2. Quelqu'un a-t-il une expérience de cela et / ou comment gérer-t-il la commutation entre les modes de développement et de libération de
3. Quelqu'un a-t-il des bibliothèques qui traitent de l'analyse des fichiers de projet Visual Studio.

Clarification:

Merci pour les réponses. Peut-être que je devrais clarifier quelques situations où je souhaite utiliser cela.

a) Ma candidature contient 15 projets. J'essaie de garder la solution aussi petite que possible pour ce que je travaille, alors disons que j'ai 5 projets dans ma solution. J'ai maintenant besoin de déboguer / de développer l'un des projets non dans la solution, je n'aijoute donc pas ce projet, mais je dois: - Définissez les références dans les projets d'origine pour pointer vers des références de projet plutôt que des DLL compilées - Modifiez les références dans le projet nouvellement ajouté pour pointer vers les références de projet appropriées

J'aimerais que mon outil fasse cela automatiquement et que je sache la seule façon de le faire, il est actuellement en train de manipuler les fichiers de projet

b) Dans le cadre d'une procédure de construction de pack de services, je prends une copie de l'un des projets, apportez les modifications de code nécessaires et la construction à l'aide de Visual Studio. Pour ce faire, je dois changer toutes les références aux DLL compilées


1 commentaires

Gary, vous avez besoin de la version VS de Thunk!


6 Réponses :


11
votes

Je pense qu'une meilleure approche consiste à utiliser des blocs conditionnels sur vos références dans le fichier de projet directement. Ensuite, tout ce que vous avez à faire est de définir un drapeau particulier lors de la construction de MSBUILD pour la construction "Libération" et il récupérera les bonnes références.

par exemple xxx


3 commentaires

Oui. Qui a l'air mieux que ma réponse;)


Pardonnez-vous à mon ignorance, mais ne sommes-ils pas tous deux égarés à vrai? IE: Si cela est égal à vrai ou que ce n'est pas faux. Peut-être que je manque juste quelque chose.


@Jeremy, tu n'as rien manqué. J'ai changé le conditionnel à la dernière seconde et je n'ai pas regardé sur toute la réponse. Fixé



0
votes

Cela ressemble à une situation étrange.

Ma suggestion est ceci.

  1. divisez les projets qui ont des versions précuitées dans une solution séparée. Demandez-leur tous de construire

    \ assemblages \ deSource

  2. copier les précurseurs dans;

    \ assembly \ prébuilt

  3. Avant de développer le reste des projets, copiez un répertoire dans

    \ assembly \ Développement

  4. Changez vos projets pour pointer vers les versions dans \ Assembly \ Development.

    Alors maintenant, vous construisez toujours votre produit contre des fichiers binaires précompilés dans un dossier connu, vous n'avez donc jamais besoin de changer votre projet. Mais vous pouvez échanger entre les versions à volonté.

    Pour des points bonus, modifiez un événement de Prebuild pour copier les DLL au fil des choses avant que les éléments ne démarrent, et que le dossier source varie en fonction de la configuration. Ajoutez ensuite une configuration précieux aux côtés de débogage et de sortie.


0 commentaires

1
votes

Tiger, Tiger Roar !!!

Ceci utilise l'ETTD et VSPROJECT à Programmatic Ajoutez des références. J'ai commenté le code de la majorité des explications. Mais pour ajouter que j'ai lancé une tonne de différentes références supplémentaires parce que je suis un peu paresseux. Mais juste trier avec Visual Studio et vous devriez aller bien. Si pour une raison quelconque cela ne compile pas, n'hésitez pas à me croire. xxx


2 commentaires

Pas la réponse complète à votre question mais je pensais que cela aiderait à montrer comment cela peut être fait simplement en code.


C'est absolument brillant, merci! Pour l'enregistrement, si vous souhaitez ajouter la référence qui prend en charge la distribution (VSProject), recherchez "Lang" dans "Références Manager", puis ajoutez VSLANGPROJ et VSLANGPROJ110 (si vous utilisez Visual Studio 2012).



0
votes

Je pense que si vous utilisez la bibliothèque Microsoft.Build.buildengine, vous pouvez manipuler les projets de manière programmatique après le chargement.

http://msdn.microsoft.com/fr- US / Bibliothèque / Microsoft.Build.Buildengine.aspx


0 commentaires

1
votes

Je ne pense pas qu'il y ait une réponse facile à votre première question. En règle générale, je recommanderais d'éviter cette situation. Il est difficile de gérer manuellement et le code de la gérer n'est pas trivial.

Cela dit, j'ai rencontré une situation à mon travail où je ne pouvais tout simplement pas contourner le problème. Dans notre cas, nous travaillions à libérer un SDK qui devait inclure un ensemble de projets d'échantillons. La version "Développement" de ces projets a utilisé à la fois des références de projet ainsi que des références aux bibliothèques tierces.

Cela nous amène à # 3 qui est fondamentalement, oui. J'ai réellement publié un Open Source Project avec une bibliothèque, une simple utilitaire Windows et une extension nant pour modifier automatiquement les références de projet aux références DLL . En fait, il gère également les bibliothèques tierces dans le même dossier local et met à jour ces références dans le fichier de projet.

Cette solution n'est pas parfaite et il y a beaucoup d'améliorations que j'aimerais que le temps puisse ajouter, mais cela fonctionne pour notre situation. Une partie de notre script de libération qui est tout dans Nant exécute ce processus pour échanger toutes les références à un chemin relatif. Ensuite, nous pouvons facilement regrouper toute cette configuration. Un jour peut-être que je vais avoir le temps d'ajouter une tâche Msbuild avec le projet.

Encore une fois, je pense qu'il est préférable d'éviter cela autant que possible, mais si vous êtes coincé comme moi - le code que j'ai publié devrait au moins aider.


1 commentaires

Bienvenue dans le débordement de la pile! Merci d'avoir posté votre réponse! Veuillez noter que vous devriez poster les points utiles d'une réponse ici, sur ce site ou vos risques posts supprimés voir la FAQ où il mentionne les réponses que sont à peine plus qu'un lien '. Vous pouvez toujours inclure le lien si vous le souhaitez, mais uniquement comme une «référence». La réponse devrait rester seule sans avoir besoin du lien.



0
votes

Il y a un outil sur la galerie Visual Studio qui pourrait vous aider.

Il peut remplacer les références de votre solution avec des projets lors de l'ajoutant et inversement s'il est supprimé.

https://visualstubriogallery.msdn.microsoft.com/056617A4- DA39-4D7B-8ECF-933009D9B721


0 commentaires