23

Visual Studio の外部から MSBuild 経由で .vcxproj をビルドしたいと考えています。問題は、.vcxproj ファイル内に $(SolutionDir) が多数出現することです。これは、ソリューションが読み込まれたときにのみ正しく設定されるようです。

$(SolutionDir) を実際の絶対パスに置き換えると、機能します。しかし、他のマシンの他の人が同じプロジェクト ファイルで作業しているため、これは解決策ではありません。

この問題を解決するための解決策またはハックはありますか?

4

3 に答える 3

34

パラメータ引数を渡すことで、変数を設定できます。

/p:SolutionDir=path

そのため、ソリューション ファイルを編集するのではなく、環境をセットアップしてそれに応じて MSBuild を実行するビルド スクリプトを作成し、開発作業用に Visual Studio ファイルをそのままにしておくことができます。

于 2013-02-24T16:43:29.073 に答える
9

You can use a relative path.

I am not sure about Visual Studio 2010 as in the question, but it guaranteed works since Visual Studio 2012.

If the project folder is right under the solution folder then the relative path is ..\\.

This, by the way, can be combined with the parameter argument from Grant Thomas's answer.

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
于 2015-11-18T14:05:00.183 に答える
8

引数として明示的に渡すソリューションSolutionDirは、私には不十分です。

つまり、ビルドしたいプロジェクトに異なるビルド構成の依存関係がある場合、ビルドはThis project doesn't contain the Configuration and Platform combination of <my target configuration>エラーで失敗します。

依存関係のターゲット構成を指定しなかったため、ビルド中のプロジェクトと同じ構成をターゲットにしようとするため、これは理にかなっています (私の場合)。

ソリューション ファイルには、ソリューション内のすべてのプロジェクトのビルド構成が含まれているため (いくつかのソリューション構成が与えられます)、このソリューションを利用してこの問題を解決したいと考えています。幸いなことに、MSBuild を使用すると、ソリューションをビルドして特定のターゲット プロジェクトを引数として渡すことができます。これにより、そのプロジェクトのみが (依存関係と共に) ビルドされます。

msbuild MySolution.sln /t:MyProject
于 2016-01-29T15:10:58.460 に答える