混合模式程序集(C++/CLI 项目)能否在 .NET Core 上运行?

Will mixed mode assemblies (C++/CLI projects) work on .NET Core?

我有一个使用 C++/CLI 项目的代码库,该项目通过瘦包装器 类 将 C++ 类 公开给 CLR。例如...

C++ 项目中的 C++ 代码

class Foo {
    public Foo(bool wat) { /* do the things */ }
};

混合模式程序集中的 C++/CLI 代码(C++/CLI 项目)

public ref class ManagedFoo {
    Foo * foo;
public:
    ManagedFoo (bool wat) { foo = new Foo(wat); }
    !ManagedFoo () { delete foo; }
    ~ManagedFoo () { this->!ManagedFoo (); }
};

据我所知,混合模式程序集在 Windows .NET 上几乎只 运行。我希望我不需要重构组件并使用 P/Invoke,这将为我提供跨平台支持。

有谁知道 .NET Core 是否支持混合模式程序集?欢迎提出其他想法。

C++/CLI 上下文中的非托管代码始终是特定于平台的,并且针对特定的 OS (Windows) 和特定的 CPU 体系结构 (x86/x64) 进行编译. C++/CLI 中的非托管代码最终很像使用 C++ 编译器编译的实际 C++ 代码。由于混合模式程序集可以包含本机代码,因此它们绑定到特定的 OS 和 CPU 体系结构。

编辑(2019 年 3 月):此答案早于 .Net Core,并且在 Core 上下文中可能已过时。

混合模式程序集是否与 .NET Core 一起工作不是由特定于平台的代码决定的。正在研究对混合模式程序集的支持:

https://github.com/dotnet/coreclr/issues/18013

据我了解,这将需要重新编译 C++/CLI 项目以面向 .NET Core。

当然,针对 Windows 的 x86 代码的混合模式程序集只能在 Windows 中作为 x86 运行,依此类推。