C#调用PowerShell脚本加载自定义DLL时提示找不到元数据文件
解决PowerShell驱动C#界面加载自定义DLL元数据缺失问题
确认DLL架构与PowerShell运行环境匹配
检查自定义DLL的编译架构(Any CPU/x86/x64),确保和当前PowerShell的运行架构一致。用[Environment]::Is64BitProcess命令可查看PowerShell是32位还是64位,对应调整DLL的编译目标平台。改用
Add-Type加载程序集
PowerShell中加载.NET DLL优先用Add-Type,它能自动处理元数据加载逻辑,示例:# 加载单个DLL Add-Type -Path "C:\Full\Path\To\YourCustom.dll" # 加载带依赖的DLL(依赖需在同一目录或指定完整路径) Add-Type -LiteralPath "C:\Path\To\Dep1.dll", "C:\Path\To\YourCustom.dll"若依赖DLL不在主DLL目录,可先注册程序集解析事件:
$resolveHandler = [System.ResolveEventHandler]{ $depDllPath = Join-Path "C:\Path\To\DependenciesFolder" "$($args[0].Name.Split(',')[0]).dll" if (Test-Path $depDllPath) { return [System.Reflection.Assembly]::LoadFrom($depDllPath) } return $null } [System.AppDomain]::CurrentDomain.add_AssemblyResolve($resolveHandler) # 再加载主DLL Add-Type -Path "C:\Path\To\YourCustom.dll"检查C#代码的命名空间与类访问权限
在C#界面代码中确保正确引用自定义命名空间,比如using YourCustom.Namespace;,同时确认自研类的访问修饰符是public,否则外部无法访问。重新生成自定义DLL
删除DLL项目的bin和obj目录,重新编译,确保生成的DLL无编译错误,元数据完整。若编译时有依赖警告,需先解决依赖问题。验证DLL完整性
用.NET自带的ildasm.exe工具打开DLL,检查元数据是否能正常读取。如果工具无法解析DLL,说明文件损坏,需重新编译生成。
内容的提问来源于stack exchange,提问作者Tim Harbeck
相关产品推荐
相关产品推荐

