是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL

Is it possible to create a C# DLL of C++/CLI code using .Net Core 3.1 on Linux

本文关键字:C++ 创建 CLI C#DLL 代码 Core Linux Net 是否      更新时间:2023-10-16

这可能是一个非常具体的问题。但这对其他人来说可能也很有趣。

这种设置可能很常见:我们使用C++和Linux开发了一个嵌入式设备,并为此建立了一个构建系统。使用我们的设备,我们使用基于DLL的插件机制发布了一个C#桌面应用程序。该插件包含嵌入式设备和应用程序上使用的共享逻辑。为了让进程变得简单,最好在我们的Linux构建系统上创建DLL(因此我想使用.Net Core,而不是"正常"的.Net)

据我的反复试验表明,即使使用.Net Core 3.1,这也是不可能的。你能证实吗?该软件仅适用于windows(尽管它是在Linux上编译的),因此理论上它是可能的,因为.Net Core在3.1版中支持CLI/C++(https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/)。

我尝试过的:

  1. 我使用控制台应用程序dotnet在Linux上将纯C#代码编译为在windows上成功运行的exe
  2. 我使用以下指南中的示例代码在Windows上成功创建了一个简单的C++/CLI测试应用程序:https://devblogs.microsoft.com/cppblog/an-update-on-cpp-cli-and-dotnet-core/
  3. 最后,我采用了(可能是太天真了)方法,用步骤1中的.csproj替换了测试应用程序的.vcxproj(.csproi似乎可以自动检测文件)。我收到以下错误消息:

quote CSC:error CS5001:程序不包含适用于入口点的静态"Main"方法[/home/varrant/Projects/cpp_dotnet_on_linux/cs_on-linux.csproj]

我有什么可以改进的地方吗?还是这项任务根本不可能完成(手动将cpp文件添加到.csproj,…)?恐怕这在技术上是不可能的,因为我想.Net Core在Linux上缺少一个C++编译器,但我不确定。

Linux不支持C++/CLI。

一些来源:

https://devblogs.microsoft.com/cppblog/the-future-of-cpp-cli-and-dotnet-core-3/:

我们目前没有针对macOS或Linux的C++/CLI计划。此外,.NET Core不支持使用"/clr:pure"answers"/clr:safe"进行编译。

https://github.com/dotnet/coreclr/issues/659#issuecomment-539742740

Linux上的C++/CLI将不受支持,这将非常具有挑战性。它需要Microsoft VC++支持Linux,或者需要Clang或GCC支持C++/CLI。这两个项目都是回报不确定的大项目。目前还不清楚Clang或GCC是否会允许我们进行上游变革。永远维护快速运行的编译器项目的最新分支是非常昂贵的。我们没有承担这两个项目的计划。