22

我有一个 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 没有给我任何迹象表明它已经这样做了。以下是<virtualDirectory>Visual Studio 搞砸后元素的外观:

        <virtualDirectory path="/" physicalPath="c:\path\to\project" />

如何防止 Visual Studio 覆盖此路径?

4

2 回答 2

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>

只需复制上面的默认块,将其直接粘贴到下面并进行一些更改。更改nameidphysicalPath使用附加子域覆盖 URL。就我而言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 中的物理路径。这对我行得通。

Visual Studio 2015 提示: Visual Studio 2015 使用该文件YourProject/.vs/config/applicationhost.config并在您每次打开环境时覆盖它。打开*.proj文件并设置以下条目:

<UseGlobalApplicationHostFile>true</UseGlobalApplicationHostFile>

通过此配置,IIS Express 使用位于以下位置的全局应用程序主机文件:%userprofile%\documents\iisexpress\config\applicationhost.config.

于 2015-06-17T07:12:04.073 回答
3

我无法阻止 VS 覆盖 MySiteName 的物理路径,但作为一种解决方法,我添加了另一个具有不同路径的应用程序部分(比如说“NewPath”)并且没有更新 VS 以在 csproj Web 属性下使用此路径。http://localhost:63470/在这种情况下,在调试时,如果您导航到新端点 ( ) ,它将自动在旧 url () 上打开浏览器,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>
于 2014-03-02T16:01:36.133 回答