这可能是一个重复的问题,但由于我没有找到正确的解决方案,所以我将其发布在这里。
我想在vs2019中的托管cpp中使用c# nuget包(包含多个dll)。我听到关于直接在 c++/clr 中使用 nuget 包或创建一个 c# 项目并在该项目中包含 nuget 包然后在此之上编写一个包装器的混合答案。选项一听起来不错,但我不知道该怎么做,网上没有足够的信息。当我们有超过 20 个 dll 时,选项二也是可行的,但任务很繁琐。
你们能建议在 vs2019 的托管 cpp 中使用 c# nuget 包的最佳方法是什么吗?
如果您正在编写面向 .Net Core 和 .Net 5 或更高版本的 C++/CLI 项目,则自 Visual Studio 2022 版本 17.3 起原生支持 NuGet 包引用。
如果您正在编写面向 .Net Framework 4.x 的 C++/CLI 项目,则涉及的内容会更多一些,因为 Microsoft 已决定他们不想在面向 .Net Framework 的 C++/CLI 项目中支持 NuGet 包引用。
packages.config
文件(
Microsoft.Extensions.Logging
的示例):
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Extensions.Logging" version="8.0.0" targetFramework="net48" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.0" targetFramework="net48" />
</packages>
packages.config
文件添加到您的项目并执行 NuGet 恢复。
.vcxproj
文件中:
<ItemGroup>
<Reference Include="Microsoft.Extensions.Logging">
<HintPath>$(SolutionDir)packages\Microsoft.Extensions.Logging.8.0.0\lib\net462\Microsoft.Extensions.Logging.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions">
<HintPath>$(SolutionDir)packages\Microsoft.Extensions.Logging.Abstractions.8.0.0\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
</ItemGroup>
然后您应该能够使用 NuGet 包中的 C# 库。您提到的另一种包装方法在我看来更糟糕。