无法通过 dotnet build 命令编译模板 C++/CLI (.NET Core 3.1) 项目
Cannot compile template C++/CLI (.NET Core 3.1) project via dotnet build command
- 安装最新的稳定版 Visual Studio 2019 16.4.2(检查 .NET Core Development 和 Desktop使用 C++ 工作负载进行开发,还要确保选中 C++/CLI 支持 组件)。
- 使用 CLR 创建新项目 Class 库 (.NET Core)
模板(或 CLR 空项目(.NET Core),如果你喜欢的话)。
- 通过 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.
同意 Martin,dotnet build
目前不支持构建 C++ 项目,因为 dotnet cli 不知道在哪里可以找到必要的 C++ xx.targets
和 xx.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)
- 安装最新的稳定版 Visual Studio 2019 16.4.2(检查 .NET Core Development 和 Desktop使用 C++ 工作负载进行开发,还要确保选中 C++/CLI 支持 组件)。
- 使用 CLR 创建新项目 Class 库 (.NET Core) 模板(或 CLR 空项目(.NET Core),如果你喜欢的话)。
- 通过 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.
同意 Martin,dotnet build
目前不支持构建 C++ 项目,因为 dotnet cli 不知道在哪里可以找到必要的 C++ xx.targets
和 xx.props
。
您的项目是C++/CLR项目(xx.vcxproj),目标框架是.net core
,与实际的.net core
项目(xx.csproj或xx.vbproj), xx.vcxproj
导入许多 .net core sdk
.
例如:去 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)