无法在Web服务器上启动调试。无法启动ASP.NET调试VS 2010,II7,Win 7 x64。

92
我正在运行Visual Studio 2010 (作为管理员),在Windows 7 x64上运行IIS 7。 我可以在IIS 7上正常运行ASP.NET网站,但是当我按F5调试时,会出现以下问题:
“无法在Web服务器上启动调试。无法启动ASP.NET调试。启动项目时可能提供更多信息而不进行调试。”
不幸的是,帮助链接并没有帮我太多忙,并且导致了一堆东西。
我检查了以下内容: 1. 安全要求 - 我不记得以前必须做任何特殊事情。在IIS7中,工作进程是w3wp.exe。它说如果它正在作为ASPNET或NETWORK SERVICE运行,则必须具有管理员特权才能对其进行调试。我如何找出是否需要在这里更改某些内容? 2. 网站属性页面>启动选项>调试器>已检查ASP.NET。使用自定义服务器设置为站点的URL(在没有调试的情况下很好用)。 3. 在web.config中启用调试。 4. 应用程序正在使用ASP.NET 3.5(我想最终转移到4.0,但我有一些迁移要处理)。 5. 应用程序池:Classing .NET AppPool(也尝试过DefaultAppPool)。
还有哪些地方我可以检查呢? 毕竟安装IIS、VS、创建网站以及开始测试不应该那么难吧?
谢谢您的协助。

1
你清楚吗?当你启动Visual Studio时,你右键点击它并选择“以管理员身份运行”选项了吗? - Aaron Carlson
你看过这个链接了吗?http://msdn.microsoft.com/en-us/library/dwesw3ee.aspx - Aaron Carlson
@Aaron,是的,我实际上已经将VS设置为始终以管理员身份运行。 - Dan C
@Aaron,我在发布这篇文章之前已经仔细阅读了该页面及其子页面,但没有发现需要做的事情。我的系统符合要求,并且网站的调试已经打开。我没有Windows Server 2003,因此没有在那里配置IIS。自从我不知道是否需要,所以没有触及任何安全设置。 - Dan C
不确定这是否有帮助,但我尝试在VS 2010中创建了一个新的ASP.NET 3.5 Web站点,并将其添加到IIS 7中,没有进行任何特殊配置,可以很好地进行调试。我的主应用程序与它在VS、IIS或甚至文件系统中的配置有关。只是不确定从哪里开始查找。 - Dan C
我知道你说你看了整篇文章,但是你尝试使用过“附加到进程”方法吗? - Aaron Carlson
31个回答

239

尝试转到IIS并检查您使用的应用程序池是否已启动。很多时候,您会产生一个导致应用程序池关闭的错误。您只需要右键单击并启动它,就可以正常运行了。


在我的情况下,我必须允许ISAPI和CGI限制中的ASP.NET v4.0.30319。 - Adi
15
身份验证应用程序池时使用了错误的用户名/密码。+1 - P.Brian.Mackey
3
在我的情况下,游泳池已经开始运行了,但在停止和重新启动后,它就正常工作了。 - Serj Sagan
1
谢谢。这个解决方案完美地解决了我的问题。我还需要重新启动应用程序池。 - Sunil
+1 默认应用程序池已停止,我试图从OneDrive运行项目,但相关的AppPoolIdentity没有权限。 - Tim
显示剩余5条评论

46

结果发现罪魁祸首是IIS的Url Rewrite模块。我定义了一个规则,将对Default.aspx的调用(该页面被设置为网站的起始页)重定向到网站根目录,以便我可以拥有规范的主页URL。然而,显然VS遇到了问题并感到困惑。当我使用Helicon ISAPI_Rewrite时,这个问题并没有出现,所以我甚至没有想过去检查它。

最后,我不得不从头开始创建一个全新的网站,并逐渐将项目/文件移植到我的解决方案中,并重新构建我的web.config,直到我找到了这个问题!好吧,现在我至少拥有一个稍微更干净的使用.NET 4.0的网站(到目前为止,希望我不会遇到任何问题)——但这真是一件痛苦的事情!


