2016-08-02 85 views
0

我想配置一个具有NuGet程序包引用的项目的自动构建,但我没有任何运气。 (仅供参考,我仍然在所有这些耳朵后面都很湿,所以请提供简单的步骤和/或配置。)TFS 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代理服务。考虑到这可能是一个权限问题,我重新配置代理以在位置NuGet.config的位置关联的用户帐户下运行。仍然没有运气。没有建立。

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

编辑1

更新:显然东西的工作,因为我现在已经在服务器上C:\Packages\Newtonsoft.Json.9.0.1文件夹。但是,在构建之前,程序集仍然不会被复制到应用程序bin文件夹中。同样的结果。构建失败。

EDIT 2

OK,我越来越近。我在服务器上创建了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

OK,那工作。我编辑了项目并将HintPath更改为

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

我现在已经成功构建。

但是,这会变得真正枯燥乏味。当然,我不会为每个单个项目中的每一个NuGet参考都做这件事,过去的现在和将来...我是吗?

回答

1

好吧,明白了。

只要服务器上的repositoryPath文件夹的深度与我们开发机器上的深度相同(与构建代理放置项目文件的文件夹相关),我们可以将其放在我们想要的任何位置并保留项目文件中的相对值HintPath

例如,在我来说,我结束了对服务器位置设置为C:\Agent\Build\Packages,我的dev的机器匹配本地的Git回购分层位置:

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

的伟大工程。

EDIT

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

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

所以技术上我的问题标题是不正确的。 NuGet Installer步骤一直工作良好。