Подтвердить что ты не робот

Многозадачность в .NET.

Пройдя через различные блоги, я совершенно смущен терминологией "многозадачности" или бок о бок.

  • Некоторые блоги говорят, что совместное выполнение означает две версии CLR в процессе. Некоторые другие утверждают, что это похоже на сборку .net 2.0 и .net 3.0, выполняющуюся бок о бок. Я очень разочарован тем, что я не уверен, кто прав, кто не прав.

  • Я также видел во многих блогах, таких как блог Scott Hanselman и т.д. (что сбивает с толку), что любая функция .NET 4.5 не будет работать, если целевая среда 4.0. Я могу согласиться на это. Но я не могу согласиться или понять тот факт, что функция 4.0, чья ошибка исправлена ​​в 4.5, скроется, если я ее построю с использованием 4.5 и развернусь в 4.0. Здесь я не понимаю термин "скрытый", и никто не осмеливается объяснить, что на самом деле это значит. Это означает ошибку времени выполнения? Это означает ошибку времени компиляции? Это не может быть. Это означает непоследовательное поведение? Исключение? Если это так, мне интересно, почему MS разрешает этот тип гибкости в разработке в VS. Он служит ЛЮБОЙ цели? Я понимаю, что первый случай имеет смысл, но не понимает или не согласен со вторым случаем.

  • Я также видел в сообщении Рика/Скотта Ханзельмана, что основные изменения означают полное обновление, включая CLR. Затем я должен увидеть 3.0 в качестве основного обновления, но это не так, поскольку он все еще использует .NET 2.0 CLR. Тогда почему терминология именования 3.0.x.x/3.5.x.x? Как и в случае .NET 4.0.30319.x, где CLR также является новым, поэтому я согласен с этим. Я удивлен, кто прав. Либо эти люди, либо MSDN, как и противоречат их принципам (как MSDN говорит, что форматирование как Major.Minor.Build.Revision, и Hanselman или другие говорят, что Major означает обновление CLR и, хотя это не в .NET 3.0)

    /li >

Ссылка: http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

Любые мысли по двум вышеуказанным вопросам?

4b9b3361

Ответ 1

Прежде всего, вам нужно понять разницу между многозадачностью и бок о бок.

  • Многозадачность - это способность компилировать приложения, которые запускаться в среде CLR, которая отличается от той, которую вы используете для разработки приложения (.NET 4.0 в случае VS2010 или .NET 4.5 в случае VS 2012). Многозадачность в VS гарантирует, что ваше приложение не будет использовать какие-либо типы или методы, которые были введены во время выполнения CLR и Библиотека базового класса (BCL) в версиях, которые новее, чем версия, на которую вы нацелены. VS делает это, имея копию DLL, которая используется в каждой рабочей среде, на которую можно было настроить.
  • Выполнение бок о бок означает, что на вас может быть установлена ​​более одной версии среды CLR ПК. С CLR 4.0 больше не верна. Теперь вы можете загружать CLR 4 внутри одного процесса вместе с (CLR 1.1 или CLR 2.0). Пожалуйста, прочитайте http://msdn.microsoft.com/en-us/magazine/ee819091.aspx (Раздел "Обзор поведения" ) для более подробной информации.

Относительно ваших вопросов:

  • Пожалуйста, прочитайте ссылку из статьи MSDN, упомянутой выше.
  • Скрытый термин означает, что при отладке приложения в .NET 4.5 у вас есть версии BCL с исправлениями который потенциально ударил вас сзади после развертывания в .NET 4.0, поскольку эта ошибка еще не была исправлена ​​в этой версии BCL. У вас будет ошибка времени выполнения, которую вы могли бы наблюдать в зависимости от типа ошибки, которую вы достигаете. Это может быть проблема безопасности, логическая ошибка в вашем приложении или исключение времени выполнения. Если вы хотите поймать эти проблемы вы всегда можете проверить на чистом ПК, на котором установлен только .NET 4.0.
  • Обе ссылки, которые вы даете, никак не мешают друг другу. Скотт и MSDN оба правильны в объяснение, в какой версии .NET установлена ​​версия среды CLR.

Ответ 2

Вот что я думаю.

