我有一个Visual Studio Web应用程序项目,由于某些原因,它将文件从多个项目复制到单独的输出目录。我想将此输出目录用作关联的IIS Express站点的根目录。在IIS Express的applicationhost.config文件中,我可以将关联站点的物理路径设置为正确的目录。我会这样设置:
<site name="MySiteName" id="42">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\my\desired\path" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:63470:localhost" />
</bindings>
</site>
但是,当我重新打开项目时,Visual Studio会覆盖我指定的物理路径,将其还原到项目自己的目录。更糟糕的是,Visual Studio没有表明它已经做到了这一点。以下是Visual Studio混淆后<virtualDirectory>
元素的显示方式:
<virtualDirectory path="/" physicalPath="c:\path\to\project" />
如何阻止Visual Studio覆盖此路径?
答案 0 :(得分:4)
Visual Studio 2013和2015不会更改“覆盖应用程序池URL”选项的物理路径:
文件%userprofile%\documents\iisexpress\config\applicationhost.config
默认为以下内容:
<site name="MyWebSite" id="1477659296">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Projects\MyWebSite" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:62238:localhost" />
<binding protocol="http" bindingInformation="*:62238:*" />
</bindings>
</site>
只需复制上面的默认模块,将其直接粘贴到下方并进行一些更改。更改name
,id
,physicalPath
并使用其他子域覆盖网址。就我而言debug
:
<site name="MyWebSiteOverwritten" id="99999999">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Projects\DifferentPath" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:62238:debug.localhost" />
</bindings>
</site>
现在,当我启动VS并运行IIS Express时,Visual Studio不会更改覆盖URL的applicationhost.config中的physicalPath。这对我有用。
提示Visual Studio 2015: Visual Studio 2015使用文件YourProject/.vs/config/applicationhost.config
并在每次打开环境时覆盖它。打开*.proj
文件并设置以下条目:
<UseGlobalApplicationHostFile>true</UseGlobalApplicationHostFile>
使用此配置,IIS Express使用位于以下位置的全局应用程序主机文件:%userprofile%\documents\iisexpress\config\applicationhost.config
。
答案 1 :(得分:2)
我无法阻止VS覆盖MySiteName的physicalPath,但作为一种解决方法,我添加了另一个具有不同路径的应用程序部分(假设&#34; NewPath&#34;)并且没有更新VS在csproj web属性下使用此路径。在这种情况下,调试它会自动打开旧URL(http://localhost:63470/
)上的浏览器,如果你导航到新的端点(http://localhost:63470/NewPath
)一切都会正常工作,VS将不会还原它。
所以新配置如下所示:
<site name="MySiteName" id="42">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\path\to\project" />
</application>
<application path="/NewPath" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\my\desired\path" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:63470:localhost" />
</bindings>
</site>