在 VS2013 MVC4 IIS express 中向应用程序根目录添加多级虚拟目录
Adding multiple levels of virtual directory to application root in VS2013 MVC4 IIS express
我正在使用 Visual Studion 2013
和 MVC4
。我正在为每个区域使用应用程序和路由规则中的区域(RegisterArea
覆盖)。
我的公司决定将我们的 Web 应用程序提高一个级别,现在我必须将 Calculator
附加到所有 javascript 脚本、css 和应用程序中的所有其他路径+ 为所有 Controllers
这样做
我说的是来自
http://host:1234/legal-services/Wills/Index
到http://host:1234/legal-services/Calculator/Wills/Index
所以在替换了所有脚本后,我去了 csproj
并为应用程序根目录添加了覆盖,因此它会覆盖所有控制器,但这被完全忽略了。
我假设在覆盖主机时,一个只能使用主机名和端口,但不能使用文件夹。
更新:
我也尝试过直接修改 .csproj
文件来更改 IISUrl
设置
来自
<IISUrl>http://localhost:50766/legal-services/</IISUrl>
至
<IISUrl>http://localhost:50766/legal-services/Calculator/</IISUrl>
但这对以太币没有影响。
更新2:
因此 C:\Users\[username]\Documents\IISExpress\config
中 applicationHost.config
的配置发生了变化,以添加额外的虚拟目录
来自
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services" physicalPath="C:\hg\Website" />
到
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services/calculator" physicalPath="C:\hg\Website" />
但是现在我 运行 遇到了不同的问题,因为我现在正在处理虚拟目录上的多层,我得到了 403,这很有意义,因为中间的路径 (/legal-services
) 不是在列表中。
当我添加
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services/calculator" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services" physicalPath="C:\hg\Website" />
我遇到配置错误(我假设是因为所有 3 个路径都指向同一个目录)
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
<authentication mode="Forms">
这表示路径未被识别为 Web 应用程序或存在 web.config 冲突。
如何配置才能使 path="/legal-services/calculator" 被识别为没有 web.config 冲突的应用程序?
所以解决方案是在 applicationHost.config
中创建两个单独的应用程序路径,如下所示,其中主路径具有虚拟目录路径的一部分,第二个应用程序具有完整的虚拟目录路径,如下所示:
<site name="Website-Site" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services" physicalPath="C:\hg\" />
</application>
<application path="/legal-services/Calculator" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:50766:localhost" />
</bindings>
</site>
希望这能为您节省一些时间。
我正在使用 Visual Studion 2013
和 MVC4
。我正在为每个区域使用应用程序和路由规则中的区域(RegisterArea
覆盖)。
我的公司决定将我们的 Web 应用程序提高一个级别,现在我必须将 Calculator
附加到所有 javascript 脚本、css 和应用程序中的所有其他路径+ 为所有 Controllers
我说的是来自
http://host:1234/legal-services/Wills/Index
到http://host:1234/legal-services/Calculator/Wills/Index
所以在替换了所有脚本后,我去了 csproj
并为应用程序根目录添加了覆盖,因此它会覆盖所有控制器,但这被完全忽略了。
我假设在覆盖主机时,一个只能使用主机名和端口,但不能使用文件夹。
更新:
我也尝试过直接修改 .csproj
文件来更改 IISUrl
设置
来自
<IISUrl>http://localhost:50766/legal-services/</IISUrl>
至
<IISUrl>http://localhost:50766/legal-services/Calculator/</IISUrl>
但这对以太币没有影响。
更新2:
因此 C:\Users\[username]\Documents\IISExpress\config
中 applicationHost.config
的配置发生了变化,以添加额外的虚拟目录
来自
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services" physicalPath="C:\hg\Website" />
到
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services/calculator" physicalPath="C:\hg\Website" />
但是现在我 运行 遇到了不同的问题,因为我现在正在处理虚拟目录上的多层,我得到了 403,这很有意义,因为中间的路径 (/legal-services
) 不是在列表中。
当我添加
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services/calculator" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services" physicalPath="C:\hg\Website" />
我遇到配置错误(我假设是因为所有 3 个路径都指向同一个目录)
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
<authentication mode="Forms">
这表示路径未被识别为 Web 应用程序或存在 web.config 冲突。
如何配置才能使 path="/legal-services/calculator" 被识别为没有 web.config 冲突的应用程序?
所以解决方案是在 applicationHost.config
中创建两个单独的应用程序路径,如下所示,其中主路径具有虚拟目录路径的一部分,第二个应用程序具有完整的虚拟目录路径,如下所示:
<site name="Website-Site" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
<virtualDirectory path="/legal-services" physicalPath="C:\hg\" />
</application>
<application path="/legal-services/Calculator" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\hg\Website" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:50766:localhost" />
</bindings>
</site>
希望这能为您节省一些时间。