我有这样一个场景:
我使用拦截器捕捉到一类是内部组件的调用(我们称之为功能)由主体工程引用。 装配特征是通过安装的NuGet(它不公开,但我们内部的一个),并具有一定的参考到另一个组件(我们称之为核心)。 主要项目是引用组件的堆芯为好。 芯包含用来作为参数类型的所拦截的方法之一的类定义。
这一切,只要能正常工作的主要项目和特色是引用核心库的版本相同。 当这个版本是不同的,并且截获方法从核心使用类型为方法参数出现问题。
在这种情况下,抛出一个异常,指出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。 城堡DynamicProxy无法找到核心与0.2.2.30版本,因为这个确切的组件未部署到bin文件夹这是正确的。
请注意,不同版本的核心是在我们的情景完全正常的情况。 功能组件期待的版本高于规定 - 不准确的版本。
我不知道是否DynamicProxy应该在它的装配期望刚性不足是我必须接受这个限制。 我已经写了简单的代理类来解决这个问题,所以它不会阻止我了,但它的块我们从我们的解决方案使用DynamicProxy。