【问题标题】:The Visual Studio debugger is not attaching when at the root of a website位于网站根目录时未附加 Visual Studio 调试器
【发布时间】:2010-10-29 00:23:03
【问题描述】:

当我在环境中运行时,我的 Visual Studio 2008 调试器未附加到默认网站的根目录时出现问题。

我有一个在 Visual Studio 2008 SP1 上运行的 .NET 3.5 Web 应用程序项目。我已将项目设置为“使用本地 IIS Web 服务器”,路径为“http://localhost/”。我能够创建虚拟目录并且应用程序编译良好。

我的问题是,当 Internet Explorer 启动时,调试器未连接。我能够“附加到进程”并选择“w3wp.exe”,它会调试得很好。这是一个 PITA;为什么不会自动附加?

我曾经在 VD 下运行这个完全相同的项目,并且从来没有遇到过调试器未附加的问题。想法?

【问题讨论】:

  • 什么是“VD”? Virtual directory? (请不要在 cmets 中回复,而是编辑您的问题,引入缩写“VD”或在其上添加链接。)

标签: .net asp.net visual-studio visual-studio-2008


【解决方案1】:

我遇到的问题与我的 web.config 中有一个围绕我的标签的标签有关。这显然会导致调试器附加,然后立即出错,而没有任何警告或错误。这是我用来解决这个问题的文章:

Unable to debug Web Site with Top Level Location

【讨论】:

  • 这完全救了我。我的问题是我在 标记周围包含了一个 标记(原因我不会提及),这导致调试器失败。删除它解决了这个问题。谢谢!
【解决方案2】:

您网站根目录和虚拟目录中的 Web 应用程序是否完全相同?
行为差异可能是由于您的网站项目的调试设置不正确造成的。对于不同的调试方式,有一些特殊的选项。其中之一是即时附加调试器并等待对网站的外部调用(这是您可能需要的)。
web.config 和 IIS 配置之间的差异也可能是行为不同的原因。

【讨论】:

  • 我将项目中的设置设置为使用 IIS,地址设置为192.168.1.150,该地址配置为指向正确的目录
【解决方案3】:

我会尝试使用管理员帐户运行 Visual Studio。

【讨论】:

    【解决方案4】:

    我在 Visual Studio 中使用这个宏,它连接到 Visual Studio 中的快捷键。它基本上可以满足您的需要,使用调试器附加到 w3wp.exe。

    我遇到了类似的问题,自动附加有时不完全按照我的预期工作。对我来说,这是一种享受。我也不喜欢 Internet Explorer 自动启动,因为我通常在 Firefox 中进行测试。所以这个宏不会触发我喜欢的 Internet Explorer 自动启动。

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports System.Diagnostics
    
    Public Module AttachToWebServer
    
        Public Sub AttachToWebServer()
    
            Dim AspNetWp As String = "aspnet_wp.exe"
            Dim W3WP As String = "w3wp.exe"
    
            If Not (AttachToProcess(AspNetWp)) Then
                If Not AttachToProcess(W3WP) Then
                    System.Windows.Forms.MessageBox.Show(String.Format("Process {0} or {1} Cannot Be Found", AspNetWp, W3WP), "Attach To Web Server Macro")
                End If
            End If
        End Sub
    
        Public Function AttachToProcess(ByVal ProcessName As String) As Boolean
            Try
                Dim ProcessFound As Boolean = False
                Dim dbg2 As EnvDTE80.Debugger2 = DTE.Debugger
                Dim trans As EnvDTE80.Transport = dbg2.Transports.Item("Default")
                Dim dbgeng(10) As EnvDTE80.Engine
                Dim indexer As Integer = 0
    
                For Each myEngine As Engine In trans.Engines
                    'Possible values here could be "T-SQL","Native","Managed","Workflow" "Managed/Native", "Script"
                    If myEngine.Name.Equals("Managed") Then
                        dbgeng(indexer) = myEngine
                        indexer += 1
                    End If
                Next
    
                Dim processes As EnvDTE.Processes = dbg2.GetProcesses(trans, "localhost")
                For Each Process As EnvDTE80.Process2 In processes
                    If Process.Name.Contains(ProcessName) Then
                        Process.Attach2(dbgeng)
                        ProcessFound = True
                    End If
                Next
                Return ProcessFound
            Catch ex As System.Exception
                MsgBox(ex.Message)
            End Try
        End Function
    
    End Module
    

    【讨论】:

      【解决方案5】:

      还有另一个具有相同不良行为的原因。

      如果您的解决方案包含多个网站项目,那么 Visual Studio 将启动所有这些项目,即使您仅将其中一个网站项目设置为启动项目。但是,Visual Studio 只会附加到您已配置为启动项目的网站。

      还可以将解决方案配置为具有多个启动项目。如果您以 Visual Studio 将启动所有网站项目的方式配置解决方案,那么您最终将遇到与上述相同的情况 - 即:每个网站项目都有一个正在运行的 dev-webserver - 但具有 Visual Studio 的额外优势Studio 连接到所有网络服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        • 2014-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多