C#中的Windows shell脚本

6
我很确定几个月前我读到过关于启动Windows脚本的可能性,不仅可以用传统的.bat,还可以使用.js.vbs.cs文件!
今天早上我想尝试在C# .cs文件中编写Windows脚本,但我找不到任何相关的参考资料。所有与CS/C#脚本相关的东西似乎都是第三方的。
您是否有关于Windows命令行下纯Microsoft风格的C#脚本的知识参考/链接?
是的,这意味着需要进行动态C#编译...所以也许我错了,认为这是可能的。请告诉我。

1
这两个技巧都是单向的: http://www.mvps.org/scripting/dotnet/index.htm,http://www.developerfusion.com/article/84414/scripting-with-c/. 你也可以考虑PowerShell(?)。 - Merlyn Morgan-Graham
1
在这种情况下,“cs”可能指的是CScript,而不是C#,它是shell程序的名称,而不是语言。 - Joel Coehoorn
3个回答

7

选择方案A

如果你想要一个真正的C#开发体验,可以尝试使用CS-Script

你可以使用注释指令来使用第三方库和包含其他C#脚本。

//css_nuget dotnetzip
using Ionic.Zip;
using System;

class Script
{
    static public void Main()
    {
        using(ZipFile zip = new ZipFile())
        {
            zip.AddFile("app.exe");
            zip.AddFile("readme.exe");
            zip.Save("app.zip");
        }
    }
}

个人而言,我更喜欢CS-Script,因为我注意到与下面的scriptcs相比,它的脚本1)启动速度更快,而且2)没有使用命名空间的问题。你在这里编写的C#是真正的C#。VS IDE可以正常工作。 选项B 或者,看一下scriptcs http://scriptcs.net/ 你也可以使用VS编写一些简单的脚本:
 //MyScript.Main()

 public class MyScript{
     public static void Main(){
          Console.WriteLine("hello world.");
     }
 }

当你准备用scriptcs运行脚本时,请删除//注释。 C:\> scriptcs myscript.cs 另外,你可以使用nuget安装第三方包,如NLog C:\> scriptcs -install NLog 我发现一个问题,scriptcs无法使用命名空间scriptcs在编译C#脚本时实际上使用了Roslyn编译器。不幸的是,Roslyn在编译脚本时有一个设计漏洞。特别地,为了让Roslyn处理REPL型的用例,每个脚本编译都使用嵌套类来存储变量和状态。由于不能在嵌套的class中有命名空间,因此使用命名空间会失败。因此,如果你尝试导入包含命名空间(例如从VS项目中的域对象)的松散*.cs文件,则需要剥离命名空间。
这种糟糕的设计决策给我留下了不良印象,所以我大多使用cs-script选项A,直到Roslyn团队支持命名空间为止。

3

+1 但是,它似乎不能处理C#... Js、vbs和其他语言可以... 除非我错了... - Stephane Rolland
不好意思,C#脚本编写是不支持开箱即用的。 - Variant

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接