我正在尝试将构建任务从 TFS 提取到 cake 脚本,以便构建任务与代码一起进行版本控制。我已经成功地创建了一个脚本,用于对我的项目进行清理、NuGet 恢复、构建和运行单元测试。在本地一切正常。然而,在配置 TFS 以运行我的蛋糕脚本后,它一直失败并出现以下错误:
2019-07-24T11:30:58.0377820Z ##[error]Unable to find version '4.4.3' of package 'System.Data.SqlClient'.
2019-07-24T11:30:58.0385573Z ##[error]Unable to find version '11.0.1' of package 'Newtonsoft.Json'.
2019-07-24T11:30:58.0401542Z ##[error]An error occurred when executing task 'Restore-Nuget-Packages'.
2019-07-24T11:30:58.0449315Z ##[error]Error: One or more errors occurred.
2019-07-24T11:30:58.0450913Z ##[error] NuGet: Process returned an error (exit code 1).
2019-07-24T11:30:58.0739069Z ##[error]System.Exception: Unexpected exit code 1 returned from tool Cake.exe
我尝试更改 Cake 任务设置以使用不同版本的 Nuget 和 feed url。目前,它们看起来像这样:
Nuget Exe 位置: https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
工具提要网址: https://api.nuget.org/v3/index.json
我们确实有一个私有(private) nuget 主机,我已经尝试修改工具提要 url。但是,从日志来看,提要网址似乎没问题。
蛋糕输出:
Feeds used:
2019-07-24T11:30:55.7676783Z C:\Users\{usr}\AppData\Local\NuGet\Cache
2019-07-24T11:30:55.7677002Z C:\Users\{usr}\.nuget\packages\
2019-07-24T11:30:55.7677066Z http://{ournugeturl}
2019-07-24T11:30:55.7677233Z http://{ournugeturl2}
2019-07-24T11:30:55.7677301Z http://{ournugeturl3}
2019-07-24T11:30:55.7677572Z C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
安装了其他 nuget 包,例如,
2019-07-24T11:30:55.7882050Z Restoring NuGet package Autofac.4.8.1.
2019-07-24T11:30:55.9806596Z Adding package 'Autofac.4.8.1' to folder 'd:\w1\3263\s\packages'
我什至在 Nuget-Restore 任务中将详细级别设置为 Detailed,但是,我无法找到问题所在。
来自 cake.build 的片段。
Task("Restore-Nuget-Packages")
.IsDependentOn("Clean")
.Does(() =>
{
NuGetRestore(solution, new NuGetRestoreSettings {
Verbosity = NuGetVerbosity.Detailed,
});
});
我的 NuGet.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
<packageSources>
<add key="privaterepo1" value="http://privatenugetrepo/nuget/NTS" />
<add key="privaterepo2" value="http://privatenugetrepo/Default" />
<add key="nugetv3" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>
</configuration>
build.cake
#tool "nuget:?package=xunit.runner.console&version=2.4.1"
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
var solution = "./pathtosolution.sl";
////////////////////////////////////////////////
///// Clean the project packages
////////////////////////////////////////////////
Task("Clean")
.Does(() =>
{
CleanDirectory("./packages");
});
////////////////////////////////////////////////
///// Adds private Nuget feed links
////////////////////////////////////////////////
Task("Add-Private-NuGet-Feed")
.Does(() =>
{
string[] sources = {
"private-src1",
"private-src2",
"https://api.nuget.org/v3/index.json"
};
foreach(string feed in sources)
{
if (!NuGetHasSource(feed))
{
var accessToken = EnvironmentVariable("SYSTEM_ACCESSTOKEN")
?? throw new Exception("VSTS System Access Token is required to setup Private NuGet Feed");
Information($"Source {feed} is missing");
NuGetAddSource($"MyCompany-NuGet {feed}", feed, new NuGetSourcesSettings
{
UserName = "VSTS",
Password = accessToken,
}
);
} else
{
Information($"Source {feed} Exists");
}
}
});
////////////////////////////////////////////////
///// Restores all nuget packages.
////////////////////////////////////////////////
Task("Restore-Nuget-Packages")
.IsDependentOn("Add-Private-NuGet-Feed")
.Does(() =>
{
var solutions = GetFiles("./**/*.sln");
// Restore all NuGet packages.
foreach(var solution in solutions)
{
Information(solution);
Information("Restoring {0}", solution);
var nugetRestoreSettings = new NuGetRestoreSettings {
ConfigFile = new FilePath("./NuGet.Config"),
//MSBuildVersion = NuGetMSBuildVersion.MSBuild15
};
NuGetRestore(solution, nugetRestoreSettings);
}
});
////////////////////////////////////////////////
///// Runs DotNetCoreRestore
////////////////////////////////////////////////
Task("DotNetCoreRestore")
.Does(() =>
{
DotNetCoreRestore(
solution,
new DotNetCoreRestoreSettings()
{});
});
////////////////////////////////////////////////
///// Runs unit tests.
////////////////////////////////////////////////
Task("xUnit")
.IsDependentOn("Build")
.Does(() =>
{
var projects = GetFiles("./*.Tests/**/*.Tests.csproj");
foreach(var project in projects)
{
DotNetCoreTest(
project.FullPath,
new DotNetCoreTestSettings()
{
// Set configuration as passed by command line
Configuration = configuration
});
}
});
////////////////////////////////////////////////
///// Build
////////////////////////////////////////////////
Task("Build")
.IsDependentOn("Clean")
.IsDependentOn("Add-Private-Nuget-Feed")
.IsDependentOn("DotNetCoreRestore")
.IsDependentOn("Restore-Nuget-Packages")
.Does(() =>
{
MSBuild(solution, new MSBuildSettings {
ToolVersion = MSBuildToolVersion.VS2017});
});
////////////////////////////////////////////////
///// The main task.
////////////////////////////////////////////////
Task("Default")
.IsDependentOn("xUnit");
RunTarget(target);
最佳答案
关于c# - 我可以让 NugetRestore 在 azure devops (TFS) 上与 build.cake 一起工作吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57182696/