【发布时间】:2019-05-20 14:29:32
【问题描述】:
我有一个简单的项目,它使用“dotnet build”和来自 Visual Studio 2019 开发人员提示符的 msbuild 构建,但不是来自 Visual Studio 2017 提示符或 IDE。我想了解 msbuild 15 如何找到已安装的 SDK 以及为什么它们不是最新的,而 VS 2019 中的 msbuild 16 工作正常。
.NET Core SDK 似乎未在 msbuild 15 中注册,但我不知道该注册是如何发生的。我试过重新安装 SDK,安装不同版本的 SDK,但到目前为止没有运气。
不幸的是,仅仅切换到 2019 年很困难,因为我真正想要的是使用假设为 2017 年的构建脚本编译一个大型代码库 - 这是一个缩减的重现。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>
从 VS2017 开发者提示编译:
msbuild foo.csproj /nologo
Build started 5/20/2019 7:22:06 AM.
Project "C:\Users\edwin\Source\Repos\foo\foo.csproj" on node 1 (default targets).
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrame
workInference.targets(112,5): error : The current .NET SDK does not support targeting .NET Core 2.0. Either target .NET Cor
e 1.1 or lower, or use a version of the .NET SDK that supports .NET Core 2.0. [C:\Users\edwin\Source\Repos\foo\foo.csproj]
Done Building Project "C:\Users\edwin\Source\Repos\foo\foo.csproj" (default targets) -- FAILED.
使用“dotnet build”在同一窗口中编译成功,2019 开发人员提示(使用 msbuild 16)中的“msbuild foo.csproj”也是如此。
dotnet --info 显示
.NET Core SDK (reflecting any global.json):
Version: 2.2.204
Commit: 8757db13ec
Runtime Environment:
OS Name: Windows
OS Version: 10.0.17763
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.2.204\
Host (useful for support):
Version: 2.2.5
Commit: 0a3c9209c0
.NET Core SDKs installed:
1.0.3 [C:\Program Files\dotnet\sdk]
2.1.104 [C:\Program Files\dotnet\sdk]
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.402 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.604 [C:\Program Files\dotnet\sdk]
2.2.204 [C:\Program Files\dotnet\sdk]
【问题讨论】:
-
您的 SDK 版本为 2.2.204,因此值得尝试使用 netcoreapp2.2 而不是 netcoreapp2.0。
-
谢谢!但是,当您下载适用于 VS 2017 的 .NET Core 2.0 SDK(来自 dotnet.microsoft.com/download/visual-studio-sdks )时,它会将您指向我已安装的 2.1.202 SDK;并且在使用“dotnet build”时以 netcoreapp2.0 为目标构建包。所以我不认为是这样。