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

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

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

有人会认为解决方案是将文件放在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下载并解压缩所需的包.

下面是我在Visual Studio 2013 C++/CLI项目中添加对OptimizedPriorityQueue 1.0.0的引用的完整示例:

  1. Open the Package Manager Console if not already open (TOOLS > NuGet Package Manager > Package Manager Console).
  2. 在Package Manager控制台中,安装NuGet.命令行包:

    Install-Package NuGet.CommandLine
    

    (注:在 compose 本文时,NuGet.CommandLine的最新版本是2.8.6.对你来说可能会有所不同.)

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

    <?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的版本号.命令行(如果不同):

    .\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. 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. 导航到要解压缩到项目文件夹packages子目录的DLL,然后单击Add按钮.单击OK关闭"添加引用"对话框.
  11. 现在您应该能够在C++/CLI项目中使用该程序集:

    using namespace Priority_Queue;
    
    //...
    

.net相关问答推荐

为什么Linq中的运算符逻辑不匹配结果,当值为0或在VB. NET中没有

从窗体中移除另一个控件中引用的控件时获取设计时通知

使用 DataDog 收集 OpenTelemetry 跟踪

NET 6:控制器方法不可访问

为什么具有可为空值的 struct 的 HashSet 非常慢?

单线程单元 - 无法实例化 ActiveX 控件

C#6.0 字符串插值本地化

mstest.exe 在哪里?

如何根据新的安全策略在 .Net 中发送邮箱?

如何找到 ManualResetEvent 的状态?

为什么 WCF 中不允许方法重载?

X509Certificate 构造函数异常

ReaderWriterLockSlim 什么时候比简单的锁更好?

场与财产.性能优化

如何以编程方式删除 WebClient 中的 2 个连接限制

为什么 Roslyn 中有异步状态机类(而不是 struct )?

WebClient.DownloadString 由于编码问题导致字符损坏,但浏览器正常

使用没有catch块的try-finally块

您可以将 Microsoft Entity Framework 与 Oracle 一起使用吗?

枚举和匹配属性的 C# 命名约定