我有这样一个场景:不同组件城堡DynamicProxy拦截器有问题
我使用拦截器捕捉到一类是内部组件的调用(我们称之为功能)由主体工程引用。 Assembly功能由NuGet安装(它不是公开的,但是是内部的),并且引用了另一个程序集(我们称之为Core)。主项目也引用组装核心。 Core包含用作被拦截方法之一的参数类型的类定义。
只要主项目和功能引用相同版本的Core库,它就可以正常工作。当这个版本不同并且拦截方法使用来自Core的类型作为方法参数时会出现问题。
在这种情况下,抛出一个异常,各国A strongly-named assembly is required.
:
[FileLoadException: Could not load file or assembly 'Core, Version=0.2.2.30, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)]
Castle.Proxies.Invocations.IBasketService_Update.InvokeMethodOnTarget() +0
Castle.DynamicProxy.AbstractInvocation.Proceed() +116
Project.Basket.BasketServiceUpdatedInterceptor.Intercept(IInvocation invocation) in c:\(...)\Basket\BasketServiceUpdatedInterceptor.cs:20
Castle.DynamicProxy.AbstractInvocation.Proceed() +604
Castle.Proxies.IBasketServiceProxy.Update(ProductId productId, UInt16 quantity) +210 (...)
该处核心0.2.2.30版本是装配特征期待一个版本,主要项目使用,例如版本0.2.2.31。 Castle DynamicProxy无法找到版本为0.2.2.30的Core,这是正确的,因为这个确切的程序集没有部署到bin文件夹。
请注意,在我们的场景中,不同版本的Core是完全正常的情况。特征组件期望版本高于指定版本 - 不是精确版本。
我不确定DynamicProxy是否应该在组装期望中不太僵化,我不得不接受这个限制。我写了简单的代理类来克服这个问题,所以它不会阻止我,但它阻止我们在我们的解决方案中使用DynamicProxy。
当使用Castle.Windsor(使用DynamicProxy)时,我们有完全相同的问题。所以,我们没有机会用它来生成未签名的程序集。任何线索现在要做什么? –
找到它:) windsorContainer.Kernel.ProxyFactory = new DefaultProxyFactory(disableSignedModule:true); –