【问题标题】:How I can use Add-Type in powershell through command line in order to execute VB.NET or C# (or JScript.net) code?如何通过命令行在 powershell 中使用 Add-Type 以执行 VB.NET 或 C#(或 JScript.net)代码?
【发布时间】:2020-08-05 22:36:13
【问题描述】:

这是关于 Add-Type 的 MS 文档

所以我正在尝试通过命令行添加类型:

>powershell Add-Type -TypeDefinition "public class T{public static int Add(int a, int b){return (a + b);}}" -Language CSharp

>powershell Add-Type -TypeDefinition "@"""public class T{public static int Add(int a, int b){return (a + b);}}"""@" -Language CSharp

>powershell Add-Type -TypeDefinition "@"""public class T{public static int Add(int a, int b){return (a + b);}}"""@" -Language CSharp

>powershell Add-Type -TypeDefinition @"public class T{public static int Add(int a, int b){return (a + b);}}"@ -Language CSharp

但是无论我尝试执行什么,都会返回一个错误。是否可以通过cmd控制台调用powershell来添加类型?然后执行添加的方法?

【问题讨论】:

  • 你是说,你已经在真正的编辑器、ISE、VSCode 中尝试过你的代码,并且它工作正常,并确保它在语法上是正确的,然后你在控制台主机中手动输入它,它总是失败?我的问题是,你为什么要在交互式控制台中这样做?只是好奇,因为这不是我见过的任何人做/写过或需要做的正常事情。我想不出这种方法的用例,但是嘿,人们有他们的理由。

标签: c# vb.net powershell jscript.net add-type


【解决方案1】:

这就是你不能做你正在做的事情的原因,文档特别说明了这一点。

此标点符号称为Here String.,它有特定用途。

如果您在真正的 PowerShell 编辑器(ISE、VSCode)中执行此操作,请注意将所有这些放在一行中会产生语法错误。

正确的字符串

$Source = @"
public class T
{
    public static int Add(int a, int b)
    {
        return (a + b);
    }
}
"@

这是不正确的(将显示语法错误突出显示)...

$Source = @"public class T{public static int Add(int a, int b){return (a + b);}}"@

...因为这些 '@""@' 必须在不同的行中并且完全左对齐,并且不能在同一行的第一个之后或在同一行的第二个之前

这不显示语法错误突出显示:

$Source = @"
public class T{public static int Add(int a, int b){return (a + b);}}
"@

...这可以在 PowerShell 控制台主机中完成,但不能在 cmd.exe 调用 powereshell.exe 中完成。

在这种情况下,控制台主机不会像编辑器一样显示语法错误。

每当您在控制台主机中键入需要 CRLF 等的代码时,您都必须以这种方式键入。最后,在 cmd.exe 中执行此操作永远不会显示 PowerShell 语法错误,除非您尝试运行它。

这完全是为了完全理解 PowerShell 语法和标点符号。

The Complete Guide to PowerShell Punctuation

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多