kdb*_*man 2 c# hash clickonce auto-update visual-studio
我正在使用C#和Visual Studio 2015通过ClickOnce开发和部署应用程序,并且试图缩小ClickOnce更新下载大小。 ClickOnce的是能够唯一增量更新:
更新应用程序时,ClickOnce会将当前应用程序的应用程序清单中指定的文件的哈希签名与新版本进行比较。如果不同,则ClickOnce下载新版本。如果签名匹配,则ClickOnce复制现有文件并在新版本的应用程序中使用它。即使只更改了一个或两个文件,该方法也可以避免ClickOnce再次下载整个应用程序。
我已验证,在的更新之间MyApp
,大多数文件的哈希签名不会更改(在命令行上使用shasum
或在实际的清单文件中)。但是ClickOnce仍会在每次更新时下载每个文件。
例如,MyApp
取决于Emgu.CV.dll
,而我只是MyApp 1.0.9.4
从Visual Studio 2015中发布的。这是Emgu.CV.dll
位于输出输出位置清单文件的引用MyApp\Application Files\MyApp_1_0_9_4\MyApp.exe.manifest
:
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Emgu.CV.dll" size="363520">
<assemblyIdentity name="Emgu.CV" version="3.0.0.2158" publicKeyToken="7281126722AB4438" language="neutral" processorArchitecture="msil" />
<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>lUb/oa0aQL6HWEhY8Juj6Mc1wChKo0owhJJ+sSfqZUs=</dsig:DigestValue>
</hash>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
这是先前部署中相同的.dll的依赖项标签MyApp_1_0_9_2\MyApp.exe.manifest
:
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Emgu.CV.dll" size="363520">
<assemblyIdentity name="Emgu.CV" version="3.0.0.2158" publicKeyToken="7281126722AB4438" language="neutral" processorArchitecture="msil" />
<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>lUb/oa0aQL6HWEhY8Juj6Mc1wChKo0owhJJ+sSfqZUs=</dsig:DigestValue>
</hash>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
它们是相同的。值得注意的是,该<hash><dsig:DigestValue>
内容是相同的,就像所有其他150MB〜值得依赖的版本之间各自的标签来声明1.0.9.2
和1.0.9.4
。
在这两个清单文件之间实际上只有几个哈希值发生了变化。例如,MyApp.exe
哈希从
JryzNpD+emqeruXW7X2unRm0i58w9z9ct++Jeog40FI=
Run Code Online (Sandbox Code Playgroud)
至
tF/hs87T4n9sMgoUJUmk31zAUsi7MsWXhLdKGxlR+EM=
Run Code Online (Sandbox Code Playgroud)
但是,ClickOnce更新从1.0.9.2
更改为1.0.9.4
下载MyApp.exe
, Emgu.CV.dll
然后更新为其他文件!
为什么ClickOnce下载哈希没有更改的文件?
这样的问题是相关的,但是答案不适用,因为我没有重建正在冗余下载的程序集,而只是复制它们(从不变的哈希签名中可以明显看出)。
这样的问题是相关的,但提问者只是误解了“如果更新则复制”的含义。
我已经阅读了此疑难解答MSDN页面,但没有出现我的问题。
归档时间: |
|
查看次数: |
968 次 |
最近记录: |