在TeamCity中包含NuGet软件包

在TeamCity中包含NuGet软件包

我最近开始使用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>

这使得构建运行成功!

采纳答案:

NuGet中内置的启用包还原功能可让您轻松设置工作流的预构建部分。 为此,请右键单击Visual Studio解决方案资源管理器中的解决方案节点,然后单击启用NuGet软件包还原选项。 请注意,您需要在系统上安装NuGet Visual Studio扩展。 如果您这样做,并且您仍然看不到此菜单项,您已经启用了此选项,或者您的解决方案目录中有一个名为.nuget的文件夹。

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

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

参考更多解答:在TeamCity中包含NuGet软件包,转载请保留在TeamCity中包含NuGet软件包

更多:teamcity