C# 与TeamCity建立解决方案的问题(可能的nuget问题)

C# 与TeamCity建立解决方案的问题(可能的nuget问题),c#,build,teamcity,nuget,C#,Build,Teamcity,Nuget,我尝试与TeamCity建立解决方案。为了减小存储库的大小,wie不将DLL包括在存储库中,而是在构建解决方案时使用NuGet接收任何包的当前实际版本。 我们可以在本地计算机上构建解决方案,但在TeamCity Buildserver上收到一个错误: The type or namespace name 'Formatting' does not exist in the namespace 'System.Net.Http' (are you missing an assembly refer

我尝试与TeamCity建立解决方案。为了减小存储库的大小,wie不将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软件包Microsoft.AspNet.WebApi.Client 5.0.0中。但是,build命令(Microsoft Visual Studio solution runner)似乎查看的是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文件夹,其中有nuget.exe和nuget.targets,在.sln文件旁边有一个nuget.config文件。这通常通过右键单击解决方案文件并点击“启用包还原”来启用

较新的方法不涉及修改构建过程,而是由VisualStudio负责包恢复。您不需要启用它。我认为默认情况下它是打开的,除非您使用了旧的方法。在VS中构建时,这种新方法非常好,但在使用TeamCity时,需要修改构建过程

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

这将要求您将最新版本的nuget.exe放在生成服务器的某个位置。如果您已经在某个地方安装了nuget,请运行此命令以将其更新为最新版本:

nuget update -self
如果您使用的是旧方法,但TC仍然存在问题,我建议您更新到新方法(请参阅下面的第二个链接)

有关更多信息,请参见此处:


您是否遇到此错误?:否。这不是问题所在,请查找根本原因错误;在日志中搜索“无法解析此引用”。可能是由于目标框架不匹配或其他原因造成的。在这里发布根本原因。谢谢你的时间,杰克。我解决了这个恼人的问题。不知道这是否是“黄金”解决方案,但它是有效的。你能发布你的软件包配置吗?是否可能您实际指定的最低版本不合适?(您的开发人员机器可能已经获取了您实际需要的最新版本,但您的构建服务器使用的是较旧的版本。)如果您在干净的开发人员机器上签出您的解决方案,并使用该机器从NuGet恢复包,这是否有效?我假设您仍然对更干净的方法感兴趣:)TeamCity附带了一个NuGet安装程序构建步骤,可以为您处理包恢复,只需将它指向解决方案文件即可。有关详细信息,请参阅本文:此步骤已包含在我的TeamCity-config中。它还检索包
nuget update -self