web-dev-qa-db-ja.com

Visual Studioのビルド構成に基づいてアセンブリ参照を指定する方法はありますか?

APIを介して別のアプリケーションに拡張性を追加するプロジェクトがあります。ただし、ほとんどのコードは同じであるため、アプリケーションの複数のバージョンで同じプロジェクトを使用できるようにしたいと思います。

ただし、アプリケーションの各バージョンには、そのバージョンのソフトウェアの適切なアセンブリへの参照が必要です。彼らはアセンブリをGACにロードするので、ビルド構成に基づいて使用するアセンブリのバージョンを指定できたとしても問題ありません。 VSの内部からこれを行う方法はありますか、それとも外部ビルドツールが必要ですか?

53
snicker

これを行う方法はありますが、プロジェクトファイルを手動で編集する必要があります。プロジェクトファイルには、参照用の要素を含む多くの要素でCondition属性を適用できます。

これらを参照に追加して、参照をいつ使用するかを指定できます。

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'">
</Reference>
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'">
</Reference>
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'">
</Reference>

次に、いくつかのビルド構成(V1V2V3)を定義すると、各参照は、関連する選択したビルド構成にのみ含まれます。

これを条件付きコンパイルシンボルおよびコード内の#ifステートメントと組み合わせると、必要なことを実行できるはずです。

これを行う場合に注意する必要があるのは、VisualStudioでプロジェクトファイルから条件付き属性を簡単に削除できることです。

59
adrianbanks
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath>
</Reference>

ヒントパスを次のプロパティに置き換えることができます。

$(Configuration)は、Release/Debugまたはその他の構成と同等です。 $(プラットフォーム)はx86/x64/AnyCPUと同等です

構成に任意のCPUが含まれている場合は、$(構成)を一重引用符で囲む必要があります。

Adrianbanksが参照する条件オプションも参照してください

11
sweetfa