在IIS Express中创建虚拟目录


124

有什么方法可以在IIS express中创建虚拟目录吗?我知道Cassini无法做到这一点,而无需使用完整版本的IIS就可以做到这一点。

到目前为止,我可以这样在IIS express中本地浏览到我的应用程序:

http://本地主机:1132 /

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

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

我知道我可以使用网站内的文件夹来执行此操作,并且仍然使用IIS Express,或者就此而言,是普通的老式Cassini,但是此文件夹将存储用户上传的图像,我真的不想将这些图像与应用程序文件。

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

我可以在<System.WebServer />Web config元素中执行任何操作吗?


5
对于Visual Studio 2015,mikedice417.wordpress.com / 2015/09/13 /…可以工作。该applicationHost.config文件位于项目根目录下${PROJECT}\.vs\config\applicationHost.config
马特

这里有一个可以帮助您的答案:https
//stackoverflow.com/a/46260607/2472664

Answers:


129

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版本),因此具有很大的灵活性。

编辑 感谢FevziApaydın提出了一种更为优雅的解决方案。

通过将一个或多个virtualDirectory标记添加到Application标记,可以达到相同的结果:

<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”的第二个应用程序
Velu 2012年

在绑定部分中,您将看到用于访问网站根目录的URL和端口。因此:localhost:1132是c:\ temp \ website1中安装的Web应用程序的URL。localhost :1132 / OffSiteStuff是d:\ temp \ SubFolderApp中安装的Web应用程序的URL。
Be.St.

有人知道是否/如何为每个项目分别配置设置(以便我可以检入配置)?谢谢
伊恩·格兰杰2013年

1
@最好。我希望IIS站点的端口号对于所有开发人员来说都是相同的-所以我想检入(某些)配置。但是我不能从它的当前位置执行此操作。想知道如果我能在这等UserAppSettings的风格指向另一个文件
伊恩·固安捷

26
注意:尽管这些说明仍适用于Visual Studio 2015,但其位置applicationhost.config已更改。现在比以前的版本更明智,它位于.vs\config解决方案文件夹的子文件夹中。
理查德·莫斯

91

@ 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


4
无论如何,可以在Visual Studio项目中应用它吗?在多开发人员环境中,如果其他人在他们的计算机上签出了代码,那么他们的本地IIS Express不会被配置虚拟目录,并且会导致运行时错误,不是吗?
ahillier88

4
在Visual Studio 2015中,IIS配置文件存储在解决方案目录中的.vs / config文件夹中,因此您可以根据需要将其检入源代码管理。
兰迪·伽米奇

与VS 2012相关的问题中,有如此之多的非答案Google泛滥。
蒂姆·奥美

是否可以在IIS express的虚拟目录中添加单独的应用程序,以便在一个域下拥有两个应用程序?
Denys Alexieiev

6

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

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

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

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

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

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


1
这不允许您配置物理路径。
维克托里奥·贝拉2014年

2

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



0

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

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

为我修复它:)


Users \ <用户名> \ Documents \ IISExpress \ config中的文件受每个用户保护。也许您尝试使用其他用户进行编辑。因此,要对其进行编辑,您需要在管理模式下运行记事本(或您的编辑器)。这样,您就可以对其进行修改。或者像您一样删除和复制:-)
Be.St.

0

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

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


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

在回答有关在一个站点下添加其他应用程序的进一步问题时:

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

  <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的虚拟目录中添加单独的应用程序,以便在一个域下拥有两个应用程序?
Denys Alexieiev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.