Games — .NET Framework Remoting


Microsoft .NET Framework

Описание:
.NET Framework — программная платформа, выпущенная компанией Microsoft. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. .NET Framework поддерживает создание программ, написанных на разных языках программирования. Платформа необходима для установки и корректной работы многих программ и так же игр, поэтому необходима многим пользователям.

Версия программы: 1.1 — 4.8
Язык интерфейса: Английский, Русский (инсталлятор)
Лечение: Не требуется
Системные требования: Windows XP (1.1 — 3.5) | Vista | 7 SP1 | 8 | 8.1 | 10
Все пакеты подходят для 32-х (86) разрядных систем и для 64-х разрядных систем Windows

Обновление:4.8
— Добавлены пакеты NET Framework 4.7.2 и NET Framework 4.8 (читайте ниже поддерживаемые операционные системы)
— Список изменений пакета читайте здесь
* Теперь 1 общий пакет установщик в который включены все пакетные версии от 1.1 до 4.8
— Интегрировано: .NET Framework Setup Verification Tool | .NET Framework Cleanup Tool | .NET Framework Repair Tool
— .NET Framework Setup Verification Tool — утилита для проверки корректности установки .NET Framework.
— .NET Framework Cleanup Tool — утилита для удаления .NET Framework версия от 13 апреля 2020 года.
— Microsoft .NET Framework Repair Tool предназначена для устранения проблем с установкой или обновлением Microsoft. NET Framework. Данный инструмент пытается решить неполадки путём применения известных исправлений, или восстановлением уже установленных версий. Программа поддерживает .NET Framework 4.5.1, 4.5, 4, 3.5 SP1 (включая 3.0 SP2 и 2.0 SP2).
. Примечание. По завершении установки будет предложено изменить домашнюю страницу браузера. Не забудьте снять галочку.

Версия 1.0 в настоящее время уже практически не используется, поэтому ставить ее рекомендуется только по необходимости, при работе с программами которые требуют именно ее (Visual Studio 2002, Sound Forge некоторых версий и т.п.). Версия 1.1 не включает в себя версию 1.0, не требует и не заменяет ее при установке. Используется она чаще, однако устанавливать ее рекомендуется также по необходимости, только для тех программ, которые жестко к ней привязаны. Это обусловлено тем, что пакет .NET Framework 2.0 обеспечивает обратную совместимость с предыдущими версиями, и большинство программ, написанных под 1.0 и 1.1 без проблем работают в среде 2.0 (равно как и программы написанные под 1.0 могут запускаться под версией 1.1). Во избежание конфликтов не рекомендуется ставить версии 1.0 и 1.1 одновременно (некоторые записи в реестре у них общие). Версии 1.1 и 1.1 SP1 входят в состав операционных систем Windows Server 2003 и Windows Server 2003 SP1 / R2SP1 / SP2 / R2SP2 соответственно. Версия 1.1 SP1 также распространяется на дисках с операционными системами Windows XP SP2 и SP3 (в виде отдельного дистрибутива).
Поддерживаемые операционные системы: Windows 2000, Windows Server 2003 Service Pack 1 for Itanium-based Systems, Windows Server 2003 x64 editions, Windows Server 2008 Datacenter, Windows Server 2008 Enterprise, Windows Server 2008 for Itanium-based Systems, Windows Server 2008 Standard, Windows Vista Business, Windows Vista Enterprise, Windows Vista Home Basic, Windows Vista Home Premium, Windows Vista Starter, Windows Vista Ultimate, Windows XP, Windows XP Professional x64 Edition

Версия 2.0 SP2 включает в себя версии 2.0 и 2.0 SP1 и заменяет их при установке. Последняя версия, поддерживающая Windows 2000. Для установки этой и предыдущей версий под этой операционной системой может потребоваться установить обновление KB835732. Эта версия входит в состав операционных систем Windows Vista SP2, Windows Server 2008 SP2 / R2 и Windows 7.
Поддерживаемые операционные системы: Windows 2000 Service Pack 4, Windows Server 2003, Windows XP Service Pack 2

Версия 3.0 SP2 не включает в себя версию 2.0 SP2, но требует ее для установки. Скачиваемый по ссылке неофициальный дистрибутив включает обе этих версии для x86 и x64 систем. Русский языковой пакет для версии 3.0 SP2 в дистрибутив не входит и отдельно не распространяется. При установке на чистую систему может потребоваться компонент Microsoft Core XML Services 6.0 aka MSXML 6.0 Parser (включен в дистрибутив). Эта версия входит в состав операционных систем Windows Vista SP2, Windows Server 2008 SP2 / R2 и Windows 7.
Поддерживаемые операционные системы: Windows Server 2003; Windows XP

Версия 3.5 SP1 включает в себя версии 2.0 SP2 и 3.0 SP2. В начале установки делает попытку соединения с интернетом для закачки языкового пакета. Если этот пакет у вас уже имеется, установку следует производить будучи отключенным от сети. После нескольких неудачных попыток подключения установка продолжится в обычном режиме. Эта версия входит в состав операционных систем Windows 7 и Windows Server 2008 R2.
Поддерживаемые операционные системы: Windows Server 2003; Windows Server 2008; Windows Vista; Windows XP

Версия 4 не включает в себя предыдущие версии (1.0, 1.1, 2.0, 3.0, 3.5), не требует их наличия при установке и не заменяет их. Client Profile предназначен для пользователей и обеспечивает запуск приложений использующих функции платформы NET Framework 4 Full содержит дополнительные функции, не включенные в Client Profile, предназначенные для разработчиков приложений.
Поддерживаемые операционные системы: Windows 7; Windows 7 Service Pack 1; Windows Server 2003 Service Pack 2; Windows Server 2008; Windows Server 2008 R2; Windows Server 2008 R2 SP1; Windows Vista Service Pack 1; Windows XP Service Pack 3

Версия 4.5 представляет собой выполняемое на месте обновление версии .NET Framework 4, отличающееся высокой степенью совместимости. Версия 4.5 заменяет версию 4.0 и не включает в себя предыдущие версии (1.0, 1.1, 2.0, 3.0, 3.5), входит в состав OS Windows 8. Удаление версии 4.5 также удаляет более ранние версии 4.0. Если нужно вернуться к версии 4.0, то необходимо переустановить версию 4.0 со всеми обновлениями.
Поддерживаемые операционные системы: Windows 7 Service Pack 1; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Vista Service Pack 2

Версия 4.5.1 представляет собой выполняемое на месте обновление версий Microsoft .NET Framework 4 и Microsoft .NET Framework 4.5, характеризующееся высокой степенью совместимости. Эти пакеты можно использовать для Windows Vista с пакетом обновления 2 (SP2), Windows 7 с пакетом обновления 1 (SP1), Windows 8, Windows Server 2008 с пакетом обновления 2 (SP2) и Windows Server 2008 R2 с пакетом обновления 1 (SP1).

Версия 4.6
— Является высокосовместимой заменой «на месте» для Microsoft .NET Framework 4, Microsoft .NET Framework 4.5, Microsoft .NET Framework 4.5.1 и Microsoft .NET Framework 4.5.2. Этот пакет можно использовать для Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Server 2012 R2; Windows Vista Service Pack 2

Версия 4.6.2
— Является высокосовместимым обновлением «на месте» для Microsoft .NET Framework 4, Microsoft .NET Framework 4.5, Microsoft .NET Framework 4.5.1, Microsoft .NET Framework 4.5.2 и Microsoft .NET Framework 4.6. Этот пакет можно использовать для Windows 10 ; Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2008 R2 SP1; Windows Server 2012; Windows Server 2012 R2

