[英]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:
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>
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>
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 项目不起作用(也不会计划在未来得到支持)。
启用此功能后,您现在还可以通过
就像它在Microsoft 文档中描述的一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.