关于Debug和Release版本的NuGet interop pacakge指南

时间:2016-06-14 23:12:24

标签: .net c++-cli nuget native mixed-mode

我正在创建一个用C ++ / CLI编写的NuGet包。它充当C#和本机C ++之间的互操作。

生成的DLL具有托管表面区域和本机implib表面区域。

Visual Studio只喜欢使用NuGet包中的单个引用程序集,而不是每个接收项目的Debug或Release配置使用不同的引用程序集。

我希望NuGet包中使用的引用程序集根据配置而不同,这样我就可以在nupkg中嵌入Debug和Release DLL,并将Release C#builds绑定到Release DLL并将Debug C#builds绑定到调试DLL。

这是我的要求,因为看起来std C ++类(例如std :: string)的本机二进制对象布局在我的Debug和Release版本之间是不同的。

DLL的Release编译无法与程序其余部分的Debug编译一起使用。我在DLL的Program编译和程序的Release编译中遇到了类似的失败。

我能在这做什么吗?我已经做了一些探索,将引用元素放在NuGet .props或.targets文件中,并使用$(Configuration)属性,但我还没有把它用于工作。

1 个答案:

答案 0 :(得分:1)

我可能刚刚开始工作,虽然我承认我不确定这会转化为真实世界的项目有多好。

我的互操作NuGet包:

  1. 分别在lib \ native \ debug \和lib \ native \ release \中嵌入调试和发布DLL。
  2. 包含<ItemGroup><Reference>到DLL的.props文件以及<HintPath>$(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]
  3. 这能够成功绑定到Debug或Release NuGet DLL,具体取决于构建配置。