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

0md85ypi  于 2023-03-13  发布在  .NET
关注(0)|答案(6)|浏览(186)

当我从环境中运行时,我的Visual Studio 2008调试器没有附加到默认网站的根目录,这是一个问题。
我有一个在Visual Studio 2008 SP1上运行的.NET 3.5 Web应用程序项目。我已经将该项目设置为“使用本地IIS Web服务器”,路径为“http://localhost/“。我能够创建虚拟目录,应用程序编译良好。
我的问题是当InternetExplorer启动时,调试器没有连接。我能够“附加到进程”并选择“w3 wpiderexe”,它将调试得很好。这是一个PITA;为什么它不会自动连接?
我曾经在VD下运行过这个完全相同的项目,从来没有调试器不附加的问题。

icnyk63a

icnyk63a1#

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

  • 一个月一次 *
htrmnn0y

htrmnn0y2#

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

zour9fqk

zour9fqk3#

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

cgfeq70w

cgfeq70w4#

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

mrwjdhj35#

还有另一个原因有同样的恶劣行为。
如果您的解决方案包含多个网站项目,则Visual Studio将启动所有这些项目,即使您仅将其中一个网站项目设置为启动项目。但是,Visual Studio将仅附加到您已配置为启动项目的网站。
也可以将解决方案配置为具有多个启动项目。如果您将解决方案配置为Visual Studio将启动所有网站项目,则最终将出现与上述相同的情况,即:每个网站项目都有一个正在运行的dev-webserver -但还有一个额外的优点,即VisualStudio连接到所有的webserver。

ezykj2lf

ezykj2lf6#

选中复选框选择来自所有用户的所有进程在窗口左下角的“连接到进程”中选择w3wp.exe

相关问题