您好我尝试在我的WPF应用中使用WindsorContainer。我从这个网站下载了dll-s:http://stw.castleproject.org/Windsor.MainPage.ashx。 WPF基于.NET Framework 4.0,因此我添加了
我的项目我引用了这个Caliburn dll-s:
以及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的新手,可能会有问题。我很困惑。谢谢你的帮助。
答案 0 :(得分:1)
这有时是一种痛苦。使用ILDASM检查那些其他DLL需要的Castle版本,我敢打赌它们与你拥有的版本不同。
我通过下载并重新编译我的版本的开源代码解决了我的问题。
使用ILDASM查看程序集的引用:
在页面顶部,您可以看到参考文献。例如,这里是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: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系统 { .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 }