在 IIS Express 中创建虚拟目录

有没有什么方法可以在 IIS Express 中创建一个虚拟目录?我知道卡西尼号无法做到这一点,如果不使用完整版的 IIS 就能做到这一点就太好了。

到目前为止,我已经可以在 IIS 中浏览到我的应用程序,如下所示:

Http://localhost:1132/

我想要做的是创建一个名为“ OffSiteStuff”的虚拟目录,并将其指向 C 盘上的某个位置,比如“ c: OffSiteStuff”,然后浏览该文件夹中的项目,如下所示:

Http://localhost:1132/offsitestuff/useruploadedimage.jpg

我知道我可以在我的网站中使用一个文件夹,并且仍然使用 IIS Express,或者,就此而言,普通的老卡西尼,但是这个文件夹将存储用户上传的图像,我真的不想让这些图像与应用程序文件混在一起。

另一个“做大”的解决方案是,每次我想调试使用离线内容的特性时,都将站点部署到一个成熟的 Server 2008 IIS 7.5实例上,但这也有点麻烦。

有什么方法可以在 <System.WebServer /> Web 配置元素中实现这一点吗?

114549 次浏览

IIS 快速配置由 applicationhost.config 管理。
你可以在里面找到

Users < username > DocumentIISExpress 配置文件夹。

在内部,您可以找到包含每个 IIS Express 配置站点的节的网站部分。

添加(或修改)如下网站部分:

<site name="WebSiteWithVirtualDirectory" id="20">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\temp\website1" />
</application>
<application path="/OffSiteStuff" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="d:\temp\SubFolderApp" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:1132:localhost" />
</bindings>
</site>

实际上,您需要在站点中为每个虚拟目录添加一个新的应用程序标记。 由于可以为虚拟目录设置不同的配置(例如,不同的。网络架构版本)

剪辑 感谢 Fevzi Apayd n 指出了一个更优雅的解决方案。

您可以通过向 Application 标记添加一个或多个 viralDirectory 标记来实现相同的结果:

<site name="WebSiteWithVirtualDirectory" id="20">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\temp\website1" />
<virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:1132:localhost" />
</bindings>
</site>

参考文献:

我还有别的东西,文件本身在 SBS 环境中无法访问。

删除配置文件夹中的文件(如果无法打开它们!)并将其替换为本地电脑上的文件夹副本。

帮我修好了:)

@ Be. St. 的方法是正确的,但是不完整。 我只是抄袭他的解释,纠正错误的部分

IIS 快速配置由 applicationhost.config 管理。
你可以在里面找到

Users < username > DocumentIISExpress 配置文件夹。

在内部,您可以找到包含每个 IIS Express 配置站点的节的网站部分。

添加(或修改)如下网站部分:

<site name="WebSiteWithVirtualDirectory" id="20">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\temp\website1" />
<virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:1132:localhost" />
</bindings>
</site>

不需要添加新的应用程序块,只需要向 application 父元素添加一个新的 viralDirectory 元素即可。

编辑 -VisualStudio2015

如果您正在查找 applicationHost.config 文件,并且正在使用 VS2015,那么您可以在以下内容中找到它:

/. vs/config/applicationHost.config

在 VS2013中,我通过以下步骤实现了这一点:

右键单击 Web 应用程序项目并点击属性

2. 查看属性页的“ Web”选项卡

3.在 Servers 下,“ IIS Express”是下拉列表的默认选项,在“ ProjectUrl”中将使用端口号的 URL 更改为适合您的。例如,我删除了端口号,并在本地主机后面添加了“/MVCDemo4”。

点击“创建虚拟目录”按钮。

5. 运行项目,将使用新的 url

一个新的选项是 IIS Express 的 Jexus Manager,

Https://blog.lextudio.com/2014/10/jexus-manager-for-iis-express/

它只是你知道如何使用的管理工具。

如果你正在使用 Visual Studio 2013(可能需要专业版或更高版本) ,我可以通过在解决方案资源管理器中右键单击网站并单击添加 > 新建虚拟目录来向 IIS Express (基于文件)网站添加虚拟目录。这将向 applicationhost.config 文件中添加一个条目,就像这里描述的手动方法一样。

我必须在[ project ] . vs config applicationhost.config 文件中创建条目。

在此之前,它只能从部署中工作,而不能从代码中工作。

为了回答进一步的问题-

”是否可以在 VisualStudio 项目中应用此方法?在多开发人员环境中,如果其他人检查了他们机器上的代码,那么他们的本地 IIS Express 就不会配置为虚拟目录,从而导致运行时错误,不是吗?”

我从未在任何地方找到这个问题的一致答案,但是后来我发现你可以通过使用网站项目文件中的 XmlPoke 任务的 post build 事件来解决这个问题

<Target Name="AfterBuild">
<!-- Get the local directory root (and strip off the website name) -->
<PropertyGroup>
<LocalTarget>$(ProjectDir.Replace('MyWebSite\', ''))</LocalTarget>
</PropertyGroup>


<!-- Now change the virtual directories as you need to -->
<XmlPoke XmlInputPath="..\..\Source\Assemblies\MyWebSite\.vs\MyWebSite\config\applicationhost.config"
Value="$(LocalTarget)AnotherVirtual"
Query="/configuration/system.applicationHost/sites/site[@name='MyWebSite']/application[@path='/']/virtualDirectory[@path='/AnotherVirtual']/@physicalPath"/>
</Target>

在 IISExpress 启动之前,可以使用此技术重新指定文件中的任何内容。这将允许您最初强制将 applicationHost.config 文件放入 GIT (假设 gitignore 忽略它) ,然后在构建时重新指定所有路径。GIT 将忽略对文件的任何更改,因此现在很容易分享它们。

关于在一个网站下添加其他应用程序的进一步问题:

您可以在应用程序主机文件中创建站点,就像在服务器上创建一样。例如:

  <site name="MyWebSite" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\GIT\MyWebSite\Main" />
<virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
<virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
</application>
<application path="/AppSubSite" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\GIT\AppSubSite\" />
<virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
<virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:4076:localhost" />
</bindings>
</site>

然后使用上述技术在生成时更改文件夹位置。

VisualStudioStudioProfessional2017

  • 转到 /Solution/.vs目录
  • 打开 applicationHost.config 文件 展开 <Sites>节点并查找正确的子节点(based on running port) `
  • 添加 <virtualDirectory path="/MyVirtualDirectory" physicalPath="D:\MyVirtualDirectoryPhysicalPath" / >’