【问题标题】:TeamCity nuget pack step missing files when packaged打包时 TeamCity nuget pack 步骤缺少文件
【发布时间】:2016-07-22 21:58:16
【问题描述】:

我们的第一步是为我们的 .sln 文件创建一个 MsBuild。我们传入我们的平台和配置,一切都正确构建。

接下来我们要 NuGet 打包所有文件以供 Octopus Deploy 使用。在这一步中,我们指定了所有的 .csproj 文件(不知道为什么,一切都已经构建好了)

创建的包包含 2 个文件夹,Content 包含所有需要的文件减去 bin 和 Lib 文件夹,其中仅包含项目编译的 dll。它不包括项目中引用的任何其他 dll。

【问题讨论】:

    标签: nuget teamcity


    【解决方案1】:

    听起来您使用 Octopack 来处理要部署的 NuGet 包的创建可能更容易。

    第 1 步。将Octopack NuGet package 安装到作为可部署应用程序的项目中。

    Install-Package OctoPack
    

    第 2 步。确保在主编译之前有一个构建步骤,它将安装任何引用的 NuGet 包。

    第 3 步。从下载页面安装TeamCity plugin for Octopus deploy并重启TeamCity服务器服务

    第 4 步。现在,您将在 MSBuild 运行程序配置中看到其他选项,如果您在构建配置中选中以下框,它将为您生成一个 NuGet 包,其中应该包含成功部署所需的一切。

    作为一个小提示,我通过引用输出包将包直接发布到 Octopus(而不是等待它在构建结束时作为工件附加,因此需要两次构建配置)

    希望对你有帮助

    【讨论】:

    • 我会试一试,看看它是如何工作的。看起来我的包中没有包含来自外部引用的 dll。 IE。 AutoFac、net framework、EF 等。会不会也包括那些?
    • 如果它们被引用为 NuGet 包,则安装程序步骤应在构建之前恢复它们。如果它们不是标准的包引用,那么它们可能需要处于源代码控制之下(不建议)
    • 以自动化方式处理这些类型的非 NuGet 引用的最佳做法是什么?
    • 将它们置于源代码控制之下,因此您确保它们在编译时存在于构建代理中。
    • 我们在源代码控制下确实有一个“packages”文件夹,其中包含我们所有的 ext 库,但这些库不包含在包中
    【解决方案2】:

    如果 NuGet 包未按照项目文件的预期打包应用程序,则必须创建 NuGet 规范文件并指定应如何打包。对于像创建一个简单的 .spec 文件并将其放入您的 Web 应用程序目录一样简单的 Web 应用程序,但对于其他项目可能会稍微复杂一些。查看 Nuspec 参考以了解如何添加您的内容和依赖项。 https://docs.nuget.org/create/nuspec-reference

    【讨论】:

    • 每次我们在项目中添加或删除文件时是否必须手动更新 .nuspec?
    • 否,但如果您需要新的依赖项,它可能需要更新。规范文件使您可以完全控制打包的内容和方式。 Nuget 也可以直接从您的项目文件中创建包,但在您的情况下,它并不能像您希望的那样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2014-03-13
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多