我们有一个“离线”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安装程序将失败:
清单可能无效或无法打开文件。
答案 0 :(得分:0)
您必须重命名其中任何一个并使用。还尝试为每个程序集使用不同的版本和publickey令牌