用于 TFS 持续集成的 NuGet 包
Posted
技术标签:
【中文标题】用于 TFS 持续集成的 NuGet 包【英文标题】:NuGet pack for TFS Continuous Integration 【发布时间】:2014-01-08 00:18:18 【问题描述】:我正在尝试使我们的 TFS 构建过程从我们的解决方案项目中生成 NuGet 包。我们的目标是创建一个私有包源,因此所有其他内部产品都可以使用 NuGet 下载/更新框架。
到目前为止,我们已经让构建过程运行(很长时间)并对我们的库进行版本控制,剩下的就是“nuget pack”所有项目。
到目前为止我所做的尝试:
-
nuget spec *.csproj,然后是 nuget pack *.nuspec;
nuget spec *.dll,然后是 nuget pack *.nuspec;
nuget 直接打包 *.csproj(无 .nuspec 文件);
它们似乎都有效,但它们似乎都在我真正需要它们成功的步骤上失败了。
我从上述步骤中实际得到的:
没有列出依赖项¹,没有列出参考²;
没有列出依赖项¹,列出没有引用²,目录中的所有 dll 都打包在同一个 .nupkg 上(不使用 -IncludeReferencedProjects);
(迄今为止最好的)一些依赖项¹列出,没有参考²列出,只有实际项目 dll 位于 .nupkg 的 lib 文件夹中。
¹:我所说的依赖是指 NuGet 依赖,来自 NuGet 的包 ²:引用是指解决方案项目引用。
示例场景:
解决方案1.sln -- 项目A -- 项目B
ProjectA 有一个对 ProjectB 的项目参考。我期望在生成的 .nuspec 上发生的事情:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>ProjectA <- OK</id>
<version>1.2.0.0 < - OK</version>
<title>ProjectA <- OK</title>
<authors>My Company <- OK</authors>
<owners>My Company <- OK</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Description</description>
<copyright>OK</copyright>
<dependencies>
<dependecy id="ProjectB" Version="1.2.0.0" /> <<<<<<---- NOT HAPPENING!
</dependencies>
</metadata>
</package>
列出了一些 nuget 依赖项,但不是全部(即使它们位于引用项目的 packages.config 中)。例如:我有一个项目依赖于其他 4 个 NuGet 包,只有 2 个被列为生成的 .nuspec 文件的依赖项。
重要信息:
每个项目都有自己的 packages.config,NuGet 构建它的方式; 解决方案文件夹包含 packages 文件夹,以及所有引用的包; 已经尝试过 Nugetter(XAML 在 VS 2012.3 和 TFS 2012 上损坏,无法打开) 已经试过this,也没有正确包含依赖和引用; 解决方案包还原已打开开启(我们需要这样做以避免将包存储在 TFS 上)。我需要什么:
自动化打包过程以打包每个 csproj,包括 .nuspec 文件上的所有引用和依赖项,以便在安装时正确加载所有这些。我研究过的类似问题:
NuGet: pack command is NOT including nuget dependenciesNuget pack only including dependencies for some projectsWhy doesn't nuget include the referenced project when packing?
【问题讨论】:
【参考方案1】:原来是一个简单的路径问题。没有正确添加引用和依赖项,因为我是从不同的工作目录执行命令。
最重要的是,必须使用 -IncludeReferencedProjects 才能正确添加所需的一切。
之后,使用 Powershell 的构建过程成功完成,一切都按预期工作 =)
【讨论】:
【参考方案2】:pack 命令具有包含必须指定的项目引用的选项:http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command_Options。
您需要以 csproj 文件为目标,我建议手动创建一个 nuspec 文件。
【讨论】:
以上是关于用于 TFS 持续集成的 NuGet 包的主要内容,如果未能解决你的问题,请参考以下文章