微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

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

但这并没有发生。

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

解决方法

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

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

  1. 转到包管理器控制台:Tools -> NuGet Package Manager -> Package Manager Console。然后安装 nuget 包(instruction from Microsoft)。例如。 EF nuget 安装可能类似于:

Install-Package 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... -> 找到解决方案的文件夹 -> 转到 packages 文件夹 -> 转到 nuget 的文件夹 -> 找到 dll(s)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。