2016-05-30 61 views
6

有没有最后一个简单的方法来从命令行执行c#脚本文件?从命令行运行单个* .cs脚本

我看到discussion on github

,并根据这个线索,我认为dotnet run Test.cs应该做的工作。

但对于我的TestClass是:

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

失败

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

所以,我怎么可以使用命令行中相对容易地执行在单一文件中的代码?


UPD 1:由于@Lee正确地提及并@svick dotnet run是运行项目。但我最初的问题是 - 如何运行单个文件。也许有些选项使用roslyn

+0

检查此[链接](https://msdn.microsoft.com/en-us/library/k1sx6ed2.aspx?f=255&MSPPError=-2147217396)它可能会帮助你。 –

+1

该链接非常旧。 [这里是'dotnet run'的最新文档。](http://dotnet.github.io/docs/core-concepts/core-sdk/cli/dotnet-run.html) – svick

+0

@MANISH这不是很相关'dotnet' CLI。 – svick

回答

1

很确定你需要一个project.json文件。这是一个裸露的骨骼文件,让它运行:

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

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

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

请注意emitEntryPoint

我必须先dotnet restore然后dotnet run test.cs

+0

所以这个选项只适用于项目,不允许运行单个脚本,对不对? –

+0

我觉得是的,但如果有人能证实那会很好。我注意到如果你做一个“dotnet new”,它会创建两个文件。一个“Hello World”Program.cs和一个简单的project.json文件。 –

1

它可以使用Powershell完成。 假设,你的代码是在一个文件test.cs在当前文件夹:

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

PS> .\test.ps1 
This is the miracle 

所以在 相对容易地使用命令行我怎么能执行在单文件中的代码?

将上面的代码包装到一个函数中,将文件名作为参数,将该函数放入Powershell配置文件并在需要时运行它。但要注意的事实是,只要你需要其他集会,他们必须在进行呼叫时指定。 Here's a slightly more elaborat example