Версия 4.7 / 4.7.1 / 4.7.2 / 4.8
— это высокосовместимое обновление «на месте» для Microsoft .NET Framework версий 4, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.8 для Windows 7 с пакетом обновления 1 (SP1), Windows 8.1, юбилейного обновления Windows 10, Windows Server 2008 R2 с пакетом обновления 1 (SP1), Windows Server 2012, Windows Server 2012 R2 и Windows Server 2020.

.NET Framework Setup Verification Tool — утилита для проверки корректности установки .NET Framework

.NET Framework Cleanup Tool — утилита для удаления .NET Framework версия от 13 апреля 2020 года. (на тот случай, если удаление через «Установку и удаление программ» не работает).

.NET Framework Repair Tool предназначена для устранения проблем с установкой или обновлением Microsoft. NET Framework. Данный инструмент пытается решить неполадки путём применения известных исправлений, или восстановлением уже установленных версий. Программа поддерживает .NET Framework 4.5.1, 4.5, 4, 3.5 SP1 (включая 3.0 SP2 и 2.0 SP2).

Ключи командной строки:
• Тихая установка NET Framework 1.1 — 3.5: /S /A
• Тихая установка NET Framework 4.0: /S /B
• Тихая установка NET Framework 4.5: /S /C
• Тихая установка NET Framework 4.5.2: /S /D
• Тихая установка NET Framework 4.6: /S /E
• Тихая установка NET Framework 4.7.2: /S /F
• Тихая установка NET Framework 4.8: /S /G

Установка:
1. Скачайте архив 4.8 и распакуйте в любое место или в любую папку
2. Открываем папку Microsoft .NET Framework 1.1 — 4.8 Final и запустите установочный файл M.NETFramework.exe (другие файлы с префиксом .cmd не трогайте. ) и далее следуйте инструкциям установщика (выберите в окошке запуска нужный вариант в соответствии с вашей версией Windows), описание всех пакетов 1.1 — 3.5, 4.0, 4.5, 4.5.1, 4.6, 4.6.2, 4.7.2, 4.8 читайте выше

3. Перед установкой отключите интернет и антивирусник
4. Установка может проходить очень долгое время в зависимости от того какие версии у вас были установлены ранее. Система сама удалит предыдущие приложения и обновит систему. Обязательно дождитесь окончания установки всего пакета, время установки может доходить до 2-х часов! (у меня установка проходила 35 минут)
5. По окончании установки система возможно предложит перезагрузить компьютер чтобы все обновления вступили в силу, если этого не произошло, то просто вручную перезагрузите компьютер. Только обязательно дождитесь процесса завершения установки, так как установка длится очень долго (у всех по разному), не надо нервничать, ждите окончания установки.

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

Microsoft .NET Framework

Microsoft .NET Framework — это цифровая платформа, позволяющая создавать, корректно запускать и использовать различные приложения или игры, при создании которых, части одного конкретного приложения пишутся разными программными кодами. Эта платформа представляет из себя цифровую среду, в которой разные коды отдельно взятого приложения компилируется в один переходящий код, который в свою очередь понятен самой платформе Framework. Затем переходящий код компилируется в понятный код для непосредственно той операционной системы, под которую разрабатывалось приложение. Например для Windows 7/8/10

Установить данную платформу можно различными способами.

  • Установив операционную систему, пакет обновлений которой уже включает в себя эту платформу.
  • Скачать Net Framework а затем установить. (Официальные ссылки у нас на сайте)
  • Установить в качестве дополнительного ПО при установке игры.
  • Автоматически установить, используя «Центр обновления Windows»

Бывают случаи: Что во время запуска игры или приложения на экране всплывает окно примерного содержания: «(имя приложения) требует наличие .НЕТ Фреймворк. Пожалуйста скачайте и установите Net Framework 3.5 или выше.» Что делает запуск данного приложения невозможным без этой платформы. Если у вас установлена Microsoft Net Framework 4.7, то это не означает что, вам не нужны более старые версии. Вам понадобится установить и Microsoft Net Framework 4 и предыдущие версии. Настоятельно рекомендуется установить все существующие касательно вашей операционной системы.

Выберите и установите нужные Вам версии для Windows XP, Vista, 7, 8,10

Microsoft .NET Framework 1.0

Microsoft .NET Framework 1.1

Microsoft .NET Framework 2.0

Microsoft .NET Framework 3.0

Microsoft .NET Framework 3.5

Microsoft .NET Framework 4.0

Microsoft .NET Framework 4.5

Microsoft .NET Framework 4.5.1

Microsoft .NET Framework 4.5.2

Microsoft .NET Framework 4.6

Microsoft .NET Framework 4.6.1

Microsoft .NET Framework 4.6.2

Microsoft .NET Framework 4.7

Microsoft .NET Framework 4.7.1

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

Будем рады услышать от Вас отзыв, также поможем при установки компонентов, и в исправлении ошибок. Пишите всё в комментариях, чуть ниже

Games — .NET Framework Remoting

Wikimedia Foundation . 2010 .

Смотреть что такое «.NET Remoting» в других словарях:

.Net Remoting — NET Remoting это созданный компанией Microsoft API для межпроцессного взаимодействия. Выпущен в 2002 году вместе с версией 1.0 пакета .NET Framework. Это одна из серии технологий от Microsoft, начатой в 1990 году первой версией OLE для 16 разрядн … Википедия

.NET Remoting — is a Microsoft application programming interface (API) for interprocess communication released in 2002 with the 1.0 version of .NET Framework. It is one in a series of Microsoft technologies that began in 1990 with the first version of Object… … Wikipedia

.NET Remoting — ist ein umfassendes, erweiterbares Framework für die nahtlose Kommunikation zwischen Objekten, die sich in verschiedenen Applikationsdomänen oder Prozessen bzw. auf unterschiedlichen Computern befinden. Es ermöglicht sozusagen die Kommunikation… … Deutsch Wikipedia

.NET Remoting — es una tecnología propietaria de Microsoft que permite crear aplicaciones distribu >Wikipedia Español

.NET Remoting — est une API de Microsoft pour la communication interprocessus livrée avec la version 1.0 du .NET Framework. Cette technologie est désormais supplantée par Windows Communication Foundation depuis la version 3.0 du framework. Portail de… … Wikipédia en Français

.NET-Framework — Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia


.NET-Klassenbibliothek — NET Framework Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET 3.0 — NET Framework Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET Framework — Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET Framework 3.0 — NET Framework Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

Microsoft .NET Framework 1.1–4.7 (полные установщики)

.NET Framework (Dot Net Framework) — программная платформа (софтверный фреймворк), разработанная корпорацией Microsoft в 2002 году, главным образом для операционной системы Microsoft Windows. Включает обширные библиотеки, а также предоставляет взаимную совместимость (каждый язык может использовать код, написанный на других языках) нескольких языков программирования. Программы, написанные на .NET Framework выполняются в программной среде (в противоположность аппаратной) известной как Common Language Runtime (CLR, общеязыковая исполняющая среда), представляющей собой виртуальную машину, которая обеспечивает безопасность, распределение памяти и обработку исключений. Библиотека классов и CLR вместе составляют .NET Framework.

Базовая библиотека классов .NET Framework даёт доступ к пользовательскому интерфейсу, обмену данными, к подключению баз данных, криптографии, разработке веб-приложений, вычислительным алгоритмам и сетевым подключениям. Программисты создают свои приложения путём компоновки собственного кода с библиотеками .NET Framework, а также другими библиотеками. .NET Framework предназначен для использования большей частью новых разрабатываемых приложений.

ВНИМАНИЕ: обязательно устанавливайте пакеты обновлений в таком же порядке, в каком даны ссылки на них!

.NET Framework 1.1

.NET Framework 3.5 SP1 (включает 2.0 SP2)

