TFS NuGet Installer构建步骤无法正常工作

时间:2016-08-02 02:41:09

标签: tfs nuget tfsbuild tfs2015

我正在尝试配置具有NuGet包引用的项目的自动构建,但我没有运气。 (仅供参考,所有这一切,我的耳朵仍然很湿,所以请提供简单的步骤和/或配置。)

注意:这不是其他类似问题的重复,因为我使用的是中央软件包存储库。其他类似的问题没有提到这个重要的细节,因此应该假设它们不相关。

构建运行正常,没有引用。我添加了Newtonsoft.Json并通过包含这个简单的构造来绑定它:

Dim eHandling As Newtonsoft.Json.ConstructorHandling
eHandling = Newtonsoft.Json.ConstructorHandling.Default

我检查了它并且构建开始了,但是NuGet没有先将程序集复制到我的应用程序的bin文件夹中。但是,确实将它复制到了这里:

Restoring NuGet package Newtonsoft.Json.9.0.1.
Adding package 'Newtonsoft.Json.9.0.1' to folder 'C:\Agent\_work\1\s\packages'

当然,构建失败了,因为它无法找到依赖项。

值得注意的是,我在我的开发机器上使用了一个中央软件包存储库:

<config>
  <add key="repositoryPath" value="D:\Dev\Packages" />
</config>

我也想在服务器上模仿这种行为,例如C:\Packages\*\*.nupkg

我尝试使用标准%AppData%\NuGet\NuGet.config文件,但构建忽略了它。我尝试了this answer中的建议(使用repositoryPath而不是packageSources,如图所示),但这导致服务器挂起,直到我重新启动VSO代理服务。考虑到这可能是权限问题,我将代理重新配置为在%AppData% NuGet.config位置关联的用户帐户下运行。仍然没有运气。没有建设。

如何让NuGet下载并填充服务器上的中央软件包存储库,然后在运行构建步骤之前将相应的依赖项复制到应用程序bin文件夹?

编辑1

更新:显然某些东西有效,因为我现在在服务器上有一个C:\Packages\Newtonsoft.Json.9.0.1文件夹。但是,在构建之前,程序集仍未复制到应用程序bin文件夹。结果相同。构建失败。

编辑2

好的,我越来越近了。我在服务器上创建了一个D:驱动器,并将本地repositoryPath值设置为D:\Dev\Packages,与我的开发机器上的相同。构建仍然失败,但快速浏览项目XML可以发现:

<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <HintPath>..\..\..\Packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
  <Private>True</Private>
</Reference>

如何处理相对路径?那应该解决它,是吗?

编辑3

好的,那很有用。我编辑了项目并将HintPath更改为

D:\Dev\Packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll

我现在有一个成功的构建。

但这真的很快就会变得非常乏味。当然,对于每一个项目中的每一个NuGet参考,过去现在和未来,我都不会这么做......我是吗?

1 个答案:

答案 0 :(得分:1)

好的,明白了。

只要服务器上的repositoryPath文件夹与我们的开发机器上的级别相同 - 与构建代理放置项目文件的文件夹相关 - 我们可以将它放在任何位置希望并保留项目文件中的相对HintPath值。

例如,在我的情况下,我最终将服务器位置设置为C:\Agent\Build\Packages,以匹配我的开发机器上本地Git存储库的层次结构位置:

D:\Dev\Packages
D:\Dev\Git\app.repo\App\App.vbproj

效果很好。

修改

为了澄清,将程序集从程序包文件夹复制到应用程序bin文件夹的操作不是NuGet操作。这是一个MsBuild操作(即项目的程序集参考属性中的CopyLocal设置)。

失败的原因是MsBuild无法根据项目文件中指定的相对引用找到要复制的程序集。

从技术上讲,我的问题标题是不正确的。 NuGet安装程序一直运行良好。