簡體   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