【问题标题】:NuGet interop pacakge guidelines around Debug and Release builds围绕调试和发布版本的 NuGet 互操作包指南
【发布时间】: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


【解决方案1】:

我可能刚刚开始使用它,尽管我承认我不确定这将如何转化为现实世界的项目。

我的互操作 NuGet 包:

  1. 分别在 lib\native\debug\ 和 lib\native\release\ 中嵌入调试和发布 DLL。
  2. 有一个 .props 文件,其中包含指向 DLL 的 <ItemGroup><Reference>,以及指向 $(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]<HintPath>

这能够成功绑定到 Debug 或 Release NuGet DLL,具体取决于构建配置。

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2020-11-09
    • 2019-03-04
    • 2020-10-29
    • 2012-05-22
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多