2016-06-14 48 views
1

我正在創建一個用C++/CLI編寫的NuGet包。它充當C#和本機C++之間的互操作。NuGet互操作封裝準則圍繞調試和發佈構建

生成的DLL具有管理的表面區域和本地implib表面區域。

Visual Studio只喜歡從NuGet包中使用單個引用程序集,而不是每個接收項目的Debug或Release配置中的不同引用程序集。

我想從NuGet包中獲取的引用程序集根據配置而有所不同,這樣我就可以在nupkg中嵌入調試和發佈DLL,並讓Release C#構建綁定到發佈DLL並調試C#構建綁定到調試DLL。

這是我的一個要求,因爲它似乎是我的調試版和發佈版本之間不同的std C++類(std :: string)的本地二進制對象佈局。

該DLL的發佈編譯失敗與該程序的其餘部分的調試編譯工作。程序的DLL和發佈編譯的調試編譯也遇到類似的失敗。

我能在這裏做什麼嗎?我已經做了一些探索,將參考元素放在NuGet .props或.targets文件中,並使用$(Configuration)屬性,但是我還沒有完成這項工作。

+2

幾乎沒有唯一的問題,當庫用戶擁有不同的VS版本時,會得到完全相同的匹配問題。這應該永遠不會成爲C++/CLI項目中的一個問題,您只公開受管接口。你的C++代碼看起來必須始終是一個實現細節,所以你部署Release build版本並不重要。 –

回答

1

我可能剛剛得到這個工作,但我承認我不知道這將如何轉化爲一個真實世界的項目。

我的互操作NuGet包:

  1. 嵌入了調試和分別釋放的lib \本地\調試\和lib \本地\發佈\ DLL文件。
  2. 具有包含<ItemGroup><Reference>對DLL的.props文件,以沿<HintPath>$(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]

這是能夠成功地結合到調試或發佈的NuGet DLL,取決於生成配置。