.NET развился с помощью нескольких версий и нескольких версий. Новая версия .NET может иметь или не иметь новую среду выполнения.

.NET 1.0 поставляется с рабочей средой. .NET 1.1 - это набор исправлений и дополнений к существующей системе. Это инкрементное обновление.

Итак, все, что предназначено для 1.0, будет беспрепятственно работать на 1.1, учитывая, что вы не полагаетесь на эти исправленные ошибки .etc.

.NET 2.0 - это новые версии с совершенно новой версией. Теперь на вашем ПК могут быть установлены как 1.1, так и 2.0 бок о бок.. и 1.1 приложения будут использовать среду выполнения .NET 1.1, а приложения с таргетингом 2.0 будут использовать 2.0 runtime.

Все становится немного сложнее с выпуском 3.0 и 3.5. Они могут содержать некоторые исправления (я думаю), но в основном они добавляют кучу классов в библиотеки и по-прежнему используют ту же среду выполнения.

Теперь 3.5 приложения для таргетинга по-прежнему будут использовать среду выполнения .NET 2.0 и будут работать. Они не знают о новых классах, добавленных в 3.5 (например: LINQ), и им это не нужно.

.NET 4.0 снова, это совершенно новое время исполнения. Он может устанавливаться бок о бок с 2.0 и 3.5. Приложения, ориентированные на .NET 2.0, по-прежнему будут нуждаться и запускаться в среде выполнения .NET 2.0, в то время как новые приложения, скомпилированные для NET 4.0, будут использовать новую среду выполнения. Есть некоторые изменения, связанные с тем, как сборки расположены и загружаются в среду выполнения в .NET 4.0, поэтому, если вы просто скомпилируете приложение 2.0 для работы с 4.0, у него могут быть некоторые завивки. Но он будет работать после устранения этих проблем (если есть)

Теперь...NET 4.5 снова немного отличается. Это новая среда выполнения (AFAIK), но она заменяет ее на 4.0. У вас не может быть 4.0 и 4.5, работающих бок о бок. Теперь 4.0 приложения для таргетинга будут запущены во время выполнения 4.5, в результате чего будут исправлены некоторые исправления. Поэтому, если ваше приложение использует эти ошибки, доступные в 4.0, у него будут проблемы с 4.5.

Это быстрый и грязный ответ. Если вы видите какие-либо проблемы/несоответствия/возможные улучшения, не стесняйтесь редактировать.

НТН

Ответ 3

  • Выполнение бок о бок означает несколько CLR в одном процессе..NET2 вместе с .NET3.5 не бок о бок, так как CLR - то же самое..NET2 и .NET4, однако, есть.
  • Что значит "встроить .NET4.5 и развернуть в .NET4.0"?
  • Вы запрашиваете четкое техническое разделение того, что определяется маркетингом Microsoft.

Ответ 4

Некоторые блоги говорят, что совместное выполнение означает две версии CLR в процессе. Некоторые другие утверждают, что это похоже на .net 2.0 и .net 3.0 сборка выполняется бок о бок. Я очень разочарован тем, что я неуверенный кто прав, кто не прав.

"Некоторые другие" просто вводят в заблуждение. Сборки .NET Framework 2.0 и 3.0 не выполняются "бок о бок". Как и многие другие, совместное выполнение имеет смысл только в том случае, если вы запускаете смесь CLR 1.x/2.0/4.0.

MS позволила этому типу гибкости в разработке в VS. Имеет ли это служит ЛЮБОЙ цели?

Было бы полезно, если Windows/.NET сообщит о любых несовместимостях, если вы запустите приложения .NET Framework 4.5 на платформе .NET Framework 4.0. Тем не менее, это было бы слишком много усилий для достижения, поскольку исправление широко распространенной платформы .NET Framework 4.0 практически невозможно.

В таких случаях Microsoft ожидает, что разработчики будут умными. Когда они наблюдают несовместимость (будь то ошибка времени выполнения/времени компиляции или что-то еще), они должны проверить, в чем причина и решить эту проблему.

Тогда почему терминология именования 3.0.x.x/3.5.x.x?

Это просто часть истории и спрашивает, почему бессмысленно. Microsoft учится на этих ошибках, а .NET Core - на правильном пути.