繁体   English   中英

我们如何在 c++/cli 项目中使用托管 nuget 包

[英]How can we use managed nuget packages in c++/cli project

我想在 c++/cli 项目中使用托管 nuget package 。 有没有办法做到这一点?

例如我的场景几乎是这样的:

我创建了一个 C# 项目(MainProject)并将 EntityFramework nuget package 添加到该项目。

我又创建了一个 C# 项目(TestCSProject)并添加了 MainProject 作为对该项目的引用。 然后在引用中自动添加实体框架

我创建了一个 C++/CLI 项目(TestCLIProject)并添加了 MainProject 作为对该项目的引用,以便我想看看我是否可以使用实体框架。

但这并没有发生。

所以我想知道如何在 c++/cli 项目中使用托管 nuget package

C++/CLI project can use nuget packages using packages.config (in VS2019 still there is no PackageReference support for C++, PackageReference for NuGet packages in C++ projects ). 正如评论中所指出的,C++/CLI 应该仅用于与本机代码的互操作。 无论如何,有时可能需要在这里使用 nuget 包。

在 Visual Studio 2019 中,以下内容适用于我的 C++ 项目引用.Net Framework:

  1. Go to package manager console: Tools -> NuGet Package Manager -> Package Manager Console . 然后安装 nuget 软件包( 来自 Microsoft 的指令)。 例如 EF nuget 安装可能如下:

安装包 EntityFramework -Version 6.4.4 -ProjectName TestCLIProject

nuget 安装后,将在项目文件夹中创建一个packages.config文件并将其添加到项目中。 例如,在 EF nuget 安装 packages.config 之后可能如下:

 <?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.4.4" targetFramework="native" /> </packages>
  1. 从 nuget 添加对 dll 的引用。 Project -> Add Reference... -> Browse... -> 找到解决方案的文件夹 -> go 到packages文件夹 -> go 到 nuget 的文件夹 -> 找到 dll

例如对于 EF,这导致 as.vcxproj 更新为:

  <Reference Include="EntityFramework">
    <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
  </Reference>
  <Reference Include="EntityFramework.SqlServer">
    <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
  </Reference>
  1. 项目已准备好构建。 如果 Visual Studio 已选择退出Tools -> Options -> NuGet Package Manager -> Automatically check for missing packages during build in Visual Studio ,则可以手动恢复 nugets,例如在 Z209802FB858E2C83205027使用Update-Package DBBBPackage 命令。

借助最新版本的 VS2022(Visual Studio 2022 版本 17.3),您现在还可以在 C++/CLI 项目中使用 PackageReference。 只需确保您已添加

<EnableManagedPackageReferenceSupport>true</EnableManagedPackageReferenceSupport>

到 your.vcxproj 文件中带有Label="Globals"的 PropertyGroup。 此外请注意,您的 C++/CLI 项目必须针对 .NET Core 或 .NET 5+。 正如您在当前的发行说明中所读到的那样,这对于针对 .NET 框架的 C++/CLI 项目不起作用(也不会计划在未来得到支持)。

启用此功能后,您现在还可以通过

  1. 在解决方案资源管理器中,右键单击“参考”并
  2. 选择“管理 NuGet 包”

就像它在Microsoft 文档中描述的一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM