gpt4 book ai didi

c# - CaSTLe DynamicProxy 拦截器在使用不同程序集时出现问题

转载 作者:太空狗 更新时间:2023-10-29 23:00:50 25 4
gpt4 key购买 nike

我有这样一个场景:

我正在使用拦截器来捕获对主项目引用的程序集内部类(我们称之为功能)的调用。 Assembly Feature 由 NuGet 安装(它不是公开的,而是我们内部的)并且引用了另一个程序集(我们称它为 Core)。主项目也引用了程序集核心。 Core 包含用作其中一种拦截方法的参数类型的类定义。

只要 Main 项目和 Feature 引用相同版本的核心库,一切都可以正常工作。当此版本不同并且截获的方法使用 Core 中的类型作为方法参数时,就会出现问题。

在这种情况下,会抛出一个异常,指出需要一个强名称的程序集。:

[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 的核心,这是正确的,因为这个确切的程序集未部署到 bin 文件夹。

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

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

最佳答案

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

解决方案要么确保您在两种情况下都使用已签名的程序集,要么强制 DynamicProxy 仅生成未签名的程序集。

关于c# - CaSTLe DynamicProxy 拦截器在使用不同程序集时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com