VS 에서 VS Code 로 이주해온 사용자 입장 기준으로 몇가지 이야기해 보겠습니다.
 
1. 메뉴 구성의 상이함, 전반적인 설정은 어디서 ?
 
크게 보면 같은 회사에서 만든 툴이라 비슷비슷해 보이는데 막상 사용하려니 뭔가 이질적입니다.
가장 크게 다가오는 부분이 VS 는 각종 설정을 오롯이 GUI 로 접근할 수 있지만 VS Code 는 그렇지 않다는게 아닐까 생각합니다.
 

VS 는 상단 `도구 -> 옵션` 메뉴로 이렇게 설정 윈도우를 열고 `환경->키보드` 항목을 통해서 단축키 설정을 조정할 수 있는 반면
 

 

 
VS Code 는 `Ctrl + p` 로 탐색창을 열고 `>keyboard` 를 쳐서 `Open Keyboard Shortcuts` 항목을 찾아 열거나
직접 `Ctrl + K` + `Ctrl + S` 단축키로 편집창을 열어줘야 합니다.
VS Code 는 VS 대비 기본적으로 단축키를 숙지하고 잘 다뤄야 합니다. 
이런점에선 VS 보다 접근 허들이 높다고 할 수 있겠네요.
일단 `Ctrl + p` 사용은 필수입니다. 
개별 단축 기능을 몰라도 `Ctrl + p` 로 찾아서 실행할 수 있습니다.
 

`>setting` 일고 치면 몇가지 항목이 나오는데 `Open User Settings` 로 사용자 설정을 편집할 수 있습니다.
 

 
`Open User Settings (JSON)` 은 json 파일을 열어 직접 편집할 수 있는데 좀 건드리다 보면 이쪽이 더 편할겁니다.
 
{
    "debug.allowBreakpointsEverywhere": true,
    "editor.fontFamily": "D2Coding",
    "editor.fontSize": 17,
    "arduino.path": "/home/byungil/Arduino/arduino-1.8.11/",
    "debug.onTaskErrors": "showErrors",
    "omnisharp.enableRoslynAnalyzers": true,
    "editor.suggestSelection": "first",
    "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
    "python.jediEnabled": false,
    "explorer.confirmDelete": false,
    "C_Cpp.updateChannel": "Insiders",
    "sync.autoDownload": true,
    "sync.autoUpload": true,
    "sync.quietSync": true,
    "sync.gist": ".........",
    "sync.forceDownload": false,
    "sync.forceUpload": false
}
 
이런식으로 직접 항목들을 셋팅해주면 됩니다. 기본셋팅에서 지정한 항목들이 오버라이드 되는 형식입니다.
 
 
2. 프로젝트 빌드/디버그 설정
 
`{프로젝트폴더}/.vscode/launch.json`
`{프로젝트폴더}/.vscode/tasks.json`
이 두개의 파일에서 하면 됩니다.
언어별로 세부 항목들은 차이가 좀 있을 수 있습니다.
언어 확장 별로 이 파일들을 자동으로 만들어 주는 것도 있고 그렇지 않은 것도 있습니다.
 
dotnet 의 경우 tasks.json 을 보면 
 
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "problemMatcher": "$msCompile"
        },
 
이런식으로 만들어주는데 빌드 단축키인 `ctrl + shift + b` (전 f7 로 바꿔놨습니다) 를 눌러보면 
 

 
이렇게 하나만 나오는데 여러 task 를 같은 그룹으로 묶어주면 좀 편합니다. (공통 부분은 위로 올려버리고요)
 
그러면 전체적으로 다음과 같습니다.
 
{
    "version": "2.0.0",
    "problemMatcher": "$msCompile",
    "command": "dotnet",
    "type": "shell",
    "tasks": [
        {
            "label": "build (debug)",
            "args": [
                "build", "-c", "debug",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build"
        },
        {
            "label": "build (release)",
            "args": [
                "build", "-c", "release",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build"
        },
        {
            "label": "clean (debug)",
            "args": [
                "clean", "-c", "debug",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
            ],
            "group": "build"
        },
        {
            "label": "rebuild (debug)",
            "dependsOn": [ "clean (debug)", "build (debug)" ],
            "group": "build"
        },
        {
            "label": "clean (release)",
            "args": [
                "clean", "-c", "release",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
            ],
            "group": "build"
        },
        {
            "label": "rebuild (release)",
            "dependsOn": [ "clean (release)", "build (release)" ],
            "group": "build"
        },
        {
            "label": "publish",
            "args": [
                "publish",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build"
        },
        {
            "label": "watch",
            "args": [
                "watch",
                "run",
                "${workspaceFolder}/SampleServer/SampleServer.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build"
        }
    ]
}
 
그리고 빌드키를 누르면 다음과 같이 나옵니다.
 

 
그리고 launch.json 의 `preLaunchTask` 항목의 값을 디버그 빌드의 `label` 값으로 맞춰 주면 디버깅도 문제없이 잘 됩니다.
 
   "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build (debug)",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/SampleServer/bin/debug/netcoreapp3.1/SampleServer.dll",
            "args": [],
            "cwd": "${workspaceFolder}/SampleServer",
            "console": "internalConsole",
            "stopAtEntry": false
        },
 
 
