我尝试使用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-packages存在问题。 System.Net.Http.Formatting应该在Teamcity下载的NuGet-Package Microsoft.AspNet.WebApi.Client 5.0.0中。但似乎构建命令(Microsoft Visual Studio解决方案运行程序)查看Microsoft.Net.Http 2.2.xx而不是“格式化”-namespace
这只是我的猜测,出了什么问题。有任何线索如何解决这个问题?
我的包 - 配置:
<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>
答案 0 :(得分:3)
有两种方法可以进行包恢复。较旧的方法是将.nuget文件夹与您的解决方案一起使用nuget.exe和nuget.targets,并在您的.sln文件旁边放置一个nuget.config文件。通常通过右键单击解决方案文件并点击“启用包恢复”来启用此功能。
较新的方法不涉及修改构建过程,而是Visual Studio负责包恢复。您不需要启用它。我认为除非您使用旧方法,否则它默认开启。当你在VS中构建时,这种新方法很棒,但是当使用TeamCity时,你需要修改你的构建过程。
检查您使用的方法(较新的方法不会在{solution root} /。nuget中添加nuget.exe)。如果您使用的是新版本,则需要在构建过程中添加单独的命令行步骤来调用它。它将使用构建成功所需的所有内容填充packages文件夹。如果您没有手动更改引用,那么这些引用上的提示路径应指向适当的位置(如果这样做,您可以从包管理器控制台运行Update-Package PackageName -Reinstall -ProjectName WhicheverProjectYouModified)。
c:\somewhere\nuget.exe restore c:\somewhere\yoursolution.sln
这将要求您在构建服务器上的某处放置最新版本的nuget.exe。如果你已经在某处有nuget,请运行它以使其达到最新版本:
nuget update -self
如果您使用旧方法并且仍然遇到TC问题,我建议您更新新方法(请参阅下面的第二个链接)。
有关详细信息,请参阅此处: