ChatGPT解决这个技术问题 Extra ChatGPT

在 IIS express 中创建虚拟目录

有没有办法在 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 2015,mikedice417.wordpress.com/2015/09/13/… 有效。 applicationHost.config 文件位于项目根目录下:${PROJECT}\.vs\config\applicationHost.config
这里有一个可以帮助您的答案:https://stackoverflow.com/a/46260607/2472664

B
Be.St.

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

用户\<用户名>\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。
任何人都知道我是否/如何可以为每个项目单独配置设置(以便我可以检查配置)?谢谢
@最好的。我希望 IIS 站点的端口号之类的东西对所有开发人员都相同 - 所以我想检查(部分)配置。但我不能从它的当前位置执行此操作。想知道我是否可以将它指向 UserAppSettings 等样式的另一个文件。
注意:虽然这些说明仍适用于 Visual Studio 2015,但 applicationhost.config 的位置已更改。比以前的版本更明智的是,它现在位于解决方案文件夹的 .vs\config 子文件夹中。
R
Rob

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

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

用户\<用户名>\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 的虚拟目录中,以便我可以在一个域下拥有两个应用程序?
u
user2765861

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

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

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

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

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

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


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

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


L
Lex Li

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

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

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


T
TheJoe

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

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


A
AngryDaz

在回答进一步的问题 -

“无论如何要在 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 的虚拟目录中,以便我可以在一个域下拥有两个应用程序?
i
immirza

Visual Studio Studio 专业版 2017

转到 /Solution/.vs 目录

打开 applicationHost.config 文件展开 节点并查找正确的子节点(基于运行端口)`

添加 `


N
NicoJuicy

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

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

为我修好了:)


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