프로그래밍/C#, .NET

[.NET] 참조된 DLL, 릴리즈(Release)와 디버그(Debug)를 어떻게 구분해야 하나?

당근천국 2022. 2. 18. 15:30

요즘은 응용프로그램을 각 잡고 배포할 일이 없어서 신경 쓰지 않았지만......

사실 배포 시 참조되는 DLL을 구분해야 합니다.

 

 

1. 개발용 DLL과 배포용 DLL

내부에서 만든 DLL인 경우 편한 디버깅을 위해 디버깅용 정보가 들어있는걸 쓰고

배포 시에는 릴리즈용 DLL을 씁니다.

 

 

테스트용 DLL을 만들어 봅시다.

 

 

2. 그냥 하면 어떻게 되는가?

이제 일반적인 참조방식으로 어떻게 되는지 확인해 봅시다.

 

2-1. 프로젝트 참조

이제 프로젝트 참조를 한 프로젝트에서는 어떻게 돌아가는지 봅시다.

자동으로 잘 구분하여 참조합니다.

 

 

2-2. 직접 참조

DLL을 직접 참조한 프로젝트는 어떤지 확인해 봅시다.

당연히 직접 참조한 DLL만 따라가는 것을 볼 수 있습니다.

 

 

그렇다면 디버그와 릴리즈를 어떻게 구분하느냐?

프로젝트 파일을 열여 보면 아래와 같이 참조한 DLL의 경로가 있는 곳이 있습니다.

<ItemGroup>
<Reference Include="ReleaseTestDll">
  <HintPath>..\lib\release\ReleaseTestDll.dll</HintPath>
</Reference>
</ItemGroup>

 

이것을 다음과 같이 빌드 조건을 붙여줍니다.

참고 : MS Docs - MSBuild 조건 

 

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

 

이제 테스트 해보면 원하는 데로 DLL을 참조하는 것을 알 수 있습니다.

 

 

마무리

여기서 주의할 것은 프로젝트 폴더에 DLL이 있고 이것을 참조하는 경우 출력될 때 지멋대로 같은 이름의 DLL 찾아다 쓴다는 것입니다.

('release'폴더에 있는 DLL을 참조했는데 'debug'폴더에 있는 DLL을 참조한다!!?)

이것도 찾아보면 이유가 있을 텐데.....

나중에 찾아봐야겠습니다 ㅋㅋㅋㅋ