在IIS express中创建虚拟目录

时间:2012-01-04 23:41:14

标签: visual-studio iis-express

有没有办法在IIS express中创建虚拟目录?我知道Cassini不能这样做,如果不使用完整版本的IIS就可以做到这一点。

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

http://localhost:1132/

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

http://localhost:1132/OffSiteStuff/UserUploadedImage.jpg

我知道我可以使用我的网站中的文件夹进行此操作并仍然使用IIS Express,或者,对于普通的旧版Cassini,但此文件夹将存储用户上传的图像,我真的不想拥有这些图像混淆了应用程序文件。

另一个“go big”解决方案是每次我想调试使用异地内容的功能时,将网站部署到一个完整的Server 2008 IIS 7.5实例上,但这也有点麻烦。

我有什么方法可以在<System.WebServer /> Web配置元素中执行此操作吗?

9 个答案:

答案 0 :(得分:126)

IIS express配置由applicationhost.config管理 你可以在

中找到它
  

用户\&lt;用户名&gt; \ Documents \ IISExpress \ config文件夹。

在里面,您可以找到包含每个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>

实际上,您需要在站点中为每个虚拟目录添加新的应用程序标记。 您可以获得很大的灵活性,因为您可以为虚拟目录设置不同的配置(例如,不同的.Net Framework版本)

修改 感谢FevziApaydın指出更优雅的解决方案。

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

<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>

参考:

答案 1 :(得分:91)

@ Be.St.的批评是正确的,但不完整。 我只是通过纠正不正确的部分来复制他的解释。

IIS express配置由applicationhost.config管理 你可以在

中找到它
  

用户\&lt;用户名&gt; \ Documents \ IISExpress \ config文件夹。

在里面,您可以找到包含每个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>

您应该只是将新的virtualDirectory元素添加到应用程序父元素,而不是添加新的应用程序块。

编辑 - Visual Studio 2015

如果您正在寻找applicationHost.config文件并且您正在使用VS2015,那么您将在以下位置找到它:

  

[solution_directory] ​​/。VS /配置/的applicationHost.config

答案 2 :(得分:6)

在VS2013中,我按以下步骤执行了此操作:

1.右键单击Web应用程序项目,然后单击“属性”

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

3.在服务器下,“IIS Express”是下拉列表的默认选项,在“Project Url”中使用端口号将URL更改为适合您的URL。例如,我删除了端口号,并在localhost之后添加了“/ MVCDemo4”。

4.单击“创建虚拟目录”按钮。

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

答案 3 :(得分:2)

如果您使用的是Visual Studio 2013(可能需要专业版或更高版本),我可以通过右键单击解决方案资源管理器中的网站,将虚拟目录添加到IIS Express(基于文件)的网站中。点击添加&gt;新的虚拟目录。这与applicationhost.config文件中添加了一个条目,与此处描述的手动方法一样。

答案 4 :(得分:1)

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

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

这只是您知道如何使用的管理工具。

答案 5 :(得分:0)

我有其他东西,文件本身在SBS环境中无法访问。

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

为我修好了:)

答案 6 :(得分:0)

我必须在[project] .vs \ config \ applicationhost.config文件中输入该条目。

在此之前,它是从部署开始的,而不是从代码开始的。

答案 7 :(得分:0)

回答进一步的问题-

  

”是否可以在Visual Studio项目中应用?在多开发人员环境中,如果其他人在他们的计算机上签出了代码,则他们的本地IIS Express不会配置虚拟目录,并导致运行时错误不是吗?“

我从未在任何地方找到一致的答案,但是后来发现您可以使用网站的项目文件中的XmlPoke任务通过构建后事件来完成此任务-

<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将忽略对该文件的任何更改,因此现在可以轻松共享它们。

答案 8 :(得分:0)

Visual Studio 专业版 2017

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