Возврат Thread.abort() В .Net Core. Поставка Приложения С Собственной Версией Coreclr И Corefx.

В процессе миграции из .

NET Framework на .

NET ядро Могут возникнуть некоторые неприятные моменты.

Например, если ваше приложение использует домены, логику придется переписать.

Аналогичная ситуация с Поток.

Прервать() : Майкрософт настолько не любит эту практику (и это справедливо), что они впервые объявили этот метод устарел , а потом полностью вырезал его из фреймворка и теперь предательски выкидывает Платформонетосуппортедисключение .

Но что, если ваше приложение использует Поток.

Прервать() , а ты Очень хочу перевести это на .

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

среда CLR .

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

NET. Никогда не делайте этого на производстве.

Но если ты действительно хочешь.



Возврат Thread.Abort() в .
</p><p>
NET Core. Поставка приложения с собственной версией CoreCLR и CoreFX.

Это стало возможным благодаря двум вещам: желанию Майкрософт кросс-платформенный .

NET ядро и проделанная разработчиками работа по передаче исходного кода фреймворка в открытый доступ.

Давайте используем это в своих интересах.

Теоретический минимум:

  • публикация в дотнете позволяет нам публиковать автономный приложение: фреймворк будет поставляться вместе с ним, а не находится где-то в ПКК
  • Версия CoreCLR , на котором будет запускаться приложение, при определенных условиях можно задать с помощью runtimeconfig.json
  • Мы можем построить свой собственный CoreFX : github.com/dotnet/corefx
  • Мы можем построить свой собственный CoreCLR : github.com/dotnet/coreclr


Настройка CoreFX

Прежде чем перейти к нашей главной цели – возвращению Поток.

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

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

За что? Потому что мы можем.



Предварительные условия

Прежде всего, давайте установим все, что тебе нужно для сборки:
  • CMake
  • Предварительная версия Visual Studio 2019
  • Новейший пакет SDK для .

    NET Core (предварительная версия .

    NET Core 3.0)



Visual Studio 2019 — Рабочие нагрузки

Разработка настольных компьютеров .

NET

  • Все необходимые компоненты
  • .

    NET Framework 4.7.2 Инструменты разработки

Разработка рабочего стола на C++
  • Все необходимые компоненты
  • Набор инструментов VC++ 2019 v142 (x86, x64)
  • Windows 8.1 SDK и UCRT SDK
  • Набор инструментов VC++ 2017 v141 (x86, x64)
Кроссплатформенная разработка .

NET Core

  • Все необходимые компоненты


Visual Studio 2019 — отдельные компоненты

  • Компиляторы Roslyn C# и Visual Basic
  • Инструменты статического анализа
  • Пакет таргетинга переносимой библиотеки .

    NET

  • SDK для Windows 10 или SDK для Windows 8.1
  • Основные возможности Visual Studio C++
  • Набор инструментов VC++ 2019 v142 (x86, x64)
  • Набор инструментов VC++ 2017 v141 (x86, x64)
  • MSBuild
  • Пакет таргетинга .

    NET Framework 4.7.2

  • Универсальный пакет SDK CRT для Windows
Клонирование corefx :
  
  
  
   

git clone https://github.com/dotnet/corefx.git

Теперь давайте запретим динамичный .

Для этого откроем (здесь и далее я буду указывать пути относительно корня репозитория)

corefx\src\System.Linq.Expressions\src\System\Runtime\CompilerServices\CallSite.cs

И в конце функции CallSite .

Создавать вставьте простой код:

throw new PlatformNotSupportedException("No way");

Мы возвращаемся к corefx и выполнить build.cmd .

После завершения сборки создаем в Визуальная Студия новый .

NET ядро проект следующего содержания:

public int Test { get; set; } public static void Main(string[] args) {

Теги: #Сделай сам или Сделай сам #C++ #.

NET #Ненормальное программирование #.

net core #лучшие практики #coreclr #CoreFX

Вместе с данным постом часто просматривают: