在TeamCity中包含NuGet包

我最近开始使用NuGet来pipe理外部软件包。 现在我只需要它的NLog。 一切工作正常,当我在VS 2012中生成项目。但是,我尝试作为一个CI服务器的TeamCity(我是相当新的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中,所以我不知道如何将“同意”设置为true。 我尝试在NuGet.targets文件中将RestorePackages设置为“true”

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

但是这不起作用。

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

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

这使得构build成功运行!

NuGet内置的启用软件包恢复function使您可以非常轻松地设置工作stream程的预构build部分。 为此,请右键单击Visual Studio解决scheme资源pipe理器中的解决scheme节点,然后单击“启用NuGet包恢复”选项。 请注意,您需要在系统上安装NuGet Visual Studio扩展。 如果你这样做了,但你仍然看不到这个菜单项,你可能已经启用了这个选项,或者你的解决scheme目录中有一个名为.nuget的文件夹。

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

另请参阅在不提交包的情况下使用Nuget 。

只是为了重申更新2.如果你偶然在这里寻找一个快速修复TeamCity不下载NuGet包,尝试改变这一行

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

到这一行

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

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

在TeamCity v8中,我能够使用TC中的环境variables来解决“还原包”错误。

看到:

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”作为项目级别的环境variables将解决所有构buildconfiguration的问题。 感觉比编辑NuGet.targets文件imho更好一点。

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

如上所述,我添加了第一个构build步骤“NuGet安装程序”,做了一些coinfiguration,现在包自动恢复。