Visual Studio加载项目时创建虚拟目录失败(applicationhost.config配置异常)
IIS Express 虚拟目录创建失败、applicationhost配置缺失的解决方案
问题核心逻辑
- Visual Studio加载ASP.NET Web类项目时,会通过写入IIS Express的
applicationhost.config配置文件,自动为项目创建对应的站点虚拟目录。一旦写入流程被权限、文件锁拦截,或者两个项目读取的配置文件路径不一致,就会弹出配置文件相关的报错提示 - 检查现有
<sites>节点仅存在projectwebhr的站点配置、找不到projectwebfinance对应条目,本质就是第二个项目的站点配置压根没有成功写入VS正在读取的那份配置文件
实际操作步骤
- 找准要修改的配置文件
别乱改系统目录下的通用IIS配置,VS默认加载的IIS Express配置文件路径为C:\Users\当前登录用户名\Documents\IISExpress\config\applicationhost.config。很多人排查半天没效果,就是因为两个项目因为启动权限不同,分别读取了不同目录下的配置文件,互相写的条目根本读不到 - 解除配置文件的写入限制
找到上述路径的applicationhost.config文件,右键打开文件属性,取消“只读”勾选;切到安全 tab 页,给当前Windows登录账号分配“完全控制”权限,从根源上避免VS写配置时被系统权限拦截 - 手动补全缺失的站点配置
参照现有projectwebhr的配置格式,在<sites>节点内追加projectwebfinance的配置条目,注意避开三个容易引发冲突的点:- 站点id不能和现有条目重复:现有条目id为1(WebSite1)、2(projectwebhr),新条目顺排为3即可
- 绑定端口不能和现有配置撞车:现有绑定端口为8080、2101,新站点选个没被系统、其他软件占用的空闲端口就行
- 物理路径要和本地TFS拉取的项目实际路径完全一致,别和现有配置的路径写法错配层级
可以直接套用的配置模板:
<site name="projectwebfinance" id="3"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\本地TFS拉取路径\projectwebfinance\projectwebfinance" /> </application> <bindings> <binding protocol="http" bindingInformation="*:2201:localhost" /> </bindings> </site> - 清理配置文件的锁占用
关掉所有打开的Visual Studio窗口,打开任务管理器把所有残留的iisexpress.exe后台进程全部结束掉。很多人改了配置还是报错,就是因为之前关VS的时候后台进程没退,一直攥着配置文件的写权限,你改的内容根本存不进去,下次开项目读的还是旧配置
容易踩的坑
- 别一会用管理员模式开一个解决方案、一会用普通模式开另一个,两种启动模式会分别定位到不同用户目录下的IIS Express配置文件,直接出现项目间配置完全不互通的问题
- 改完配置记得核对项目根目录下的.csproj文件,确认里面
IISUrl配置项的站点名、端口号和你手动写进config的条目完全匹配,不然VS加载时会重复尝试创建新站点,再次触发写入报错
内容的提问来源于stack exchange,提问作者user9517769
相关产品推荐
相关产品推荐

