Какой CLR будет использовать приложение, использующее библиотеки DLL, скомпилированные для разных версий .net? - PullRequest
2 голосов
/ 21 февраля 2010

Я думаю, это довольно очевидно, но я подумал, что лучше спросить:

Если приложение (exe) скомпилировано для запуска на .net 3.5 и если используемые им dll скомпилированы для .net 1.1, будет ли DLL автоматически использовать 2.0 CLR, т.е. родители?

А как же наоборот?

Если да, то как насчет проблем совместимости?

Ответы [ 3 ]

1 голос
/ 21 февраля 2010

Это файл EXE, который решает, какую версию среды выполнения .NET будет использовать процесс. Любые сборки, скомпилированные для более ранних версий .NET, должны будут использовать «версию процесса». Обычно это работает, поскольку в .NET было очень мало критических изменений.

Приложение .NET 3.5, использующее DLL .NET 1.1, будет запускать эту DLL на CLR 2.0 (для .NET 2.0, 3.0 и 3.5 все используют одну и ту же версию CLR 2.0).

.NET 4 имеет новую CLR, и одна из новых функций .NET 4 - это внутрипроцессный хостинг CLR , который позволяет использовать несколько версий .NET в одном процессе и может измениться. ответ ..

1 голос
/ 21 февраля 2010

Нет. Если вы нацелены на фреймворк версии 3.5, он не будет магически использовать 2.0, если 3.5 нет.

Но вы можете использовать assemblybinding bindingredirect в app.exe.config, чтобы указать версию для замены:

<configuration>

   ....

  <runtime>
    <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentassembly>
        <assemblyidentity name="System" culture="neutral" publickeytoken="969db8053d3322ac" />
        <bindingredirect newVersion="2.0.0.0" oldVersion="1.0.5000.0" />
      </dependentassembly>
      <dependentassembly>
        <assemblyidentity name="System.Windows.Forms" culture="neutral" publickeytoken="969db8053d3322ac" />
        <bindingredirect newVersion="2.0.0.0" oldVersion="1.0.5000.0" />
      </dependentassembly>      
    </assemblybinding>
  </runtime>

</configuration>

См. Версии перенаправления сборки

0 голосов
/ 21 февраля 2010

Если ваше приложение использует framework 3.5 (который на самом деле является CLR 2) и загружает dll, скомпилированные для CLR 1.0 или CLR 1.1, тогда эти dll будут автоматически использовать CLR 2. Вы не можете пойти другим путем - т.е. Вы не можете загрузить DLL CLR 2 в процесс CLR 1 без какого-либо вреда.

В CLR 4 эти правила немного изменяются, поскольку теперь вы можете иметь несколько экземпляров CLR в данном процессе, однако это актуально только в том случае, если вы создаете экземпляры объектов через COM, а не если вы загружаете через обычное отражение.

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