2012-05-15 3 views
2

На моем компьютере я установил .NET Framework 2.0, а затем .NET Fratmeworkt 3.0. Однако недавно я получаю исключение из одной программы, говорящей «Event 1000, .NET Runtime 2.0 Error Reporting». Мне интересно, почему эта программа по-прежнему использует .NET Runtime 2.0 вместо новой версии. Как я могу проверить, какая версия .NET Runtime используется конкретной программой? Можно ли это изменить?.net runtime 2.0 вместо самой новой версии?

ответ

2

Все зависит от того, какая версия .NET была скомпилирована. Разработчик выбирает целевую структуру. Насколько мне известно, конечные пользователи не могут изменить, какая версия библиотек используется после развертывания. Если приложение предназначалось для 2.0, даже если у вас установлено 4.0, он будет всегда запускаться в версии 2.0 для lib.

3

«.NET runtime» на самом деле означает «Common Language Runtime» (CLR), версия 2.0 для .NET Framework 2.0, 3.0 и 3.5. Только с .NET 4.0 версия CLR также была увеличена до 4.0 (есть много вопросов о путанице в отношении этого двойного управления версиями на SO, для приятного обзора см. Это answer). Таким образом, сообщение, которое вы видите, может ввести в заблуждение, но все еще верно.

Если вы еще не установили .NET 4.0, .NET runtime 2.0 - единственная версия, присутствующая на вашем компьютере.

Возможно, вам захочется узнать, действительно ли приложение действительно скомпилировано/создано против .NET framework 3.0 (3.5) вместо .NET framework 2.0.

Для получения этой информации вам необходимо просмотреть метаданные сборок приложения, то есть место, где хранятся ссылки на другие сборки, в том числе те, которые содержатся в самой платформе .NET, вместе с версией этих других сборок.

Для просмотра этой информации вы можете использовать Reflector, или ILDASM.EXE, который поставляется с .NET Framework SDK (или Visual Studio).

Например, используя ILDASM.EXE на двоичном (исполняемом или DLL) по вашему выбору, затем откройте узел «МАНИФЕСТ». Вы увидите записи, как это:

.assembly extern System.Windows.Forms 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 

В ДАННОЙ случае это был взят из приложения в .NET 4.0 и относится только к System.Windows.Forms.dll, но я думаю, вы получите картину.

Вы можете (частично) повлиять на версию исполняемого файла приложения, указав элемент <supportedRuntime> в файле конфигурации приложения. Более подробно об этом см. this Stack Overflow question, среди others.

1

Runtime - ключевое слово. Было всего 4 различных версии среды выполнения: 1.0, 1.1, 2.0 и 4.0. Вы все еще используете версию 2.0.50727 из CLR и дрожание. И mscorlib.dll и другие основные сборки .NET Framework все еще 2.0.0.0

У вас определенно появилось намного больше положительных эффектов, когда вы установили .NET 3.0, кучу новых сборок, поддерживающих такие вещи, как WCF, WPF и Linq и новую версию компилятора C#. Достаточно гарантировать увеличение номера версии, даже если для них не требуется новая версия среды выполнения.

То же самое произойдет со следующей версией .NET 4.5. Версия исполнения остается неизменной, 4.0.30319

Смежные вопросы