Обновления:

Windows XP/Server 2003 32-bit:
Обновление 1 (8,6 МиБ)
Обновление 2 (7 МиБ)
Обновление 3 (1,4 МиБ)

Windows XP/Server 2003 64-bit:
Обновление 1 (18,4 МиБ)
Обновление 2 (16,5 МиБ)
Обновление 3 (1,5 МиБ)

Windows Vista/Server 2008 x86:
Обновление 1 (1,4 МиБ)
Обновление 2 (10,5 МиБ)
Обновление 3 (6,9 МиБ)

Windows Vista/Server 2008 64-bit:
Обновление 1 (1,5 МиБ)
Обновление 2 (16 МиБ)
Обновление 3 (9,8 МиБ)

Windows Vista/Server 2008 IA-64:
Обновление 1 (1,5 МиБ)
Обновление 2 (14,7 МиБ)
Обновление 3 (2,2 МиБ)

Microsoft .NET Framework и ошибки в играх, программах. Как обновить или переустановить Microsoft .NET Framework?

Не так уж и редко приходится сталкиваться с различными ошибками, связанными с пакетом Microsoft .NET Framework (чаще всего в играх, различных редакторах, программах для черчения, взять хотя бы тот же AutoCAD. ).

Во всех подобных проблемах, необходимо узнать, какая версия .NET Framework требуется приложению, посмотреть есть ли она в Windows, и, если ее нет — обновить/установить. Казалось бы, ничего сложного, но есть нюансы. О них и пойдет речь в статье.

Для справки. Вообще, .NET Framework — это специальный пакет, который призван совместить между собой различное ПО, написанное на разных языках программирования (так, чтобы все работало). По идее, можно сравнить его с кодеками. Естественно, если у вас на компьютере нет нужной версии (или она была повреждена) — то программа у вас не запустится.

А теперь, ближе к делу, разберу самое основное.

Решение проблем с Microsoft .NET Framework

Как узнать какие версии .NET Framework у меня установлены?

Необходимо открыть панель управления Windows по следующему пути: Панель управления\Программы\Программы и компоненты ( прим. : установка и удаление программ) .

Далее просмотрите список установленных программ: нет ли среди них .NET. Если в списке нет, откройте компоненты Windows (см. скриншоты ниже).

Программы и компоненты

Важно!


Отмечу, что в ОС Windows 8 и 10 Microsoft .NET не указана в списке установленных программ (чтобы посмотреть версии, необходимо открыть ссылку в меню слева «Просмотр установленных обновлений»).

В ОС Windows 10 нет возможности удаления .NET штатными средствами, однако, как правило возможна установка последней версии .NET (его обновление).

