В процессе миграции из .
NET Framework на .
NET ядро Могут возникнуть некоторые неприятные моменты.
Например, если ваше приложение использует домены, логику придется переписать.
Аналогичная ситуация с Поток.
Прервать() : Майкрософт настолько не любит эту практику (и это справедливо), что они впервые объявили этот метод устарел , а потом полностью вырезал его из фреймворка и теперь предательски выкидывает Платформонетосуппортедисключение .
Но что, если ваше приложение использует Поток.
Прервать() , а ты Очень хочу перевести это на .
NET ядро ничего не переписывая? Что ж, мы прекрасно знаем, что платформа действительно поддерживает этот функционал, поэтому могу вас порадовать: выход есть, нужно просто собрать свою версию.
среда CLR .
Отказ от ответственности: это чисто практическая статья с минимумом теории, предназначенная лишь для демонстрации новых возможностей взаимодействия разработчика со средой .
NET. Никогда не делайте этого на производстве.
Но если ты действительно хочешь.
Это стало возможным благодаря двум вещам: желанию Майкрософт кросс-платформенный .
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 Инструменты разработки
- Все необходимые компоненты
- Набор инструментов 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
Теперь давайте запретим динамичный .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
-
Новогодние Подарки, Часть Вторая: Призрак
19 Oct, 24 -
Джевикс
19 Oct, 24 -
Закон Мерфи Угрожает Блогосфере
19 Oct, 24 -
Клуб Доставки
19 Oct, 24