如何使我的托管 NuGet 包支持 C++/CLI 项目?

2024-02-20

我制作了一个 NuGet 包,当我从 C# 项目中使用它时,该包运行良好。它包含一个DLL在lib/net40目录,并且 DLL 被添加为引用。

现在 NuGet 支持 C++,我如何实际修改我的包,以便可以将 DLL 添加为 C++/CLI 项目中的托管引用?我找不到任何解释这一点的教程。如果我尝试按原样添加包,则会收到以下错误:

您正在尝试将此包安装到以“Native,Version=v0.0”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。

有人会认为解决方案是将文件放在 lib/native 下,但根据http://docs.nuget.org/docs/reference/support-for-native-projects http://docs.nuget.org/docs/reference/support-for-native-projects,不支持。另外,简单地将 DLL 直接放在 lib 下似乎没有任何作用。

显然,我应该用.props or .targets文件位于 build/native 下,但是我需要在这些文件中放入什么才能使其工作?


As 帕特里克·奥哈拉写道 https://stackoverflow.com/a/26488318/196844,NuGet 不会为您更改 C++/CLI 项目。看GitHub Issue NuGet/Home#1121 - 无法将托管包安装到 CLI 项目中 https://github.com/NuGet/Home/issues/1121。但是,使用 NuGet 命令行实用程序,NuGet.exe,您可以让 NuGet 下载并解压所需的包。

对于完整的示例,以下是我添加引用所采取的步骤优化优先级队列 https://www.nuget.org/packages/OptimizedPriorityQueue/Visual Studio 2013 C++/CLI 项目中的 1.0.0:

  1. 如果尚未打开,请打开包管理器控制台 (工具 > NuGet 包管理器 > 包管理器控制台).
  2. 在包管理器控制台中,安装 NuGet.CommandLine 包:

    
    
    Install-Package NuGet.CommandLine
      

    (注意:在撰写本文时,NuGet.CommandLine 的最新版本是 2.8.6。您可能会有所不同。)

  3. 在您的项目文件夹中,现在应该有一个.nuget\packages.configXML 文件包含以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="NuGet.CommandLine" version="2.8.6" />
    </packages>
    
  4. 在文本编辑器(例如 Notepad++)中,添加<package>所需包的元素。在这种情况下,我添加了:

    <package id="OptimizedPriorityQueue" version="1.0.0" />
    

    ..内<packages>元素。

  5. 打开命令提示符(我打开了 VS2013 开发人员命令提示符,但常规命令提示符应该可以工作。)

  6. cd进入项目文件夹。
  7. 运行以下命令,更改 NuGet.CommandLine 的版本号(如果不同):

    
    
    .\packages\NuGet.CommandLine.2.8.6\tools\NuGet.exe Install -NonInteractive -OutputDirectory packages .nuget\packages.config
      

    对我来说,输出是:

    
    
    Installing 'OptimizedPriorityQueue 1.0.0.0'.
    Successfully installed 'OptimizedPriorityQueue 1.0.0.0'.
    All packages listed in packages.config are already installed.
      
  8. 右键单击 Visual Studio 中的项目并选择特性。在下面通用属性 > 参考, 点击添加新参考... button.
  9. Select Browse在左手侧。在“添加引用”对话框的“确定”和“取消”按钮旁边,有一个Browse…按钮。单击该按钮可打开文件选择对话框。
  10. 导航到 NuGet 解压到的 DLLpackages项目文件夹的子目录,然后单击Add按钮。点击OK关闭“添加引用”对话框。
  11. 您现在应该能够在 C++/CLI 项目中使用该程序集:

    using namespace Priority_Queue;
    
    //...
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使我的托管 NuGet 包支持 C++/CLI 项目? 的相关文章

随机推荐