Для просмотра и решения проблем с .NET есть специальная утилита «.NET Version Detector» (доступна по ссылке: http://www.asoft.be).

Она не требует установки. После запуска покажет список всех установленных версий, а также приведет ссылки на их загрузку (если вдруг чего-то не окажется — можно скачать и установить).

NET Version Detector — смотрим доступные версии NET Framework

Можно ли не обновлять этот пакет, ведь я раньше не обновлял его и все работало?

Большинство пользователей и не вспоминает о нем (до поры до времени. ). Дело в том, что в новых версиях Windows уже есть в комплекте (предустановлена в систему) определенная версия .NET и нет необходимости отдельно что-то скачивать или обновлять.

Кроме этого, .NET часто включают в установщики популярных игр, и при их инсталляции происходит и обновление этого пакета. Т.е. все действия незаметны для пользователя.

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

А дальше все просто: если нужной версии .NET не будет — то при запуске вы увидите ошибку (как на примере ниже). Кстати, часть ошибок может быть связана с «битой» версией .NET (именно поэтому, иногда рекомендуется обновлять это ПО).

Ошибка, связанная с отсутствием .NET 4.7 версии

Ссылки на загрузку необходимых версий

Во-первых, сразу хочу посоветовать: не нужно скачивать все подряд версии и пытаться переустановить каждую (чуть ниже я отмечу, какие версии рекомендованы для разных ОС). Во-вторых, рекомендуется скачивать .NET только с официального сайта Microsoft (так сказать, не измененный установщик).

Способ №1. Чуть выше в статье я вам порекомендовал использовать утилиту «.NET Version Detector» — она не только покажет, какие версии пакета .NET у вас установлены в системе, но и даст ссылки на загрузку каждой из версии.

Способ №2. Привожу ниже ссылки на официальный сайт Microsoft:

Важно отметить , что версия .NET 4 (скажем) обновляет предыдущую версию .NET, поэтому для новых ОС Windows 8, 10 требуется установка (в 99,9% случаев) только последних версий .NET 4.

Дополнение!

Не могу не порекомендовать программу Driver Booster — даже если вам ненужно обновлять драйвера, все равно попробуйте воспользоваться ей. Дело в том, что она автоматически определяет недостающие компоненты в системе, которые могут сказаться на играх (.NET, Visual C++ и др. пакеты), и устанавливает их. Согласитесь, удобно!

Обратите внимание, все необходимое для игр (.NET, Visual C++ и др. пакеты) программа качает и ставит автоматически!

Можно ли удалить .NET Framework (или использовать другую версию)? Что для этого необходимо?

В большинстве случаев, удалять пакет не требуется — просто нужно задействовать другую версию. Сделать это можно во вкладке «Компоненты Windows» (которую можно открыть в панели управления Windows — чуть выше в статье показано, где найти это) .

Собственно, нужно-то поставить «галочку» рядом с тем пакетом, который хотите задействовать и согласиться с изменениями (ОС Windows может потребоваться загрузить недостающие файлы — делает она это сама в авто-режиме (просто потребуется подключение к интернету) ).

Включение .NET 4.7

В тех случаях, когда у вас вроде бы установлена нужная версия .NET, а игра (программа) все равно сыпет ошибками и «ругается» — можно попробовать удалить пакет .NET и установить его заново.

В ряде случаев, пакет можно удалить, если открыть список установленных программ ( Панель управления\Программы\Программы и компоненты ). Удаление происходит точно также, как и любой другой программы (см. скрин ниже).

Программы и компоненты — удаляем .NET как обычную программу

В отдельных случаях, может потребовать специальная утилита: NET Framework Cleanup Tool (ссылка на блог разработчика Microsoft — https://blogs.msdn.microsoft.com/astebner/2008/08/28/net-framework-cleanup-tool-users-guide/).

Утилита не нуждается в установке. Запускать ее, кстати, необходимо от имени администратора ( прим. : т.е. щелкнуть по исполняемому файлу правой кнопкой мышки и в контекстном меню выбрать «запуск от имени администратора») .


Собственно, дальше будет нужно выбрать версию .NET, которую хотите удалить и нажать кнопку «Cleanup Now» (очистить сейчас). См. скриншот ниже.

cleanup tool (работает в Windows 10)

Вот, собственно, и все на сегодня.

Please log in or register

To enjoy the benefits of Nexus Mods, please log in or register a new account

  • All games
  • Skyrim Special Edition
  • Mods
  • Utilities
  • .NET Script Framework

.NET Script Framework

File information

Last updated

Original upload

Created by

Uploaded by

Virus scan

Tags for this mod

973 comments

I was waiting for this, seems like its a big help, causes CTD for me though.

Edit: Nevermind, I am somewhat ignorant apparently of how simple installations work. Sorry for the inconvenience, thanks for the upload! Your help is appreciated! :^)

Can’t launch skyrim right now

Just get this error in NetScriptFramework.log.txt

«Game library `The Elder Scrolls V: Skyrim Special Edition` (9) does not support game version 1.5.80.0!»

I’m having the same problems

(InvalidOperationException): «Game library `The Elder Scrolls V: Skyrim Special Edition` (9) does not support game version 1.5.80.0!» at
———————————————————————————————————————————————
at NetScriptFramework.Main.LoadGameInfo() in C:\Games\SkyrimMods\NetScriptFramework\NetScriptFramework\Main.cs:line 594
at NetScriptFramework.Main.Initialize() in C:\Games\SkyrimMods\NetScriptFramework\NetScriptFramework\Main.cs:line 239
———————————————————————————————————————————————


Hey, I get this weird bug/glitch where the NPCs won’t making eye contact or look at with player when the player is sitting. Any fixes?

If it also helps, I don’t usually go 3rd person, but I did once and the player didn’t look at NPC neither. AND ALSO I can never see my kill moves in 3rd person (they’re always 1st person). Plus! I don’t go 3rd person when sitting down/interacting with things etc.

To test this like I did, go to bannered mane (or any inn) and sit & interact with a sitting NPC. My Modlist

Hey, I get this weird bug/glitch where the NPCs won’t making eye contact or look at with player when the player is sitting. Any fixes?

Uninstall WhoFarted.
Just kidding I couldn’t help it.

Was thinking Look at What You See or something like that glitching but I can’t even begin to think of a culprit in your list.

I get a game crash but not a Netscript crash file, this appears in the Log:

[26 Oct 2020 19:52:22.016] (InvalidOperationException): «Game library `The Elder Scrolls V: Skyrim Special Edition` (9) does not support game version 1.5.80.0!» at
[26 Oct 2020 19:52:22.016] ———————————————————————————————————————————————
[26 Oct 2020 19:52:22.016] at NetScriptFramework.Main.LoadGameInfo() in C:\Games\SkyrimMods\NetScriptFramework\NetScriptFramework\Main.cs:line 594
[26 Oct 2020 19:52:22.016] at NetScriptFramework.Main.Initialize() in C:\Games\SkyrimMods\NetScriptFramework\NetScriptFramework\Main.cs:line 239

It doesn’t seem to be playing nice with the SKSE version I got on 10/25/19, since that’s the version number being displayed here even though it says Game Version. is there a fix or is it just a «Wait for the Update» situation?

i’m also having issues with crashes, though its not even starting the game for me.

This is what i get in the crash log,

[25 Oct 2020 18:56:49.438] Initializing framework version 7.
[25 Oct 2020 18:56:49.444] Loaded configuration file.
[25 Oct 2020 18:56:49.447] Preparing .NET code hooking.
[25 Oct 2020 18:56:49.454] Loading game library.
[25 Oct 2020 18:56:49.645] Loaded game library for `The Elder Scrolls V: Skyrim Special Edition` (9).
[25 Oct 2020 18:56:49.646] Running game version is 1.5.80.0
[25 Oct 2020 18:56:49.654] (InvalidOperationException): «Game library `The Elder Scrolls V: Skyrim Special Edition` (9) does not support game version 1.5.80.0!» at
[25 Oct 2020 18:56:49.654] ———————————————————————————————————————————————
[25 Oct 2020 18:56:49.654] at NetScriptFramework.Main.LoadGameInfo() in C:\Games\SkyrimMods\NetScriptFramework\NetScriptFramework\Main.cs:line 594
[25 Oct 2020 18:56:49.654] at NetScriptFramework.Main.Initialize() in C:\Games\SkyrimMods\NetScriptFramework\NetScriptFramework\Main.cs:line 239
[25 Oct 2020 18:56:49.654] ———————————————————————————————————————————————

And before anyone says it, not to sound like an ass here, the netscript mod, the dll loader mod and Skyrim SE are all the latest versions.

Mainly using these things with IFPV, immersive first person view, mod.
Not a required mod for me, just trying something new and different.

Side note, since i’m thinking of it now, i tried installing both with NMM and manual install, same error both times.

(InvalidOperationException): «Game library `The Elder Scrolls V: Skyrim Special Edition` (9) does not support game version 1.5.80.0!» at
i am getting this error too can u post link which fix this for u pls ?

i find this now game is opening but idk any other problem for know ;
https://drive.google.com/file/d/1SyQrLZDmAkUYp7vf5QjySvdd7WOaqnR8/view

Have anyone facing issue with the mod enabled and you have a certain amount of skse mod it will make your skyrim won’t boot?

I have tested this but haven’t count exactly how much is the limit but when I disabled the skse skyrim will boot up. When I enabled it again, then it won’t boot. Can be reproduce so it shouldn’t be any other mod that caused it.

I also tried with vanilla skyrim with only the skse mod that cause the crash and it will boot up, so the skse is not the issue. When I disabled this mod I can use as many as skse mod as I want without a crash.

reddvilzz wrote: Have anyone facing issue with the mod enabled and you have a certain amount of skse mod it will make your skyrim won’t boot?

I have tested this but haven’t count exactly how much is the limit but when I disabled the skse skyrim will boot up. When I enabled it again, then it won’t boot. Can be reproduce so it shouldn’t be any other mod that caused it.

I also tried with vanilla skyrim with only the skse mod that cause the crash and it will boot up, so the skse is not the issue. When I disabled this mod I can use as many as skse mod as I want without a crash.

Unhandled native exception occurred at 0x7FF6B63318A1 (SkyrimSE.exe+D718A1) on thread 32484!

FrameworkName: NetScriptFramework
FrameworkVersion: 7
FrameworkArchitecture: x64
GameLibrary: SkyrimSE
GameLibraryVersion: 10
ApplicationName: SkyrimSE.exe
ApplicationVersion: 1.5.80.0
DebugInfo: Version mismatch
Time: 21 Oct 2020 23:23:50.443

Probable callstack
<
[0] 0x7FF6B63318A1 (SkyrimSE.exe+D718A1)
[1] 0x7FF6B6331436 (SkyrimSE.exe+D71436)
[2] 0x7FF6B633237B (SkyrimSE.exe+D7237B)
[3] 0x7FF6B6328A19 (SkyrimSE.exe+D68A19)
[4] 0x7FF6B595E18F (SkyrimSE.exe+39E18F)
[5] 0x7FF6B5B6E8B5 (SkyrimSE.exe+5AE8B5)
[6] 0x7FFC98C4157C (skse64_steam_loader.dll+157C)
[7] 0x7FF6B690B642 (SkyrimSE.exe+134B642)
[8] 0x7FFCA6EF0560 (ucrtbase.dll+10560)
[9] 0x7FF6B5B6CBE7 (SkyrimSE.exe+5ACBE7)
[10] 0x7FF6B690ACCA (SkyrimSE.exe+134ACCA)
[11] 0x7FFCA9F87974 (KERNEL32.DLL+17974)
[12] 0x7FFCAA0CA271 (ntdll.dll+6A271)
>

Registers
<
AX: 0x7FF6B85E84A0 (SkyrimSE.exe+30284A0) (void*)
BX: 0x0 (NULL)
CX: 0x0 (NULL)
DX: 0x0 (NULL)
SI: 0x0 (NULL)
DI: 0x0 (NULL)
BP: 0x7FF6B85E8490 (SkyrimSE.exe+3028490) (void*)
SP: 0xA9D92FFA00 (void*)
IP: 0x7FF6B63318A1 (SkyrimSE.exe+D718A1) (void*)
R8: 0x7FF6B6D50868 (SkyrimSE.exe+1790868) (void*)
R9: 0xA9D92FFA88 (void*)
R10: 0x1CA5D1EC710 (void*)
R11: 0xA9D92F8BB0 (void*)
R12: 0x0 (NULL)
R13: 0x0 (NULL)
R14: 0x1C94133F6B8 (void*)
R15: 0xA9D92FFD10 (void*)
Flags: 0x10246
XMM0: 2.12487752963403E-317
XMM1: 9.34526952412185E-311
XMM2: 0
XMM3: 0
XMM4: 0
XMM5: 0
XMM6: 0
XMM7: 0
XMM8: 0
XMM9: 0
XMM10: 0
XMM11: 0
XMM12: 0
XMM13: 0
XMM14: 0
XMM15: 0
>


Stack
<
[SP+0] 0x0 (NULL)
[SP+8] 0x1C900000000 (void*)
[SP+10] 0xA900000690 (u64):[725849474704]
[SP+18] 0x1C90000041A (void*)
[SP+20] 0x0 (NULL)
[SP+28] 0x0 (NULL)
[SP+30] 0x7FF6B55C0000 (SkyrimSE.exe+0) (char*) «MZ?»
[SP+38] 0x0 (NULL)
[SP+40] 0x0 (NULL)
[SP+48] 0x0 (NULL)
[SP+50] 0xA9D92FFAA0 (void*)
[SP+58] 0x7FF6B6331436 (SkyrimSE.exe+D71436) (void*)
[SP+60] 0xA9D92FFB78 (void*)
[SP+68] 0xA9D92FFB78 (void*)
[SP+70] 0xA9D92FFB78 (void*)
[SP+78] 0x7FF6B633237B (SkyrimSE.exe+D7237B) (char*) «H?\r

;+H?AxH??X\n»
[SP+80] 0xA9D92FFB78 (void*)
[SP+88] 0x0 (NULL)
[SP+90] 0x7FF6B6C08A48 (SkyrimSE.exe+1648A48) (char*) «Skyrim Special Edition»
[SP+98] 0x1CA5D02DF90 (void*)
[SP+A0] 0x2 (u8):[2]
[SP+A8] 0x7FF6B6328A19 (SkyrimSE.exe+D68A19) (void*)
[SP+B0] 0x2 (u8):[2]
[SP+B8] 0x0 (NULL)
[SP+C0] 0x1C96C3DDD90 (char**) «Shout»
[SP+C8] 0x1C9EB63F7D0 (void*)
[SP+D0] 0xFFFFFFFFFFFFFFFE (i64):[-2]
[SP+D8] 0x7FF6B595E18F (SkyrimSE.exe+39E18F) (void*)
[SP+E0] 0x0 (NULL)
[SP+E8] 0x768 (u16):[1896]
[SP+F0] 0x0 (NULL)
[SP+F8] 0x1C94133EF50 (void*)
[SP+100] 0x0 (NULL)
[SP+108] 0x7FF6B5B6E8B5 (SkyrimSE.exe+5AE8B5) (void*)
[SP+110] 0x7FF600000002 (u64):[140694538682370]
[SP+118] 0x7FF6B852BAD0 (SkyrimSE.exe+2F6BAD0) (void*)
[SP+120] 0x2 (u8):[2]

So I got a crash and my first instinct was to immediately check the crash log. This is what I get.

Unhandled native exception occurred at 0x160B09EE54A (skee64.dll+BE54A) on thread 3452!

I checked and I traced this back to racemenu which is the one that loads in this DLL file. Am I correct to assume that this dll file is the definite culprit of this crash?

There has been some issues regarding Race Menu 4.x series. Earlier the mod in the 0.4.x series had a bug that would CTD if you or an NPC use shock magic. They say that is fixed now so if you have not upgraded, go ahead and do so. If you still are, then there might be some bugs. Racemenu 0.4.x is an overhauled version of the mod and because it has been overhauled to have the Dye features, it may still have some problems.

I myself am still using Racemenu 0.3.5 and I’m not having any issues, I’ll continue to use to use the version I have until I find out that all issues in 0.4.x are fixed.

Numbers like 0x7FF7A4042250 are just numbers written in hexadecimal decimal base (this is base 16, meaning it used 16 digits — 0,1,2,3,4,5,6,7,8,9A,B,C,D,E,F — instead of the 10 as the usual base everybody — except hardcore programmer — use).
And in this case, it’s an address in the exe. file (the position of the instruction in the program that cause the crash).
For the SkyrimSE.exe+262250, I’m not sure, but I will guess it’s an offset. Meaning it’s the 262250 byte from the begin of the file in the exe file.
Finally, 16040 is the number identification of the thread, provide by Windows. It should change at each execution.

Honestly, the log is useless for end-users like the great majority of us. But for the modder, it COULD be useful.
So, some modders may ask you to provide this log, to help them finding what cause the issue you run in.
I don’t think could use it (unless your crash is caused by one of their mod), you must send this log to the modder whose mod cause a crash for you (if that modder know how to use the log. ).

@MacBran
Yeah the logs are kind of useless for end users to a degree sometimes you get a snippet that makes you go ah looking at them. (rarely). Yeah the skyrim+XXX is the address offset inside of Skyrim which you can analyse via IDA/Ghidra.

General debugging (my personal mindset) before the crash occured, what were you doing?
Switching cells be it going into interior (indoors) or another exterior (outdoors) via fast travel or not.
Weather was it sunny, cloudy, raining etc.
In Combat with something: Did you also have a follow, which type of combat were you and the follower doing (melee/magic) and even the enemy.
Quest related: Maybe the quest alters the environment like the battle of whiterun.

I generally precedence it in that order to try and reproduce to then narrow it down. Taking switching cells for example it could be a bad mesh or npc related but if it isn’t happening when you go back to that area then it pretty much rules that out. Maybe last time it was raining but this time it was sunny, so further down the line it crashes again when I go back to this particular area however I noticed it was raining again before it happened. Bingo it is more than likely weather related, so I would start looking at my weather mods and possibly water mods.

The more info you give like this, also supplying the logs is helpful for the community to help resolve the issue. As you may have just overlooked a mod potentially doing something you were unaware of, again taking above as example you installed a HD frog mod and for a laugh it did raining frogs.

Основы многопоточности в .NET Framework

Многопоточность — одна из самых сложных тем в программировании, с ней постоянно возникает масса проблем. Без четкого понимания внутренних механизмов будет очень трудно предсказать результат работы приложения, использующего несколько потоков. Мы не будем здесь дублировать массу теоретической информации, которой очень много в сети и умных книгах. Вместо этого сконцентрируемся на конкретных и наиболее важных проблемах, на которые нужно обращать особое внимание и обязательно помнить о них в процессе разработки.

Потоки

Как все наверняка знают, поток в .NET Framework представлен в виде класса Thread. Разработчики могут создавать новые потоки, давать им осмысленные имена, изменять приоритет, запускать, ожидать завершения работы или останавливать.

Потоки делятся на background (фоновый) и foreground (основной, тот, что на переднем плане). Основное отличие между ними в том, что foreground-потоки препятствуют завершению программы. Как только все foreground-потоки остановлены, система автоматически остановит все background и завершит выполнение приложения. Чтобы определить, является поток фоновым или нет, необходимо вызвать следующее свойство текущего потока:

По умолчанию, при создании потока при помощи класса Thread мы получим foreground-поток. Для того, чтобы его поменять на фоновый, мы можем воспользоваться свойством thread.IsBackground.

В приложениях, которые имеют пользовательский интерфейс (UI), всегда есть как минимум один главный (GUI) поток, который отвечает за состояние компонентов интерфейса. Важно знать, что возможность изменять состояние представления есть только у этого, так называемого «UI-потока», который создается для приложения обычно в единственном экземпляре (хотя и не всегда).

Стоит также упомянуть про исключительные ситуации, которые могут возникать в дочерних потоках. В такой ситуации приложение будет экстренно завершено, и мы получим Unhandled Exception, даже если обернем код запуска потока в блок try/catch. В таком случае, обработку ошибок необходимо вынести в код дочернего потока, в котором уже можно будет отреагировать на конкретную исключительную ситуацию.

Применяя глобальную обработку исключений (Application_Error в ASP.NET, Application.DispatcherUnhandledException в WPF, Application.ThreadException в WinForms и т.д.) важно помнить, что при таком подходе мы сможем «ловить» исключительные ситуации, которые произошли ТОЛЬКО в UI потоке, то есть мы не «поймаем» исключения из дополнительных фоновых потоков. Также мы можем воспользоваться AppDomain.CurrentDomain.UnhandledException и вклиниться в процесс обработки всех необработанных исключительных ситуаций в рамках домена приложения, но мы никак не сможем воспрепятствовать процессу завершения приложения.

Потоки — это дорогостоящие объекты, которые занимают память, могут использовать различные ресурсы системы и находиться в разных состояниях. Для их создания требуется время. В сравнении с процессами они менее ресурсоемки, но все же требуют довольно больших затрат на создание и уничтожение. Более того, за освобождение занимаемых конкретным потоком ресурсов отвечает разработчик. Например, для выполнения массы небольших задач неэффективно запускать множество потоков, так как издержки на их запуск могут превысить выгоду от использования. Для того, чтобы иметь возможность повторно использовать уже запущенные потоки и избавиться от издержек на создание, был введен так называемый пул-потоков (ThreadPool).

ThreadPool

В рамках каждого процесса CLR создает одну дополнительную абстракцию, которая называется пул потоков. Он представляет собой набор потоков, которые находятся в режиме ожидания и готовы выполнять любую полезную работу. При запуске приложения пул-потоков запускает минимальное количество потоков, которые находятся в состоянии ожидания новых задач. Если активных потоков недостаточно для эффективного выполнения задач в пуле, он запускает новые и использует их по тому же принципу повторного использования. Пул довольно умный и умеет определять необходимое эффективное количество потоков, а также останавливать лишние или запускать дополнительные. Можно задавать максимальное и минимальное количества потоков, но на практике это делают редко.

Потоки внутри пула разделяются на две группы: worker и I/O-потоки. Рабочие потоки фокусируются на работе, связанной с загрузкой CPU (CPU based), в то время как I/O-потоки — на работе с устройствами ввода/вывода: файловая система, сетевая карта и другие. Если пытаться выполнять I/O-операцию на рабочем потоке (CPU based), то это будет напрасная трата ресурсов, так как поток будет находиться в состоянии ожидания завершения I/O-операции. Для подобных задач предназначены отдельные I/O-потоки. При использовании пула потоков это скрыто в явном виде от разработчиков. Получить количество разных потоков в пуле можно при помощи кода:

Для того, чтобы определить, является текущий поток взятым из пула или созданным вручную, необходимо воспользоваться конструкцией:

Запустить задачу на выполнение при помощи потока, взятого в пуле, можно с помощью:


  • класса ThreadPool: ThreadPool.QueueUserWorkItem
  • асинхронных делегатов (пара методов делегата: BeginInvoke() и EndInvoke())
  • класса BackgroundWorker
  • TPL (Task Parallel Library, о которой мы еще поговорим ниже)

Следующие конструкции также используют пул потоков, но делают это неявно, о чем важно знать и помнить:

  • WCF, Remoting, ASP.NET, ASMX Web Services
  • System.Timers.Timer и System.Threading.Timer
  • EAP (the event-based asynchronous pattern, о нем поговорим дальше)
  • PLINQ

Полезно держать в голове следующие моменты:

  • Потокам из пула невозможно назначить имя
  • Потоки из пула всегда фоновые (background)
  • Блокировка потоков из пула может привести к запуску дополнительных потоков и падению производительности
  • Вы можете поменять приоритет потоку из пула, но он вернется в дефолтное значение (normal) после возвращения в пул

Синхронизация

При построении многопоточного приложения необходимо гарантировать, что любая часть разделяемых данных защищена от возможности изменения их значений множеством потоков. Учитывая, что управляемая куча является одним из разделяемых потоками ресурсов, а все потоки в AppDomain имеют параллельный доступ к разделяемым данным приложения, очевидно, что доступ к таким общим данным необходимо синхронизировать. Это гарантирует, что в один момент времени доступ к определенному блоку кода получит лишь один поток (или указанное количество, в случае использования Семафора). Таким образом, мы можем гарантировать целостность данных, а также их актуальность в любой момент времени. Давайте рассмотрим возможные варианты синхронизации и частые проблемы. Говоря о синхронизации, обычно выделяют 4 вида:

  • Блокировка вызывающего кода
  • Конструкции, ограничивающие доступ к кускам кода
  • Сигнализирующие конструкции
  • Неблокирующая блокировка

Blocking

Под блокировкой понимается ожидание одним потоком завершения другого или нахождение в режиме ожидания в течение некоего времени. Обычно реализуется при помощи методов класса Thread: Sleep() и Join(), метода EndInvoke() асинхронных делегатов или при помощи тасков (Task) и их механизмов ожидания. Следующие конструкции являются примерами плохого подхода к реализации ожидания:

Подобные конструкции требуют много ресурсов процессора, хотя не выполняют никакой полезной работы. В то же время ОС и CLR думают, что наш поток занят выполнением важных расчетов и выделяют для него необходимые ресурсы. Данного подхода следует всегда избегать.

Похожим примером может быть следующая конструкция:

Здесь вызывающий поток периодически засыпает на короткое время, но его достаточно для того, чтобы система могла переключить контексты и выполнять параллельно другие задачи. Данный подход гораздо лучше предыдущего, но все же не идеален. Основная проблема возникает в тот момент, когда необходимо изменять флаг proceed из разных потоков. Подобная конструкция будет эффективным решением в том случае, когда мы ожидаем, что условие в цикле будет удовлетворено через очень короткое время и повлечет за собой небольшое количество итераций. Если итераций много, то системе потребуется постоянно переключать контекст данного потока и тратить на это дополнительные ресурсы.

Locking

Эксклюзивная блокировка применяется для того, чтобы удостовериться, что только один поток будет выполнять конкретный участок кода. Это необходимо для гарантирования актуальности данных в каждый момент времени. В .NET Framework существует довольно много механизмов, которые позволяют реализовать блокировку доступа к участкам кода, но мы рассмотрим только самые популярные. А заодно разберем наиболее частые ошибки, связанные с применением подобных конструкций.

В таблице представлены самые популярные механизмы для организации блокировок. При помощи Мютексов можно реализовать межпроцессорную блокировку (а не только для нескольких потоков одного процесса). Семафор отличается от Мютекса тем, что позволяет указать количество потоков или процессов, которые могут получить одновременный доступ к конкретному участку кода. Конструкция lock, которая является вызовом пары методов: Monitor.Enter() и Monitor.Exit(), применяется очень часто, поэтому рассмотрим возможные проблемы и рекомендации по её использованию.

Статические члены классов, которыми часто оперируют разработчики, всегда потоконебезопасны, и доступ к таким данным нужно обязательно синхронизировать. Отличием может быть только статический конструктор, так как CLR блокирует все обращения из сторонних потоков к статическим членам класса до тех пор, пока не завершит свою работу статический конструктор.

При использовании блокирования при помощи ключевого слова lock следует помнить о следующих правилах:

    необходимо избегать блокирования типов:

В большинстве случаев нет смысла в реализации собственной подобной коллекции — намного проще и разумней использовать готовые протестированные классы.

Асинхронность

Отдельно хотелось бы выделить так называемую асинхронность, которая, с одной стороны, всегда непосредственно связана с запуском дополнительных потоков, а с другой — с дополнительными вопросами и теорией, на которых тоже стоит остановиться.

Покажем на наглядном примере разницу между синхронным и асинхронным подходами.

Предположим, вы хотите пообедать пиццей в офисе и у вас есть два варианта:

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


2-й, асинхронный вариант: заказать пиццу по телефону. После заказа вы не заблокированы, можете выполнять полезную работу на рабочем месте, пока ваш заказ обрабатывается и доставляется в офис.

Эволюция

По мере развития .NET Framework было много нововведений и подходов для запуска асинхронных операций. Первым решением для асинхронных задач стал подход под названием APM (Asynchronous Programming Model). Он основан на асинхронных делегатах, которые используют пару методов с именами BeginOperationName и EndOperationName, которые соответственно начинают и завершают асинхронную операцию OperationName. После вызова метода BeginOperationName приложение может продолжить выполнение инструкций в вызывающем потоке, пока асинхронная операция выполняется в другом. Для каждого вызова метода BeginOperationName в приложении также должен присутствовать вызов метода EndOperationName, чтобы получить результаты операции.

Данный подход можно встретить во множестве технологий и классов, но он чреват усложнением и избыточностью кода.

В версии 2.0 была введена новая модель под названием EAP (Event-based Asynchronous Pattern). Класс, поддерживающий асинхронную модель, основанную на событиях, будет содержать один или несколько методов MethodNameAsync. Он может отражать синхронные версии, которые выполняют то же действие с текущим потоком. Также в этом классе может содержаться событие MethodNameCompleted и метод MethodNameAsyncCancel (или просто CancelAsync) для отмены операции. Данный подход распространен при работе с сервисами. В Silverlight применяется для обращения к серверной части, а Ajax по сути представляет из себя реализацию данного подхода. Стоит опасаться длинных цепочек связанных вызовов событий, когда по завершении одной долгосрочной операции в событии ее завершения вызывается следующая, потом еще следующая и так далее. Это чревато дэдлоками и непредвиденными результатами. Обработка исключений и результаты асинхронной операции доступны только в обработчике события посредством соответствующих свойств параметра: Error и Result.

В .NET Framework 4.0 была введена усовершенствованная модель под названием TAP (Task-based Asynchronous Model), которая основана на задачах. На них также построены TPL и PLINQ, но о них поговорим подробно в следующий раз. Данная реализация асинхронной модели базируется на типах Task и Task System.Threading.Tasks , которые используются для предоставления произвольных асинхронных операций. TAP — это рекомендуемый асинхронный шаблон для разработки новых компонентов. Очень важно понимать разницу между потоком (Thread) и задачей (Task), которые сильно отличаются. Thread (поток) представляет собой инкапсуляцию потока выполнения, в то время как Task является работой (или просто асинхронной операцией), которая может быть выполнена параллельно. Для выполнения задачи используется свободный поток из пула потоков. По завершении работы поток будет возвращен обратно в пул, а пользователь класса получит результат задачи. Если вам нужно запустить длительную операцию и вы не хотите надолго блокировать один из потоков пула, то можете это сделать при помощи параметра TaskCreationOptions.LongRunning. Создавать и запускать задачи можно разными способами, и часто непонятно, какой из них выбрать. Разница, в основном, лишь в удобстве использования и количестве параметров с настройками, которые доступны в том или ином способе.

В последних версиях фреймворка появились новые возможности на основе все тех же задач, которые упрощают написание асинхронного кода и делают его более читабельным и понятным. Для этого введены новые ключевые слова async и await, которыми помечаются асинхронные методы и их вызовы. Асинхронный код становится очень похожим на синхронный: мы просто вызываем нужную операцию и весь код, который следует за ее вызовом, автоматически будет завернут в некий «колбек», который вызовется после завершения асинхронной операции. Также данный подход позволяет обрабатывать исключения в синхронной манере; явно дожидаться завершения операции; определять действия, которые должны быть выполнены, и соответствующие условия. Например, мы можем добавить код, который будет выполнен только в том случае, если в асинхронной операции было сгенерировано исключение. Но не все так просто, даже несмотря на массу информации на эту тему.

async\await

Рассмотрим основные рекомендации по использованию этих ключевых слов, а также некоторые интересные примеры. Чаще всего рекомендуется использовать асинхронности «от начала до конца». Это подразумевает использование только одного подхода в конкретном вызове или функциональном блоке, не смешивайте синхронные вызовы с асинхронными. Классический пример данной проблемы:

Данный код отлично работает в консольном приложении, но при вызове метода DeadlockDemo.Test() из GUI потока возникнет взаимоблокировка. Это связано с тем, как await обрабатывает контексты. По умолчанию, когда ожидается незавершенный Task, текущий контекст захватывается и используется для возобновления метода по окончании выполнения задачи. Контекстом является текущий SynchronizationContext, если только он не равен null, как в случае с консольными приложениями. Там это текущий TaskScheduler (контекст пула потоков). GUI- и ASP.NET-приложения имеют SynchronizationContext, который разрешает единовременно выполнять только одну порцию кода. Когда выражение await завершает выполнение, оно пытается выполнить остальную часть async-метода в рамках захваченного контекста. Но он уже имеет поток, который (синхронно) ожидает завершения async-метода. Получается, что каждый из них ждет друг друга, вызывая взаимоблокировку.

Также рекомендуется избегать конструкций вида async void (асинхронный метод, который ничего не возвращает). Async-методы могут возвращать значения Task, Task и void. Последний вариант был оставлен для поддержки обратной совместимости и позволяет добавлять асинхронные обработчики событий. Но стоит помнить про некоторые специфичные отличия подобных методов, а именно:

  • Исключения нельзя перехватить стандартными средствами
  • Поскольку подобные методы не возвращают задачу, то мы ограничены в работе с такими конструкциями. К примеру, мы не сможем ожидать завершения подобных задач стандартными средствами или создать цепочку выполнения, как в случае с объектами Task.
  • Подобные методы сложно тестировать, так как они имеют различия в обработке ошибок и композиции.

Всегда старайтесь конфигурировать контекст, когда это возможно. Как уже говорилось, код внутри асинхронного метода после вызова await будет требовать контекст синхронизации, в котором он был вызван. Это очень полезная возможность, особенно в GUI приложениях, но иногда это не обязательно. Например, когда коду не нужно обращаться к элементам пользовательского интерфейса. Предыдущий пример с дэдлоком можно легко исправить, изменив всего лишь одну строку:

Данная рекомендация очень актуальна при разработке каких-либо библиотек, которые ничего не знают про GUI.

Рассмотрим еще несколько примеров применения новых ключевых слов, а также некоторые особенности их использования:

На экране сначала появится «work», затем «started», и только потом «finished». На первый взгляд кажется, что первым должно быть выведено слово «started». Не забывайте, что в данном коде присутствует проблема с дэдлоком, которую мы рассмотрели. Это связано с тем, что метод, помеченный ключевым словом async, не запускает дополнительных потоков и обрабатывается синхронно до тех пор, пока не встретит внутри ключевое слово await. Только после этого будет создан новый объект типа Task и запущена отложенная задача. Чтобы исправить данное поведение в приведенном примере, достаточно заменить строку с Thread.Sleep(…) на await Task.Delay(…).

Можно предположить, что мы будем ожидать 1 секунду перед вторым выводом на экран, но это не так — оба сообщения будут выведены без задержек. Это связано с тем, что метод Task.Delay(), как и многие другие асинхронные методы, возвращает объект типа Task, но мы проигнорировали эту задачу. Мы не ожидаем ее завершения ни одним из возможных способов, что влечет за собой немедленное выведение на экран обоих сообщений.

Как и в прошлом примере, вывод на экран не будет приостановлен на одну секунду. Это связано с тем, что метод StartNew() принимает делегат и возвращает Task , где T — это тип, возвращаемый делегатом. В примере наш делегат возвращает Task. В итоге мы получаем результат в виде Task . Использование слова await «ожидает» только завершения внешней задачи, которая сразу же возвращает внутренний Task, созданный в делегате, который далее игнорируется. Исправить данную проблему можно, переписав код следующим образом:

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

Заключение

Как видите, у разработчиков имеется довольно много возможностей для работы с многопоточными приложениями. Важно не только знать теорию, но и уметь применять эффективные подходы для решения конкретных задач. Например, использование класса Thread почти однозначно говорит о том, что у вас устаревший код в проекте, хотя вероятность возникновения необходимости его использования весьма мала. В обычных ситуациях использование пула всегда оправданно, по понятным причинам.

Использование многопоточности в приложениях с GUI обычно влечет за собой дополнительные ограничения, не забывайте о них!

Также стоит помнить и про другие готовые реализации, такие как потокобезопасные коллекции. Это избавляет от написания дополнительного кода и предотвращает возможные ошибки реализации. Ну и не забывайте про особенности новых ключевых слов.

Microsoft .NET Framework

Установка .NET Framework требуется для выполнения любой программы, написанной на этой программной платформе. В настоящее время существует множество таких приложений, от самых известных, таких как пакет драйверов AMD Catalyst, до менее распространённых, например графический редактор Paint .NET или хранитель паролей KeePass. В новых операционных системах от Microsoft платформа .NET Framework доступна сразу после установки, однако для запуска некоторых программ могут потребоваться другие версии.

Скачать .NET Framework

К установочным файлам прилагаются языковые пакеты, для вывода системных сообщений и информации об ошибках на русском языке.

Microsoft .NET Framework 4.7 58.7 Мб 22.04.2020
Русский языковой пакет 5.42 Мб 22.04.2020


Предназначен для Windows 7-10. Заменяет собой версии 4.0, 4.5 и 4.6.

Microsoft .NET Framework 4.5.2 66.8 Мб 28.04.2014
Русский языковой пакет 7.27 Мб 26.04.2014

Последняя версия, доступная для Windows Vista SP1. Для более новых операционных систем устанавливать не нужно.

Microsoft .NET Framework 4.0 48.1 Мб 19.03.2010
Русский языковой пакет 3.17 Мб 22.04.2010

Последняя версия, доступная для Windows XP SP3. Для более новых операционных систем устанавливать не нужно.

Microsoft .NET Framework 3.5 Service Pack 1 231 Мб 30.07.2008
Русский языковой пакет для x86 11.4 Мб 04.12.2008
Русский языковой пакет для x64 15.3 Мб 04.12.2008

Установочный файл версии 3.5 SP1 также включает в себя версии 2.0 SP2 и 3.0 SP2.

Microsoft .NET Framework 1.1 23.2 Мб 15.04.2003
Service Pack 1 для Microsoft .NET Framework 1.1 10.2 Мб 20.08.2004
Русский языковой пакет 1.21 Мб 10.04.2003

Версия 1.1 используется редко, устанавливать только при необходимости. Например если при запуске приложения выдаётся ошибка, а в системных требованиях указан .NET Framework 1.1.

Microsoft .NET Framework 1.0 19.7 Мб 15.01.2002
Service Pack 3 для Microsoft .NET Framework 1.0 9.3 Мб 20.08.2004

Версия 1.0 почти не используется, устанавливать только в том случае, если действительно понимаете зачем это нужно.

Скачать .NET Compact Framework

Microsoft .NET Compact Framework 3.5 33.3 Мб 11.10.2007

Дистрибутив версии 3.5 включает в себя всё необходимое для запуска программ, написанных для .NET Compact Framework версий 1.0 и 2.0.

Microsoft .NET Framework 1.1–4.7 (полные установщики)

.NET Framework (Dot Net Framework) — программная платформа (софтверный фреймворк), разработанная корпорацией Microsoft в 2002 году, главным образом для операционной системы Microsoft Windows. Включает обширные библиотеки, а также предоставляет взаимную совместимость (каждый язык может использовать код, написанный на других языках) нескольких языков программирования. Программы, написанные на .NET Framework выполняются в программной среде (в противоположность аппаратной) известной как Common Language Runtime (CLR, общеязыковая исполняющая среда), представляющей собой виртуальную машину, которая обеспечивает безопасность, распределение памяти и обработку исключений. Библиотека классов и CLR вместе составляют .NET Framework.

Базовая библиотека классов .NET Framework даёт доступ к пользовательскому интерфейсу, обмену данными, к подключению баз данных, криптографии, разработке веб-приложений, вычислительным алгоритмам и сетевым подключениям. Программисты создают свои приложения путём компоновки собственного кода с библиотеками .NET Framework, а также другими библиотеками. .NET Framework предназначен для использования большей частью новых разрабатываемых приложений.

ВНИМАНИЕ: обязательно устанавливайте пакеты обновлений в таком же порядке, в каком даны ссылки на них!

.NET Framework 1.1

.NET Framework 3.5 SP1 (включает 2.0 SP2)

Обновления:

Windows XP/Server 2003 32-bit:
Обновление 1 (8,6 МиБ)
Обновление 2 (7 МиБ)
Обновление 3 (1,4 МиБ)

Windows XP/Server 2003 64-bit:
Обновление 1 (18,4 МиБ)
Обновление 2 (16,5 МиБ)
Обновление 3 (1,5 МиБ)

Windows Vista/Server 2008 x86:
Обновление 1 (1,4 МиБ)
Обновление 2 (10,5 МиБ)
Обновление 3 (6,9 МиБ)

Windows Vista/Server 2008 64-bit:
Обновление 1 (1,5 МиБ)
Обновление 2 (16 МиБ)
Обновление 3 (9,8 МиБ)

Windows Vista/Server 2008 IA-64:
Обновление 1 (1,5 МиБ)
Обновление 2 (14,7 МиБ)
Обновление 3 (2,2 МиБ)

Games — .NET Framework Remoting

Wikimedia Foundation . 2010 .

Смотреть что такое «.NET Remoting» в других словарях:

.Net Remoting — NET Remoting это созданный компанией Microsoft API для межпроцессного взаимодействия. Выпущен в 2002 году вместе с версией 1.0 пакета .NET Framework. Это одна из серии технологий от Microsoft, начатой в 1990 году первой версией OLE для 16 разрядн … Википедия

.NET Remoting — is a Microsoft application programming interface (API) for interprocess communication released in 2002 with the 1.0 version of .NET Framework. It is one in a series of Microsoft technologies that began in 1990 with the first version of Object… … Wikipedia

.NET Remoting — ist ein umfassendes, erweiterbares Framework für die nahtlose Kommunikation zwischen Objekten, die sich in verschiedenen Applikationsdomänen oder Prozessen bzw. auf unterschiedlichen Computern befinden. Es ermöglicht sozusagen die Kommunikation… … Deutsch Wikipedia

.NET Remoting — es una tecnología propietaria de Microsoft que permite crear aplicaciones distribu >Wikipedia Español

.NET Remoting — est une API de Microsoft pour la communication interprocessus livrée avec la version 1.0 du .NET Framework. Cette technologie est désormais supplantée par Windows Communication Foundation depuis la version 3.0 du framework. Portail de… … Wikipédia en Français

.NET-Framework — Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET-Klassenbibliothek — NET Framework Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET 3.0 — NET Framework Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET Framework — Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

.NET Framework 3.0 — NET Framework Basisdaten Entwickler: Microsoft Aktuelle Version … Deutsch Wikipedia

Цукерберг рекомендует:  Perl - Perl как импортировать сторонний файл
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих