无法通过Visual Studio调试PowerShell

4
我正在开发一个二进制PowerShell模块。我已经设置了该模块项目的调试选项卡以启动PowerShell控制台并导入我的模块。如果我按F5,它会如预期地运行。
我遇到的问题是Visual Studio实际上没有"连接"到该过程。模块窗口为空,我的断点也没有被击中。
如果我手动启动PowerShell并附加到该过程...BOOM!我就可以进行调试了。
按F5会比一遍又一遍地构建+启动+附加要好得多:|
有什么想法吗?
编辑:
我发现如果启用非托管代码调试,我将看到已加载的模块。这很合理,因为PowerShell.exe是非托管的。问题现在是,在模块窗口中,我所有程序集的符号状态都是"符号文件中没有本机符号"。进程"powershell.exe"是"本机的",而不是"托管的(v2.0.50727)"。看起来VS决定以本机方式而不是管理方式进行调试。有什么方法可以改变这个吗?
1个回答

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程序集,你实际上可能需要保留该行)。

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

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


请注意,如果您保留了 <supportedRuntime version="v4.0.30319"/>,则所有的 PowerShell 控制台会话都将使用 .NET 4 运行。 - Roman Kuzmin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接