Script在VS Code可运行但PowerShell失效——MailKit/MimeKit发件问题
解决方案
这个问题核心是缺少依赖库或Windows PowerShell 5.1对.NET Standard 2.0兼容不足,VS Code能运行是因为它的PowerShell集成环境自动补全了依赖。以下是具体解决方法:
1. 加载所有依赖库
MailKit和MimeKit依赖BouncyCastle等第三方库,只加载主dll会导致加载失败。可以批量加载所有相关dll:
$nugetPath = "C:\ProgramFiles\PackageManagement\NuGet\Packages" # 获取MailKit和MimeKit目录下的所有dll $allDlls = Get-ChildItem "$nugetPath\MailKit.4.0.0\lib\netstandard2.0\*.dll", "$nugetPath\MimeKit.4.0.0\lib\netstandard2.0\*.dll" foreach ($dll in $allDlls) { Add-Type -Path $dll.FullName -ErrorAction SilentlyContinue }
2. 切换到PowerShell 7+版本
Windows PowerShell 5.1对.NET Standard库的支持有限,换成PowerShell 7或更高版本(基于.NET Core),兼容性更好,能直接避免这类加载问题。
3. 查看具体缺失的依赖
如果不知道缺了什么,可以捕获异常查看LoaderExceptions:
try { Add-Type -Path "C:\ProgramFiles\PackageManagement\NuGet\Packages\MimeKit.4.0.0\lib\netstandard2.0\MimeKit.dll" } catch { $_.Exception.LoaderExceptions | ForEach-Object { Write-Host "缺失依赖: $_" -ForegroundColor Red } }
根据输出找到对应的dll,手动添加加载即可。
4. 改用Assembly.LoadFile加载
相比Add-Type,直接用.NET的加载方法更稳定:
[System.Reflection.Assembly]::LoadFile("C:\ProgramFiles\PackageManagement\NuGet\Packages\MailKit.4.0.0\lib\netstandard2.0\MailKit.dll") | Out-Null [System.Reflection.Assembly]::LoadFile("C:\ProgramFiles\PackageManagement\NuGet\Packages\MimeKit.4.0.0\lib\netstandard2.0\MimeKit.dll") | Out-Null
内容的提问来源于stack exchange,提问作者trysailmajor
相关产品推荐
相关产品推荐

