Не удалось загрузить файл или сборку Castle.Windsor - PullRequest
1 голос
/ 10 декабря 2010

Привет, я пытаюсь использовать WindsorContainer в своем приложении WPF.Я скачал dll-ы с этого сайта: http://stw.castleproject.org/Windsor.MainPage.ashx. WPF основан на .NET Framework 4.0, поэтому я добавляю

  1. Castle.Core и
  2. Castle.Windsor для.NET 4.0.

В моем проекте я отсылаю эту Caliburn dll-s:

  1. Caliburn.Castle
  2. Caliburn.Core
  3. Caliburn.PresentationFramework all for .NET 4.0

, а также 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, версия = 2.1.0.0, Culture = нейтральный, PublicKeyToken = 407dd0808d44fbdc' или одна из его зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)

StakTrace:

* в Spirit_Messenger.App.CreateContainer () в Caliburn.PresentationFramework.ApplicationModel.CaliburnApplication..ctor() в Spirit_Messenger.App..ctor () в C: \ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C # \ Pokec__Messenger \ Spirit_Messenger \ App.xaml.cs: строка 15 в Spirit_Messenger.App.Main () вC: \ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C # \ Pokec__Messenger \ Spirit_Messenger \ obj \ x86 \ Release \ App.g.cs: строка 50 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, аргументы String [])в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Thuntext.(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Выполнить (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart () *

Я новичок в WPF / IoC-DI, где могут возникнуть проблемы.Я так запутался.Спасибо за помощь.

1 Ответ

1 голос
/ 10 декабря 2010

Иногда это боль. Используйте ILDASM, чтобы проверить версию Castle, которая нужна другим DLL, и я уверен, что они отличаются от тех, что у вас есть.

Я решил свою проблему, скачав и перекомпилировав открытый исходный код для версии, которая у меня была.


Использование ILDASM для просмотра ссылок на сборку:

  • Откройте DLL с помощью ILDASM
  • Расширить дерево
  • Нажмите на манифест
  • В верхней части страницы вы можете увидеть ссылки. Например, вот фрагмент сборок для FluentNHibernate.DLL:

    // Версия метаданных: v2.0.50727 .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89) // .z \ V.4 .. .вер 2: 0: 0: 0 } . сборка extern NHibernate { .publickeytoken = (AA 95 F2 07 79 8D FD B4) // .... у ... .вер 3: 0: 0: 2001 } .assembly extern System.Core { .publickeytoken = (B7 7A 5C 56 19 34 E0 89) // .z \ V.4 .. .вер 3: 5: 0: 0 } .assembly extern System.Xml { .publickeytoken = (B7 7A 5C 56 19 34 E0 89) // .z \ V.4 .. .вер 2: 0: 0: 0 } . Сборка extern System.Data { .publickeytoken = (B7 7A 5C 56 19 34 E0 89) // .z \ V.4 .. .вер 2: 0: 0: 0 } Система сборки. extern { .publickeytoken = (B7 7A 5C 56 19 34 E0 89) // .z \ V.4 .. .вер 2: 0: 0: 0 } .assembly extern Iesi.Collections { .publickeytoken = (AA 95 F2 07 79 8D FD B4) // .... у ... .вер 1: 0: 1: 0 } .assembly extern System.Configuration { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A) //.? _....: .вер 2: 0: 0: 0 }

...