我有一个WPF应用程序,它引用了包含ViewModels并使用MvvmLight的.NET Standard 2.0库。我创建了一个错误处理程序,它使用GalaSoft.MvvmLight.Messaging.Messenger
来侦听来自ViewModels的消息。
在visual studio中,应用程序运行良好,但是当我使用ClickOnce发布应用程序然后尝试安装并运行它时,会发生以下异常:
从以下行抛出异常:
Messenger.Default.Register<Error>(this, ErrorHandler.DisplayError);
我能够在一个空洞的项目中重新创建失败。以下是项目的github仓库的链接,如果您想亲眼看看: SystemRuntimeFail Demo
在通过stackoverflow帖子搜索有关如何解决这个问题以及尝试所有事情的信息后3天,我几乎完成了我的智慧。请帮忙!
答案 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修复问题