.NET程序集绑定

时间:2011-07-27 17:08:49

标签: .net .net-assembly assembly-resolution

我有一个api,MyApi,由应用程序MyApplication使用。

MyApi有几个针对.NET 4.0 Client Profile的dll。例如:

  • MyApi.Core
  • MyApi.Domain
  • MyApi.Providers

(还有一些)

为简化部署,这些是ILMerged into

  • MyApi.ClientProfile

所有的MyApis dll都很强大。

MyApplication中的所有项目都引用了MyApi.ClientProfile。

我现在正在向MyApi添加一些Web功能,所以我添加了一个dll MyApi.Web,它针对的是.NET 4.0 Extended Profile。 MyApi.Web引用MyApi.Core和MyApi.Domain(以及System.Web dlls)。

现在还有一个MyApplication.Web项目。它引用了MyApplication中的一些其他项目(它们引用了MyApi.ClientProfile dll)。 MyApplication.Web项目需要引用MyApi.Web dll。

我该怎么做?

如果我从MyApplication.Web添加对MyApi.Core和MyApi.Domain的引用,那么MyApplication.Web的多个程序集中将存在类型。

如果我没有从MyApplication.Web添加对MyApi.Core和MyApi.Domain的引用,MyApi.Web将无法加载,因为它无法找到MyApi.Core或MyApi.Domain(因为只有MyApi.ClientProfile是本)。

我无法处理程序集解析事件并将MyApi.Core / MyApi.Domain的请求重定向到MyApi.ClientProfile,因为MyApi程序集都是强名称的,并且会使其失败。

我无法将MyApi.Web合并到MyApi.ClientProfile中,因为.NET 4.0客户端配置文件应该支持MyApi.ClientProfile(MyApi.Web引用了System.Web等)。

如果我更改MyApi.Web以引用MyApi.ClientProfile,这应该适用于这种情况,但不是理想的,因为它不适用于另一个应用程序直接引用MyApi.Core和MyApi.Domain。

我不想强制MyApplication.Web在其配置中指定bypassTrustedAppStrongNames(想想以某种方式直接从MyApi.Web启用此设置可能是一个可接受的选项......)。

所以,我一直想到一个合适/优雅的解决方案来解决这个问题。

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我开始意识到:

如果您的程序集具有相同的公钥标记,则可以进行重定向,名称无关紧要。

因此,因为MyApi.Client配置文件使用与MyApi.Core相同的密钥签名,如果我在MyApi.Web中处理AssemblyResolve,我实际上可以告诉它使用MyApi.ClientProfile而不是MyApi.Core。

我原本以为它会引发强烈的名称验证错误。它不....因为公钥是相同的。