ClickOnce:如何在应用程序部署中的不同位置部署同一程序集的两个副本?

时间:2013-05-30 16:53:27

标签: .net clickonce

我们有一个“离线”Windows应用程序,它将ASP.NET应用程序包装在Windows窗体中的Internet Explorer控件中。因此,我们在应用程序文件夹中有一个子树,它是整个在线/ Web应用程序,它在包装脱机应用程序EXE文件中启动并运行。

这导致一些程序集既作为脱机应用程序EXE文件的直接引用,也作为联机应用程序子文件夹的一部分。通过执行整个应用程序文件夹树的手动副本来部署应用程序时,此方法可以正常工作。但是,在验证ClickOnce应用程序清单时,ClickOnce部署在安装时失败 - 如果我从在线应用程序子树中删除这些程序集,那么我已经在重复的程序集中进行了修复(只留下了一个副本)根文件夹)并在没有它们的情况下重建/签署应用程序清单,然后验证成功并安装应用程序 - 但是当然没有删除程序集。

===更新===

.NET 4提供了新版本的mage.exe(较新的副本是Windows SDK v7.1的一部分 - 在NETFX 4.0 Tools文件夹中),新版本对重复的程序集表现出不同的行为

Mage v3.x创建的应用程序清单中,使用'file'元素列出了重复项,如下所示:

  <file name="foo.dll" size="123456">
    <hash>
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>JFifxtn6vhCtaiom4tzJ+pcgqT0=</dsig:DigestValue>
    </hash>
  </file>

生成以下表单的警告:

  

警告MSB3178:程序集'\ AppFiles \ fooApp_2.9.186.3 \ foo.dll'被错误地指定为文件。

事实上,这两个重复文件都是这样列出的,也就是说,它们都没有被列为'dependentAssembly',这显然是错误的。

但是,Mage v4为这两个文件和表单警告创建了“dependentAssembly”条目:

  

警告MSB3112:两个或多个程序集具有相同的标识'foo,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 0123456789012345,ProcessorArchitecture = msil'。

除了路径(在'codebase'属性上定义)之外,这两个条目是相同的,但是在安装时,如果部署包含带有模糊错误的条目,ClickOnce安装程序将失败:

  

清单可能无效或无法打开文件。

1 个答案:

答案 0 :(得分:0)

您必须重命名其中任何一个并使用。还尝试为每个程序集使用不同的版本和publickey令牌