我已经实现了一个小型PowerShell模块,它带来了一个自定义类型。我将.psm1
文件中的类型定义为C#类,并将其添加到Add-Type
。现在,当我添加模块并再次删除它时,类型仍然存在可能不正确(例如,它阻止重新添加模块)。 Remove-Module
的文档说明了模块加载的程序集中定义的类型也会被卸载。但是我的模块没有引入汇编,只是源代码形式的一种小型单一类型。
我可以将该类型放入其自己的DLL中,并将其标记为要在模块清单中加载的程序集,但我喜欢当前所有源代码的可见性。使用该模块分发DLL可能只会引起怀疑为什么它需要一个可执行文件。
在卸载模块时,有什么东西可以挂钩去除某种类型的类型吗?或者我应该忽略Add-Type
的潜在错误,以便至少能够在从会话中删除后重新添加模块?我宁愿避免在那里放一个DLL(对于那个小模块来说,无论如何都可能过度杀伤)。
答案 0 :(得分:6)
Remove-Module
上的文档也说没有卸载程序集。这是.NET和CLR的基本问题。将程序集加载到AppDomain后,就无法卸载它。因此,创建自己的DLL(托管程序集)无济于事。
我不确定您可以做多少事情,避免使用{-1}}和new-object psobject -prop @{...}
来避免添加类型和创建自定义类型。