2017-10-15 3 views
2

Mon fichier .csproj contient cette déclaration:Quel est le but de <SolutionDir> élément dans le fichier .csproj?

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

Mon attente était-il nécessaire de découvrir le fichier de solution lorsque vous créez le projet directement à partir du répertoire du projet et ne spécifiez pas le paramètre /p:SolutionDir=. Cependant, ..\ n'est pas automatiquement résolu en un chemin absolu et est donc inutile si vous avez des dépendances liées à la solution.

Répondre

3

Il semble que ceci ait été ajouté à votre fichier de projet pour permettre de construire le fichier csproj indépendamment du fichier de solution, en définissant la propriété SolutionDir si elle n'est pas déjà correctement définie (ce qui serait le cas si vous appelez msbuild my.sln mais pas lors de l'exécution msbuild my.csproj).

Je suppose qu'une autre logique de construction dans votre fichier csproj (ou le fichier des accessoires/cibles importés) utilise $(SolutionDir) quelque part, donc elle échouerait si la propriété n'était pas définie à l'aide de cette déclaration conditionnelle.

MSBuild interprète les chemins relatifs au fichier csproj et exécute toutes les commandes en définissant le répertoire de travail à l'emplacement du fichier csproj. Par conséquent, ..\ devrait fonctionner dans presque tous les cas d'utilisation.