混合模式程序集(C++/CLI项目)在.NET Core上工作吗

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

本文关键字:NET Core 工作 项目 程序集 模式 C++ CLI 混合      更新时间:2023-10-16

我有一个使用C++/CLI项目的代码库,该项目通过精简包装类向CLR公开C++类。例如

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上下文中的非托管代码始终是特定于平台的,并且是为特定的操作系统(Windows)和特定的CPU体系结构(x86/x64)编译的。C++/CLI中的非托管代码最终与使用C++编译器编译的实际C++代码非常相似。由于混合模式程序集可以包含本机代码,因此它们绑定到特定的操作系统和CPU体系结构。

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

混合模式程序集是否能与.NET Core一起使用并不是由特定于平台的代码决定的。对混合模式程序集的支持正在进行中:

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

据我所知,这将需要重新编译C++/CLI项目以针对.NET Core。

当然,具有x86代码的Windows混合模式程序集只能在Windows等中作为x86工作。