dotnet-script를 사용하는 C# 스크립트

8502 단어 csharpdotnet
Python 사람들이 어떻게 .py 파일에 일부 코드를 작성하고 python3 filename.py 로 실행할 수 있는지 알고 계십니까? C#도 스크립트를 작성할 수 있습니다. 제가 1년 전에 배운 것입니다.

Roslyn은 C# 스크립트를 가능하게 했습니다. 관심이 있는 경우 제목이 C# Scripting인 2016년 1월 MSDN 블로그 게시물이 있습니다.

제가 정말 매료된 도구는 dotnet-script 입니다. 이 도구는 omnisharp를 통해 VS Code에서 완전한 인텔리센스를 지원하는 크로스 플랫폼 .NET Core 글로벌 도구이며 실험 요구에 맞는 대부분의 사용 사례를 다룹니다.

전제 조건


  • .NET Core SDK 2.1+
  • VS 코드
  • VS Code용 공식 C# 확장

  • 설치



    먼저 최신 버전의 .NET Core SDK가 dot.net에서 설치되어 있는지 확인하십시오. 최소 요구 사항은 .NET Core 2.1입니다.

    가장 쉬운 설치 방법public static void main은 전역 도구로 설치하는 것입니다.

    dotnet tool install --global dotnet-script
    
    


    이제 dotnet-script를 실행할 수 있고 dotnet script --version 도구 버전이 인쇄되어야 합니다.

    안녕하세요 세계


  • 모든 스크립트를 저장할 새 디렉토리를 만듭니다.
  • 새 스크립트를 초기화합니다.
  • 실행합니다.

  • mkdir console
    cd console
    dotnet script init hello
    dotnet script hello.csx
    
    


  • init 명령은 intellisense용 dotnet-script 파일 및 디버그 지원용 VS Code.csx 파일과 함께 omnisharp.json (C# 스크립트) 파일을 만듭니다.
  • csx 스크립트는 launch.json를 사용하여 실행됩니다.



  • 생성된dotnet script filename 파일의 내용은 다음과 같습니다.

    #!/usr/bin/env dotnet-script
    
    Console.WriteLine("Hello world!");
    
    


    첫 번째 줄은 *nix 사용자가 잘 알고 있어야 하는 shebang입니다. hello.csx로 실행할 수 있으며 제대로 작동합니다! (Windows에서도 작동하지만 먼저 ./hello.csx 를 사용하여 .csx 파일을 dotnet-script와 연결해야 합니다.)

    또 다른 빠른 예



    콘솔 응용 프로그램의 일반적인 사용 사례는 새 라이브러리를 실험하는 것이며 dotnet script register는 작업에 완벽한 도구입니다. stateless 라이브러리에 대해 배우고 있다고 가정해 보겠습니다. 실험 방법은 다음과 같습니다.
  • dotnet-script를 사용하여 새 스크립트를 만듭니다.
  • dotnet script init stateless를 사용하여 VS Code에서 폴더를 엽니다.
  • roslyncode . 지시문을 사용하여 너겟 패키지를 가져옵니다.
  • 해당 GitHub 페이지로 이동하여 일부 샘플 코드를 복사합니다.
  • #r (또는 Cmd+. )를 사용하여 필요한 경우 using 문을 추가합니다.
  • F5를 사용하여 VS 코드 내에서 디버그합니다.

  • Ctrl+. 파일은 다음과 같습니다.

    #!/usr/bin/env dotnet-script
    #r "nuget: Stateless, 4.2.1"
    
    // Copied from: https://github.com/dotnet-state-machine/stateless/blob/dev/example/OnOffExample/Program.cs
    using Stateless;
    
    const string on = "On";
    const string off = "Off";
    const char space = ' ';
    
    // Instantiate a new state machine in the 'off' state
    var onOffSwitch = new StateMachine<string, char>(off);
    
    // Configure state machine with the Configure method, supplying the state to be configured as a parameter
    onOffSwitch.Configure(off).Permit(space, on);
    onOffSwitch.Configure(on).Permit(space, off);
    
    Console.WriteLine("Press <space> to toggle the switch. Any other key will exit the program.");
    
    while (true)
    {
        Console.WriteLine("Switch is in state: " + onOffSwitch.State);
        var pressed = Console.ReadKey(true).KeyChar;
    
        // Check if user wants to exit
        if (pressed != space) break;
    
        // Use the Fire method with the trigger as payload to supply the state machine with an event.
        // The state machine will react according to its configuration.
        onOffSwitch.Fire(pressed);
    }
    
    


    VS Code를 사용한 개발이 처음인 사용자를 위한 참고 사항:
  • intellisense가 3 이후에 작동하지 않거나 5 이후에 사용할 수 있는 코드 작업이 없는 경우 다음과 같이 omnisharp를 다시 시작해야 할 수 있습니다: stateless.csx --> Cmd+Shift+P . 자세한 내용은 filipw/dotnet-script#424을 참조하십시오.
  • 응용 프로그램을 실행하는 동안 "응용 프로그램에 콘솔이 없거나 콘솔 입력이 리디렉션된 경우 키를 읽을 수 없습니다."라는 오류가 표시될 가능성이 큽니다. VS Code는 기본적으로 콘솔 입력을 지원하지 않는 디버그 콘솔을 사용하기 때문입니다. 대신 Omnisharp: Restart Omnisharp 속성을 "console": "integratedTerminal" 에 추가하여 통합 터미널을 사용하도록 구성하여 변경할 수 있습니다. 추가 정보here .

  • 그게 다야. 라고 묻는다면 꽤 매끄러운 것 같아요.


    내가 좋아하는 것.vscode/launch.json은 다음과 같습니다.
  • 필수 너겟 패키지를 포함하여 모든 관련 코드가 단일 파일에 존재할 수 있습니다.
  • 완전하고 신뢰할 수 있는 인텔리센스.
  • 디버거 지원.
  • dotnet-script 또는 public static void main 파일이 없습니다.
  • 좋은 웹페이지 즐겨찾기