用于 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 包的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 从 Github到 Nuget 持续集成部署

持续集成~Jenkins里的NuGet和MSBuild插件

TFS 持续集成/部署版本号

持续集成配置之Nuget

TFS2017持续集成构建

如何为 Windows Azure Web 角色上的 PHP 项目配置 TFS 构建定义以实现持续集成?