如何防止Visual Studio修改applicationhost.config中的IIS Express站点的物理路径?

时间:2014-01-30 20:46:21

标签: visual-studio iis-express applicationhost

我有一个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覆盖此路径?

2 个答案:

答案 0 :(得分:4)

Visual Studio 2013和2015不会更改“覆盖应用程序池URL”选项的物理路径:

enter image description here

文件%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>

只需复制上面的默认模块,将其直接粘贴到下方并进行一些更改。更改nameidphysicalPath并使用其他子域覆盖网址。就我而言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>