web-dev-qa-db-ja.com

Visual Studio 2010プロジェクトをコンパイルするかどうかに応じて、サードパーティライブラリのデバッグバージョンまたはリリースバージョンでコンパイルしますか?

Visual Studio 2010/C#用に多数のサードパーティライブラリ(dll)をダウンロードしましたが、それらのディストリビューションの\ binディレクトリには、通常、デバッグとリリースの2つのバージョンがあることに気付きました。

これらのライブラリをプロジェクトへの参照として追加する方法はありますが、リリースビルド(リリースをビルドしているとき)を使用し、デバッグビルド(デバッグしているとき)を使用しますか?

40
leeand00

Csprojファイルを編集して、参照を含むItemGroupにCondition属性を手動で設定できます。

  <ItemGroup Condition="'$(Configuration)' == 'Debug'">
    <Reference Include="MyLib">
      <HintPath>..\..\Debug\MyLib.dll</HintPath>
    </Reference>
  </ItemGroup>

  <ItemGroup Condition="'$(Configuration)' == 'Release'">
    <Reference Include="MyLib">
      <HintPath>..\..\Release\MyLib.dll</HintPath>
    </Reference>
  </ItemGroup>

詳細については、 この記事 を参照してください。

38
PHeiberg
<Reference Include="MyLib">
   <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
</Reference>
68
WaffleSouffle

元の質問にあるように、ReleaseフォルダーとDebugフォルダーを使用する場合、WaffleSouffleによる回答は間違いなく最良です。

VS(VS2010)は、csprojファイルを編集するときにIntelliSenseに表示されないため、それほど明白ではない別のオプションがあるようです。

HintPath要素に条件を追加できます。このような:

<Reference Include="MyLib">      
      <HintPath Condition="'$(Configuration)'=='Release'">..\lib\MyLib.dll</HintPath>
      <HintPath Condition="'$(Configuration)'=='Debug'">..\lib\Debug\MyLib.dll</HintPath>
</Reference>

上記のアプローチを説明するVivekRathodの記事を http://blog.vivekrathod.com/2013/03/conditionally-referencing-debug-and.html で見つけました。

XMSスキーマファイルでプロジェクトファイルを確認しました:C:\ Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild\Microsoft.Build.Core.xsdおよび:C:\ Windows\Microsoft.NET\Framework\v4 .0.30319\MSBuild\Microsoft.Build.Commontypes.xsd

ConditionがHintPath要素でサポートされている属性であることがわかりませんが、機能しているようです。

編集1:これにより、Visual Studioで参照が2回表示されることはありません。これは、受け入れられた回答の問題です。

編集2:実際、HintPathをすべて省略すると、VisualStudioはプロジェクトの出力フォルダーを調べます。したがって、実際にこれを行うことができます。

<Reference Include="MyLib">        
     <!-- // Removed HintPath, VS looks for references in $(OutDir) --> 
</Reference> 


検索順序はファイルで指定されていますMicrosoft.Common.targets
参照: VisualStudioのHintPathとReferencePath

9
Nils Lande

はい。ただし、VS2010内ではおそらくネイティブではありません。 .csprojファイルを編集し、Condition属性を使用して、リリースまたはデバッグへの参照を作成できます。

<Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <HintPath>..\lib\Debug\MyLib.dll</HintPath>
</Reference>

または

<Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <HintPath>..\lib\Release\MyLib.dll</HintPath>
</Reference>
0
Otávio Décio