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

sow*_*uri 9 c# c++ c++-cli

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

比如我的场景差不多是这样的:

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

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

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

但那并没有发生。

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

Ren*_*nat 7

C++/CLI项目可以使用nuget包packages.config(在VS2019中仍然没有对C++的PackageReference支持, PackageReference针对C++项目中的NuGet包)。正如评论中指出的,C++/CLI 应该仅用于与本机代码的互操作。无论如何,有时可能需要在这里使用 nuget 包。

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

  1. 转到包管理器控制台:Tools-> NuGet Package Manager-> Package Manager Console。然后安装 nuget 包(来自 Microsoft 的说明)。例如 EF nuget 安装可能如下所示:

安装包 EntityFramework -版本 6.4.4 -项目名称 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>
Run Code Online (Sandbox Code Playgroud)
  1. 从 nuget 添加对 dll 的引用。Project-> Add Reference...-> Browse...-> 找到解决方案的文件夹 -> 转到packages文件夹 -> 转到 nuget 的文件夹 -> 找到 dll

例如,对于 EF,这会导致 .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>
Run Code Online (Sandbox Code Playgroud)
  1. 项目已准备好构建。如果 Visual Studio 选择退出Tools-> Options-> NuGet Package Manager-> Automatically check for missing packages during build in Visual Studio,则可以使用Update-Package命令在包管理器控制台中手动恢复 nuget。


Flo*_*oAl 6

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

<EnableManagedPackageReferenceSupport>true</EnableManagedPackageReferenceSupport>

Label="Globals"到.vcxproj 文件中的PropertyGroup 。此外,请注意,您的 C++/CLI 项目必须面向 .NET Core 或 .NET 5+。正如您在发行说明中所读到的那样,这对于面向 .NET Framework 的 C++/CLI 项目不起作用(并且将来也不计划支持)。

启用此功能后,您现在还可以通过以下方式使用 NuGet 包管理器:

  1. 在解决方案资源管理器中,右键单击“引用”,然后
  2. 选择“管理 NuGet 包”

就像Microsoft 文档中描述的那样。