开发者

Could not load file or assembly Castle.Windsor

Hi I try use WindsorContainer in my WPF app. I downloaded dll-s from this site: http://stw.castleproject.org/Windsor.MainPage.ashx. WPF is based on .NET Framework 4.0 so I add

  1. Castle.Core and
  2. Castle.Windsor for .NET 4.0.

I my project I refer this Caliburn dll-s:

  1. Caliburn.Castle
  2. Caliburn.Core
  3. Caliburn.Presentation开发者_Go百科Framework all for .NET 4.0

and also Microsoft.Practices.ServiceLocator is for version 2.0.

My code is look like this:

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>

When I try compile my project I get this error:

Could not load file or assembly 'Castle.Windsor, Version=2.1.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

StakTrace:

*at Spirit_Messenger.App.CreateContainer() at Caliburn.PresentationFramework.ApplicationModel.CaliburnApplication..ctor() at Spirit_Messenger.App..ctor() in C:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec__Messenger\Spirit_Messenger\App.xaml.cs:line 15 at Spirit_Messenger.App.Main() in C:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec__Messenger\Spirit_Messenger\obj\x86\Release\App.g.cs:line 50 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()*

I am newbie in WPF / IoC-DI where can be problem. I am so confuse. Thank for help.


This is sometimes a pain. Use ILDASM to check the version of the Castle that those other DLLs need and I bet they are different from the ones you have.

I solved my problem by downloading and recompiling the open source code against the version I had.


Using ILDASM to see references of an assembly:

  • Open the DLL with ILDASM
  • Extend the tree
  • Click on the manifest
  • At the top of the page you can see the references. For example here is a snippet of assemblies for FluentNHibernate.DLL:

    // Metadata version: 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:2001 } .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 System { .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 }

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