もくじ
やりたいこと
VisualStudio2019でC#アプリのプロジェクトを作り、そのアプリがなにかのdll(.netのdll)を参照するとする。
そのときに、Debugビルドのときと、Releaseビルドのときに、参照するdllを変えたい。
※同じソリューション内にあるdllのプロジェクトであれば、「プロジェクトの参照」にすれば、使う側のビルドのConfigurationに自動で合わせてくれるが、外部の自分で作ってないdllだと「アセンブリの参照」を追加することになり、その際、Debugのとき、Releaseのとき、という設定ができないので困ったので、調べたことをメモする。
やり方
VisualStudioのプロジェクトファイル(.csproj)を直接開いて、参照の設定をいじることで実現する。
具体的には、csprojの参照の設定に、下記のように書き込む。
<Reference Include="参照するライブラリの名前">
<HintPath Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">..\Library\Debug\参照するライブラリの名前.dll</HintPath>
<HintPath Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">..\Library\Release\参照するライブラリの名前.dll</HintPath>
</Reference>
・
・
※上の例のパスは適当。
手順
- まずはビルドのConfigurationをDebugにする。
- C#のプロジェクトの「参照」から、とりあえずDebugビルド時に使用したいdllを、「アセンブリの追加」で追加する。
- 開いた参照マネージャダイアログの「参照」ボタンを押し、追加したいDebugビルド向けのdllを追加する。
- 追加したデバッグ用のdllが、参照の一覧に入る。そのプロパティを見ると、選んだパスが出ている。(今回は、Debugフォルダの中にDebug用を入れている。)
- 次に、そのプロジェクトの.csprojファイルを、なにかのエディタで開く。その中に、下記のような箇所ができているはず。(参照マネージャでdllを指定すると、相対パスでdllのパスが入るっぽい)
<ItemGroup>
<Reference Include="DllTestCs">
<HintPath>dll\Debug\DllTestCs.dll</HintPath>
</Reference>
・
・
このとき、参照に追加した直後にcsprojを開くと、まだdllの参照設定がファイルに反映されていない場合があるので、その場合はまず一度ビルドしておく。(そのときにcsprojに保存されるっぽい)
- ここを、冒頭の内容を参考に書き換えて、保存する。(このとき、一度VisualStudioを閉じておいた方がよいかも?)
<ItemGroup>
<Reference Include="DllTestCs">
<HintPath Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">dll\Debug\DllTestCs.dll</HintPath>
<HintPath Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">dll\Release\DllTestCs.dll</HintPath>
</Reference>
・
・
これで完了。下図のように、DebugとReleaseのConfigurationを選んだ時に別々の設定になっている。
※例では、プラットフォームの指定(ここではx64
)をしているが、とくに指定しなくてもよい。
下記のようにしておけば、プラットフォームを何にしていても、DebugとReleaseによって使うものを分けてくれる。
<ItemGroup>
<Reference Include="DllTestCs">
<HintPath Condition="'$(Configuration)' == 'Debug'">dll\Debug\DllTestCs.dll</HintPath>
<HintPath Condition="'$(Configuration)' == 'Release'">dll\Release\DllTestCs.dll</HintPath>
</Reference>
・
・