如何在ClickOnce安装中只更新一个DLL?

时间:2009-10-15 20:03:55

标签: clickonce

我正在开发一个大型的一次点击应用程序(150MB,> 200个DLL),作为交互式调试过程的一部分,我想只更新1个DLL并重新启动应用程序,而无需重建和重新部署整个应用程序

这可能吗?如果是这样......怎么样?

问题澄清: 9/26/2009

我知道可以在下载整个应用程序后手动修补客户端上的DLL,然后直接从本地缓存文件夹启动客户端.EXE。这不是重点。我想知道如何在服务器上更改/添加DLL 并让所有客户端在下次启动时获取新的DLL。我正在寻找一个“将DLL复制到此文件夹并编辑此文本文件”的答案,如果可能的话。我特意做 NOT 想要在服务器上重建或重新部署一次性安装...只需用我在IDE中编译的单个DLL手动修补它。

4 个答案:

答案 0 :(得分:6)

我已经与它斗争了几天,它可以完成,但它很繁琐,使用此解决方案ClickOnce仍会扫描所有文件并显示进度条,但只下载并更新更改。

以下是我编写的应用此修补方法的过程...

请注意,此过程需要使用要升级的Click once部署的精确副本进行。

在Application Files文件夹中......

  1. 使用mageui打开.exe.manifest(假设VS2010版本为3.5或更高版本)
  2. 更改版本号

  3. 替换已修补的文件注意:文件使用文件名重命名.deploy例如。 Control.DLL成为control.DLL.Deploy

  4. Sign&用PFX文件保存文件
  5. 在根路径中

    1. 使用mageui(3.5或更高版本)
    2. 打开.application文件
    3. 更改版本号
    4. 更改所需的最低版本号
    5. 选择上面修改的exe.manifest
    6. Sign&保存文件
    7. 将.application复制到Application Files文件夹* 注意:此步骤并非严格必要,只是保持备份文件的相关性。

      现在可以将清单文件和已修补的库复制到您的部署环境中。

答案 1 :(得分:2)

我在这里遇到同样的问题。 我认为您需要将特定文件复制到clickOnce文件夹。 使用MageUI编辑.manifest和.application文件。 提高两个文件中的版本号。 不确定这一点,但客户端的ClickOnce应该下载已更改的文件。

答案 2 :(得分:1)

ClickOnce将为您确定更新的dll,您的客户不必下载完整的150MB,而只需下载更新的dll。唯一的缺点是你仍然需要上传所有150MB。

我的客户的ClickOnce应用程序以这种方式运行,大约40MB始终保持不变。无需额外的工作。

答案 3 :(得分:0)

假设您在客户端系统上的实时环境中工作,您应该能够通过将dll复制到安装文件夹中的前一个dll来替换它。我认为Windows XP上的clickonce安装位置是C:\ Documents and Settings \ userprofile \ Local Settings \ Apps。