1

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

MyApi 有几个针对 .NET 4.0 客户端配置文件的 dll。例如:

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

(还有更多)

为了部署简单,这些被ILMerged到

  • MyApi.ClientProfile

所有 MyApis dll 都是强命名的。

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

我现在正在向 MyApi 添加一些 Web 功能,因此我添加了一个针对 .NET 4.0 扩展配置文件的 dll MyApi.Web。MyApi.Web 引用 MyApi.Core 和 MyApi.Domain(以及 System.Web dll)。

现在还有一个 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 以某种方式启用此设置可能是一个可接受的选项......)。

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

有什么建议么?

谢谢。

4

1 回答 1

0

我恍然大悟:

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

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

我原以为它会引发一个强名称验证错误。它没有....因为公钥是相同的。

于 2011-08-23T04:59:02.590 回答