我安装了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'在全局命名空间中找不到(您是否缺少程序集引用?)
通过将构建日志与我的本地构建进行比较,我可以看到构建代理调用缺少“reference”属性的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
我知道我可以将'reference'列表硬编码为构建定义中构建步骤的命令行属性,但这是一种解决方法。 解决这个问题的正确方法是什么?
谢谢!
更新 原来,失败的原因是构建定义中的早期步骤 NuGet Restore 使用的是3.5版本的nuget.exe 。因为项目文件是VS 2017格式,nuget.exe无法找到任何引用的包,所以成功完成而没有实际提取任何内容。因此,在下一步,构建失败,因为没有NuGet包(因此找到了任何组件。
解
我下载了nuget.exe 4.0(找到here)并将其放在代理的工作目录中(在我的情况下为 D:\ VsAgentWork \ nuget.exe )。然后,我自定义了NuGet Restore步骤,从提供的位置引用nuget.exe( .... \ nuget.exe )。
答案 0 :(得分:3)
您需要恢复解决方案的包。对于.NET Core,您需要使用dotnet cli或MSBuild / t:restore目标执行此操作,或者您可以从nuget站点下载NuGet 4并将其放在构建计算机上并在NuGet安装程序的路径中指定它任务。
答案 1 :(得分:1)
有这个完全相同的问题,并从
切换nuget restore xyz.sln
到
dotnet restore
nuget restore xyz.sln
在构建本身修复之前。
答案 2 :(得分:0)
我也经历过VS2017,这似乎是一个错误。
在第一个例子中,只需重新启动VS,但我确实发现有时需要完整的步骤来解决问题:
.vs/
文件夹bin/
和obj/
个文件夹答案 3 :(得分:0)
如果您想为您的.net核心应用使用托管的VS2017代理池,您可以运行“dotnet restore'”,这也应该有效:https://www.visualstudio.com/en-us/docs/build/apps/aspnet/ci/build-aspnet-core