在TeamCity中包含NuGet包

时间:2013-01-21 12:30:17

标签: c# windows-services teamcity nuget .net-4.5

我最近开始使用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 /'文件夹,因为我认为最好不要包含二进制文件,让TeamCity中的MSBuild自行下载。然而,显然没有这样做。我在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.targets文件中将RestorePackages设置为'true':

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

但这不起作用。

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

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

这使得构建成功运行!

4 个答案:

答案 0 :(得分:22)

NuGet内置的启用包恢复功能使您可以非常轻松地设置工作流的预构建部分。为此,请在Visual Studio的“解决方案资源管理器”中右键单击解决方案节点,然后单击“启用NuGet包还原”选项。请注意,您需要在系统上安装NuGet Visual Studio Extension。如果这样做,但仍然没有看到此菜单项,则表明您已启用此选项,或者您的解决方案目录中有一个名为.nuget的文件夹。

设置该选项后,您现在可以删除软件包安装目录的所有子文件夹,默认情况下为$(SolutionDir)\ p​​ackages,repositories.config文件除外,您的解决方案仍应正确编译。在编译期间,您应该在Visual Studio输出窗口中看到NuGet安装跟踪,并且您应该看到所需的NuGet包重新出现在包安装目录中。

另见Using Nuget without committing packages

答案 1 :(得分:12)

重申更新2.如果您在寻找快速修复TeamCity而不是下载NuGet软件包,请尝试更改此行

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

到这一行

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

NuGet.targets文件中,它应该有用。

答案 2 :(得分:8)

在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+Build+Parameters#ConfiguringBuildParameters-SystemPropertiesandEnvironmentVariables

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

答案 3 :(得分:4)

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

正如我所描述的那样,我添加了第一个构建步骤“NuGet Installer”,进行了一些共同配置,现在包被自动恢复。