如何通过AppCmd设置IIS Express应用程序的虚拟目录?
解决IIS Express中通过AppCmd修改虚拟目录物理路径的问题
我正在编写PowerShell脚本,自动搭建用于开发的IIS Express托管站点,目前卡在通过AppCmd设置站点应用的虚拟目录这一步——微软官方的AppCmd文档内容太匮乏,根本找不到有用的指引。
我尝试执行了这条命令:
appcmd set vdir /site.name:"testSite" /app.name:"/website" /path:"/" /vdir.name:"" /physicalPath:"newPathToSet" /config /apphostconfig:"C:\Users\Caleb\Repos\TEST\testsite\.vs\testsite\config\applicationhost.config"
结果收到错误提示:
ERROR ( message:Must specify the VDIR object with identifier. )
我的applicationhost.config中对应站点的配置如下:
<site name="testSite" id="2"> <application path="/website" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\Caleb\repos\TEST\testSite\testSite" /> </application> <application path="/images" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\Caleb\images" /> </application> <bindings> <binding protocol="http" bindingInformation="*:58375:localhost" /> <binding protocol="https" bindingInformation="*:44334:localhost" /> </bindings> </site>
问题原因
错误提示要求指定VDIR对象的标识符,你之前的命令里用了/vdir.name:"",这是空值,AppCmd无法定位到具体的虚拟目录。对于根虚拟目录(path="/"),不需要用vdir.name参数,而是要通过应用的完整路径结合虚拟目录路径来定位。
正确的命令写法
有两种可行的命令格式,任选其一即可:
写法一:使用完整的应用名称(站点名+应用路径)
appcmd set vdir /app.name:"testSite/website" /path:"/" /physicalPath:"newPathToSet" /apphostconfig:"C:\Users\Caleb\Repos\TEST\testsite\.vs\testsite\config\applicationhost.config"
这里/app.name:"testSite/website"明确指定了站点testSite下的/website应用,再配合/path:"/"就能精准定位到该应用下的根虚拟目录。
写法二:拆分站点和应用路径参数
appcmd set vdir /site.name:"testSite" /app.path:"/website" /path:"/" /physicalPath:"newPathToSet" /apphostconfig:"C:\Users\Caleb\Repos\TEST\testsite\.vs\testsite\config\applicationhost.config"
这种写法用/site.name指定站点,/app.path指定应用路径,同样结合/path:"/"定位到目标虚拟目录。
验证结果
执行上述命令后,打开applicationhost.config检查,/website应用下的<virtualDirectory path="/">节点的physicalPath应该已经更新为你设置的newPathToSet。
内容的提问来源于stack exchange,提问作者CJoseph
相关产品推荐
相关产品推荐

