在TeamCity中包含NuGet包

HTB*_*TBR 35 c# teamcity windows-services 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?)
Run Code Online (Sandbox Code Playgroud)

(在我使用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.'
Run Code Online (Sandbox Code Playgroud)

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

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>
Run Code Online (Sandbox Code Playgroud)

但这没用.

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

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>
Run Code Online (Sandbox Code Playgroud)

这使得构建成功运行!

Dav*_*ant 22

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

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

另请参阅使用Nuget而不提交包.


cra*_*tad 12

只是在更新2上重申.如果你在这里寻找快速修复TeamCity而不是下载NuGet包,请尝试更改此行

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>
Run Code Online (Sandbox Code Playgroud)

到这条线

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>
Run Code Online (Sandbox Code Playgroud)

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


Nat*_*ard 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更喜欢这样做.