最后是一种从命令行执行c#脚本文件的简单方法吗?
根据这个帖子,我认为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
?
答案 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)