LoginSignup
19
22

More than 1 year has passed since last update.

[VisualStudio] Debug/Releaseビルドで、参照するdllを変えたい

Last updated at Posted at 2020-01-10

もくじ

やりたいこと

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を、「アセンブリの追加」で追加する。
  • image.png
  • 開いた参照マネージャダイアログの「参照」ボタンを押し、追加したいDebugビルド向けのdllを追加する。
  • image.png
  • 追加したデバッグ用のdllが、参照の一覧に入る。そのプロパティを見ると、選んだパスが出ている。(今回は、Debugフォルダの中にDebug用を入れている。)
  • image.png
  • 次に、そのプロジェクトの.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を選んだ時に別々の設定になっている。
image.png
image.png

※例では、プラットフォームの指定(ここでは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>
 ・
 ・
19
22
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
22