【问题标题】:Problems Building solution with TeamCity (possible nuget-issue)使用 TeamCity 构建解决方案的问题(可能是 nuget 问题)
【发布时间】:2014-02-04 06:51:31
【问题描述】:

我尝试使用 TeamCity 构建解决方案。为了减少我们的存储库大小,不要将 DLL 包含到存储库中,而是在构建解决方案时使用 NuGet 接收任何包的当前实际版本。 我们可以在本地机器上构建解决方案,但在 TeamCity-Buildserver 上收到错误:

The type or namespace name 'Formatting' does not exist in the namespace 'System.Net.Http' (are you missing an assembly reference?)

认为 nuget 包有问题。 System.Net.Http.Formatting 应该在 Teamcity 下载的 NuGet-Package Microsoft.AspNet.WebApi.Client 5.0.0 中。但似乎构建命令(Microsoft Visual Studio 解决方案运行程序)查看 Microsoft.Net.Http 2.2.xx 而不是“格式化”-命名空间

这只是我的猜测,出了什么问题。任何线索如何解决这个问题?

我的包-配置:

<packages>
  <package id="log4net" version="2.0.3" targetFramework="net45" />
  <package id="Microsoft.Bcl.Build" version="1.0.10" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="5.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.0.0" targetFramework="net45" />
  <package id="System.Net.Http.Formatting" version="4.0.20505.0" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
</packages>

【问题讨论】:

  • 您是否遇到过这个错误?:nuget.codeplex.com/workitem/3521
  • 没有。那不是问题
  • 尝试查找根本原因错误;在日志中搜索“无法解析此引用”。可能是由于目标框架不匹配或其他原因造成的。在此处发布根本原因。
  • 感谢您的宝贵时间,杰克。我解决了这个烦人的问题。不知道它是否是“黄金”解决方案,但它确实有效。
  • 你能发布你的包配置吗?您是否可能实际上指定了不合适的最低版本? (您的开发机器可能已经选择了您实际需要的最新版本,但您的构建服务器使用的是旧版本。)如果您在 clean 开发机器上检查您的解决方案并使用它来从 NuGet 恢复包,这行得通吗?我假设您仍然对更清洁的方法感兴趣:)

标签: c# build teamcity nuget


【解决方案1】:

有两种方法可以进行包还原。较旧的方法涉及在您的解决方案旁边有一个 .nuget 文件夹,其中有 nuget.exe 和 nuget.targets ,在 .sln 文件旁边有一个 nuget.config 文件。这通常通过右键单击您的解决方案文件并点击“启用包还原”来启用。

较新的方法不涉及修改构建过程,而是由 Visual Studio 负责包还原。您无需启用它。我认为除非您使用较旧的方法,否则默认情况下它是打开的。当您在 VS 中构建时,这种新方法非常棒,但在使用 TeamCity 时,您需要修改构建过程。

检查您使用的是哪种方法(较新的方法不会在 {solution root}/.nuget 中添加 nuget.exe)。如果您使用的是较新的,则需要在构建过程中添加一个单独的命令行步骤来调用它。它将使用构建成功所需的所有内容填充包文件夹。如果您没有手动更改引用,则这些引用的提示路径应指向适当的位置(如果这样做,您可以从包管理器控制台运行 Update-Package PackageName -Reinstall -ProjectName WhicheverProjectYouModified)。

c:\somewhere\nuget.exe restore c:\somewhere\yoursolution.sln

这将要求您将最新版本的 nuget.exe 放在构建服务器上的某个位置。如果您已经在某处安装了 nuget,请运行它以将其更新到最新版本:

nuget update -self

如果您使用旧方法并且仍然遇到 TC 问题,我建议您更新到新方法(请参阅下面的第二个链接)。

查看这里了解更多信息:

【讨论】:

  • TeamCity 附带一个 NuGet 安装程序构建步骤,可为您处理包恢复,只需将其指向解决方案文件。详情见这篇文章:blog.jetbrains.com/teamcity/2013/08/…
  • 此步骤已包含在我的 TeamCity - 配置中。它还检索包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多