Visual Studio 2017生成代理无法生成错误cs0400

Art*_*tak 8 build-agent nuget visual-studio-2017 .net-standard

我安装了VS 2017 Build代理并将其注册在"默认"代理队列中.我正在尝试构建的项目是VS 2017类库项目,目标是.Net Standard 1.0.从Visual Studio构建时,构建成功.但是,构建代理上的构建失败.

T16:05:59.0389362Z ## [错误] C:\ Windows\ServiceProfiles\NetworkService\AppData\Local\Temp.NETStandard,Version = v1.0.AssemblyAttributes.cs(4,20):错误CS0400:类型或命名空间在全局命名空间中找不到名称'System'(您是否缺少程序集引用?)

通过将构建日志与我的本地构建进行比较,我可以看到构建代理调用缺少"引用"属性的csc.exe.我的项目没有任何明确的引用 - 它只需要.NetStandard 1.0库(SDK).构建代理使用的命令行是:

\ MSBuild\15.0\Bin\Roslyn\csc.exe/noconfig/unsafe-/checked-/nowarn:1701,1702,1705/nostdlib +/errorreport:prompt/warn:4/define:TRACE; RELEASE; NETSTANDARD1_0/debug-/debug:portable/filealign:512/nologo/optimize + /out:obj\Release\netstandard1.0\Geo.Common.dll/ruleset:"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset"/ target:library/warnaserror-/utf8output/deterministic + Distance.cs DistanceExtensions.cs GeoCoordinate.cs Unit.cs"C:\ Windows\ServiceProfiles\NetworkService\AppData\Local\Temp .NETStandard,Version = v1.0.AssemblyAttributes.cs"obj\Release \netstandard1.0\Geo.Common.AssemblyInfo.cs

我知道我可以将"引用"列表硬编码为构建定义中的构建步骤的命令行属性,但这是一种解决方法.解决这个问题的正确方法是什么?

谢谢!

更新 原来发现失败的原因是构建定义中的早期步骤,NuGet Restore使用的是3.5版本的nuget.exe.因为项目文件是VS 2017格式,nuget.exe无法找到任何引用的包,所以在没有实际提取任何内容的情况下成功完成.因此,在下一步,构建失败,因为没有NuGet包(因此任何程序集) )被发现.

我下载了nuget.exe 4.0(在这里找到)并将其放在代理的工作目录中(在我的情况下为D:\ VsAgentWork \nuget.exe).然后,我自定义了NuGet Restore步骤,从提供的位置引用nuget.exe(.... \nuget.exe).

小智 4

您需要恢复解决方案的包。对于 .NET Core,您需要使用 dotnet cli 或 MSBuild /t:restore 目标执行此操作,或者您可以从 nuget 站点下载 NuGet 4 并将其放在构建计算机上,并在 NuGet 安装程序的路径中指定它任务。