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

8

我有一个代码库,其中使用了一个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是否支持混合模式程序集吗?欢迎提出其他想法。

3
不,CoreCLR不支持模块初始化器。这也没有任何意义,因为C++/CLI编译器仅适用于Windows,而且它不是开源的。 - Hans Passant
2个回答

5

C++/CLI中的非托管代码始终是特定于平台的,并且编译为特定的操作系统(Windows)和特定的CPU架构(x86 / x64)。C++/CLI中的非托管代码最终类似于使用C++编译器编译的实际C++代码。由于混合模式程序集可以包含本地代码,因此它们绑定到特定的操作系统和CPU架构。

编辑(2019年3月):此答案早于.Net Core,可能与Core环境不符。


在实际应用中,我相信这基本上是正确的(特别是当您的本地代码使用C(++)运行时或标准库时),但跨编译呢?MSVC ++不能做到这一点吗? - stakx - no longer contributing
但这并不意味着混合汇编不能在特定平台上初始化CoreCLR,对吧? - Weipeng
@weipengL,请看我的回答。 - nietras
1
@WeipengL 我的回答可能在这种情况下已经过时了,我编辑了它以澄清。 - Matěj Zábský

3
混合模式程序集是否能与.NET Core一起工作并不由平台特定代码决定。混合模式程序集的支持正在以下网站上进行开发:https://github.com/dotnet/coreclr/issues/18013。据我所知,这将需要重新编译C++/CLI项目以针对.NET Core。当然,带有Windows x86代码的混合模式程序集只能在Windows中作为x86工作,以此类推。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接