NuGet作为应用程序更新机制

时间:2012-01-26 07:18:45

标签: c# .net nuget

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

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

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

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

我们的要求是:

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

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

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

3 个答案:

答案 0 :(得分:8)

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

我们还在即将发布的NuGet书中介绍了这种情况 - Pro NuGet

2)托管您自己的Feed非常简单,请访问www.myget.org或使用NuGet gallery

答案 1 :(得分:4)

派对有点晚,但我开发了一个开源框架,可以完全满足要求。

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

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

答案 2 :(得分:2)

我认为可能,我在自己开发的项目中做了类似的事情。我不认为它是'弯曲的nuget',只要你使用私人饲料并且不试图将这些包推到公共nuget饲料。 Nuget可以处理关于程序集的依赖关系A需要程序集B才能运行,但是对于动态加载/卸载,您必须考虑使用Managed Extensibility Framework来自动加载新模块。

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

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