Использование COM-библиотеки, нацеленной на .NET-2.0, в GAC в системе .NET-4-only - PullRequest
4 голосов
/ 07 декабря 2010

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

В ответ на мой предыдущий вопрос я пытаюсь максимально совместить написанное на 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 Ответ

0 голосов
/ 07 декабря 2010

.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. </p>

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

...