【问题标题】:Unload assemblies [duplicate]卸载程序集[重复]
【发布时间】:2018-06-28 14:26:56
【问题描述】:

我正在尝试创建一个脚本,该脚本将输出 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

【问题讨论】:

  • 我猜你可以复制 dll 然后加载副本?

标签: powershell powershell-5.0


【解决方案1】:

您可以使用内存中的汇编:

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

【讨论】:

  • 一定不要两次加载同一个程序集,否则会出现一些奇怪的情况。在执行加载之前先检查AppDomain.CurrentDomain.GetAssemblies() 是一个非常好的主意。
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多