2017-10-15 9 views
2

.csprojファイルには、この宣言が含まれています.csprojファイル内にある<SolutionDir>要素の目的は何ですか?

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

私の期待は、それはあなたがプロジェクトディレクトリから直接プロジェクトをビルドして/p:SolutionDir=パラメータを指定しないとき、ソリューションファイルを発見するのに必要でした。ただし、..\は絶対パスで自動的に解決されないため、ソリューション関連の依存関係がある場合は役に立たなくなります。

答えて

3

SolutionDirプロパティが正しい値に設定されていない場合は、これを設定することで、ソリューションファイルとは無関係にcsprojファイルを構築できるように、これがプロジェクトファイルに追加されたようです。 'msbuild my.csprojの実行時には呼び出さないでください)。

私は、あなたのcsprojファイル(またはインポートされたprops/targetsファイル)内の他のビルドロジックが$(SolutionDir)をどこかに使用していると仮定しているので、プロパティがこの条件付き宣言を使用して設定されていないと失敗します。

MSBuildはcsprojファイルを基準にしたパスを解釈し、作業ディレクトリをcsprojファイルの場所に設定することですべてのコマンドを実行します。ほとんどの使用例で..\が動作するはずです。

関連する問題