我使用我用来学习Prism的测试WPF应用程序遇到错误。错误日志如下,但它的要点是它似乎无法找到Microsoft.Practices.Unity版本3.5.1.0。根据我的理解,这可能意味着两件事:要么找不到任何版本的Unity,要么找到错误的Unity版本号。
排除第一个选项(至少我相信这个规则)我仔细检查了dll是否安装在需要它的项目中以及bin文件夹中;每个项目和bin文件夹中只有一个Unity副本。它已安装,但根据属性描述,它表示版本为3.5.0.0。根据对象浏览器,它说dll位于标题为" Unity.3.5.1404.0"的文件夹中。请注意,使用NuGet安装了dll,我安装的两组软件包称为" Prism"和#34; Prism.UnityExtensions。"它是Unity dll所在的第二个。
有趣的是,我实际上开始了一个新的教程项目,看看它是否解决了这个问题,并从原来的项目中复制了一些项目。我第一次能够编译并运行它,但后来我从App.config文件中取出了下面的代码部分,看看会发生什么(愚蠢的错误......)并开始得到同样的错误。甚至在我将其添加回App.config文件之后。请注意,我创建项目时,下面的代码位于App.config文件中;它不是我个人后来添加的东西。
是否还有其他地方我应该寻找可能导致问题的流氓Unity dll?我需要添加或删除一些内容,以便当前的Unity dll能够正常工作吗?
发生错误的代码(在bootstrapper.Run上;这在App.xaml.cs中):
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
代码:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Prism.SharedInterfaces" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.1.0" newVersion="3.5.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
错误:
System.IO.FileLoadException未处理 的HResult = -2146234304 消息=无法加载文件或程序集&#39; Microsoft.Practices.Unity,Version = 3.5.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040) 来源= Microsoft.Practices.Prism.UnityExtensions FileName = Microsoft.Practices.Unity,Version = 3.5.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 FusionLog =&#34;&#34; 堆栈跟踪: 在Microsoft.Practices.Prism.UnityExtensions.UnityBootstrapper.Run(Boolean runWithDefaultConfiguration) 在Microsoft.Practices.Prism.Bootstrapper.Run() 在EmailClient.App.OnStartup(StartupEventArgs e)的c:\ Users \ Roger \ Google Drive \ Karnaluks \ Test Projects \ EmailClient \ EmailClient \ App.xaml.cs:第21行 在System.Windows.Application。&lt; .ctor&gt; b__1(对象未使用) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler) 在System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态) 在System.Windows.Threading.DispatcherOperation.Invoke() 在System.Windows.Threading.Dispatcher.ProcessQueue() 在System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,Boolean&amp; handling) 在MS.Win32.HwndWrapper.WndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,Boolean&amp; handling) 在MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler) 在System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority,TimeSpan timeout,Delegate方法,Object args,Int32 numArgs) 在MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam) 在MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG&amp; msg) 在System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame框架) 在System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame框架) 在System.Windows.Threading.Dispatcher.Run() 在System.Windows.Application.RunDispatcher(Object ignore) 在System.Windows.Application.RunInternal(窗口窗口) 在System.Windows.Application.Run(窗口窗口) 在System.Windows.Application.Run() 在EmailClient.App.Main()的c:\ Users \ Roger \ Google Drive \ Karnaluks \ Test Projects \ EmailClient \ EmailClient \ obj \ Debug \ App.g.cs:第50行 在System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String [] args) 在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(对象状态) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart() InnerException:System.IO.FileLoadException 的HResult = -2146234304 消息=无法加载文件或程序集&#39; Microsoft.Practices.Unity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040) FileName = Microsoft.Practices.Unity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 FusionLog ====预绑定状态信息=== 日志:DisplayName = Microsoft.Practices.Unity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 (完全指定的) 日志:Appbase = file:/// C:/ Users / Roger / Google Drive / Karnaluks / Test Projects / EmailClient / EmailClient / bin / Debug / 日志:初始PrivatePath = NULL 调用程序集:Microsoft.Practices.Prism.UnityExtensions,Version = 5.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35。 日志:此绑定在默认加载上下文中启动。 日志:使用应用程序配置文件:C:\ Users \ Roger \ Google Drive \ Karnaluks \ Test Projects \ EmailClient \ EmailClient \ bin \ Debug \ EmailClient.vshost.exe.Config 日志:使用主机配置文件: 日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。 日志:在应用程序配置文件中找到重定向:3.5.0.0重定向到3.5.1.0。 日志:政策后参考:Microsoft.Practices.Unity,Version = 3.5.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 日志:尝试下载新的URL文件:/// C:/ Users / Roger / Google Drive / Karnaluks / Test Projects / EmailClient / EmailClient / bin / Debug / Microsoft.Practices.Unity.DLL。 警告:比较程序集名称导致不匹配:构建号 错误:无法完成程序集的设置(hr = 0x80131040)。探测终止。
InnerException:
答案 0 :(得分:0)
您是否尝试过清洁和重建解决方案?也许卸载软件包然后重新安装它们会有所帮助。安装Nuget软件包时会添加app.xaml代码。