6
是的,但您必须确定应用程序池正在运行,同时也要确保您的门户网站正常运行。 - Junior Mayhé
说到这个,我的问题出在web.config文件中:<applicationInitialization remapManagedRequestsTo="/App/splash.html" doAppInitAfterRestart="true" lockAttributes=""> <add initializationPage="App/index.html" hostName="CSI" lockItem="true" /> </applicationInitialization> 我使用它来在应用程序初始化时显示启动画面。 - Nick
6
这就是我的问题所在。将所有HTTP流量重定向到HTTPS的重写规则导致出现了这个难看的错误。我找不到任何方法来保持调试期间该规则的有效性。 - Kat
只是想补充一下,对我来说情况很相似,但我们的 SSL 重写意味着我们的起始路径是 http://localhost/appname,但由于重定向将您发送到 https://localhost/appname,这导致 VS 出现错误,因为它无法处理重定向... 我们花了一个多小时才找到这个问题,因为在本地测试 IIS 时一切都运行得很完美! - Liam Wheldon
同样的问题在这里(IIS Url Rewrite模块)。我通过将规则移动到我的Web.Release.config中来解决它。请参见https://weblogs.asp.net/srkirkland/common-web-config-transformations-with-visual-studio-2010和https://dev59.com/K2gu5IYBdhLWcg3w2ahm。 - Swisher Sweet

43

Visual Studio启动时,将(出于某种原因)尝试访问以下URL:

/debugattach.aspx

如果您有重写规则将(或其他方式捕获).aspx文件重定向到其他位置,则会出现此错误。 解决方案是在您的web.config<system.webServer>/<rewrite>/<rules>部分的开头添加以下内容:

<rule name="Ignore Default.aspx" enabled="true" stopProcessing="true">
    <match url="^debugattach\.aspx" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="None" />
</rule>

这将确保捕获到这个特定的请求,什么都不做,而且最重要的是停止执行,这样您的其他规则都不会被运行。这是一个强大的解决方案,所以可以放心地将其保留在您的生产配置文件中。


1
很不幸,这对我个人来说并没有起作用,但我可以证实这绝对是某种重写问题,因为我已经注释掉了web.config的重写部分,而且可以正常运行。 - Matt
也许你想尝试这里的解决方案:https://dev59.com/z2855IYBdhLWcg3wNhd1#30813200。对我来说非常好用。 - jerhewet
Visual Studio会在这里记录与DebugAttach.aspx相关的错误: %UserProfile%\AppData\Local\Temp\Visual Studio Web Debugger.log(如果您没有该文件,或者它是旧文件,则您的问题可能与DebugAttach.aspx无关。) - Brandon S
在我的情况下,根本原因是正确的,但解决方案不正确。对我来说,这个方法有效: <location path="debugattach.aspx"> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"> <clear /> </httpErrors> </system.webServer> </location> - Tasos K.
对我来说问题是由于“/debugattach.aspx”,但解决方法是同时将erroMode更改为“DetailedLocalOnly”。 - EMalik
这应该是被接受的答案,因为它详细说明了问题。在我们的情况下,所有的.aspx请求都被重定向到index.aspx。我们添加了一个类似的规则,停止处理任何匹配<add input="{HTTP_METHOD}" pattern="^DEBUG$" />的请求。 - sthames42

30

为了让其他人也受益,我的情况是我配置应用程序池使用我的Windows凭据来访问网络资源共享。自从上次调试解决方案以来,我重置了Windows密码。更改了在应用程序池中存储的密码,就可以愉快地使用了。


谢谢,我甚至没有使用网络共享,但这个方法非常有效。 - Marissa

21

如果应用程序池标识设置为自定义帐户且计算机密码已更改,则必须更新密码。


是的,我遇到了一个问题,在这里尝试了几个答案都没有结果,你的答案真的帮助了我! - Vadzim Savenok

20

