2017-03-20 74 views
0

我有一個ClickOnce服務器設置爲託管Outlook插件。它會自動爲當前版本提供給客戶端機器。基於ClickOnce .vsto哈希更改更新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

我終於找到了相關的問題#2有人試圖做同樣的事情:

How to update just one DLL in a ClickOnce installation?

它所需要的是改變版本號。但它必須在3個地方進行更改,否則它會抱怨沒有明顯的版本不匹配。此版本號不必與正在部署的任何.dll文件相匹配(即使它顯示在標籤「assemblyIdentity」下面,這很令人困惑)。每次任何文件更改時強制更新都會生成新版本(自動增量,哈希,時間戳,隨機數,無論您喜歡)。

我無法得到它之前的工作,因爲我只更新引用,不是所有的3

首先引用此版本號在應用程序清單的頂部發現的2:

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