【问题标题】:Creating virtual directories in IIS express在 IIS express 中创建虚拟目录
【发布时间】:2012-02-02 21:02:24
【问题描述】:

有没有办法在 IIS express 中创建虚拟目录?我知道 Cassini 无法做到这一点,如果能够在不使用完整版 IIS 的情况下做到这一点,那就太好了。

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

http://localhost:1132/

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

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

我知道我可以使用我网站中的一个文件夹来执行此操作,并且仍然使用 IIS Express,或者,就此而言,普通的旧 Cassini,但该文件夹将存储用户上传的图像,我真的不想拥有这些图像与应用程序文件混在一起。

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

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

【问题讨论】:

标签: visual-studio iis-express


【解决方案1】:

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

中找到它

Users\\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 版本)

编辑 感谢 Fevzi Apaydı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>

参考:

【讨论】:

  • 为每个虚拟目录添加每个应用程序标签后,我无法运行“offsitestuff”应用程序。例如:iisexpress /site:WebSiteWithVirtualDirectory - 从路径“C:\temp\website1”运行第一个应用程序。如何运行包含路径“d:\temp\SubFolderApp”的第二个应用程序
  • 在绑定部分,您会看到用于访问站点根目录的 url 和端口。所以:localhost:1132 是安装在 c:\temp\website1 中的 Web 应用程序的 URL localhost:1132/OffSiteStuff 是安装在 d:\temp\SubFolderApp 中的 Web 应用程序的 URL。
  • 任何人都知道我是否/如何为每个项目单独配置设置(以便我可以检查配置)?谢谢
  • @Be.St.我希望 IIS 站点的端口号之类的东西对于所有开发人员都相同 - 所以我想检查(部分)配置。但我不能从它的当前位置执行此操作。想知道我是否可以将它指向 UserAppSettings 等样式的另一个文件。
  • 注意:虽然这些说明仍适用于 Visual Studio 2015,但 applicationhost.config 的位置已更改。比以前的版本更明智的是,它现在位于解决方案文件夹的 .vs\config 子文件夹中。
【解决方案2】:

@Be.St. 的方法是正确的,但不完整。 我只是复制他的解释并纠正不正确的部分。

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

中找到它

Users\\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/config/applicationHost.config

【讨论】:

  • 有没有办法在 Visual Studio 项目中应用这个?在多开发人员环境中,如果其他人在他们的机器上签出代码,那么他们的本地 IIS Express 不会配置虚拟目录并导致运行时错误,不是吗?
  • 在 Visual Studio 2015 中,IIS 配置文件存储在解决方案目录的 .vs/config 文件夹中,因此您可以根据需要将其检入源代码管理。
  • 这么多与 VS 2012 相关的问题的非答案淹没了谷歌搜索结果。这行得通!!!!
  • 是否可以在 IIS express 的虚拟目录中添加一个单独的应用程序,以便我可以在一个域下拥有两个应用程序?
【解决方案3】:

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

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

2.查看属性页面的“Web”标签

3.在服务器下,“IIS Express”是下拉菜单的默认选项,在“项目网址”中将使用端口号的 url 更改为适合您的端口号。比如我删除了端口号,在localhost后面加了“/MVCDemo4”。

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

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

【讨论】:

  • 这不允许你配置物理路径。
  • 好的,通过一些小实验:如果您将 webroot 更改为具有应用程序 URI 并单击创建虚拟目录,它会在项目路径 .vs\{projectname}\config 下创建一个 applicationhost.config。您可以编辑此 .config 文件并更改虚拟目录的物理路径属性。我不知道这是否被检查到 SCM 中,我将不得不找出。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

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

      在此之前,它通过部署而不是代码工作。

      【讨论】:

        【解决方案7】:

        回答进一步的问题 -

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

        回答关于在一个站点下添加其他应用程序的另一个问题:

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

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

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

        【讨论】:

        • 是否可以在 IIS express 的虚拟目录中添加一个单独的应用程序,以便我可以在一个域下拥有两个应用程序?
        【解决方案8】:

        Visual Studio Studio 专业版 2017

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

        【讨论】:

          【解决方案9】:

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

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

          帮我修好了:)

          【讨论】:

          • Users\\Documents\IISExpress\config 中的文件受每个用户的保护。也许您已尝试使用其他用户对其进行编辑。因此,要对其进行编辑,您需要在管理模式下运行记事本(或您的编辑器)。通过这种方式,您可以对其进行修改。或者像你一样删除和复制:-)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-26
          • 1970-01-01
          • 2010-09-20
          • 1970-01-01
          • 2011-06-11
          • 2016-10-06
          • 1970-01-01
          相关资源
          最近更新 更多