从命令行运行单个* .cs脚本

时间:2016-05-30 11:00:19

标签: c# .net roslyn .net-core dotnet-cli

最后是一种从命令行执行c#脚本文件的简单方法吗?

我看到了discussion on github

根据这个帖子,我认为dotnet run Test.cs应该可以胜任。

但是我的测试类是:

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

可以使用Powershell完成。 假设您的代码位于当前文件夹中的文件$source = (Get-Content .\test.cs) -join " " Add-Type $source -Language CSharp [Scripts.Program]::Main(("")) 中:

PS> .\test.ps1
This is the miracle

给出

function bundle_js(bundler) {
return bundler.bundle()
    .on('error', map_error)
    .pipe(source('app.js'))
    .pipe(buffer())
    .pipe(gulp.dest('dist/'))
    .pipe(rename('app.min.js'))
    .pipe(sourcemaps.init({ loadMaps: true }))
    // capture sourcemaps from transforms
    .pipe(uglify())
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('dist/'))
  }

// Without watchify
gulp.task('browserify', function () {
    var bundler = browserify('app.js', { debug: true }).transform(babelify, {/* options */ })

    return bundle_js(bundler)
})
  

那么如何使用命令行在单个文件中执行代码   相对容易的方式?

将上述代码包装到函数中,将文件名作为参数,将该函数放入Powershell配置文件中并随时运行。但请注意,只要您需要其他程序集,就必须在执行调用时指定它们。 Here's a slightly more elaborat example

答案 2 :(得分:0)

为此,我一直使用这个c#脚本引擎:http://csscript.net

非常容易实现并且运行良好,您可以引用本地dll,Nuget包或GAC程序集。

答案 3 :(得分:0)

我在Scott Hanselman的博客上找到了另一个解决方案:

https://www.hanselman.com/blog/CAndNETCoreScriptingWithTheDotnetscriptGlobalTool.aspx

它依赖于名为dotnet-script的.NET CLI工具,您可以在下面找到其存储库:

https://github.com/filipw/dotnet-script

要使用它,请先使用dotnet tool install -g dotnet-script

进行安装

然后,您可以运行dotnet script并将其用作REPL或运行dotnet script file.csx来运行文件。

要包含NuGet软件包引用,请使用#r "nuget: AutoMapper, 6.1.0"

答案 4 :(得分:0)

PowerShell one liner 开箱即用

(Add-Type -Path "Program.cs" -PassThru)::Main()

附言在您的特定情况下, Main() 方法具有 args 参数,它会抱怨它丢失了。在这种情况下调用 Main($null)