You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中无需类名调用C#静态函数?

实现直接调用C#静态方法的PowerShell方案

你遇到的问题是因为using namespace只能省略命名空间前缀(但你的类没有定义命名空间,所以完全没用),而Set-Alias无法直接绑定.NET静态方法调用(且你还拼错了方法名:AddNumber应为AddNumbers)。下面是两种可行的实现方式:

方法一:编写PowerShell包装函数(推荐)

这是最直观且易于维护的方式,通过包装函数直接映射到C#静态方法:

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

Add-Type -TypeDefinition $Source

# 编写包装函数
function AddNumbers {
    param(
        [Parameter(Mandatory)]
        [int]$a,
        [Parameter(Mandatory)]
        [int]$b
    )
    [BasicTest]::AddNumbers($a, $b)
}

# 现在可以直接调用
AddNumbers(4, 3)
# 输出:7

这种方式还能给参数添加约束(比如Mandatory),让调用体验更贴合PowerShell习惯。

方法二:直接在Function驱动器中绑定方法

如果不想写完整的包装函数,可以直接在PowerShell的Function:驱动器中创建条目,用脚本块指向静态方法:

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

Add-Type -TypeDefinition $Source

# 绑定到Function驱动器
Set-Item -Path Function:AddNumbers -Value {
    [BasicTest]::AddNumbers($args[0], $args[1])
}

# 直接调用(两种写法都支持)
AddNumbers 4 3
AddNumbers(4, 3)
# 输出:7

这种方式用$args接收参数,没有类型约束,适合简单场景。

补充:为什么之前的方法无效

  • using namespace BasicTest:你的类未定义在任何命名空间中,这条命令完全不起作用;即使类有命名空间,它也只能让你省略命名空间前缀(比如用[BasicTest]代替[MyNamespace.BasicTest]),但静态方法仍需通过类名调用。
  • Set-Alias -Name AddNumbers -Value [BasicTest]::AddNumber:一是拼写错误(AddNumber少了s),二是Set-Alias只能给已存在的PowerShell命令/脚本/函数起别名,无法直接绑定.NET静态方法的调用表达式。

内容的提问来源于stack exchange,提问作者Alexander K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:01:05