对于我的情况,需要在web.config文件中更改httpErrors部分的设置,如下所示:

<httpErrors mode="Custom"> 

导致“无法在Web服务器上启动调试”的问题。将其设置回先前的“DetailedLocalOnly”值可以解决该问题。深入挖掘后,我发现实际上只是401错误设置导致了这个问题:

<httpErrors mode="Custom"> 
    <error statusCode="401" prefixLanguageFilePath="" path="/masterpages/500.html" responseMode="ExecuteURL" />
<httpErrors mode="Custom"> 

将401错误行注释掉也解决了问题,我选择这个方法是因为我可以继续保持自定义的错误处理并开始调试。

我仍然不知道为什么会出现这种情况。


对我来说也是同样的原因,当我尝试开始调试时,在我的日志中看到了401响应,停用默认错误处理程序解决了“vs无法调试站点”的问题。我不明白为什么在我的登录页面上甚至只有在使用vs开始调试时才会出现401,而只有匿名访问和Web表单身份验证被激活。 - Frédéric
这对我也是解决方法,只不过我设置了默认的错误路径而不是明确定义401的路径。 - tuespetre
这是对我有效的解决方案(我暂时只是删除了整个httperrors部分)。之前我尝试过但没有成功的方法包括重启应用程序池和删除URL重写规则。 - Nicholas Westby
这也是对我有效的方法。然后我按照@Pablo Romeo在此答案中所写的更改了我的自定义错误:https://dev59.com/PWYr5IYBdhLWcg3wKHIp#13905859 - Bondaryuk Vladimir
2
将 erroMode 更改为 "DetailedLocalOnly" 对我也解决了问题。 调试器试图打开 "/DebugAttach.aspx",导致它转到自定义错误页面,在给定时间无法运行。 - EMalik

13

请检查应用程序池。 如果它已经停止,请重新启动。


4
这与一个月前提出的第一答案相同。 - mac10688
好的,那是这样,但为什么它每次都停止? - Fernando Torres
我的应用程序池正在运行一个已更改密码的用户。 - Anderson

11

我曾尝试调试一个DNN(Dot Net Nuke)模块时遇到了同样的问题。 结果发现你需要设置compilation debug="true":

<compilation debug="true" strict="false" targetFramework="4.0"> 

在您的web.config文件中。在DNN中,默认情况下为false。原始来源在此处: http://www.dnnsoftware.com/forums/forumid/111/postid/189880/scope/posts


谢谢!我整天都在为此烦恼,结果问题解决得如此简单。如果 Visual Studio 能够提供有意义的错误消息就好了! - colincameron

8

在实施重写模块后,我遇到了完全相同的问题。

如果我从web.config文件中删除重写条目,则调试工作正常。

为了解决这个问题,在调试时,我只需注释掉重写标签,如下所示...

<rewrite>
    <rules>
        <rule name="LowerCaseRule_1" stopProcessing="true">
            <match url="[A-Z]" ignoreCase="false" />
            <action type="Redirect" url="{ToLower:{URL}}" />
        </rule>
        <rule name="RedirectDefault.aspx_1" stopProcessing="true">
            <match url="(.*)default.aspx" />
            <action type="Redirect" url="{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>

在调试之后,我会删除注释。

可能是Visual Studio 2010中的一个bug。


1
没错,这是一个解决方法,但不够好,因为很容易在提交或发布网站之前忘记删除这样的注释。 - Jon Adams
1
你可以将这些行移动到web.config.release配置文件中,这样当你发布时它只会出现在已发布的版本中。这就是我所做的。 - shalke
也许只是排除/debugattach.aspx这个页面就可以了。请看彼得·蒙克斯的评论。 - Daniel Fisher lennybacon

6

我遇到了同样的错误,因为IIS中的应用程序池已停止。启动应用程序池后,问题得到解决。


我的问题也解决了!我发现我的DefaultAppPool已经停止了。感谢您分享这个信息。我不明白为什么它会停止。 - Jobert Enamno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接