我想在 c++/cli 项目中使用托管 nuget 包。有没有办法做到这一点?
比如我的场景差不多是这样的:
我创建了一个 C# 项目(MainProject)并将 EntityFramework nuget 包添加到该项目中。
我又创建了一个 C# 项目(TestCSProject),并添加了 MainProject 作为对该项目的引用。然后自动在引用entityframework中也添加
我创建了一个 C++/CLI 项目(TestCLIProject),并添加了 MainProject 作为对该项目的引用,以便我想看看是否可以使用实体框架。
但那并没有发生。
所以我想知道如何在 c++/cli 项目中使用托管 nuget 包
C++/CLI项目可以使用nuget包packages.config(在VS2019中仍然没有对C++的PackageReference支持, PackageReference针对C++项目中的NuGet包)。正如评论中指出的,C++/CLI 应该仅用于与本机代码的互操作。无论如何,有时可能需要在这里使用 nuget 包。
在 Visual Studio 2019 中,以下内容对我引用 .Net Framework 的 C++ 项目有用:
Tools-> NuGet Package Manager-> Package Manager Console。然后安装 nuget 包(来自 Microsoft 的说明)。例如 EF nuget 安装可能如下所示:安装包 EntityFramework -版本 6.4.4 -项目名称 TestCLIProject
nuget 安装后,packages.config将在项目文件夹中创建一个文件并将其添加到项目中。例如,EF nuget 安装后,packages.config 可能如下所示:
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.4.4" targetFramework="native" /> </packages>
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)
Tools-> Options-> NuGet Package Manager-> Automatically check for missing packages during build in Visual Studio,则可以使用Update-Package命令在包管理器控制台中手动恢复 nuget。使用最新版本的 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 包管理器:
就像Microsoft 文档中描述的那样。
| 归档时间: |
|
| 查看次数: |
4428 次 |
| 最近记录: |