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

bai*_*rog 10 msbuild c++-cli .net-core visual-studio-2019

  1. 安装最新稳定的Visual Studio 2019 16.4.2(检查.NET Core 开发使用 C++工作负载的桌面开发,并确保选中C++/CLI 支持组件)。
  2. 使用 CLR 类库 (.NET Core) 模板创建新项目(如果您愿意,也可以使用 CLR 空项目 (.NET Core))。
  3. 通过dotnet build命令进行编译将失败(dotnet build CLRNetCoreTest.sln /p:Configuration=Debug /p:Platform=x86): 在此输入图像描述

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

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

附上示例项目(运行Build.bat进行编译)。

Lan*_*SFT 5

要添加更多详细信息:

这很奇怪 - 我认为 dotnet 是构建在 msbuild 之上的包装器。

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

您的项目是一个 C++/CLR 项目(xx.vcxproj),其目标框架是,它与实际项目(xx.csproj 或 xx.vbproj).net core有很大差异,导入了许多 C++ 特定文件,这些文件未包含在..net corexx.vcxproj.net core sdk

例如:在 Go 中C:\Program Files\dotnet\sdk\xxx你可以找到很多 msbuild 目标和 props 文件,但找不到Microsoft.Cpp.Default.props文件。该文件来自 C++ 工作负载而不是 .net core SDK。

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

此外:

如果您的最终目标是在远程服务器中构建项目,也许您正在寻找 Build Tools for Visual Studio 2019` 包。(如果您已获得相应的许可,则免费,更多详细信息请参阅)它不需要 VS IDE待安装。(此处下载链接)