Запуск и отладка .net framework / asp.net (mvc/web api) приложений на macOS/Linux/(etc unix-based OS) или же как я VS Code Remote Development over SSH осваивал.

 Здравствуйте всем, мне как человеку, который перешел на unix системы в году этак 2010, но любящего .net всегда не хватало главного: писать и отлаживать код который я хочу на системе которая мне нравится. С 2010 по 2020 Microsoft проделала уйму работы, что бы это стало само собой разумеющимся, но вот не задача, существует много легаси проектов на .net framework (далее .net fx) , как же с ними быть? Меня мучал этот вопрос уже как несколько лет и вот я его наконец решил...

Встречайте: Microsoft Visual Studio Code: Remote Development over SSH

Суть весьма проста, на самом то деле: 

    1. VS Code по SSH подключается к хосту.

    2. Разворачивает там свой сервер и подключается к нему.

    3. Выполняет все команды на хосте и прокидывает порты запущенного софта на ваш компьютер(клиент в данном контексте).

VS Code выступает эдаким клиентом, который нативно(на сколько этот термин применим к electron.js приложениям) существует на вашем компьютере.

Сам по себе опыт использования напоминает обычный запуск отладки asp.net на вашем компьютере. (В нашем контексте это asp.net, но ограничения на технологию у VS Code нет)


Итак, приступим к настройке:

Первым делом нам следует установить openSSH server на наш windows. Microsoft любезно предоставляет вполне простую инструкцию в несколько команд на PowerShell. Для ленивых, я продублирую команды которые работают на состояние 15.11.2020, но рекомендую использовать первоисточник, потому что во времени, когда вы это читаете, всё может измениться и официальную инструкцию обновят. А вот эту статью я могу и забыть обновить под новые реалии.

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Start-Service sshd # OPTIONAL but recommended: Set-Service -Name sshd -StartupType 'Automatic' # Confirm the Firewall rule is configured. It should be created automatically by setup. Get-NetFirewallRule -Name *ssh* # There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled # If the firewall does not exist, create one 

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 


Вторым шагом, нам следует настроить конфигурационные файлы VS Code для запуска команд и отладки. На коренном каталоге у вас должна быть папочка .vscode, если нет.то вам следует её создать, обычно на этом же уровне есть папки .idea и .vs, в этой папке вам следует создать 2 файла: launch.json & tasks.json:

YourSolutionRootFolder:

    -- .idea

    -- .vs

    -- .vscode:

        -- launch.json

        -- tasks.json


Третий шаг, нам следует в файле tasks.json добавить задачу, в которой вы укажите путь до вашего msbuild и что ему делать. По сути это и есть тот самый "удаленный" запуск софта на машине к которой вы подключились. Эта задача будет нам собирать проект.

{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"dependsOn": [ "clean" ],
"type": "process",
"windows": {
"command": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\MSBuild\\15.0\\Bin\\amd64\\MSBuild.exe",
"args": [
"-p:Configuration=Debug;DebugType=portable;PlatformTarget=x64",
"YourSolutionName.sln"
]
},
"options": { "cwd": "${workspaceFolder}/" },
"group": "build"
}
]
}

После чего нам следует сказать нашему VS Code, что бы он запустил IIS Express с нашим только что собранным проектом. Сделаем мы это так: укажем в файл launch.json где взять IIS Express
и с какими параметрами ему следует запуститься. Обычно конфиг файл нагенеривает вам Visual Studio или Rider. В моём случае я использую файл от Rider.

{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Framework Launch",
"type": "clr",
"request": "launch",
"preLaunchTask": "build",
"program": "C:\\Program Files\\IIS Express\\iisexpress.exe",
"args": ["/config:D:\\projects\\YourSolution\\YourSolution.WebApp\\.idea\\config\\applicationhost.config"],
"cwd": "C:\\Program Files\\IIS Express",
"stopAtEntry": false
}
]
}

Следующий шаг на много проще: вам требуется во всех файлах *.csproj проставить DebugType в portable в нужных вам конфигурациях, вот пример:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>portable</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>

Дальше, по F5( или на какую клавишу у вас назначена отладка в VS Code) запустится отладка, а все порты с хоста VS Code через SSH пробросит на вашу машину и всё будет доступно через localhost

P.S
Я впервые пишу подобного рода статью/гайд/мануал, по этому любая конструктивная критика по улучшению приветствуется в телеграмме @the_RAMZAY

Comments

Popular posts from this blog

Приветы всем!