双重异常不一致(System.IO.FileNotFoundException / System.Runtime程序集版本)

时间:2018-07-27 08:37:03

标签: c# .net prism

在WPF应用程序中,在这种情况下,我正在创建Prism.Unity.UnityBootstraper子类Bootstrapper:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    var bootstapper = new Bootstrapper();
    bootstapper.Run();
}

构建很好,但是,我感到很奇怪:

  

System.IO.FileNotFoundException:'无法加载文件或程序集   'System.Runtime,版本= 4.1.1.0,区域性=中性,   PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。的   系统找不到指定的文件。'

和我在一起的是以下内部异常,其中版本不同:

  

FileNotFoundException:无法加载文件或程序集   'System.Runtime,版本= 4.0.0.0,区域性=中性,   PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。的   系统找不到指定的文件。

我重新安装了nuget软件包,并尝试仅使用此代码制作一个孤立的用例,而我无法重现异常。

发生了什么事,我该如何解决呢?


为了进一步调查,我激活了FusionLog:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"ForceLog"=dword:00000001
"LogFailures"=dword:00000001
"LogResourceBinds"=dword:00000001
"LogPath"="C:\\Logs\\Fusion\\"

但是实用程序fuslogvs.exe不太实用;所以我使用了powershell:

select-string "operation failed" *htm -ca | % {"$($_.filename):$($_.line)"}

来自我的程序集的日志目录,位于c:/logs/fusion中。我发现了3个问题,尤其是:

  

System.Runtime,版本= 4.0.0.0,区域性=中性,   PublicKeyToken = b03f5f7f11d50a3a.HTM:操作失败。

在文件中,我得到了:

LOG: AppName = ShutterModeler.exe
Calling assembly : Prism, Version=6.3.0.0, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\soleil\Documents\Visual Studio 2017\Projects\ShutterModeler\x64\Debug\ShutterModeler.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 4.0.0.0 redirected to 4.1.1.0.
LOG: Post-policy reference: System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Users/soleil/Documents/Visual Studio 2017/Projects/ShutterModeler/x64/Debug/System.Runtime.DLL.
LOG: Attempting download of new URL file:///C:/Users/soleil/Documents/Visual Studio 2017/Projects/ShutterModeler/x64/Debug/System.Runtime/System.Runtime.DLL.
LOG: Attempting download of new URL file:///C:/Users/soleil/Documents/Visual Studio 2017/Projects/ShutterModeler/x64/Debug/System.Runtime.EXE.
LOG: Attempting download of new URL file:///C:/Users/soleil/Documents/Visual Studio 2017/Projects/ShutterModeler/x64/Debug/System.Runtime/System.Runtime.EXE.
LOG: All probing URLs attempted and failed.

实际上,目录构建目标中没有System.Runtime.DLL文件。

但是,System.Runtime已安装(v4.3),并且存在于$(SolutionDir)\packages中。在内部找不到dotnet 4.7.2目标:

Name
----
MonoAndroid10
MonoTouch10
net45
net462
portable-net45+win8+wp80+wpa81
win8
wp80
wpa81
xamarinios10
xamarinmac20
xamarintvos10
xamarinwatchos10

我的WPF项目的目标是.net 4.7.2。


如Alex Ghiondea的建议-MSFT

我删除了:

<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />

来自app.config,并且不再需要构建后的手动副本作为解决方法:

 xcopy /y "$(SolutionDir)packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll" "$(TargetDir)"

1 个答案:

答案 0 :(得分:1)

似乎您的应用程序的app.config中具有System.Runtime的程序集绑定重定向。请删除它,我希望这个错误会消失