【问题标题】:NuGet pack for TFS Continuous Integration用于 TFS 持续集成的 NuGet 包
【发布时间】:2014-01-08 00:18:18
【问题描述】:

我正在尝试使我们的 TFS 构建过程从我们的解决方案项目中生成 NuGet 包。我们的目标是创建一个私有包源,因此所有其他内部产品都可以使用 NuGet 下载/更新框架。

到目前为止,我们已经让构建过程运行(很长时间)并对我们的库进行版本控制,剩下的就是“nuget pack”所有项目。


到目前为止我所做的尝试:

  1. nuget spec *.csproj,然后是 nuget pack *.nuspec;
  2. nuget spec *.dll,然后是 nuget pack *.nuspec;
  3. nuget 直接打包 *.csproj(无 .nuspec 文件);

它们似乎都有效,但它们似乎都在我真正需要它们成功的步骤上失败了。

我从上述步骤中实际得到的:

  1. 没有列出依赖项¹,没有列出参考²;

  2. 没有列出依赖项¹,列出没有引用²,目录中的所有 dll 都打包在同一个 .nupkg 上(不使用 -IncludeReferencedProjects);

  3. (迄今为止最好的)一些依赖项¹列出,没有参考²列出,只有实际项目 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 dependencies
Nuget pack only including dependencies for some projects
Why doesn't nuget include the referenced project when packing?

【问题讨论】:

    标签: c# visual-studio tfs msbuild nuget


    【解决方案1】:

    原来是一个简单的路径问题。没有正确添加引用和依赖项,因为我是从不同的工作目录执行命令。

    最重要的是,必须使用 -IncludeReferencedProjects 才能正确添加所需的一切。

    之后,使用 Powershell 的构建过程成功完成,一切都按预期工作 =)

    【讨论】:

      【解决方案2】:

      pack 命令具有包含必须指定的项目引用的选项:http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command_Options

      您需要以 csproj 文件为目标,我建议手动创建一个 nuspec 文件。

      【讨论】:

        猜你喜欢
        • 2013-02-04
        • 2015-07-14
        • 2018-12-12
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 2020-03-18
        相关资源
        最近更新 更多