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