C++ cli C++/.Net Core中的CLI支持

C++ cli C++/.Net Core中的CLI支持,c++-cli,unmanaged,.net-core,managed-c++,coreclr,C++ Cli,Unmanaged,.net Core,Managed C++,Coreclr,我们的项目结构是 native.dll:-这包含用c\c++编写的纯本机代码。 此native.dll使用*def文件公开某些函数 包装器库(使用.Net framework v4.0编译的Wrapper.dll):- 为了使用native.dll的功能,一个包装库(Wrapper.dll) 使用:clr\oldsyntax在C++\CLI中编写。这个包装有所有的功能 互操作性和编组的代码 应用程序(Console App v4.0)直接使用wrapper.dll来使用提供的功能 通过nativ

我们的项目结构是

native.dll
:-这包含用c\c++编写的纯本机代码。 此native.dll使用*def文件公开某些函数

包装器库(使用.Net framework v4.0编译的Wrapper.dll)
:- 为了使用
native.dll的功能
,一个
包装库(Wrapper.dll)
使用
:clr\oldsyntax
C++\CLI
中编写。这个包装有所有的功能
互操作性
编组的代码

应用程序(Console App v4.0)
直接使用
wrapper.dll
来使用提供的功能 通过
native.dll

现在,该项目需要在.Net内核中运行。这意味着我们将有一个
.Net核心应用程序
将引用wrapper.dll,而wrapper.dll反过来将引用
native.dll

我知道这不会直接起作用。但问题是.Net核心(CoreCLR)是否支持 C++\CLI(clr\oldsyntax)运行时环境

如果没有,此应用程序工作的可能解决方案是什么?

.Net Core(CoreCLR)是否支持C++\CLI(clr\oldsyntax)运行时环境

据我所知有

如果没有,该应用程序工作的可能解决方案是什么


您可以(应该)提供一个C API。(如果你想坚持C++)(即,向O.NET公开一个OO接口),那么另一个潜在的解决方案(虽然显然是相当困难的任务)可能是从MNO项目中查看。它能够通过自动生成的C++包装器公开本机C++代码。它支持Windows、Linux以及OSX。但是,我不知道生成的代码是否可以编译为.NET标准目标(我没有尝试)。我只能假设这是因为生成的代码没有使用任何花哨的API(它基本上是互操作和编组代码);顺便说一句,还可以自定义生成过程(尽管,再次强调,这可能不是一项容易的任务)。

.net核心团队只会(现在?)承诺只支持Windows的C++/CLI

其目的是为.NETCore3.0提供它。虽然我还没有在发行说明中明确提到它,但C++/CLI支持是交付WPF(仅限windows)的先决条件,而现在.net Core 3.0支持WPF

本期(#18013)将跟踪支持加载和运行的进度 CoreCLR上的混合模式程序集。主要目标是提供支持 用于.NET Core上的WPF和其他现有C++/CLI代码。一些工作 将取决于MSVC编译器的更新

上面提到的github问题(#659)是关于跨平台C++/CLI的

顺便说一句,我在VS2017/.net-4.7中收到关于“clr\oldsyntax”的编译器警告。因此,此编译器标志已被弃用


更新:

最终正式宣布。。。 (下一个愿望…支持linux@.Net 5^)

C++/CLI将对.NET Core 3.1及更高版本的提供完整的IDE支持。此支持将包括Windows上的项目、IntelliSense和混合模式调试(IJW)。我们目前没有针对macOS或Linux的C++/CLI计划。此外,.NET Core不支持使用“/clr:pure”和“/clr:safe”进行编译

C++/CLI的第一次公开预览即将推出Visual Studio 2019 16.4预览版1包含一个更新的编译器,其中包含“/clr:netcore”


更新:从源url的回复: “我们仍在进行IDE和MSBuild的集成,因此我还不能完全共享示例项目。一旦可用,可能会使用16.4预览2或3

(16.4预览1无法使用.NetCore项目创建C++/CLI。)


191015 16.4预览2发布。 我用c++/CLI dll尝试了asp.net core 3.1,效果很好。
(需要将platform设置为x64,包括asp.net core和c++/CLI dll)

@HansPassant:-您说过“几乎没有实际的平台目标可以执行本机代码”,您能详细说明一下吗?是否真的意味着目前无法在.NETCore下运行这些类型的项目?@HansPassant:thanx。是的,您是对的,我们选择了.Net内核,因为我们希望在linux中运行我们的dotnet代码(wrapper.dll,它反过来调用native.dll)。但正如您所说,到目前为止,CoreCLR确实支持C++/CLI运行时,因此所有这些似乎都不可行。实际上,我已经浏览了很多关于.Net core的msdn博客,但没有一个向我暗示.Net core中的C++\CLI集成。那么,在不久的将来,.Net core团队是否真的会支持这一点呢?在许多情况下,对.Net core的C++/CLI支持将非常有用。例如,如果您正在使用跨平台C++代码,并希望将其与.NET业务层进行接口,以便更快地开发。“我很惊讶微软没有提供这一点——这似乎很理想。”汉帕桑说,这真的有点简化了。如果这个DLL恰好是一个跨平台的库,您也可以为Linux和macOS编译它呢?这样的用例显然确实存在,如果有C++/CLI来支持它们就好了。我也有同样的需求,而且很惊讶它还不受支持。或者试试SWIG()。SWIG是连接C++和C++编写的程序和各种高级编程语言(包括C语言)的工具。。但是没有一个替代方案能比得上C++/CLI所提供的优雅。..net core 3.1将在windows上支持C++/CLI。@markf78你知道这是否意味着我们可以在.net core应用程序中运行现有的C++/CLI程序集,而无需重新编译它们吗?@Cocowalla我只知道这里发布了什么:@markf78 Microsoft的一个人刚刚说了“不”::`(+VS2019 16