23 votes

Comment "se débarrasser" de $(SolutionDir) lors de la construction d'un projet Visual Studio depuis l'extérieur de Visual Studio ?

Je souhaite créer un fichier .vcxproj via MSBuild à partir de Visual Studio. Le problème est qu'il y a de nombreuses occurrences de $(SolutionDir) dans le fichier .vcxproj qui, apparemment, ne sont définies correctement que lorsque la solution est chargée.

Lorsque je remplace $(SolutionDir) par le chemin absolu réel, cela fonctionne. Mais d'autres personnes sur d'autres machines travaillent avec le même fichier de projet, ce n'est donc pas une solution.

Existe-t-il une solution ou un hack pour résoudre ce problème ?

34voto

Grant Thomas Points 28280

Vous pouvez définir la variable en passant des arguments de paramètre :

/p:SolutionDir=path

Ainsi, plutôt que de modifier le fichier de solution, vous pouvez créer un script de construction qui configure l'environnement et exécute MSBuild en conséquence, laissant le fichier Visual Studio tel quel pour le travail de développement.

9voto

Mikael Chudinov Points 585

Vous pouvez utiliser un chemin relatif.

Je ne suis pas sûr pour Visual Studio 2010 comme dans la question, mais il est garanti que cela fonctionne depuis Visual Studio 2012.

Si le dossier du projet se trouve juste sous le dossier de la solution, le chemin relatif est le suivant ..\\ .

Ceci, soit dit en passant, peut être combiné avec l'argument paramètre de Réponse de Grant Thomas .

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>

8voto

Chiel92 Points 2362

La solution pour passer explicitement SolutionDir comme un argument est insuffisant pour moi.

En fait, si le projet que je veux construire a des dépendances avec des configurations de construction différentes, la construction échoue avec un This project doesn't contain the Configuration and Platform combination of <my target configuration> erreur.

Cela a du sens, puisque je n'ai pas spécifié la configuration cible pour les dépendances et donc il essaie de cibler la même configuration que le projet que je construis, ce qu'ils n'ont pas (dans mon cas).

Puisqu'un fichier de solution contient les configurations de construction pour tous les projets de la solution (étant donné une certaine configuration de solution), nous voulons utiliser cette solution pour résoudre ce problème. Heureusement, MSBuild nous permet de construire une solution et de passer un projet cible spécifique comme argument, ce qui entraînera uniquement la construction de ce projet (avec ses dépendances).

msbuild MySolution.sln /t:MyProject

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