【问题标题】:NuGet as an application update mechanismNuGet 作为应用程序更新机制
【发布时间】:2012-01-26 07:18:44
【问题描述】:

我们正在开发一个 .NET 3.5 应用程序(Windows 窗体),它由 3 个主要部分组成。

作为部署过程的一部分,我们希望能够在安装后不断更新组件。

我一直在考虑设置 NuGet 服务器,并将组件更新打包为 NuGet 包。

以前有人做过这样的事吗?你认为 NuGet 适合这份工作吗?

我们的要求是:

  • 接收打包的 DLL 文件(但可能存在包中附加文件的情​​况
  • 检测对其他组件(或组件版本)的依赖
  • 自动检测新组件版本

我们正在使用 TeamCity 进行持续集成和构建我们的产品,我知道它可以很好地与 NuGet 集成,并且可以直接创建/发布 NuGet 包。

问题是我如何将 NuGet 与我们的应用程序集成?是否有任何客户端 NuGet 代码来使用包?我想知道这是否可以解决。

【问题讨论】:

  • 就我个人而言,我认为您正试图以并非真正打算采用的方式弯曲 nuget。从技术上讲,您可能可以使用 Nuget 来执行此操作,但还有许多其他部署平台旨在部署和维护更适合此的应用程序
  • 我同意还有其他平台可以做这样的事情。主要的是我们的构建环境(TeamCity)已经有一些功能来处理这个问题,只让客户端拉取更新。为什么你会认为这会影响 NuGet?
  • 我想你可能想看看 nuget 画廊里的巧克力。

标签: c# .net nuget


【解决方案1】:

1 和 3) 可以使用 NuGet.Core 从 NuGet 部署和接收数据。检查 NuGet push... to Windows Azure 和 source code 以获取 NuGet.exe 的 Update -Self 命令。

我们还将在即将出版的 NuGet 书籍 - Pro NuGet 中介绍此场景。

2) 托管您自己的提要很容易,请查看 www.myget.org 或使用NuGet gallery

【讨论】:

  • 我想完全跳过命令行部分,并将其集成到我自己的 .NET 中。我认为这是可能的。
  • 是的,检查命令行的代码并将其集成到您的源代码中。
【解决方案2】:

聚会有点晚了,但我已经开发了一个开源框架,可以完全满足要求。

它被称为 Sidewinder (http://sidewinder.codeplex.com) - 使用它的最佳方式是通过它的 NuGet 包 (http://nuget.org/packages/sidewinder)。

基本上,您在应用程序的开头添加一小段代码,sidewinder 组件将检查提要(官方或自定义)以获取您需要的包的更新,将它们拉下来并将它们解包到一个临时文件夹。然后它将您的应用程序备份到一个 zip,启动 sidewinder.exe(它将完成安装)并将控制权返回给您的应用程序,指示它应该在更新待定时终止。一旦你的应用程序关闭,sidewinder.exe 会将临时文件夹中的更新内容复制到你的应用程序文件夹中,如果你在 nuget 包中包含 readme.txt,它甚至会为你执行 shellexec。

【讨论】:

    【解决方案3】:

    我认为这是可能的,我在自己开发的项目中做了类似的事情。我不认为它是“弯曲的 nuget”,只要您使用私人提要并且不要尝试将这些包推送到公共 nuget 提要。 Nuget 可以处理关于程序集 A 需要程序集 B 才能运行的依赖关系,但至于动态加载/卸载,您将不得不寻找类似托管扩展框架之类的东西来自动加载新模块。

    有一个名为 Nuget.Core 的 Nuget 客户端代码,它是在 Visual Studio 的 Nuget PowerShell 窗口中用于下载包的代码。它可用于执行您描述的功能、下载新包并将它们放置在您的应用期望的位置。

    如果您正在寻找一些示例,谷歌搜索可以找到一些示例,但直接想到的是OctopusDeploy,这是一个围绕 nuget 构建的应用部署框架。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多