Перенаправление версий сборки на другой CLR / GAC - PullRequest
0 голосов
/ 01 августа 2011

У меня есть вопрос, касающийся 2 версий CLR, то есть версии 2 и версии 4 .NET Framework, которые используют разные местоположения GAC. У меня есть клиентское приложение, которое ссылается на сборку «X» из v2 GAC (C: \ Windows \ Assembly). Сейчас я обновляю сборку «X» для запуска в v4 .NET Framework (C: \ Windows \ Microsoft.NET \ assembly), однако я не хочу перекомпилировать клиентское приложение. Обратите внимание, что сборка "X" удаляется из v2 GAC перед установкой в ​​v4 GAC.

Можно ли создать файл политики издателя, который перенаправляет сборку, которая находилась в версии 2 CLR, в версию 4 CLR? Если да, то как это достигается?

Я выполнил поиск в MSDN и понял, что в элементе assemblyBinding есть поле applyTo, в котором можно указать версию .NET Framework, но, похоже, оно охватывает всю привязку.

Что бы я хотел, это что-то вроде:

<bindingRedirect oldVersion="1.0.0.0" .Net 2 newVersion="2.0.0.0" .Net 4/>

Я прочитал здесь http://msdn.microsoft.com/en-us/magazine/dd727509.aspx, что приложения CLR v2.0 теперь не могут видеть сборки CLR v4.0 в GAC. Однако вы можете заставить приложение использовать обновленный CLR, используя:

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />

Так будет ли достаточно смеси этого плюс политика издателя, или есть другой способ?

1 Ответ

1 голос
/ 01 августа 2011

Определяющим фактором здесь является то, под какой версией CLR работает ваше клиентское приложение. Если это v2, то вы ничего не можете сделать, чтобы сделать сборки v4 пригодными для использования или даже видимыми для него. Если он работает под CLR v4, то он сначала автоматически попытается разрешить ссылки на сборки в GAC v4.

Хорошая новость заключается в том, что вам не нужно перекомпилировать клиентское приложение для достижения этой цели. Вы можете просто заставить его работать в .Net 4, добавив его в файл конфигурации приложения:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>

Это должно дать вам то, что вы хотели.

...