Я изменил файл .config нескольких разных приложений, например:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
Когда я делал это для devenv.exe.config (VS 2005 - не спрашивайте :)), все работало замечательно - большая часть Visual Studio использовала .NET 2.0, но я смог использовать таргетинг на сборки. NET 4.0 Framework.
Я попытался сделать то же самое для пользовательского .exe, который основан на MS CAB (немного изменен) и имеет гибридное сочетание содержимого WPF и WinForms. Как только я изменил файл конфигурации приложения, я начал получать это исключение, когда-то во время запуска приложения:
Операция Undo обнаружила контекст, отличный от того, который был применен в соответствующей операции Set. Возможная причина в том, что контекст был установлен в потоке, а не восстановлен (отменен).
System.InvalidOperationException: операция Undo обнаружила контекст, отличный от того, который был применен в соответствующей операции Set. Возможная причина в том, что контекст был установлен в потоке, а не восстановлен (отменен).
Существует большая длинная трассировка стека, которая не показывает ничего в коде моего приложения напрямую (просто набор сборок MS).
Если я изменю файл приложения .config следующим образом:
<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>
Т.е. я удаляю элемент enabledRuntime, тогда приложение не выдает это исключение. Но когда я перехожу к точке в моем коде, где я пытаюсь загрузить сборку .NET 4, если происходит сбой с этим:
System.BadImageFormatException: не удалось загрузить файл или сборку '' или одну из ее зависимостей. Эта сборка построена средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена.
Полагаю, это ожидается.
У меня два вопроса:
1) Любая идея, почему я получаю исключение System.InvalidOperationException, когда я изменяю файл конфигурации этого приложения, чтобы включить элемент supportRuntime, добавив поддержку .NET 4 и любые предложения, что я могу с этим сделать?
2) Если ответ «не знаю, почему / не знаю, что вы можете с этим поделать», то мой код .NET 3.5 SP1 (C #) может обеспечить более точную поддержку для условного добавления .NET 4 поддержка времени выполнения для определенной сборки (ий) без преобразования всего моего приложения в целевую .NET 4 или без использования декларативного подхода к файлу конфигурации? В какой-то момент я бы перевел все приложение на целевой .NET 4, но в краткосрочной перспективе это сложная задача, и я надеюсь на какое-то краткосрочное решение / хак.
Большое спасибо за любой совет, который вы можете дать!