Использование.NET-2.0-ориентированной COM DLL в GAC в системе.NET-4-only

Снова привет,

В ответ на мой предыдущий вопрос я пытаюсь максимально совместить написанное на C# расширение Windows Explorer. В частности, мне интересно убедиться, что он работает в среде, в которой установлен.NET 4, а.NET 3.5 и ниже не установлены. Казалось бы, нет проблем, но, видимо, не все так просто...

Есть две проблемы. Во-первых, не ориентированные на.NET-4 сборки не будут загружаться с CLR 4, если они не имеют .config файл, который указывает <supportedRuntime version="v4.0" />, Даже пытаясь использовать ngen на них не получится без этого .config файл. Но моя DLL идет в GAC. Как мне получить .config файл там тоже? Другие спрашивали то же самое и пришли к выводу: "Ну, я просто сделаю статический класс настроек вместо этого". Очевидно, я не могу этого сделать...

Вторая проблема: когда я регистрирую свою DLL с regasm.exe, а затем открыть реестр, чтобы увидеть, что он написал, я вижу RuntimeVersion = v2.0.50727 под своей записью CLSID. Это также предотвращает загрузку DLL. Только после того, как я вручную изменил RuntimeVersion значение для v4.0.30319 загружает DLL.

Так какого черта я должен заставить моего установщика делать здесь? Для первого я понятия не имею. Во-вторых, я полагаю, мне нужно, чтобы установщик вручную установил в системном реестре RuntimeVersion какую-либо версию.NET? Это кажется слишком странным, чтобы быть правдой...

1 ответ

.Net 2.0 - 3.5 и.Net 4.0 имеет два разных GAC, если я правильно помню.

"Проблема с размером частично решена с помощью установщика.NET 4 (x86 + x64), размер которого составляет 54 МБ, и в который не встроены полные установочные пакеты для предыдущих версий". - http://en.wikipedia.org/wiki/.NET_Framework

Таким образом, если вы устанавливаете.Net 3.5, вы получаете предыдущие версии.Net. Это может сбивать с толку.NET 4.0, который не включает эти предыдущие среды выполнения. Я полагаю, что это означает, что вам нужно установить среду выполнения.Net 3.5 наряду с.Net 4.0, чтобы получить <= .Net 3.5 среды выполнения для установки в GAC.

Я также считаю, что если вы измените RuntimeVersion, вы получите.DLL для установки в неправильный GAC. Было бы интересно, однако, если это работает. Я бы не стал доверять этому в среде реального времени, но это было бы действительно очень интересно.

Другие вопросы по тегам