如何解决“无法加载文件或程序集'Microsoft.Practices.Unity”错误?

时间:2015-04-17 12:03:09

标签: c# wpf dll prism

我使用我用来学习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: 

1 个答案:

答案 0 :(得分:0)

您是否尝试过清洁和重建解决方案?也许卸载软件包然后重新安装它们会有所帮助。安装Nuget软件包时会添加app.xaml代码。