无法加载文件或程序集Castle.Windsor

时间:2010-12-10 15:49:24

标签: wpf castle-windsor

您好我尝试在我的WPF应用中使用WindsorContainer。我从这个网站下载了dll-s:http://stw.castleproject.org/Windsor.MainPage.ashx。 WPF基于.NET Framework 4.0,因此我添加了

  1. Castle.Core和
  2. Castle.Windsor for .NET 4.0。
  3. 我的项目我引用了这个Caliburn dll-s:

    1. Caliburn.Castle
    2. Caliburn.Core
    3. Caliburn.PresentationFramework all for .NET 4.0
    4. 以及Microsoft.Practices.ServiceLocator适用于版本2.0。

      我的代码如下所示:

      App.cs

      public partial class App : CaliburnApplication
      {
          private IWindsorContainer _container;
      
          public App()
          {
              RegisterComponents();
          }
      
          protected override IServiceLocator CreateContainer()
          {
              _container = new WindsorContainer();
              return new WindsorAdapter(_container);
          }
      
          protected override object CreateRootModel()
          {
              return _container.Resolve<IShellViewModel>();
          }
      
          protected void RegisterComponents()
          {
              _container.Register(Component.For<IShellViewModel>()
                                           .ImplementedBy<ShellViewModel>()
                                           .LifeStyle.Singleton);
          }
      
      }
      

      的App.xaml

      <am:CaliburnApplication 
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:am="clr-namespace:Caliburn.PresentationFramework.ApplicationModel;assembly=Caliburn.PresentationFramework"
          x:Class="Spirit_Messenger.App">
          <am:CaliburnApplication.Resources>
          </am:CaliburnApplication.Resources>
      </am:CaliburnApplication>
      

      当我尝试编译我的项目时,我收到此错误:

      无法加载文件或程序集“Castle.Windsor,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

      StakTrace:

      *在Spirit_Messenger.App.CreateContainer()    在Caliburn.PresentationFramework.ApplicationModel.CaliburnApplication..ctor()    在C:\ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C#\ Pokec__Messenger \ Spirit_Messenger \ App.xaml.cs中的Spirit_Messenger.App..ctor():第15行    在C:\ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C#\ Pokec__Messenger \ Spirit_Messenger \ obj \ x86 \ Release \ App.g.cs中的Spirit_Messenger.App.Main():第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.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean ignoreSyncCtx)    在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)    在System.Threading.ThreadHelper.ThreadStart()*

      我是WPF / IoC-DI的新手,可能会有问题。我很困惑。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这有时是一种痛苦。使用ILDASM检查那些其他DLL需要的Castle版本,我敢打赌它们与你拥有的版本不同。

我通过下载并重新编译我的版本的开源代码解决了我的问题。


使用ILDASM查看程序集的引用:

  • 使用ILDASM打开DLL
  • 扩展树
  • 点击清单
  • 在页面顶部,您可以看到参考文献。例如,这里是FluentNHibernate.DLL的一组程序集:

    //元数据版本:v2.0.50727 .assembly extern mscorlib {   .publickeytoken =(B7 7A 5C 56 19 34 E0 89)// .z \ V.4 ..   .ver 2:0:0:0 } .assembly extern NHibernate {   .publickeytoken =(AA 95 F2 07 79 8D FD B4)// .... y ...   .ver 3:0:0:20​​01 } .assembly extern System.Core {   .publickeytoken =(B7 7A 5C 56 19 34 E0 89)// .z \ V.4 ..   .ver 3:5:0:0 } .assembly extern System.Xml {   .publickeytoken =(B7 7A 5C 56 19 34 E0 89)// .z \ V.4 ..   .ver 2:0:0:0 } .assembly extern System.Data {   .publickeytoken =(B7 7A 5C 56 19 34 E0 89)// .z \ V.4 ..   .ver 2:0:0:0 } .assembly extern系统 {   .publickeytoken =(B7 7A 5C 56 19 34 E0 89)// .z \ V.4 ..   .ver 2:0:0:0 } .assembly extern Iesi.Collections {   .publickeytoken =(AA 95 F2 07 79 8D FD B4)// .... y ...   .ver 1:0:1:0 } .assembly extern System.Configuration {   .publickeytoken =(B0 3F 5F 7F 11 D5 0A 3A)//。?_....:   .ver 2:0:0:0 }