[VisualStudio] Debug/Release 빌드에서 참조하는 dll을 변경하고 싶습니다.

모쿠지



하고 싶은 일



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에 저장되는 것 같습니다)
  • 여기를, 서두의 내용을 참고로 재기록해, 보존한다. (이 때 Visual Studio를 한 번 닫는 것이 더 낫습니다.)
  • <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>
     ・
     ・
    

    좋은 웹페이지 즐겨찾기