【发布时间】:2017-08-01 22:38:26
【问题描述】:
我已安装 VS 2017 Build 代理并将其注册到“默认”代理队列中。我正在尝试构建的项目是一个 VS 2017 类库项目,针对.Net Standard 1.0。 从 Visual Studio 构建时,构建成功。但是在构建代理上构建失败。
T16:05:59.0389362Z ##[error]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(找到 here)并将其放在代理的工作目录中(D:\VsAgentWork\nuget.exe 在我的例子中)。然后,我自定义了 NuGet 还原步骤,以从提供的位置 (....\nuget.exe) 引用 nuget.exe。
【问题讨论】:
-
既然您说的是“默认”队列,您能否确认这意味着您使用的是私人代理?或者,您使用的是托管池吗?另外,构建定义中的任务是什么? VS构建任务?如果是这样,在下拉列表中选择了哪个版本?
-
另外,您使用的是 VSTS 还是 TFS 2015/2017? RTM/QU1?
-
我正在使用私人代理。这是 VisualStudio.com 在线。
标签: nuget visual-studio-2017 build-agent .net-standard