使用Powershell的Add-Type命令将路径添加到锁定文件。

5
我一直在使用Add-Type -Path "dll文件路径"来将.NET程序集加载到Powershell (v3)脚本中。但是我发现这会导致dll文件被锁定,直到Powershell控制台被终止。
有没有什么方法可以防止这种情况发生?我是否可以通过某种方式关闭或删除我的引用,以释放对该文件的锁定?
1个回答

7

是的,您可以将dll读入内存,然后使用反射加载程序集:

$bytes = [System.IO.File]::ReadAllBytes($storageAssemblyPath)
[System.Reflection.Assembly]::Load($bytes)

我把这个解决方案添加在了如何在PowerShell中加载程序集?的回答中。


1
不幸的是,这种方法似乎会将内容输出到Write-Host(有关GAC、版本和位置的信息),而我需要保持干净。有什么建议可以防止这种情况发生吗? - killercowuk
2
将结果通过管道传递到 Out-null。因此,将第二行更改为:[System.Reflection.Assembly]::Load($bytes) | Out-null - Martin Brandl
1
如果这个dll加载了同一文件夹中的其他dll,会发生什么情况?这样做也能解决这个问题吗?我认为不行。 - Mark
@Mark 很好的问题。我也认为不行。你能验证一下吗? - Martin Brandl
@Mark,对我来说它不在同一个文件夹中,但已确认。我收到了“无法加载文件或程序集”的错误提示。 - pwilcox
@MartinBrandl,否定了这个问题,请看我的评论给Mark。 - pwilcox

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