我制作了一个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相关问答推荐

节省用户在整个应用程序中使用的Flutter

ASP.NET核心最小API必须以正斜杠开头吗?

Azure Function应用程序-如何升级.NET运行时

通过 System.Net.Mail 的 VB SMTP 停止工作

.Net MAUI Android 无法与 API localhost 对话

IANA 到 Windows 时区映射

如何确定计时器是否正在运行?

类似于字典但没有值的 C# 数据 struct

如何在 ASP.NET Core MVC 中读取操作方法的属性?

.Include() 与 .Load() 在 EntityFramework 中的性能

.NET 世界是否有 Maven 替代方案或端口?

Linq查询分组并 Select 第一个项目

如何让 .NET 的 Path.Combine 将正斜杠转换为反斜杠?

DateTime.TryParseExact() 拒绝有效格式

C# 的 Actors 有什么好的实现吗?

.NET 反射的成本是多少?

获取 .NET 程序集的 AssemblyInformationalVersion 值?

如何在 RabbitMQ 中设置重试次数?

如何从文件中删除单个属性(例如只读)?

Uri.Host 和 Uri.Authority 有什么区别