如何将外部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
相关产品推荐
相关产品推荐

