Script cs

De Banane Atomic
Aller à la navigationAller à la recherche

CS-Script - VS Code

Liens:

Installer aussi:

  • Extension C#
  • Extension Mono Debug
  • Mono et ajouter C:\Program Files\Mono\bin dans le PATH
Ps.svg
# exécution du script dans vscode
# $env:APPDATA\Code\User\cs-script.user\cscs.exe n'existe pas
mono "$env:APPDATA\Code\User\cs-script.user\cscs.exe" "c:\folder\test.cs"
mono "$Home\.vscode\extensions\oleg-shilo.cs-script-1.5.6\bin\cscs.exe" test.cs
# fonctionne aussi sans mono
"$Home\.vscode\extensions\oleg-shilo.cs-script-1.5.6\bin\cscs.exe" test.cs
script.cs
//css_ac freestyle
// avec l'auto-classe freestyle, pas besoin d'écrire le namespace, ni la classe (ScriptClass),
// ni la méthode (void main_impl(string[] args))
using System;

Console.WriteLine("Hello World!");
script.cs
using System;

class Script
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

Exécuter les fichiers *.csx sur un double-clique

  1. Associer les fchiers *.csx avec %APPDATA%\Code\User\cs-script.user\cscs.exe
  2. regeditHKCU\Software\Classes\Applications\cscs.exe\shell\open\command

(Default) = "C:\Users\llobera\AppData\Roaming\Code\User\cs-script.user\cscs.exe" -wait "%1"

Precompiler

Injecte le code du script dans un template.

template.cs
using System;
using System.Collections;
using System.Text;
using System.IO;

public class AutoclassPrecompiler
{
    static public bool Compile(ref string content, string scriptFile, bool IsPrimaryScript, Hashtable context)
    {
        if (!IsPrimaryScript)
            return false;

        StringBuilder code = new StringBuilder(4096);
        code.AppendLine("//Auto-generated file");
        code.AppendLine("using System;");

        bool headerProcessed = false;

        string line;
        using (StringReader sr = new StringReader(content))
            while ((line = sr.ReadLine()) != null)
            {
                if (!headerProcessed && !line.TrimStart().StartsWith("using ")) //not using...; statement of the file header
                    if (!line.StartsWith("//") && line.Trim() != "") //not comments or empty line
                    {
                        headerProcessed = true;

                        code.AppendLine("   public class ScriptClass");
                        code.AppendLine("   {");
                        code.AppendLine("       static public int Main(string[] args)");
                        code.AppendLine("       {");
                    }

                code.Append(line);
                code.Append(Environment.NewLine);
            }

        code.AppendLine("       return 0;");
        code.AppendLine("   }");
        code.AppendLine("}");

        content = code.ToString();
        return true;
    }
}
script.cs
//css_precompiler template
 
Console.WriteLine("Hello world!");

AutoClass

Ajout un namespace du même nom que le fichier et un classe Script.

Script.cs
//css_args -ac
using System;

void main()
{
    Console.WriteLine("Hello World!");
}

dotnet-script

  • Pour .NET Core seulement.
  • Debug natif dans VScode.

Code

test.csx
#! "netcoreapp2.1"
// optionnel

// références NuGet
#r "nuget: AutoMapper, 6.1.0"

Console.WriteLine("Hello!");
Console.ReadKey();
Ps.svg
# exécution du script
dotnet script test.csx

Debug dans vscode

Ps.svg
# création de l'arborescence pour déboguer
dotnet script init

Créé dans le dossier courant:

main.csx
#! "netcoreapp2.0"

Console.WriteLine("Hello world!");
omnisharp.json
{
  "script": {
    "enableScriptNuGetReferences": true,
    "defaultTargetFramework": "netcoreapp2.0"
  }
}
.vscode\launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Script Debug",
            "type": "coreclr",
            "request": "launch",
            "program": "dotnet",
            "args": [
              "exec", 
              "C:/ProgramData/chocolatey/lib/dotnet.script/Dotnet.Script/dotnet-script.dll", 
              "${file}"
            ],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": true
        }
    ]
}

Installation

Ps.svg
choco install dotnet-script

# mise à jour
choco upgrade dotnet-script

ScriptCS

  • Pour .NET CLR seulement (.NET Framework 4.6.1).
  • Compatible C# 5 mais pas C# 7.
  • Pas de debug

Code

test.csx
#load "AutreScript.csx"

# référencer une assembly du GAC
#r "assembly.dll"

Console.WriteLine("Hello!");
Console.ReadKey();

NuGet

Ps.svg
# installer un paquet NuGet
scriptcs -install <NuGet Package>

Installation

Ps.svg
choco install scriptcs

# mise à jour
choco upgrade scriptcs

Notepad++ - Plugins CS-Script

  • intellisense Ctrl+Space ou .
  • Ajouter un using manquant Ctrl+.
  • debug
  • deployment packages
Ps.svg
# exécution du script dans notepad++
. "C:\Program Files (x86)\Notepad++\plugins\CSScriptNpp\cscs.exe" test.cs