根据ClickOnce .vsto哈希更改更新Outlook插件

时间:2017-03-20 18:33:02

标签: vsto clickonce

我设置了一个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注意到清单更改,以便实际安装,而不是认为它完全相同而没有更改?

1 个答案:

答案 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" />