33 votes

Comment définir le chemin de sortie de plusieurs projets Visual C# ?

J'ai une solution qui contient plusieurs projets C# et j'aimerais pouvoir définir le chemin de sortie et d'autres propriétés sur tous les projets en un seul endroit. Les feuilles de propriétés (vsprops) ne semblent pas pouvoir être disponibles pour les projets C# et la variable $(SolutionDir) est ignorée. Existe-t-il d'autres méthodes pour définir les propriétés de plusieurs projets C# ?

Mise à jour En suivant les informations de la réponse de Bas Bossink, j'ai pu définir le chemin de sortie de plusieurs projets en créant un csproj commun et en l'important dans chaque projet. Quelques autres points :

  • Lors de la construction dans Visual Studio, si des modifications sont apportées au projet commun, il est nécessaire de toucher/recharger tous les projets qui y font référence pour que les modifications soient prises en compte.
  • Toutes les propriétés qui sont également définies dans un projet individuel remplacent les propriétés communes.
  • La définition de $(SolutionDir) comme chemin de sortie via l'interface utilisateur de Visual Studio ne fonctionne pas comme prévu car la valeur est traitée comme une chaîne littérale au lieu d'être développée. Cependant, la définition de $(SolutionDir) directement dans le fichier csproj avec un éditeur de texte fonctionne comme prévu.

39voto

Bas Bossink Points 4124

Un fichier csproj est déjà un fichier msbuild, cela signifie que les fichiers csproj peuvent également utiliser un élément d'importation comme décrit ici . L'élément d'importation est exactement ce dont vous avez besoin. Vous pourriez créer un Common.proj qui contient quelque chose comme :

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <OutputPath>$(SolutionDir)output</OutputPath>
    <WarningLevel>4</WarningLevel>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

Vous pouvez importer ce Common.proj dans chacun de vos csprojs, par exemple comme ceci :

<Import Project="..\Common.proj" />

L'instruction d'importation doit précéder toutes les tâches qui dépendent des propriétés définies dans Common.proj.

J'espère que cela vous aidera. Je ne peux pas confirmer vos problèmes avec la variable $(SolutionDir) ; je l'ai utilisée de nombreuses fois. Je sais cependant que cette variable n'est pas définie lorsque vous exécutez une commande msbuild via la ligne de commande sur un projet spécifique qui est contenu dans une solution. Elle sera définie lorsque vous construirez votre solution dans Visual Studio.

1voto

marc_s Points 321990

Malheureusement, ces éléments d'information, tels que le chemin de sortie, sont tous stockés dans les fichiers *.csproj individuels. Si vous voulez mettre à jour par lots un grand nombre de ces fichiers, vous devrez revenir à une sorte d'outil de mise à jour de texte ou créer un script pour toucher chacun de ces fichiers.

Pour ce genre de choses (appliquer des changements à un tas de fichiers texte en une seule fois), j'utilise personnellement WildEdit par Helios Software - fonctionne comme un charme et son prix est raisonnable.

Mais je suis sûr qu'il existe aussi des tonnes d'alternatives gratuites.

0voto

C Johnson Points 4900

Définissez le $(OutputPath) propriété dans une feuille de propriété commune. Supprimez ensuite cette entrée dans tous les fichiers de projet que vous voulez qu'elle affecte. Importez ensuite cette feuille de propriétés dans tous vos projets.

Pour des centaines de projets, cela peut être très fastidieux. C'est pourquoi j'ai écrit un outil pour vous aider dans cette tâche :

https://github.com/chris1248/MsbuildRefactor

0voto

AB Kolan Points 3569

Je vous suggère d'utiliser un outil de construction tel que MSBuild ou NAnt ce qui vous donnerait plus de flexibilité dans vos constructions. L'idée de base est de lancer une construction en utilisant (dans la plupart des cas) un seul fichier de construction configurable.

Je recommande personnellement NAnt.

Vous trouverez un excellent tutoriel sur NAnt sur le blog de JP Boodhoo. ici

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