是否可以在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++和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/)。
我尝试过的:
- 我使用控制台应用程序
dotnet
在Linux上将纯C#代码编译为在windows上成功运行的exe - 我使用以下指南中的示例代码在Windows上成功创建了一个简单的C++/CLI测试应用程序:https://devblogs.microsoft.com/cppblog/an-update-on-cpp-cli-and-dotnet-core/
- 最后,我采用了(可能是太天真了)方法,用步骤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是否会允许我们进行上游变革。永远维护快速运行的编译器项目的最新分支是非常昂贵的。我们没有承担这两个项目的计划。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息