随着 .NET Core 3.1 的第二个预览版本发布,微软正式将 C++/CLI 移植到 .NET Core 上,今后可使用 C++ 编写 .NET Core 的程序了。json
因为目前仅有 MSVC 支持编译此类混合代码,而且因为涉及到非托管代码,所以 C++/CLI 目前不能跨平台,只支持 Windows。架构
若是须要跨平台,除了微软的工做以外,还另外须要 gcc/clang 大量跟进,工做量较大且进度不可控,目前微软暂无使 C++/CLI 跨平台的计划。工具
Visual Studio 2019 16.4 preview 3性能
.NET Core SDK 3.1 preview 2spa
运行 Visual Studio Installer,安装“使用 C++ 的桌面开发” 和 “.NET Core 跨平台开发” 工做负载,而后再在单个组件中勾选“对 v142 生成工具 (14.24) 的 C++/CLI 支持”。翻译
等待安装完毕,启动 Visual Studio,新建项目的时候便可看见两个新增的项目模板:指针
咱们选择 CLR Empty Project (.NET Core) 建立咱们的第一个 C++/CLI 项目,而后在右侧解决方案管理器的源文件(Source Files) 处右键添加 C++ 源文件 main.cpp。对象
而后咱们便可使用 C++ 编写 .NET Core 程序。blog
添加如下代码:接口
运行程序,输入 hello world 后回车:
能够看到咱们成功的运行了程序而且完成了 C++ 代码与 .NET Core 的无缝交互。
注意点
对于引用 C++ 代码,在此不进行赘述,使用方式和正常的 C++ 项目没有任何区别。所以在这里只说如何引用 .NET 程序集。
咱们能够直接添加对 .NET Standard/.NET Core library 的引用。若是出现没法使用 nuget 包管理器安装的状况,能够手动下载对应的 .NET 程序集 dll 而后添加到项目引用当中。这里以 Newtonsoft.Json 为例。
首先添加引用
而后咱们就能使用啦!
而后咱们编写一个 .NET 类型,为了展现的更完整,咱们采用完整的属性书写方法,而不是自动属性。
而后咱们构建一段 json 字符串,试试用 Newtonsoft.Json 解序列化。
运行,输出:
虽然 C++/CLI 暂时不能跨平台,可是对 .NET Core 的支持极大的丰富了 .NET Core 的适用范围,能够用于编写高性能的 C++ 程序的同时,享受来自 C++ 和 .NET Core/.NET Standard 的所有生态。
对于编写 Windows 程序,C++/CLI 绝对值得一试。而关于跨平台的问题,说不定后面的版本微软就支持了呢?要知道,两年前 C++/CLI 在 .NET Core 上运行微软给的回复也是“没有计划”,然而现在却顺利的完整支持了。
对于 C++/CLI 的其余地方,能够参考微软官方文档,内容十分丰富(因为中文文档存在部分机器翻译,建议有能力的朋友直接阅读英文文档避免机器翻译带来的错误):
https://docs.microsoft.com/zh-cn/cpp/dotnet/dotnet-programming-with-cpp-cli-visual-cpp?view=vs-2019