【问题标题】: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 下运行这个完全相同的项目,并且从来没有遇到过调试器未附加的问题。想法?
【问题讨论】:
标签:
.net
asp.net
visual-studio
visual-studio-2008
【解决方案1】:
【讨论】:
-
这完全救了我。我的问题是我在 标记周围包含了一个 标记(原因我不会提及),这导致调试器失败。删除它解决了这个问题。谢谢!
【解决方案2】:
您网站根目录和虚拟目录中的 Web 应用程序是否完全相同?
行为差异可能是由于您的网站项目的调试设置不正确造成的。对于不同的调试方式,有一些特殊的选项。其中之一是即时附加调试器并等待对网站的外部调用(这是您可能需要的)。
web.config 和 IIS 配置之间的差异也可能是行为不同的原因。
【解决方案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 连接到所有网络服务器。