当我运行msbuild /bl /v:q /nologo /restore
时,它会从c:\Program Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\Sdk
加载Sdk.props
但是,当我在同一台机器上运行dotnet /bl /v:q /nologo
时,我看到Sdk.props是从c:\Program Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\Sdk
加载的
为什么有区别?如何使dotnet
与msbuild
加载相同的SDK?
项目文件是这个:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DbUpgradeApi" Version="1.0.363.6" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
</ItemGroup>
</Project>
编辑1
C:\xyz\LogDbUpgradeProgress [master ≡]> dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.1.502
Commit: c74ce8f29f
Runtime Environment:
OS Name: Windows
OS Version: 10.0.16299
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.1.502\
Host (useful for support):
Version: 2.1.6
Commit: 3f4f8eebd8
.NET Core SDKs installed:
1.0.0-preview2-003131 [C:\Program Files\dotnet\sdk]
2.1.4 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.500 [C:\Program Files\dotnet\sdk]
2.1.502 [C:\Program Files\dotnet\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
C:\xyz\LogDbUpgradeProgress [master ≡]> Test-Path global.json
False
C:\xyz\LogDbUpgradeProgress [master ≡]> Test-Path ..\global.json
False
C:\xyz\LogDbUpgradeProgress [master ≡]> Test-Path ..\..\global.json
False
C:\xyz\LogDbUpgradeProgress [master ≡]>
编辑2
为了证明构建工作的不同之处:
C:\xyz\LogDbUpgradeProgress [master ≡]> msbuild /v:diag > msbuild.diag.log
C:\xyz\LogDbUpgradeProgress [master ≡ +1 ~0 -0 !]> dotnet build /v:diag > dotnet.diag.log
C:\xyz\LogDbUpgradeProgress [master ≡ +2 ~0 -0 !]> cat .\msbuild.diag.log | sls "\bSdk\.targets" | select -First 1
Property reassignment: $(MSBuildAllProjects)=";C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props;C:\xyz\LogDbUpgradeProgress\Directory.Build.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.SupportedTargetFrameworks.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CSharp.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.targets" (previous value: ";C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props;C:\xyz\LogDbUpgradeProgress\Directory.Build.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.SupportedTargetFrameworks.props;C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CSharp.props") at C:\Program
Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.targets (15,5)
C:\xyz\LogDbUpgradeProgress [master ≡ +2 ~0 -0 !]> cat .\dotnet.diag.log | sls "\bSdk\.targets" | select -First 1
Property reassignment: $(MSBuildAllProjects)=";c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props;C:\xyz\LogDbUpgradeProgress\Directory.Build.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.SupportedTargetFrameworks.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.CSharp.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.targets" (previous value: ";c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props;C:\xyz\LogDbUpgradeProgress\Directory.Build.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.SupportedTargetFrameworks.props;c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.CSharp.props") at c:\Program
Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.targets (15,5)
C:\xyz\LogDbUpgradeProgress [master ≡ +2 ~0 -0 !]> cat .\dotnet.diag.log | sls -SimpleMatch "2.1.502\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.target
s" | select -First 1
C:\xyz\LogDbUpgradeProgress [master ≡ +2 ~0 -0 !]>
您可以从2.1.502中看到msbuild参考Sdk.targets的诊断日志,而dotnet的diag构建从不引用该版本,而是用于2.1.4
编辑3
识别差异的另一种方法是传递SourceRevisionId属性。较新的Sdk.Targets会使用它,较旧的Sdk.Targets会使用它。请观察(使用另一个项目):
C:\xyz\DbUpgradeApi [master ≡]> git clean -qdfx
C:\xyz\DbUpgradeApi [master ≡]> msbuild /restore /v:q /p:SourceRevisionId=123
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
C:\xyz\DbUpgradeApi [master ≡]> (dir .\src\bin\Debug\net452\DbUpgradeApi.dll).VersionInfo.ProductVersion
1.0.0+123
C:\xyz\DbUpgradeApi [master ≡]> git clean -qdfx
C:\xyz\DbUpgradeApi [master ≡]> dotnet build /v:q /p:SourceRevisionId=123
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.15
C:\xyz\DbUpgradeApi [master ≡]> (dir .\src\bin\Debug\net452\DbUpgradeApi.dll).VersionInfo.ProductVersion
1.0.0
C:\xyz\DbUpgradeApi [master ≡]>
可以看到dotnet
调用了不同版本的msbuild-15.9.20+g88f5fadfbe
与15.9.21+g9802d43bc3
。但是我不认为这是个问题,因为这是C:\Program Files\dotnet\sdk\2.1.502
中的msbuild.dll,它似乎是正确的位置。
答案 0 :(得分:0)
我发现在我的计算机上将MSBuildSDKsPath
环境变量设置为 c:\ Program Files \ dotnet \ sdk \ 2.1.4 \ Sdks
为何如此,这是我的一个谜。如果我将其删除,则会使用正确的SDK,即2.1.502。
作为一种解决方法,我向构建脚本中添加了$ env:MSBuildSDKsPath = $ null。