我有一个api,MyApi,由应用程序MyApplication使用。
MyApi有几个针对.NET 4.0 Client Profile的dll。例如:
(还有一些)
为简化部署,这些是ILMerged into
所有的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启用此设置可能是一个可接受的选项......)。
所以,我一直想到一个合适/优雅的解决方案来解决这个问题。
有什么建议吗?
感谢。
答案 0 :(得分:0)
我开始意识到:
如果您的程序集具有相同的公钥标记,则可以进行重定向,名称无关紧要。
因此,因为MyApi.Client配置文件使用与MyApi.Core相同的密钥签名,如果我在MyApi.Web中处理AssemblyResolve,我实际上可以告诉它使用MyApi.ClientProfile而不是MyApi.Core。
我原本以为它会引发强烈的名称验证错误。它不....因为公钥是相同的。