2016-06-14 7 views
1

C++/CLI로 작성된 NuGet 패키지를 만들고 있습니다. C#과 네이티브 C++ 간의 interop 역할을합니다.NuGet interop pacakge 디버그 및 릴리스 빌드에 대한 지침

생성 된 DLL에는 관리되는 표면 영역과 원시 implib 표면 영역이 있습니다.

Visual Studio는 수신 프로젝트의 디버그 또는 릴리스 구성마다 다른 참조 어셈블리가 아닌 NuGet 패키지에서 단일 참조 어셈블리 만 사용하는 것을 좋아합니다.

NuGet 패키지에서 소비되는 참조 어셈블리를 구성에 따라 다르게 설정하여 nupkg에 Debug 및 Release DLL을 모두 포함시키고 Release C# 빌드를 릴리스 DLL에 바인딩하고 Debug C# 빌드를 바인딩 할 수 있도록합니다. 디버그 DLL.

std C++ 클래스의 기본 이진 개체 레이아웃 (예 : std :: string)이 내 디버그 빌드와 릴리스 빌드간에 다른 것으로 나타나기 때문에 이것은 필자의 요구 사항입니다.

DLL의 릴리스 컴파일이 나머지 프로그램의 Debug 컴파일 작업에 실패했습니다. DLL과 Release의 Debug 컴파일과 비슷한 실패가 발생합니다.

내가 할 수있는 일이 있습니까? NuGet .props 또는 .targets 파일에 참조 요소를 넣고 $ (Configuration) 속성을 사용하는 방법에 대해 조금 살펴 보았지만 아직 작동하지는 못했습니다.

+2

거의 유일한 문제는 라이브러리 사용자의 VS 버전이 다른 경우 똑같은 문제가 발생한다는 것입니다. 이것은 C++/CLI 프로젝트에서 결코 문제가되지 않아야합니다. 관리되는 인터페이스 만 노출합니다. C++ 코드는 항상 구현 세부 사항이어야하므로 Release 빌드 버전을 배포하는 데 전혀 문제가되지 않습니다. –

답변

1

나는 이것이 실제로 현실 세계 프로젝트로 얼마나 잘 번역 될지 모르겠다.

내 상호 운용성 NuGet 패키지 :

  1. 모두 디버그를 포함시킵니다 각각 LIB \ 기본 \ 디버그 \ 및 LIB \ 기본 \ 릴리스 \에서 DLL을 놓습니다.
  2. 이와 함께, DLL에 <ItemGroup><Reference>를 포함하는 .props 파일이있는 <HintPath>이 성공적으로 빌드 구성에 따라 달라, 디버그 또는 릴리스 NuGet DLL에 결합 할 수 있었다

$(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]합니다.