Я не хочу задавать вопрос, который задавался здесь бесчисленное количество раз, а также был опубликован в блогах повсюду, но я все еще не могу заставить мой обновленный проект работать.
Мое приложение изначально было написано в VS2008 и предназначалось для .NET 3.5 SP1. Я только что обновился до VS2010 и решил, что постараюсь воспользоваться новыми языковыми функциями и интегрированным MEF, поэтому я изменил все свои проекты на .NET 4.0. После правильной настройки и компиляции всего (например, событий после сборки, ссылок MEF и тому подобного) я запустил свое приложение и получил известную ошибку:
Сборка смешанного режима построена на версии v2.0.50727 среды выполнения и не может быть загружена во время выполнения 4.0 без дополнительной информации о конфигурации.
Затем я добавил следующий атрибут в мой элемент <startup>
в app.config
:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
Но когда я запускаю свое приложение, я все равно получаю ту же ошибку. Могу ли я что-нибудь сделать, чтобы решить эту проблему дальше? Я буквально понятия не имею, что еще попробовать. Я пытаюсь найти как можно больше информации о сборках в смешанном режиме и о том, как они взаимодействуют с CLR, но мои базовые знания в этой области в лучшем случае ограничены.
Я также пытался обойти эту проблему, перекомпилировав исходный код log4net для целевой платформы .NET 4.0, но это не сработало так, как я надеялся. После компиляции я получил эту ошибку:
Нарушение правил безопасности наследования при переопределении члена: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Доступность защищенного метода переопределения должна соответствовать доступности защищенности переопределяемого метода.
Итак, я нашел пост, в котором рекомендовалось добавить следующую строку в AssemblyInfo.cs:
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
И когда я это сделал, я закончил прямо там, где начал! (с ошибкой сборки смешанного режима).
Тьфу.