在尝试使用Cake v0.19.1在只知道Visual Studio 2017的机器上构建解决方案时,我似乎NuGetRestore无法接受设置MSBuildVersion = NuGetMSBuildVersion.MSBuild15.
获取特定的MSBuild版本是否有一些神奇的步骤NuGetRestore,我错过了?
...
========================================
RestoreNuGet
========================================
Executing task: RestoreNuGet
Failed to load msbuild Toolset
Could not load file or assembly 'Microsoft.Build, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
An error occurred when executing task 'RestoreNuGet'.
Error: NuGet: Process returned an error (exit code 1).
Run Code Online (Sandbox Code Playgroud)
var target = Argument("target", "Default");
var solution = "./some-random.sln";
Task("Default")
.Does(() => {
NuGetRestore(
solution,
new NuGetRestoreSettings {
MSBuildVersion = NuGetMSBuildVersion.MSBuild15,
}
);
});
RunTarget(target);
Run Code Online (Sandbox Code Playgroud)
根据@ devlead的回答,我将build.ps1文件指向NuGet的v4.0.0并得到了这个输出.
Cannot find the specified version of msbuild: '15'
An error occurred when executing task 'RestoreNuGet'.
Error: NuGet: Process returned an error (exit code 1).
Run Code Online (Sandbox Code Playgroud)
在我的完整build.cake中,我vswhere稍后使用MSBuildSettings它可以转储它找到的MSBuild路径(我确认exe存在于Explorer中).
C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/MSBuild/15.0/Bin/amd64/MSBuild.exe
Run Code Online (Sandbox Code Playgroud)
确保您使用的是最新版本的 NuGet.exe,目前最新版本是 v4.0.0 ,但您还可以在https://dist.nuget.org上查看可用列表
如果您使用默认的build.ps1,您可以修改它以始终下载特定版本的 NuGet.exe
您可以通过删除Test.Path部分来执行此操作 - 这样它就不会在工具文件夹之外的其他位置查找 nuget.exe 。然后将下载 uri 更改为不使用最新稳定版本(当前为 v3.5.0),而是通过在build.ps1中更改特定版本
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
Run Code Online (Sandbox Code Playgroud)
到
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/v4.0.0/nuget.exe"
Run Code Online (Sandbox Code Playgroud)
将确保您始终下载exe 的v4.0.0 。
还可以使用一点 PowerShell 来验证工具中的正确版本,例如
if ((Get-ChildItem $NUGET_EXE `
| % VersionInfo `
| % ProductVersion `
| ? { $_ -eq '4.0.0' }|Measure-Object).Count -eq 1)
{
'Correct version'
} else {
'Incorrect version'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |