【发布时间】:2016-10-15 20:52:53
【问题描述】:
我正在创建一个用 C++/CLI 编写的 NuGet 包。它充当 C# 和本机 C++ 之间的互操作。
生成的 DLL 有一个托管表面区域和一个本地 implib 表面区域。
Visual Studio 只喜欢使用 NuGet 包中的单个引用程序集,而不是接收项目的每个调试或发布配置的不同引用程序集。
我希望从 NuGet 包使用的参考程序集根据配置而有所不同,这样我就可以在 nupkg 中嵌入调试和发布 DLL,并将发布 C# 构建绑定到发布 DLL,调试 C# 构建绑定到调试 DLL。
这对我来说是一个要求,因为在我的 Debug 和 Release 版本之间,std C++ 类(例如 std::string)的本机二进制对象布局似乎有所不同。
DLL 的发布编译无法与程序其余部分的调试编译一起工作。我在 DLL 的 Debug 编译和程序的 Release 编译中遇到了类似的失败。
有什么我可以在这里做的吗?我已经对将引用元素放在 NuGet .props 或 .targets 文件中并使用 $(Configuration) 属性进行了一些探索,但我还没有得到它。
【问题讨论】:
-
几乎不是唯一的问题,当库用户具有不同的 VS 版本时,您会遇到完全相同的匹配问题。这应该永远在 C++/CLI 项目中成为问题,您只公开托管接口。您的 C++ 代码的外观必须始终是实现细节,因此您部署 Release 构建版本并不重要。
标签: .net c++-cli nuget native mixed-mode