欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

VS2013无法启动 IIS Express Web解决方法

程序员文章站 2022-06-24 13:36:15
VS2013无法启动 IIS Express Web解决方法...

开发环境:windows8.1+vs2013

使用vs2013有一段时间了,因前期都是编写c/s程序,没有使用到b/s调试器。前几日,创建了一个mvc项目,突然发现vs2013无法调试,报了这样的错。

VS2013无法启动 IIS Express Web解决方法

一下子有点蒙,why?

国外网友给出的解决方案

if you are working on asp.net mvc web sites in visual studio 2013 (vs2013), you need to make one registry change if you want to run iis express as a 64-bit process by default. use one of the methods, below.

command-line:

regedit:

navigate to:
hkey_current_user\software\microsoft\visualstudio\12.0\webprojects
make sure there is a reg_dword value named “use64bitiisexpress”. if not, create it.
set its value from 1 (default = 0).
我通过上面的方法成功解决了

 修改项目属性的web项,如下。

VS2013无法启动 IIS Express Web解决方法

f5运行,仍然出错。

VS2013无法启动 IIS Express Web解决方法

 

这时候我知道了是web调试器没有启动,但是却不明白为什么。于是检查iis8.5的安装情况,把一些可能需要安装的都给装了。

VS2013无法启动 IIS Express Web解决方法

 

f5运行,问题依旧。

 

问题焦点已经很清楚了,就是iis express未能启动。于是想到查看事件,看有没有记录更具体的日志。

VS2013无法启动 IIS Express Web解决方法

 

相关的事件有三条,前两条相同,分别如下。

VS2013无法启动 IIS Express Web解决方法

 

VS2013无法启动 IIS Express Web解决方法

 

怎么和iisnode有关系,我们知道,iisnode是集成在iis中用于托管node.js应用程序来取代自托管node.exe进程的一个模块。

“c:\program files (x86)\iisnode-dev\release\x86\iisnode.dll”根本就不存在,这下更加晕了。为什么iis express会启动失败还是不清楚。

我决定要彻底搞清楚iis express到底是什么东西。

 

===============================华丽分割线==============================

 

当前程序员只能通过下面两种web服务器之一来开发和测试asp.net网站程序:

1. visual studio自带的asp.net开发服务器(webdev.exe)。

2. windows自带的iis web服务器。

 

上面两个方案各有优缺点,而且很多asp.net程序员告诉我们:“我希望有一个像asp.net开发服务器那样容易使用,但是功能又跟iis一样强大的服务器”。今天我很高兴地宣布,我们将提供另一个新的、免费的、综合了前两个方案的优点的选择—iis express,它的出现使得开发和运行asp.net网站程序变得更为容易。

 

iis express支持vs 2010和visual web develop 2010 express,可以运行在windows xp和更高的版本上,它不需要管理员权限即可运行,也不要求代码做任何的改动。你可以用它开发所有类型的asp.net程序,而且它还支持完整的iis 7.x功能集。

 

现有方案

在详细介绍iis express之前,我们先来看看asp.net开发服务器和iis的工作方式。

asp.net开发服务器

visual studio自带的asp.net开发服务器(开发代号“cassini”)的优势在于简练和便于快速启动。它不需要监听远程连接请求(因此在大部分企业的安全网络环境中都可以使用它),你甚至都不需要使用管理员账号就能启动它,而且它也不要求额外的安装步骤。

正是因为具备启动方便这一巨大优势,才使得它成为asp.net项目的默认服务器,当你在visual studio中按下f5时就会启动它。

VS2013无法启动 IIS Express Web解决方法

但asp.net开发服务器的缺点是它不提供完整的web服务器功能。比如说,它不支持ssl,url重写规则,自定义安全设置,和其它在iis 7中支持的功能。

iis web服务器

用visual studio运行和测试程序还有第二个选择— iis。你可以通过右键单击visual studio中的web项目,打开它的属性(在属性窗口中单击“web”标签)来配置web工程使用iis。

VS2013无法启动 IIS Express Web解决方法

使用iis作为你的开发服务器允许你测试完整的web服务器具备的功能(ssl,url重写规则等)。iis是一个货真价实的web服务器—这意味着和在作业服务器上部署差不多开发环境。

但是采用iis的缺点是,有些公司并不允许在开发机上安装完整的web服务器。iis还要求使用管理员帐号来安装和调试网站。不同版本的windows又支持不同版本的iis。例如,在windows xp上,你只能使用自带的iis 5.1—所有iis 7.x的新功能它都不支持。另外,在vs里配置网站项目使用iis,还得一些额外的安装和配置步骤。

iis express — “鱼”和“熊掌”兼得

iis express综合了asp.net开发服务器易用性的优势和iis强大的功能。确切地说:

它简练并且易于安装(文件大小不到10兆而且安装速度相当快)。在visual studio中不需要管理员权限即可启动和调试程序。提供了完整的web服务器功能——包括ssl, url重写,多媒体支持和所有其他的iis 7.x模块。它的可扩展模型和web.config配置结构和iis 7.x是一样的。它可以和iis web服务器还有asp.net开发服务器同时运行在同一台机器上(他们不会相互冲突)。它支持windows xp及更高版本的操作系统—在所有操作系统平台上提供了完整的iis 7.x功能集。

iis express(跟asp.net开发服务器一样)可以快速地从硬盘上的某个文件夹上启动网站程序。它不需要任何注册或配置步骤。在网站开发过程中,这个特性使启动和运行网站显得相当便捷。

与vs的整合

