gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:30:35 25 4
gpt4 key购买 nike

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

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

You are trying to install this package into a project that targets 'Native,Version=v0.0', but the package does not contain any assembly references or content files that are compatible with that framework.

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

显然,我应该使用 build/native 下的 .props.targets 文件来执行此操作,但是我需要在这些文件中放入什么才能使这项工作?

最佳答案

Patrick O'Hara wrote ,NuGet 不会为您更改 C++/CLI 项目。请参阅GitHub Issue NuGet/Home#1121 - Cannot install managed packages into a CLI project 。但是,使用 NuGet 命令行实用程序,NuGet.exe ,您可以让 NuGet 下载并解压所需的包。

作为一个完整的示例,以下是我添加对 OptimizedPriorityQueue 的引用所采取的步骤。 Visual Studio 2013 C++/CLI 项目中的 1.0.0:

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

    Install-Package NuGet.CommandLine

    (Note: As of this writing, the latest version of NuGet.CommandLine is 2.8.6. It may be different for you.)

  3. Within your project folder, there should now be a .nuget\packages.config XML file with the following contents:

    <?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

    For me, the output was:

    Installing 'OptimizedPriorityQueue 1.0.0.0'.Successfully installed 'OptimizedPriorityQueue 1.0.0.0'.All packages listed in packages.config are already installed.
  8. Right click on the project in Visual Studio and select Properties. Under Common Properties > References, click the Add New Reference… button.
  9. Select Browse on the left hand side. Next to the Add Reference dialog's OK and Cancel buttons, there is a Browse… button. Click that to open a file selection dialog.
  10. Navigate to the DLLs that NuGet unpacked to the packages subdirectory of your project folder and click the Add button. Click OK to close the Add Reference dialog.
  11. You should now be able to use the assembly in your C++/CLI project:

    using namespace Priority_Queue;

    //...

关于.net - 如何使我的托管 NuGet 包支持 C++/CLI 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18694947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com