Castle DynamicProxy Interceptor具有不同程序集的问题

我有这样的场景:

我正在使用拦截器来捕获对主程序引用的程序集内部类(我们称之为Feature)的类的调用。 assembly特征由NuGet安装(它不是公共的,而是我们的内部assembly)并且引用了另一个assembly(让我们称之为Core)。 主项目也引用了汇编Core。 Core包含类定义,该类定义用作截取方法之一的参数类型。

只要主项目和function引用相同版本的Core库,一切正常。 当此版本不同并且截获的方法使用Core中的类型作为方法参数时会出现问题。

在这种情况下,会抛出一个exception,指出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 (...) 

如果Core 0.2.2.30的版本是程序集Feature预期的版本,则主项目使用的是例如版本0.2.2.31。 Castle DynamicProxy无法找到版本为0.2.2.30的Core,这是正确的,因为这个精确的程序集未部署到bin文件夹。

请注意,在我们的场景中,不同版本的Core是完全正常的情况。 function组件期望版本高于指定版本 – 不是精确版本。

我不确定DynamicProxy是否应该在它的assembly期望中不那么严格我是否必须接受这个限制。 我已经编写了简单的代理类来克服这个问题,所以它不会阻止我,但它阻止我们在我们的解决方案中使用DynamicProxy。

问题是由于DP是针对已签名的程序集生成的,然后正在使用未签名的程序集版本。

解决方案是确保在两种情况下都使用带符号的程序集,或强制DynamicProxy仅生成无符号程序集。