Liens:
Installer aussi:
- Extension C#
- Extension Mono Debug
- Mono et ajouter C:\Program Files\Mono\bin dans le PATH
|
# 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!");
}
}
|
- Associer les fchiers *.csx avec %APPDATA%\Code\User\cs-script.user\cscs.exe
- regedit → HKCU\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!");
|
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!");
}
|
|
- 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();
|
|
# exécution du script
dotnet script test.csx
|
Debug dans vscode
|
# 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
|
choco install dotnet-script
# mise à jour
choco upgrade dotnet-script
|
|
- 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
|
# installer un paquet NuGet
scriptcs -install <NuGet Package>
|
Installation
|
choco install scriptcs
# mise à jour
choco upgrade scriptcs
|
- intellisense Ctrl+Space ou .
- Ajouter un using manquant Ctrl+.
- debug
- deployment packages
|
# exécution du script dans notepad++
. "C:\Program Files (x86)\Notepad++\plugins\CSScriptNpp\cscs.exe" test.cs
|