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

如何将外部C#脚本作为源引入PowerShell脚本中使用

解答

完全可以实现从外部.cs文件读取源码供Add-Type使用,你当前写的核心代码逻辑本身是正确的,只需注意几个常见的适配细节即可正常运行和调用C#定义的内容:

  • 路径有效性校验
    $PSScriptRoot变量仅在运行已保存的.ps1脚本时才会自动赋值,直接在PowerShell交互式终端逐行执行代码时该变量为空,会导致找不到script.cs文件,可补充路径校验逻辑:
# 兼容交互运行场景,补全路径逻辑
if (-not $PSScriptRoot) {
    $PSScriptRoot = $PWD.Path
}
$csFilePath = Join-Path -Path $PSScriptRoot -ChildPath "script.cs"
if (-not (Test-Path -Path $csFilePath -PathType Leaf)) {
    throw "C#源码文件不存在:$csFilePath"
}
# 读取源码为单个字符串,-Raw参数必须保留,不能省略
$Source = Get-Content -Path $csFilePath -Raw
  • C#语法版本适配
    不同PowerShell版本默认支持的C#语法版本不同:PowerShell 5.1最高支持C# 6语法,PowerShell 7+支持更高版本的C#语法,确保script.cs中的代码没有超出对应版本的语法特性,避免编译报错。
  • 编译调试优化
    如果运行Add-Type时出现异常,可添加-PassThru参数输出完整编译信息,方便快速定位问题,修改后的Add-Type代码如下:
Add-Type -ReferencedAssemblies 'System', 'System.Runtime.InteropServices' -TypeDefinition $Source -Language CSharp -PassThru | Out-Null
  • 调用方式说明
    编译成功后,即可直接在PowerShell中调用C#定义的类成员,例如script.cs中定义了public static class Tools {public static int Add(int a, int b) {return a + b;}},PowerShell中直接用[Tools]::Add(1,2)即可获取返回值。

内容的提问来源于stack exchange,提问作者CodePidgy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:03