无法从.Net标准库

时间:2017-11-01 02:47:25

标签: .net wpf clickonce mvvm-light .net-standard

我有一个WPF应用程序,它引用了包含ViewModels并使用MvvmLight的.NET Standard 2.0库。我创建了一个错误处理程序,它使用GalaSoft.MvvmLight.Messaging.Messenger来侦听来自ViewModels的消息。

在visual studio中,应用程序运行良好,但是当我使用ClickOnce发布应用程序然后尝试安装并运行它时,会发生以下异常:

FileNotFoundException

从以下行抛出异常:

Messenger.Default.Register<Error>(this, ErrorHandler.DisplayError);

我能够在一个空洞的项目中重新创建失败。以下是项目的github仓库的链接,如果您想亲眼看看: SystemRuntimeFail Demo

在通过stackoverflow帖子搜索有关如何解决这个问题以及尝试所有事情的信息后3天,我几乎完成了我的智慧。请帮忙!

1 个答案:

答案 0 :(得分:1)

我设法通过为发生这种情况的每个程序集添加绑定重定向到app.config来解决此问题。

我被this answer绊倒,其中包含一个<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">标记,其中包含所有<dependentAssembly>个。当我尝试这个时,它没有用。直到我尝试删除我取得进展的封闭标签时才开始。我为每个程序集添加了绑定重定向,我看到了一个异常,它终于有效了。

以下是我的完整app.config。我需要添加以解决此问题的部分是<runtime>标记

中的所有内容
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
  </startup>
  <runtime>
    <dependentAssembly>
      <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.ObjectModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Threading" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
    </dependentAssembly>
  </runtime>
</configuration>

我将更改推送到this repository修复问题