1

Windows Phone クラス ライブラリ プロジェクトBaseProjと、このプロジェクト、プロジェクトABなどを参照するいくつかの WP プロジェクトを使用したソリューションがあります。 BaseProjには LocationHelper クラスがあります。

プロジェクトAには LocationHelper クラスでコンパイルするBaseProjが必要ですが、プロジェクトBは ID_CAP_LOCATION 機能なしでビルドする必要があるため、 BaseProjのビルド時に LocationHelper クラスを含めるべきではないとします。

条件付きコンパイル シンボルを使用してこれを実現できます。問題は、プロジェクトABのどちらをビルドしているかに応じて、 BaseProjを適切なシンボルでビルドするにはどうすればよいかということです。

いくつかの調査の後、次の解決策を思いつきました.BaseProj.csprojに追加しました

<PropertyGroup Condition=" '$(TestProperty)'==true ">
  <DefineConstants>$(DefineConstants);TEST_SYMBOL</DefineConstants>
</PropertyGroup>

B.csproj では、ProjectReference のプロパティ:

<ProjectReference Include="..\BaseProj\BaseProj.csproj">
  <Project>{...}</Project>
  <Name>BaseProj</Name>
  <Properties>TestProperty=true</Properties>
</ProjectReference>

AではなくBTEST_SYMBOLでビルドするときに追加する必要があると考えています。これは、MSBuild でビルドするとうまく機能します。一方、Visual Studio はこれを完全に無視します。つまり、デバッグ時とビルド スクリプトを使用してリリース ビルドを作成するときとで動作が異なります。

MSBuildとVisual Studioから必要な動作を得るにはどうすればよいですか?

4

2 に答える 2

0

これは、新しいプロジェクト構成を定義することで実行できます。既にデバッグ構成とリリース構成があり、それらが ID_CAP_LOCATION で構成されていると仮定すると、新しい構成を作成できます (例: Debug_No_Location と Release_No_Location)。これは、Visual Studio の [構成マネージャー] ダイアログで行います。プロジェクト構成とともに、対応するソリューション構成も定義して、Visual Studio から簡単にビルドできるようにします。その後、Debug_No_Location/Release_No_Location 構成から ID_CAP_LOCATION を削除します。

ソリューション内のすべてのプロジェクトを編集し、中間の場所とバイナリの場所がデバッグ/リリース構成と異なることを確認することが重要です。そうしないと、構成間でバイナリが混在するという問題が発生し、インクリメンタル ビルドが信頼できなくなります。

VS IDE から両方のフレーバー (ロケーションありとなし) をビルドする場合は、構成を手動で切り替える必要があります。ただし、コマンド ラインから、MSBuild.exe を 2 回呼び出す単純なスクリプトを作成できます。例えば:

msbuild MySolution.sln /p:Configuration=Debug
msbuild MySolution.sln /p:Configuration=Debug_No_Location
于 2013-09-18T03:02:42.153 に答える