Есть ли разница между созданием / запуском приложения для.Net 4 с установленным.Net 4 или.Net 4.5?
Название довольно ясно. Есть ли какая-либо разница в создании / запуске приложения для.Net 4, если вы установили только.Net 4 Framework или.Net 4.5 Framework?
Мой коллега сказал, что даже если приложение предназначено для.Net 4, установка 4.5 имеет значение, и я не уверен.
Благодарю.
3 ответа
NET 4.5 - это "обновление на месте".NET 4, поэтому даже если вы ориентируетесь на.Net 4, вы будете использовать.NET 4.5, см. http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx.
Подводя итог этому блогу, можно выделить три основные версии.NET, которые можно установить рядом:
- .NET 1 (1.1)
- .NET 2 (2/3 / 3,5)
- .NET 4 (4 / 4.5)
"Незначительные" версии находятся на месте апгрейдов
Да, вот пример:
Следующее консольное приложение должно выдать UnobservedTaskException
в системе без установленного.Net 4.5 или более поздней версии, но он будет работать постоянно, если установлен.Net 4.5 или более поздней версии:
private static void Main()
{
Task.Factory.StartNew(() => { throw new InvalidOperationException("Erk"); });
while (true)
{
Thread.Sleep(100);
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
Вы должны иметь возможность настроить это поведение вApp.Config
по словам Microsoft, но это не работает для меня вообще.
У меня были серьезные проблемы с HgLab (локальным приложением ASP.NET), ориентированным на.NET 4.0 и созданным на сервере с установленным.NET 4.5.
Я не использую ничего необычного, только стабильные публичные API и явно нацелены на.NET 4.0. Тем не менее он продолжал падать глубоко внутри kernelbase.dll
на 64-битных системах генерирует нешифруемые аварийные дампы и ведет себя очень странно.
В итоге я включил поддержку 32-битных приложений в 64-битной версии IIS - похоже, это решило проблему. Но, как правило, если вы хотите нацелиться на.NET 4.0, делайте сборку на сервере сборки, на котором установлен только.NET 4.0.