根据 ClickOnce.vsto 哈希更改更新 Outlook 插件
Update Outlook addin based on ClickOnce .vsto hash change
我设置了一个 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 注意到清单更改以便它实际安装,而不是认为它完全一样没有任何更改?
我终于在 Whosebug 上找到了试图做同样事情的人的相关问题:
How to update just one DLL in a ClickOnce installation?
它所需要的只是更改版本号。但它必须在 3 个地方进行更改,否则会抱怨 not manifest versions not matching。此版本号不必与正在部署的任何 .dll 文件匹配(即使它显示在标签 "assemblyIdentity" 下,这令人困惑)。每次任何文件更改时都可以生成新版本以强制更新(自动增量、散列、时间戳、随机数,但是你喜欢)。
我之前无法让它工作,因为我只更新了 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" />
我设置了一个 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 注意到清单更改以便它实际安装,而不是认为它完全一样没有任何更改?
我终于在 Whosebug 上找到了试图做同样事情的人的相关问题:
How to update just one DLL in a ClickOnce installation?
它所需要的只是更改版本号。但它必须在 3 个地方进行更改,否则会抱怨 not manifest versions not matching。此版本号不必与正在部署的任何 .dll 文件匹配(即使它显示在标签 "assemblyIdentity" 下,这令人困惑)。每次任何文件更改时都可以生成新版本以强制更新(自动增量、散列、时间戳、随机数,但是你喜欢)。
我之前无法让它工作,因为我只更新了 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" />