visual studio 2010的sp1引入了iis express支持。你将可以配置vs 2010使用它取代asp.net开发服务器作为asp.net项目默认的web服务器。跟现在的asp.net开发服务器一样,你不需要在iis express里注册站点或者虚拟目录。它支持和asp.net开发服务器相同的使用方法——只是添加了更多的功能而已。

当你按下f5来运行asp.net项目时,visual studio自动启动iis express并且使用它来运行和调试网站程序(不需要额外的配置)。跟asp.net开发服务器一样,iis express运行时,会在任务栏的通知区域显示一个小图标:

VS2013无法启动 IIS Express Web解决方法

右键单击上面的图标并选择“退出”就可以快速关闭iis express。你也可以通过右键单击来列出正在运行的站点列表,还有站点的文件夹路径以及使用的.net版本:

VS2013无法启动 IIS Express Web解决方法

[备注:上图iis express为英文版]

请注意上图中两个很酷的地方:

1. 正在运行的站点“test site”,还有iis express本身,保存在硬盘的c:\users\[用户名]文件夹中。这就允许非管理员用户使用iis express和网站,而且还支持一些现在的iis服务器没有办法实现的场景(例如可以在受限的企业网络环境或受限的学校公共电脑上运行iis express)。

2. 上面正在运行的站点“test site”同时支持http和https的访问方式。iis express通过自动安装“自签名证书”来支持url访问控制列表(url acl)和ssl认证,这样程序员(以非管理员用户登录电脑)可以在不需要提升用户权限,或执行额外设置的情况下就可以使用ssl。这个功能允许你在程序中为ssl设置需要保护的页面(比如登录页面),并且在开发过程中象在真实的web服务器里那样运行和测试这些页面。

iis 7.x功能集

iis express就像你现在已经熟悉的asp.net开发服务其那样容易启动和使用。 但是因为iis express是基于与iis 7x相同的代码,你可以用到完整web服务器的功能集合。这也就意味着你可以像在真实的作业web服务器上创建和运行你的程序。除了ssl,你还可以使用 iis 7.x的url重写模块、多媒体插件、动态内容压缩、高级日志功能、自定义安全策略和其他丰富多彩的模块。

除了支持asp.net以外,iis express还支持传统的asp和其他被iis支持的文件类型—这也使得它成为整合多种技术的站点的理想平台。

总结

iis express使得开发、运行和测试web程序更加容易。它支持asp.net的所有版本和所有应用程序类型(包括asp.net web窗体程序和asp.net mvc程序)。最好不过的是—你不需要改动任何代码来使用它。你将可以在所有已有的项目中选用它。

针对vs2010发布sp1补丁程序,这个补丁程序将用iis express替换掉原来内置的asp.net开发服务器。后续版本的visual studio都内置了iis express。

======================================华丽分割线====================================

 

既然vs2013都内置了iis express8.0,为什么又会出现启动失败的情况呢

在iis express的下载页面似乎找到了答案,

VS2013无法启动 IIS Express Web解决方法

 

看到webmatrix没,以前用过它的2.0版,它的任务栏图标和iisexpress是相同的呢,莫非要安装它。

安装webmatrix3.0后,打开项目,f5启动,问题解决!

 

VS2013无法启动 IIS Express Web解决方法

 

============================================= 2014-6-26 更新 ==================================

在此感谢@的回复,终于找到原因了。

首先,我们之前调试报错是因为注册表中缺少这一项“use64bitiisexpress”,安装webmatrix3.0会在注册表中默认写入这一项。不管是调试32位还是64位,

这一项对于启动iis express来说是关键。下面我们来讨论一下怎么调试64位的web程序。
 

如下,把目标平台设置为64位。

VS2013无法启动 IIS Express Web解决方法

如果按照默认方式启动是会报如下错误的。

“未能加载文件或程序集“mvcapplication2”或它的某一个依赖项。试图加载格式不正确的程序。”

如果我们想在visual studio2013上调试64位asp.net mvc的网站(本机环境x64),需要把iis express设置成默认的64位开发服务器。

我们可以通过修改注册表来进行设置,方法如下:

1.通过命令行直接写入:

“reg add hkey_current_user\software\microsoft\visualstudio\12.0\webprojects /v use64bitiisexpress /t reg_dword /d 1”

拷贝上面的命令行到记事本中,保存后修改后缀名为bat或cmd,双击运行即可。

2.第二种方法是手动添加键值:

打开“运行”,输入“regedit”回车打开注册表编辑器。

定位到:“hkey_current_user\software\microsoft\visualstudio\12.0\webprojects”

确保有一个名为“use64bitiisexpress”reg_dword值。如果没有,请创建它。

修改该项的基数为16进制的数值数据值为1(默认值=0)。现在,您可以调试64位的网站了。(ps:这里值为0时则只能调试32位的网站。)

VS2013无法启动 IIS Express Web解决方法

 

完成上面的修改后,你还需要确认下面这一项已经勾选。

VS2013无法启动 IIS Express Web解决方法

 

修改完成,按f5成功运行网站程序后,我们可以在任务管理器的进程项中看到iis express的进程后不带32的字样,说明当前启动的为64位。下面附两张图作对比:

VS2013无法启动 IIS Express Web解决方法

上图:32位

 

VS2013无法启动 IIS Express Web解决方法

上图:64位

 

需要注意的是,需改完注册表的值后需要重启visual studio2013,并且是以管理员的权限启动,不然会报下面的错。

“未能加载文件或程序集“antlr3.runtime.dll”或它的某一个依赖项。拒绝访问。”

ok,现在我们可以正常的调试64位web程序了。

 

参考:

debugging vs2013 websites using 64-bit iis express
can't get iis express 8 beta to run website as 64-bit process