无法通过 dotnet build 命令编译模板 C++/CLI (.NET Core 3.1) 项目

Cannot compile template C++/CLI (.NET Core 3.1) project via dotnet build command

  1. 安装最新的稳定版 Visual Studio 2019 16.4.2(检查 .NET Core DevelopmentDesktop使用 C++ 工作负载进行开发,还要确保选中 C++/CLI 支持 组件)。
  2. 使用 CLR 创建新项目 Class 库 (.NET Core) 模板(或 CLR 空项目(.NET Core),如果你喜欢的话)。
  3. 通过 dotnet build 命令编译将失败(dotnet build CLRNetCoreTest.sln /p:配置=调试/p:平台=x86):

通过 msbuild 命令编译成功 ("%ProgramFiles(x86)%\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\MSBuild.exe" CLRNetCoreTest.sln /p:Configuration=Debug /p:Platform=x86).

这很奇怪 - 我认为 dotnet 是构建在 msbuild..[=12= 之上的包装器]

示例工程为attached(运行Build.bat编译)。

C++ 项目只能使用 Visual Studio 附带的 msbuild.exe 构建,因为它依赖于 Visual Studio 的 C++ 工具。

跨平台 dotnet 命令及其跨平台 MSBuild 分发版没有这些工具,因此无法编译 C++ 项目。 dotnet 命令不使用 visual studio 版本的 MSBuild。

要添加更多详细信息:

And that is very strange - I supposed dotnet to be a wrapper built on the top of msbuild.

同意 Martindotnet build 目前不支持构建 C++ 项目,因为 dotnet cli 不知道在哪里可以找到必要的 C++ xx.targetsxx.props

您的项目是C++/CLR项目(xx.vcxproj),目标框架是.net core,与实际的.net core项目(xx.csproj或xx.vbproj), xx.vcxproj 导入许多 .net core sdk.

中不包含的特定 C++ 文件

例如:去 C:\Program Files\dotnet\sdk\xxx 你可以在那里找到很多 msbuild 目标和道具文件,但是你找不到 Microsoft.Cpp.Default.props 文件。此文件来自 C++ 工作负载而不是 .net 核心 SDK。

因此,尽管 dotnet build 使用 msbuild 构建项目,但它实际上并没有使用来自 VS 文件夹 (C:\Program Files (x86)\Microsoft Visual Studio\xxx\xxx\MSBuildxxx\Bin\MSBuild.exe) 的相同 msbuild.exe。并且只有来自 VS IDE 或 MSBuild 构建工具包的 msbuild.exe 才能用于构建此项目。

另外:

如果您的最终目标是在远程服务器上构建项目,也许您正在寻找 Visual Studio 2019` 包的构建工具。(如果您已获得相应的许可,则免费,更多详细信息请参阅 this) It doesn't require VS IDE to be installed. (Download link here)