代码之家  ›  专栏  ›  技术社区  ›  bechbd

当位于网站根目录时,未附加Visual Studio调试器

  •  4
  • bechbd  · 技术社区  · 15 年前

    当我从环境中运行时,我的Visual Studio 2008调试器没有附加到默认网站的根目录,这是一个问题。

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

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

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

    5 回复  |  直到 6 年前
        1
  •  15
  •   Peter Mortensen sifr_dot_in    6 年前

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

    Unable to debug Web Site with Top Level Location

        2
  •  0
  •   okutane    15 年前

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

        3
  •  0
  •   Peter Mortensen sifr_dot_in    6 年前

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

        4
  •  0
  •   Peter Mortensen sifr_dot_in    6 年前

    我在Visual Studio中使用这个宏,它连接到Visual Studio中的快捷键。它基本上可以为您工作,通过调试器附加到w3wp.exe。

    我也遇到过类似的问题,自动连接有时不能像我预期的那样工作。对我来说,这是一种享受。我也不喜欢Internet Explorer自动启动,因为我通常在Firefox中进行测试。所以这个宏不会触发我喜欢的Internet Explorer AutoStart。

    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
  •  0
  •   Peter Mortensen sifr_dot_in    6 年前

    还有另一个原因也有同样的恶劣行为。

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

    也可以将解决方案配置为具有多个启动项目。如果您以这样一种方式配置解决方案,即Visual Studio将启动所有网站项目,那么您将以与上面描述的相同的情况结束-即:每个网站项目都有一个正在运行的dev webserver-但还有一个额外的优势,即Visual Studio附加到所有的webserver。