Привязка сборки .NET - PullRequest
       28

Привязка сборки .NET

1 голос
/ 27 июля 2011

У меня есть API MyApi, который используется приложением MyApplication.

MyApi имеет несколько библиотек, предназначенных для клиентского профиля .NET 4.0. Например:

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

(и еще немного)

Для простоты развертывания это ILMerged в

  • MyApi.ClientProfile

Все библиотеки MyApis имеют сильные имена.

Все проекты в MyApplication имеют ссылку MyApi.ClientProfile.

Сейчас я добавляю некоторые веб-функции в MyApi, поэтому я добавил dll MyApi.Web, который предназначен для расширенного профиля .NET 4.0. MyApi.Web ссылается на MyApi.Core и MyApi.Domain (а ​​также на dll System.Web).

Теперь существует также проект MyApplication.Web. Он ссылается на некоторые другие проекты в MyApplication (у которых есть ссылки на MyApi.ClientProfile dll). Проект MyApplication.Web должен ссылаться на MyApi.Web dll.

Как я могу это сделать?

Если я добавлю ссылки на MyApi.Core и MyApi.Domain из MyApplication.Web, то для MyApplication.Web будут типы, существующие в нескольких сборках.

Если я не добавлю ссылки на MyApi.Core и MyApi.Domain из MyApplication.Web, MyApi.Web не удастся загрузить, поскольку не может найти MyApi.Core или MyApi.Domain (потому что только MyApi.ClientProfile настоящее время).

Я не могу обработать событие разрешения сборки и перенаправить запросы для MyApi.Core / MyApi.Domain в MyApi.ClientProfile, поскольку все сборки MyApi имеют строгое имя, и это приведет к сбою.

Я не могу объединить MyApi.Web с MyApi.ClientProfile, поскольку MyApi.ClientProfile должен поддерживаться для клиентского профиля .NET 4.0 (а MyApi.Web содержит ссылки на System.Web и т. Д.).

Если я изменю MyApi.Web на ссылку MyApi.ClientProfile, это должно работать в этом случае, но не идеально, поскольку не будет работать для другого приложения, ссылающегося непосредственно на MyApi.Core и MyApi.Domain.

Я не хочу заставлять MyApplication.Web указывать bypassTrustedAppStrongNames в своей конфигурации (хотя использование этого параметра каким-либо образом напрямую из MyApi.Web может быть приемлемым вариантом ....).

Итак, я застрял, думая о подходящем / элегантном решении этой проблемы.

Есть предложения?

Спасибо.

1 Ответ

0 голосов
/ 23 августа 2011

Я пришел к осознанию:

Если ваши сборки имеют одинаковый токен открытого ключа, вы можете выполнить перенаправление, и имя не имеет значения.

Итак, поскольку профиль MyApi.Client подписан тем же ключом, что и MyApi.Core, если я обрабатываю AssemblyResolve в MyApi.Web, я на самом деле МОГУ сказать ему использовать MyApi.ClientProfile вместо MyApi.Core.

Я бы подумал, что это приведет к ошибке проверки строгого имени. Это не .... потому что открытые ключи одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...