我遇到了无法使用 ClickOnce 发布我的 WPF 应用程序的问题。
该应用程序使用 Nuget 包 MVVM Light 4.1.26.1、Unity 2.1.505.2、CommonServiceLocator 1.0。
问题是,当我发布时,一切正常,但是当我尝试安装 clickonce 包时出现此错误:
无法安装或运行应用程序。该应用程序要求首先将程序集 Microsoft.Practices.ServiceLocation 版本 1.0.0.0 安装到全局程序集缓存 (GAC) 中。
我做了一些挖掘,发现清单中有两个对该程序集的引用,其中一个被标记为我无法摆脱的先决条件:
<dependency>
<dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" version="1.0.0.0" publicKeyToken="59D6D24383174AC4" language="neutral" processorArchitecture="msil" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Microsoft.Practices.ServiceLocation.dll" size="29760">
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" version="1.0.0.0" publicKeyToken="31BF3856AD364E35" 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>eee+a+dQmhpSY/ApLxRipXdEp8UsTaZHXHClBU0Iwyc=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
我很确定 ClickOnce 的问题在于有两个对具有相同版本的程序集的引用(但请注意不同的公钥令牌)。
我创建了一个非常简单的复制品,如下所示:
- 创建一个新的 WPF 应用程序
- 添加 Nuget 包 MVVM Light
- 添加 Nuget 包 Unity(还添加了名为 CommonServiceLocator 的依赖包)
- 构建和发布 WPF 应用程序
- 尝试安装已发布的 MyApp.application clickOnce 包....获取上面详细说明的错误
这是一个复制项目:
有什么想法我可以克服这个吗?