PowerShell导入自定义DLL失败:System.IO.File类型加载错误
解决PowerShell调用自制C# DLL时System.IO.File类型加载失败问题
问题描述
调用自制C# DLL的ReadWebsiteJson方法时触发类型加载错误:
Exception calling "ReadWebsiteJson" with "1" argument(s): "Could not load type 'System.IO.File' from assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral,
调用代码:
$jsonpath = "$env/config/WebTemplates.json" [PowerLib.JsonParser]::ReadWebsiteJson($jsonpath)
已尝试但无效的操作:
- 通过NuGet将System.IO导入DLL文件
- 从网上下载system.io.dll并使用Get-Type加载
- 使用Install-Script加载该下载的DLL
可行解决方案
1. 匹配DLL目标框架与PowerShell运行时
PowerShell 5.1基于.NET Framework,PowerShell 7+基于.NET Core/.NET 5+。如果DLL编译时的目标框架和当前PowerShell版本不兼容,就会出现这类错误:
- 打开C#项目属性,在「应用程序」选项卡中调整「目标框架」:
- 对应PowerShell 5.1:选择.NET Framework 4.7.2及以上兼容版本
- 对应PowerShell 7+:选择.NET 6/7/8等对应版本
2. 确保C#项目依赖正确配置
在C#项目中:
- 通过NuGet安装与目标框架匹配的
System.IO包 - 找到System.IO引用,右键设置「复制本地」为
True,编译后依赖文件会被复制到输出目录,PowerShell调用时能正确找到依赖
3. 手动加载对应版本的依赖程序集
在调用自制DLL前,先加载匹配版本的依赖:
# 替换为你项目输出目录或NuGet缓存中的对应路径 Add-Type -Path ".\bin\Release\net472\System.Runtime.dll" Add-Type -Path ".\bin\Release\net472\System.IO.dll" # 加载自制DLL Add-Type -Path ".\bin\Release\net472\PowerLib.dll" # 执行调用 $jsonpath = "$env/config/WebTemplates.json" [PowerLib.JsonParser]::ReadWebsiteJson($jsonpath)
注意:不要使用网上随意下载的DLL,优先从自己的项目输出目录或NuGet包的安装路径获取依赖文件。
4. 临时替代方案:用PowerShell原生命令读取JSON
如果暂时无法修复DLL问题,可直接用PowerShell内置命令实现相同功能:
# 注意原代码中$env可能是$env:config的笔误,需根据实际环境调整 $jsonpath = "$env:config/WebTemplates.json" $jsonData = Get-Content -Path $jsonpath -Raw | ConvertFrom-Json # 后续处理逻辑替代ReadWebsiteJson的功能
内容的提问来源于stack exchange,提问作者Taway
相关产品推荐
相关产品推荐

