Использование DLL COM для .NET-2.0 в GAC в системе только для .NET-4

Еще раз приветствую,

Следуя моему предыдущему вопросу, я пытаюсь максимизировать совместимость моего расширения Windows Explorer, написанного на C#. В частности, я хочу убедиться, что он работает в среде, в которой установлен .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? Это кажется слишком странным, чтобы быть правдой...


person Paul Accisano    schedule 07.12.2010    source источник


Ответы (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. Однако было бы интересно, если бы это работало. Я бы не стал доверять этому в среде реального времени, но это было бы действительно очень интересно.

person TamusJRoyce    schedule 07.12.2010
comment
Нет проблем с установкой самой сборки в GAC. На самом деле он устанавливается в расположение .NET 3.5 GAC, даже если .NET 3.5 не установлен. Я сомневаюсь, что RuntimeVersion в реестре имеет какое-либо отношение к этому процессу, поскольку установка GAC происходит до регистрации. - person Paul Accisano; 07.12.2010