【问题标题】:Cannot compile template C++/CLI (.NET Core 3.1) project via dotnet build command无法通过 dotnet build 命令编译模板 C++/CLI (.NET Core 3.1) 项目
【发布时间】:2023-03-04 09:34:01
【问题描述】:
  1. 安装最新的稳定版 Visual Studio 2019 16.4.2(检查 .NET Core DevelopmentDesktop development with C++ 工作负载,同时确保C++/CLI 支持 组件已选中)。
  2. 使用 CLR 类库 (.NET Core) 创建新项目 模板(或 CLR 空项目 (.NET Core),如果您愿意)。
  3. 通过 dotnet build 命令编译将失败(dotnet build CLRNetCoreTest.sln /p:Configuration=调试 /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 之上的包装器..

示例项目是 attached(运行 Build.bat 进行编译)。

【问题讨论】:

  • 其实是C++项目,dotnet build不能用于C++项目。

标签: .net-core msbuild c++-cli visual-studio-2019


【解决方案1】:

添加更多细节:

这很奇怪——我认为 dotnet 是一个基于 msbuild 的顶部。

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

你的项目是一个C++/CLR项目(xx.vcxproj),它的目标框架是.net core,它和实际的.net core项目(xx.csproj or xx.vbproj)有很大的不同,xx.vcxproj导入很多.net core sdk 中未包含的 C++ 特定文件。

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

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

另外:

如果您的最终目标是在远程服务器上构建项目,那么您可能正在寻找 Visual Studio 2019 的构建工具包。(如果您获得了相应的许可,则免费,更多详细信息请参阅this)不需要安装 VS IDE。 (下载链接here

【讨论】:

  • 感谢您澄清这一点。顺便说一句,我们已经在我们的服务器上使用Build Tools for Visual Studio 2019。但它不是免费,它requires 和Visual Studio 一样licensing
  • 嗯,如果你已经满足免费VS2019社区版的要求,由于构建工具是它的补充,你也可以使用免费的构建工具,无需安装完整的VS社区2019版...
  • 我们公司是企业,不符合免费VS2019社区版的要求。
  • Free if you've gotten corresponding lisense 可能更合适!只需使用您分享的有用信息更新答案,谢谢:)
【解决方案2】:

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

带有跨平台 MSBuild 发行版的跨平台 dotnet 命令没有这些工具,因此无法编译 C++ 项目。 dotnet 命令不使用 Visual Studio 版本的 MSBuild。

【讨论】:

  • 谢谢。您是第一个,但 Lance Li-MSFT 提供了更详细的答案。
  • 嗨,Martin,您有使用混合项目、csproj 和 vcxproj 的解决方案的经验吗?如果我在解决方案级别尝试 dotnet 构建,vcxproj 无法构建。虽然 csproj 项目可以构建......我正在将 .net4.8 转换为 .net5.0,这是我正在努力解决的问题之一。
猜你喜欢
  • 2016-08-02
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2020-01-27
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多