在TeamCity中包含NuGet包

本文关键字:NuGet 包含 TeamCity | 更新日期: 2023-09-27 17:54:43

我最近开始使用NuGet来管理外部包。现在我只需要它用于NLog。当我在VS 2012中构建项目时,一切都很好。然而,我正在尝试TeamCity作为CI服务器(我对CI相当陌生),它给了我以下错误:

[Csc] SomeNamespace'SomeClass.cs(10, 7): error CS0246: 
The type or namespace name 'NLog' could not be found 
(are you missing a using directive or an assembly reference?)

(这个错误在我使用NLog的地方重复出现)

现在我没有在SVN中包含"packages/"文件夹,因为我认为不包含二进制文件并让MSBuild在TeamCity中自己下载这些文件是一个很好的做法。然而,它显然没有这样做。我确实在SVN中包含了"packages.xml"文件。我可以检查什么来查看哪里出了问题?

感谢@DavidBrabant,我被推到了正确的方向。但是,我现在在TeamCity中得到以下错误:

Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, 
click on Package Manager node and check 'Allow NuGet to download missing packages during build.'

然而,我不是在Visual Studio,但TeamCity,所以我不知道如何设置"同意"为真!我试图在NuGet中将RestorePackages设置为"true"。目标文件:

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

但是这不起作用。

更新2 为了使它工作,我还设置了以下属性NuGet.targets:

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>

这使得构建运行成功!

在TeamCity中包含NuGet包

NuGet内置的启用包恢复功能允许您非常轻松地设置工作流的预构建部分。为此,在Visual Studio的解决方案资源管理器中右键单击解决方案节点,然后单击启用NuGet包还原选项。注意,您需要在系统上安装NuGet Visual Studio扩展。如果您这样做了,但是您仍然没有看到这个菜单项出现,那么您要么已经启用了这个选项,要么在您的解决方案目录中有一个名为.nuget的文件夹。

设置该选项后,现在可以删除包安装目录下的所有子文件夹,默认情况下为$(SolutionDir)'packages,除了存储库。配置文件,您的解决方案仍应正确编译。在编译过程中,您应该在Visual Studio输出窗口中看到NuGet的安装痕迹,并且您应该看到所需的NuGet包也重新出现在包安装目录中。

只是重申更新2。如果您在这里寻找TeamCity不下载NuGet包的快速修复,请尝试更改这一行

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

到这行

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>

在你的NuGet.targets文件,它应该工作

在TeamCity v8中,我能够使用TC中的环境变量解决"还原包"错误。

:

http://johanleino.wordpress.com/2013/03/19/using-teamcity-for-asp-net-development-part-2/

http://confluence.jetbrains.com/display/TCD7/Configuring +构建+参数# ConfiguringBuildParameters-SystemPropertiesandEnvironmentVariables

env.EnableNuGetPackageRestore设置为"true"作为项目级别的环境变量将解决所有构建配置的问题。这样做比编辑NuGet感觉好一点。目标文件imho

看看这篇文章:http://johanleino.wordpress.com/2013/06/17/making-use-of-teamcitys-nuget-capabilities-part-2/

如上所述,我添加了第一个构建步骤"NuGet Installer",做了一些配置,现在包自动恢复。