0

我遇到了无法使用 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 的问题在于有两个对具有相同版本的程序集的引用(但请注意不同的公钥令牌)。

我创建了一个非常简单的复制品,如下所示:

  1. 创建一个新的 WPF 应用程序
  2. 添加 Nuget 包 MVVM Light
  3. 添加 Nuget 包 Unity(还添加了名为 CommonServiceLocator 的依赖包)
  4. 构建和发布 WPF 应用程序
  5. 尝试安装已发布的 MyApp.application clickOnce 包....获取上面详细说明的错误

这是一个复制项目:

Skydrive 复制项目

有什么想法我可以克服这个吗?

4

4 回答 4

4

现在是 2019 年,我遇到了类似的问题,发现这个问题是第一个条目,但发现了另一个(更新的)问题和解决方案,可以让 MVVMLight 和 Microsoft.Practices.ServiceLocation 一起工作。

Mvvmlight 5.4.1.1不适用于 CommonServiceLocater 2.0.4(这是 2019 年 3 月最新的稳定版本),mvvmlight 引导它的方式ViewModelLocator.cs

有两件事起作用:
要么降级到CommonServiceLocater
1.3.0
Mvvmlight 5.3.0.0

或更改参考

using Microsoft.Practices.ServiceLocation;    

using CommonServiceLocator;
于 2019-03-06T23:02:07.587 回答
1

是的。MVVMLight ServiceLocation 程序集使用与其他所有公共实现不同的公钥令牌。很长一段时间以来,它使我的生活成为噩梦。我终于不得不删除我所有的 nuget 程序集并暂时返回到公共目录中的文件引用。我正在等待 Laurent 解决这个问题。

于 2013-02-11T16:17:47.073 回答
1

请再试一次。我刚刚将一个新版本(4.1.27.0)推送到 Nuget,这取决于可用的官方 CommonServiceLocator 包。这应该可以解决您的问题。如果您有更多问题,请务必让我知道。

干杯劳伦特

于 2013-02-14T20:27:40.283 回答
0

尽管安装了 MVVMLight nuget 包的 4.1.27 版本,但我也遇到了这个问题。经过数小时的挫折后,我发现这是因为我安装了 MVVMLight 工具包(Visual Studio 2012 的 v.4.1)。卸载它后,我的部署又开始工作了。

只是想我会把它留在这里,以防其他人遇到这种特殊情况。

于 2013-11-21T14:29:49.687 回答