Help us understand the problem. What is going on with this article?

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

もくじ
https://qiita.com/tera1707/items/4fda73d86eded283ec4f

やりたいこと

VisualStdio2019で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>
 ・
 ・
tera1707
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした