我设置了一个ClickOnce服务器来托管Outlook插件。它会自动为客户端计算机提供当前版本。
当插件版本发生变化时,它会完美更新。但是,如果版本中的某个配置文件发生更改,我会重新生成清单,但它不会更新,因为它看到.vsto指向相同的版本号。它忽略了对数字签名DigestValue的更改:
<dependency>
<dependentAssembly dependencyType="install" codebase="MyAddin.dll.manifest" size="12345">
<assemblyIdentity name="MyAddin.dll" version="1.0.0.25" publicKeyToken="1234567890abcdef" language="neutral" processorArchitecture="msil" type="win32" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>********************************</dsig:DigestValue>
</hash>
<dependentAssembly>
</dependency>
更改样本的唯一部分是**********(显然底部是.vsto签名)。
如果我尝试更改任何其他值,则会抱怨.vsto定义与.dll.manifest定义不匹配,或者.dll.manifest定义与目标程序集不匹配。我不想因为.config文件发生变化而需要新版本。
如何强制Outlook注意到清单更改,以便实际安装,而不是认为它完全相同而没有更改?
答案 0 :(得分:0)
我终于在Stackoverflow上找到了试图做同样事情的人的相关问题:
How to update just one DLL in a ClickOnce installation?
所需要的只是更改版本号。但它必须在3个地方进行更改,否则会抱怨不能显示不匹配的版本。此版本号不必匹配正在部署的任何.dll文件(即使它显示在标记&#34; assemblyIdentity&#34;,这是令人困惑的)。每次更改文件时都可以生成新版本以强制更新(自动增量,散列,时间戳,随机数,无论您喜欢)。
之前我无法让它工作,因为我只更新了2个引用,而不是全部3个。
首次引用此版本号位于应用程序清单的顶部:
<asmv1:assemblyIdentity name="MyAddin.dll" version="w.x.y.z" publicKeyToken="1234567890abcdef" language="neutral" processorArchitecture="msil" type="win32" />
第二位位于部署清单的顶部:
<asmv1:assemblyIdentity name="MyAddin.vsto" version="w.x.y.z" publicKeyToken="1234567890abcdef" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" />
第三名是在部署清单中:
<dependentAssembly dependencyType="install" codebase="MyAddin.dll.manifest" size="12345">
<assemblyIdentity name="MyAddin.dll" version="w.x.y.z" publicKeyToken="1234567890abcdef" language="neutral" processorArchitecture="msil" type="win32" />