11

Visual Studio 2012 RC を使用して C# ソリューションを操作しています。すべての構成固有の設定は、すべての .csproj ファイルに含まれる単一の .props ファイル内に保存されます。

それでもVSは、これをインクルードの前に置くことを主張しています:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
   <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Debug\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
   <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Release\</IntermediateOutputPath>
</PropertyGroup>

<Import Project="$(MSBuildProjectDirectory)\..\Common.props" />

何故ですか?

参考までに、私の共通ファイルは次のようになります: http://pastebin.com/Uued1XY0

4

4 に答える 4

7

これらの IntermediateOutputPath は、MSBuild に不適切なパスが指定されたときに挿入できます。

私たちの場合、出力フォルダーの SolutionDir の後に余分な不要なスラッシュがありました。

私たちにとってうまくいかなかったもの(余分なスラッシュに注意してください):

<OutputPath>$(SolutionDir)\out\bin\</OutputPath>
<IntermediateOutputPath>$(SolutionDir)\out\obj\</IntermediateOutputPath>

何がうまくいったか:

<OutputPath>$(SolutionDir)out\bin</OutputPath>
<IntermediateOutputPath>$(SolutionDir)out\obj</IntermediateOutputPath>

特定のケースのトラブルシューティングに役立つように、MSBuild の診断出力をオンにし、[ツール] -> [オプション] -> [プロジェクトとソリューション] -> [ビルドと実行] -> [MSBuild プロジェクトのビルド出力の詳細] の下にログを記録してみてください。次に、生成されたフォルダー (例: "Temp") を検索します。

共通の proj/props/targets ファイルを使用することは素晴らしいアイデアですが、Visual Studio と戦う必要があります。

于 2014-10-29T18:37:01.787 に答える
0

そのため、必要に応じてこれらの設定をオーバーライドできます。インポートが先に行われた場合、Visual Studio のプロパティが優先されます。MSBuild では、最後の定義が優先されて使用されます。これは良いことです。エラーを引き起こしていますか?それとも気に入らないだけですか?

于 2012-07-11T00:45:18.820 に答える
0

プロジェクトで を指定しました。プロパティ ファイルには BaseIntermediateOutputPath が含まれます。値を指定しない場合は、Base から派生します。

パスが指定されていない場合、BaseIntermediateOutputPath から派生した完全な中間出力パス。たとえば、\obj\debug です。このプロパティがオーバーライドされている場合、BaseIntermediateOutputPath を設定しても効果はありません。

参照: http://msdn.microsoft.com/en-us/library/bb629394.aspx

于 2012-11-09T11:45:17.160 に答える
0

読み込み中に XML の挿入が行われている場合は、NuGet に関連していると思われます (NuGet を使用していると仮定します)。Directory.Build.props ファイルを使用すると、.props ファイルに設定された BaseIntermediateOuputPath を取得できます。検索順序とその仕組みに関する重要な情報については、このスタックオーバーフローの記事をお読みください。

.csproj ファイルで自動生成された IntermediateOutputPath

プロジェクト ファイルで BaseIntermediateOutputPath を設定しても、NuGet はリダイレクトされません。これは、MSBuild に BaseIintermediateOutputPath を設定する Sdk.props が含まれた後にその値が設定されるためです。この問題には 2 つの解決策があります。Base... 値を設定した後、Directory.Build.props を使用するか、SDK をプロジェクトにインポートします。.csproj ファイルの適切な場所でこの方法を試していません。)。

これらの手法のいくつかを参照するビルドをカスタマイズするためのリンクを次に示します。

https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019

于 2020-08-06T11:14:18.403 に答える