无法在引用 .Net 标准库中的 MvvmLight 的已部署 WPF ClickOnce 应用程序中加载文件或程序集 'System.Runtime'

Could not load file or assembly 'System.Runtime' in deployed WPF ClickOnce App referencing MvvmLight from .Net Standard Library

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

侦听来自 ViewModel 的消息

在 visual studio 中,应用程序 运行 没问题,但是当我使用 ClickOnce 发布应用程序然后尝试安装并 运行 它时,出现以下异常:

从以下行抛出异常:

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

我能够在一个几乎是空的项目中重现失败。以下是项目的 link 到 github 回购,如果您想亲自查看: SystemRuntimeFail Demo

在 Whosebug 帖子中搜索了 3 天以获取有关如何解决此问题的信息并尝试了几乎所有方法之后,我几乎已经无计可施了。请帮忙!

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

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

以下是我的完整 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 解决了问题