【发布时间】:2019-10-07 22:36:54
【问题描述】:
我开发了一个 PowerShell 模块,该模块依赖 .NET 程序集进行某些操作。
我将此模块重构为不需要该程序集,并注意到一些奇怪的行为,这最终阻止了我删除该类:
Add-Type -TypeDefinition "public interface ICanTalk { string talk(); }" -Language CSharp
class Talker : ICanTalk {
[string] talk() { return "Well hello there"; }
}
如果您以交互方式运行此命令,它将成功。
但是一旦我在 ISE 中或从 psm1 文件中运行它“en-bloque”,它就会抛出一个错误,指出它找不到在 Add-Type 调用中定义的接口。
我可以在 Windows-PowerShell 和 PowerShell Core (6.0.2) 中重现该问题
不同行为的原因是什么?我该如何解决?
【问题讨论】:
-
不要相信 ISE。
-
您可能是对的,但该示例是问题的最小再现,它也适用于通过 ipmo 加载的 psm1 文件。
-
感谢您的澄清。我可以说您的测试用例也发生在 6.0.3 中。感觉
Add-Type命令没有被执行。 -
也许类在其他任何东西有机会执行之前就被解析了?
标签: powershell