在网站的根目录时,不会附加Visual Studio调试器

时间:2009-05-26 15:18:01

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

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

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

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

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

5 个答案:

答案 0 :(得分:15)

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

Unable to debug Web Site with Top Level Location

答案 1 :(得分:0)

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

答案 2 :(得分:0)

网站根目录和虚拟目录中的网络应用程序是完全相同的吗? 行为差异可能是您的网站项目的不正确的调试设置的结果。有不同调试方式的特殊选项。其中一个是即时连接调试器并等待外部呼叫到网站(这是你可能需要的) web.config和IIS配置之间的差异也可能是行为不同的原因。

答案 3 :(得分:0)

我在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

答案 4 :(得分:0)

还有另一个原因具有相同的恶劣行为。

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

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