无法通过Visual Studio调试PowerShell

时间:2010-11-05 14:37:03

标签: debugging visual-studio-2010 powershell

我正在开发一个二进制PowerShell模块。我已经设置了模块项目的调试选项卡,以启动PowerShell控制台并导入我的模块。如果按F5,它会按预期执行。

我遇到的问题是Visual Studio并没有真正“附加”到该进程。模块窗口为空,没有任何断点被击中。

如果我手动启动PowerShell并附加到进程... BOOM!我可以调试。

F5ing会比Build + Launch + Attach一遍又一遍更好:|

有什么想法吗?

编辑:

我发现如果启用非托管代码调试,我会看到加载的模块。这是有道理的,因为PowerShell.exe是不受管理的。现在的问题是,在模块窗口中,我的所有程序集符号状态都是“符号文件中没有本机符号”。进程“powershell.exe”是“Native”而不是“Managed(v2.0.50727)”。看起来VS决定本机调试而不是托管模式。有什么方法可以改变这个吗?

1 个答案:

答案 0 :(得分:6)

我很久以前就解决了这个问题并且不记得所有的细节,但这个技巧应该有所帮助,希望如此。

创建文件C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe.config:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

x64机器:该文件还需要复制到C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0

注意:您可能希望删除行<supportedRuntime version="v4.0.30319"/>以避免加载.NET 4(另一方面,您实际上可能想要这样,例如,如果PowerShell即将使用.NET 4程序集)。< / p>

如果在承载PowerShell的应用程序中使用PowerShell,则在应用程序主目录中创建类似的文件your_app.exe.config

据我记得,行<startup useLegacyV2RuntimeActivationPolicy="true">实际上有助于VS调试器正常工作。