卸载程序集

3
我正在尝试创建一个脚本,以输出DLL的完全限定名称列表。 目前我拥有的脚本在输出所需数据方面运行良好。问题在于这会锁定文件。因此,如果我想删除我在会话中加载的文件之一,我将收到以下消息:“无法完成操作,因为文件在Windows PowerShell中打开。” 我需要更改什么来使PowerShell释放对该文件的锁定?我通常从Visual Studio Code的内部控制台运行PowerShell脚本,但是当我直接从PowerShell运行它时,问题也存在。
Enter-PSSession -ComputerName $env:computername
Get-ChildItem -Path $input -Filter '*.dll' | ForEach-Object {
    $assembly = [System.Reflection.Assembly]::LoadFrom($_.FullName)
    Write-Host $assembly.FullName
}
Exit-PSSession

无法进行卸载使用Assembly.LoadFrom()加载的程序集。 - default
我想你可以复制这个dll文件,然后加载副本吗? - default
1个回答

3

您可以使用内存汇编:

Get-ChildItem -Path $input -Filter '*.dll' | ForEach-Object {
    $assembly = [System.Reflection.Assembly]::Load([IO.File]::ReadAllBytes($_.FullName))
    Write-Host $assembly.FullName
}

确保不要重复加载同一个程序集,否则可能会出现一些奇怪的情况。在执行加载操作之前,检查AppDomain.CurrentDomain.GetAssemblies()是一个非常好的主意。 - ogggre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接