2009-05-26 102 views
5

我在Visual Studio 2008调试器中没有附加到默认网站的根目录时遇到问题,因为我在环境中运行时遇到了问题。Visual Studio调试器在网站根目录时无法附加

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

我的问题是,当IE启动调试器没有连接。我能够“附加到进程”并选择“w3wp.exe”,它会调试得很好。这是一个PITA,我很好奇,如果有人知道为什么这不会自动附加?

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

回答

0

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

+0

我是管理员 – bechbd 2009-06-01 16:38:28

0

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

+0

我将项目设置为使用IIS,地址设置为https://192.168.1.150,该地址被配置为指向正确的目录 – bechbd 2009-06-01 16:41:55

+0

您是否试图打开http:// 192.168.1.150/而不是http:// localhost /? – okutane 2009-06-02 08:03:50

0

我在VS中使用这个宏,我将它连接到Visual Studio中的一个快捷键,它基本上做了什么适合你,使用调试器附加到w3wp.exe。由于我有类似的问题与自动附件不完全按我预期的方式工作。对我来说这是一种享受。我也不喜欢IE自动启动,因为我通常在Firefox中测试。所以这个宏不会触发我喜欢的IE自动启动。

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 
0

有具有相同讨厌的行为另一个原因。

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

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

相关问题