3

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

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

=== 更新 ===

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

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

  <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:Assembly'\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'。

除了路径(在“代码库”属性上定义)之外,这两个条目是相同的,但在安装时,如果部署包含此类条目并出现模糊错误,则 ClickOnce 安装程序将失败:

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

4

1 回答 1

0

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

于 2014-05-26T12:55:11.607 回答