集成第三方 dotnet API 时与 C++/CLI 项目的兼容性问题

问题描述 投票:0回答:1

我有一个第三方提供商,他们为我提供了一组 DLL 文件作为其 .NET API 的一部分。它们包含一个 Python 和 C# 示例。我通过 Python(使用 pythonnet)使用他们的 API 已经有一段时间了。

相比之下,C# 工作流是

dotnet build
dotnet run
。这似乎生成一个 .dll 并执行它。

现在,出于性能原因,我想在 Native C++ 中使用他们的 API。我正在尝试在 Visual Studio 2022 中构建一个 C++/CLI 项目。我按照这些步骤

  1. 创建一个以 .NET Core 5.0 为目标的 C++/CLI 项目(因为 C# 示例就是这样做的)
  2. 添加他们的 .dll 文件作为参考

我能够通过适当的定义来引用它们的对象,并且 Intellisense 类型检查器是满意的。但是当我尝试执行代码时,它给了我一个错误

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module. Could not load file or assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.

我不认为确切的错误是相关的,我只是对 .net 的工作原理以及它是否可以做我想做的事情一无所知。

如何使用互操作实现等效的 C++ 项目设置?

c# c++ .net .net-core c++-cli
1个回答
0
投票

尝试将 C++/CLI 项目创建为 .NET Framework v4.8 项目。

我假设有一个 C# 项目将您的 C++/CLI 项目/程序集作为依赖项使用;如果是这样,那么 C# 项目是否是 .NET 5 并不重要,它仍然应该能够使用 C++/CLI 项目。

在我当前的项目中,我使用 cmake 目标设置如下

set_target_properties(${TARGET} PROPERTIES
    OUTPUT_NAME ${TARGET}
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS OFF
    COMMON_LANGUAGE_RUNTIME ""
    VS_GLOBAL_CLRSupport "true"
    VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.8"
)

如果无法使用 .NET Framework v4.8,那么此答案将有所帮助:https://stackoverflow.com/a/73332218/783051

© www.soinside.com 2019 - 2024. All rights reserved.