35

我最近开始使用 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 中,所以我不知道如何将“同意”设置为 true!我尝试在 NuGet.targets 文件中将 RestorePackages 设置为“true”:

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

但这没有用。

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

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

这使得构建运行成功!

4

4 回答 4

22

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

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

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

于 2013-01-21T12:37:18.053 回答
12

重申更新 2。如果您在这里偶然发现 TeamCity 不下载 NuGet 包的快速修复,请尝试更改此行

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

到这条线

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

在您的NuGet.targets文件中,它应该可以工作。

于 2013-08-14T09:25:47.317 回答
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 感觉好一点。

于 2013-09-10T00:40:12.903 回答
4

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

如那里所述,我添加了第一个构建步骤“NuGet Installer”,进行了一些配置,现在包会自动恢复。

于 2013-10-05T07:38:46.593 回答