2009-11-23 19 views
46

私は、APIを使って別のアプリケーションにいくつかの拡張性を追加するプロジェクトを持っています。しかし、ほとんどのコードが同じであるため、複数のバージョンのアプリケーションで同じプロジェクトを使用できるようにしたいと考えています。Visual Studioのビルド構成に基づいてアセンブリ参照を指定する方法はありますか?

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

答えて

54

これを行う方法はありますが、プロジェクトファイルを手作業で編集する必要があります。プロジェクトファイルには、参照用のファイルも含め、多くの要素で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ステートメントをコードに組み合わせれば、必要な処理を実行できるはずです。

これを行う場合、Visual Studioでプロジェクトファイルから条件付き属性を削除するのは簡単です。

+0

これは完璧に働き、数多くの名声を出しました。 Visual Studioでも、機能的なIntellisenseを含めて、私がそれらのリファレンスで遊んでいない限り、うまくいきます! – snicker

+7

私は同様のアプローチを使用して、リファレンスのデバッグ/リリースバージョンに対する構成固有の参照を作成しました。リファレンスを追加したときにリリースバージョンを指摘し、メモ帳でHintパスの 'Release'を' $(Configuration) 'に置き換えました。そしてvoila - リファレンスが自動的に正しいターゲット設定に更新されます。 – awe

+3

@awe:MSBuildファイルのほとんどの要素に 'Condition'属性を付けることは有効です。 – adrianbanks

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

あなたはプロパティでヒントパスを置き換えることができます。

$(構成)/デバッグまたは他のどんな設定をお持ちのリリースと同じです。お使いの設定がどれCPUが含まれている場合 $(プラットフォーム)のx86/x64のと同じです/任意のCPU

して、あなたはまた、adrianbanksが参照する条件のオプションを参照して、単一引用符には約$(構成)

を配置する必要があります

+0

ありがとうございました。これは私のために働いていましたが、@adrianbanksのソリューションはビルド時にパッケージを解決しませんでした – HostMyBus

関連する問題