2016-05-30 43 views
6

Esiste finalmente un modo semplice per eseguire il file di script C# dalla riga di comando?esegui un singolo script * .cs dalla riga di comando

ho visto che discussion on github

e in base a questo thread penso dotnet run Test.cs dovrebbe fare il lavoro.

Ma per il mio TestClass quali è:

using System; 
namespace Scripts 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.Out.WriteLine("This is the miracle"); 
     } 
    } 
} 

fallisce

PM> dotnet run .\Test.cs 
dotnet.exe : Object reference not set to an instance of an object.At line:1 char:1 

Quindi, come ho potuto eseguire il codice in fila utilizzando riga di comando in modo relativamente facile?


UPD 1: Come giustamente detto da @Lee e @svick dotnet run è per l'esecuzione del progetto. Ma la mia domanda iniziale era: come eseguire un singolo file. Forse alcune opzioni usando roslyn?

+0

controllare questo [collegamento] (https://msdn.microsoft.com/en-us/library/k1sx6ed2.aspx?f=255&MSPPError=-2147217396) potrebbe essere di aiuto. –

+1

Questo link è molto vecchio. [Ecco la documentazione corrente per 'dotnet run'.] (Http://dotnet.github.io/docs/core-concepts/core-sdk/cli/dotnet-run.html) – svick

+0

@MANISH Questo non è molto rilevante per CLI 'dotnet'. – svick

risposta

1

Abbastanza sicuro che avrete bisogno di un file project.json. Ecco un file di ossa nude per farlo funzionare:

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.0-*", 
     "type": "platform" 
    } 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": {} 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true 
    } 
} 

Annotare la emitEntryPoint.

Ho dovuto prima dotnet restore e poi dotnet run test.cs.

+0

quindi questa opzione è solo per i progetti e non consente di eseguire script singoli, giusto? –

+0

Penso di sì sì, ma se qualcuno potesse confermare che sarebbe buono. Ho notato che se fai un "dotnet new" crea due file. Un programma "Hello World" Program.cs e un semplice file project.json. –

1

È possibile utilizzare Powershell. Assunta, il codice è in un file test.cs nella cartella corrente:

$source = (Get-Content .\test.cs) -join " " 
Add-Type $source -Language CSharp 
[Scripts.Program]::Main(("")) 

PS> .\test.ps1 
This is the miracle 

Quindi, come ho potuto eseguire il codice in fila utilizzando riga di comando in relativamente facile modo ?

Avvolgere il codice precedente in una funzione, impostare il nome del file come parametro, inserire tale funzione nel profilo PowerShell ed eseguirlo quando lo si desidera. Ma sii consapevole del fatto che non appena hai bisogno di altri assembly devono essere specificati quando si effettua la chiamata. Here's a slightly more elaborat example.