我已经安装了 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:类型或命名空间在全局命名空间中找不到名称“系统”(您是否缺少程序集引用?)
通过将构建日志与我的本地构建进行比较,我可以看到构建代理调用 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 还原使用的是 3.5 版本的 nuget.exe。因为项目文件是 VS 2017 格式,所以 nuget.exe 找不到任何引用的包,因此在没有实际拉入任何内容的情况下成功完成。因此,在下一步中,构建失败,因为没有 NuGet 包(因此任何程序集) 被发现。
解决方案
我下载了 nuget.exe 4.0(在此处找到)并将其放在代理的工作目录中(在我的情况下为D:\VsAgentWork\nuget.exe)。然后,我自定义了 NuGet 还原步骤,以从提供的位置 ( ....\nuget.exe ) 引用 nuget.exe。