【问题标题】:Can't debug PowerShell through Visual Studio无法通过 Visual Studio 调试 PowerShell
【发布时间】:2012-05-15 17:56:39
【问题描述】:

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

我遇到的问题是 Visual Studio 并没有真正“附加”到流程中。模块窗口是空的,我的断点都没有命中。

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

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

有什么想法吗?

编辑:

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

【问题讨论】:

    标签: debugging visual-studio-2010 powershell


    【解决方案1】:

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

    创建文件 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

    注意:您可能需要删除行 &lt;supportedRuntime version="v4.0.30319"/&gt; 以避免加载 .NET 4(另一方面,您实际上可能确实想要这个,例如,如果 PowerShell 即将使用 .NET 4 程序集)。

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

    据我所知,&lt;startup useLegacyV2RuntimeActivationPolicy="true"&gt; 这行实际上有助于 VS 调试器正常工作。

    【讨论】:

    • 注意:如果您保留此 &lt;supportedRuntime version="v4.0.30319"/&gt;,请注意您的所有 PS 控制台会话均使用 .NET 4 运行。
    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2019-02-24
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多