我有一个第三方提供商,他们为我提供了一组 DLL 文件作为其 .NET API 的一部分。它们包含一个 Python 和 C# 示例。我通过 Python(使用 pythonnet)使用他们的 API 已经有一段时间了。
相比之下,C# 工作流是
dotnet build
和 dotnet run
。这似乎生成一个 .dll 并执行它。
现在,出于性能原因,我想在 Native C++ 中使用他们的 API。我正在尝试在 Visual Studio 2022 中构建一个 C++/CLI 项目。我按照这些步骤
我能够通过适当的定义来引用它们的对象,并且 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++/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