【问题标题】:Visual Studio 2017 build agent fails to build with error cs0400Visual Studio 2017 构建代理无法构建并出现错误 cs0400
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢克里斯,我会试试这个,今晚晚些时候回复。
  • 由于您的回复是继续调查的良好起点,因此我将其标记为“答案”。但我会在上面详细说明我的问题,以便其他人可以看到实际发生了什么以及我是如何解决的。
【解决方案2】:

遇到了同样的问题,并从

nuget restore xyz.sln

dotnet restore
nuget restore xyz.sln

在构建本身修复它之前。

【讨论】:

    【解决方案3】:

    我在 VS2017 也遇到过这种情况,这似乎是一个错误。

    首先重启 VS,但我确实发现有时需要完整的步骤来解决问题:

    1. 关闭VS
    2. 删除.vs/文件夹
    3. 删除所有bin/obj/ 文件夹
    4. 重新加载 VS 并运行重建

    【讨论】:

    • 感谢您的回复,尼克。但问题不在 Visual Studio 中。它构建得很好。这是一个 Windows 构建代理问题。
    【解决方案4】:

    如果您想为您的 .net 核心应用程序使用托管的 VS2017 代理池,您可以运行“dotnet restore”,这也应该可以:https://www.visualstudio.com/en-us/docs/build/apps/aspnet/ci/build-aspnet-core

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多