C# PowerShell是否编译脚本?
假设我有一个简单的PowerShell脚本:C# PowerShell是否编译脚本?,c#,.net,debugging,powershell,cil,C#,.net,Debugging,Powershell,Cil,假设我有一个简单的PowerShell脚本: 1..3 | Write-Host PowerShell如何处理它 它是在内存中构建程序集还是一些临时的.dll文件 我可以使用一些工具(例如ILSpy、VS、WinDbg)检查此程序集和MSIL吗 PowerShell是否以相同的方式处理文件脚本和REPL命令行输入(即编译/解释) 我可以将这个编译后的程序集与C#和其他.Net语言一起使用吗 PS脚本是否可以编译为本机二进制代码 PowerShell V2及更早版本从未编译过脚本,它总是通过
1..3 | Write-Host
- PowerShell如何处理它李>
- 它是在内存中构建程序集还是一些临时的.dll文件
- 我可以使用一些工具(例如ILSpy、VS、WinDbg)检查此程序集和MSIL吗
- PowerShell是否以相同的方式处理文件脚本和REPL命令行输入(即编译/解释)
- 我可以将这个编译后的程序集与C#和其他.Net语言一起使用吗
- PS脚本是否可以编译为本机二进制代码
您可以在C#中使用从PowerShell脚本返回的对象。从V3开始,如果在C#中使用
dynamic
关键字,就可以访问实例上的属性、调用脚本方法等,就像在任何其他对象上一样。在V3之前,您必须使用类似于psobj.Properties['SomeProperty']
的API,PowerShell是一种解释语言(是的,V3在内部缓存一些生成的IL)。没有这样的程序集,那么您就不能将它们与其他.NET语言一起使用,但当然您可以在.NET应用程序中托管PowerShell(还可以共享某些东西!)。其他答案则是由此产生的结果。关于检查缓存的IL…当然,使用ILSpy检查PS代码并使用WinDbg,您几乎可以做任何您想做的事情…如果您的目标是将PowerShell脚本部署为可执行文件,您可能想看看这个项目:感谢您提供的大量信息,我第一次读到这篇文章!您是否有关于此功能的文档链接?对不起,这篇文章和GirHub上的源代码都是关于此功能的。我猜这就是:if(LoopStatementCount<300){//在循环16次迭代后开始编译。
EnterLoopInstruction=new EnterLoopInstruction(循环,compiler.Locals,16,compiler.Instructions.Count);compiler.Instructions.Emit(EnterLoopInstruction);
}对于循环,函数也有类似的代码。