ClickOnce:避免部署永不改变的大文件

时间:2016-12-23 15:04:52

标签: devexpress clickonce

我有一个使用第三方软件“DevExpress”的大型点击一次应用程序。 DevExpress DLL占我应用程序大小的95%。它们永远不会改变,但每次部署更新时我都需要将它们上传到我的FTP服务器,这需要一段时间才能完成。有没有办法有一个单独的包链接这个我的单击一次应用程序的DevExpress文件?

注意:在客户端,click-once可以有效地管理它,不会下载未更改的文件。

由于

1 个答案:

答案 0 :(得分:0)

您可以本地化程序集,这有点像将它们放入GAC,只有它们将被隐藏在%USERPROFILE%文件夹中(与其他ClickOnce程序集一起使用)。

您可以通过在App.Config文件中声明它们,然后在项目中将每个程序集设置为“Exclude”。以下是App.Config需要看起来的片段:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DevExpress.BonusSkins.v16.1" culture="neutral" publicKeyToken="B88D1754D700E49A"/>
        <codeBase version="16.1.4.0" href="http://YourUrl/DevExpress/16.1.4/DevExpress.BonusSkins.v16.1.dll"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DevExpress.Charts.Designer.v16.1" culture="neutral" publicKeyToken="B88D1754D700E49A"/>
        <codeBase version="16.1.4.0" href="http://YourUrl/DevExpress/16.1.4/DevExpress.Charts.Designer.v16.1.dll"/>
      </dependentAssembly>

第一次单击一次部署时,它将检查文件是否已本地化。如果是这样,它将使用它们。如果没有,它将下载一次(并且只下载一次)。

优点:

  • 您的Click-once部署(exe)现在非常小
  • 您可以添加所需的所有令人敬畏的Dev Ex程序集,例如Bonus Skins,而不必担心会使部署变得庞大
  • 这适用于任何已签名的DLL,而不仅仅是Dev Express
  • 就像Click-Once一样,用户不需要管理员权限来执行此操作(使用GAC解决方案,他会)
  • 您的应用更新将快速加快
  • 对用户完全透明。这一切都在初始安装时默默发生

缺点:

  • 升级时必须管理App.Config
  • 这是每个用户,所以如果六个用户登录到同一台计算机,那么您将复制DLL六次

这也适用于UNC路径 - 如果您的用户都是内部用户,则不需要Web引用。