【发布时间】:2018-08-21 23:57:27
【问题描述】:
我们有一个用 C++ 编写的库。为了使其与我们更现代的 .NET 项目更兼容,我们将这个 C++ 库包装在另一个 .NET 项目中。从完整的 .NET Framework 项目(4.5、4.6 等)引用它时,它可以正常工作。
我正在使用 .NET Core 2.1 创建一个新应用程序,并尝试引用这个“包装在 .NET C++ 库中”。在我第一次尝试时,它说无法加载程序集失败。我通过安装 .NET Core SDK x86 并强制我的应用程序使用 x86 而不是 Any CPU 解决了这个问题。
我没有收到任何构建错误,但是当我尝试在此库中实例化一个类时,我收到以下异常:
<CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load.
---> System.EntryPointNotFoundException: A library name must be specified in a DllImport attribute applied to non-IJW methods.
at _getFiberPtrId()
at <CrtImplementationDetails>.LanguageSupport._Initialize(LanguageSupport* )
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
--- End of inner exception stack trace ---
at <CrtImplementationDetails>.ThrowModuleLoadException(String errorMessage, Exception innerException)
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
at .cctor()
.NET Core 2.1 是否完全支持这种情况?
【问题讨论】:
-
包装项目的 .NET 版本是什么?
-
嗨@ahelwer,它是.NET 4.0
-
顺便说一句,我们也尝试使用 .NET 4.6,但它返回了相同的错误。
-
要明确 - 这个包装项目是使用 PInvoke 调用本机库的 .NET 项目,还是 C++/CLI 项目(又名“托管 C++”)?
-
正确,正如其他人回答的那样,.NET Core 不支持 C++/CLI,尽管 PInvoke 工作正常,正如您发现的那样。
标签: c# c++ .net asp.net-core .net-core