Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2015 如何在iisexpress vs2015中设置具有相同端口和域但不同路径的多个应用程序_Visual Studio 2015_Asp.net Core_Iis Express - Fatal编程技术网

Visual studio 2015 如何在iisexpress vs2015中设置具有相同端口和域但不同路径的多个应用程序

Visual studio 2015 如何在iisexpress vs2015中设置具有相同端口和域但不同路径的多个应用程序,visual-studio-2015,asp.net-core,iis-express,Visual Studio 2015,Asp.net Core,Iis Express,我目前正在将一个大型asp.net核心解决方案拆分为多个较小的解决方案,每个解决方案都有一个应用程序。 为了做到这一点,基本应用程序需要指向 www.originalApp.com 我的每个较小的应用程序都将使用路径进行访问 www.originalApp.com/SplittedApp 我已经在applicationHost.config中通过以下设置使用IIS成功地运行了此功能 <site name="OriginalApp" id="3" serverAutoStar

我目前正在将一个大型asp.net核心解决方案拆分为多个较小的解决方案,每个解决方案都有一个应用程序。 为了做到这一点,基本应用程序需要指向

www.originalApp.com

我的每个较小的应用程序都将使用路径进行访问

www.originalApp.com/SplittedApp

我已经在applicationHost.config中通过以下设置使用IIS成功地运行了此功能

        <site name="OriginalApp" id="3" serverAutoStart="true">
            <application path="/" applicationPool="OriginalAppPool">
                <virtualDirectory path="/" physicalPath="OriginalAppPath/>
            </application>
            <application path="/SplittedApp" applicationPool="splittedApp">
                <virtualDirectory path="/" physicalPath="splittedAppPath />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:82:" />
                <binding protocol="http" bindingInformation="IpAddress:originalApp" />
            </bindings>
            <applicationDefaults applicationPool="Fire.Frontend" />
        </site>
和原来的应用程序

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:9345",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
}
当前安装程序无法加载第二个应用程序,因为使用了相同的端口,但是我需要使用相同的端口,这样我就可以附加路径并有效地导航两个应用程序之间的页面

我发现很难相信我试图实现的目标是不可能使用IIS Express的,因为它可以与IIS配合使用

我在网上读了很多关于SO的帖子和博客,但我找不到任何人有相同的问题,而且似乎相似的问题的解决方案都不适合我,所以如果有人能为我指出正确的方向,我将不胜感激

谢谢

PS
我不确定我在问题中添加的标签是否正确,所以请告诉我是否有更好的标签可以添加

不确定是否可能,因为每个IIS Express web应用程序都应该根据应用程序和协议使用不同的端口


我也遇到了类似的问题,最终使.net core应用程序在本地随机端口下运行,并使用在开发服务器上设置的适当域和虚拟目录。

在构建过程中,我们选择继续“打包/发布”到IIS服务器,并安装.net core处理程序。因此,我们的选择有些限制,因为必须有一些方法来提供Web发布工具支持的开发和生产部署之间的对称性

以下是一些可能的解决方案:
  • 将子内容部署为父应用程序的子应用程序
  • 在父级部署期间,将子级内容部署为其他静态文件夹内容
  • 将子内容部署为父内容的生成依赖项
  • 使用虚拟目录手动部署子内容
  • 选择哪一个?这是一个决策树:

    • 子路径是否是要部署的应用程序/程序集(例如WebAPI)?如果是,请选择选项1
    • 子路径是一个松散耦合的包,单独版本还是由另一个团队构建?如果是,请选择选项3
    • 在备份/恢复、部署和安全操作期间,路径是否最好在服务器的单个单元中维护?如果是,请选择选项4
    • 否则,选择选项2
    让我们快速浏览以下每一项:

    1.将子内容部署为父应用程序的子应用程序 这在IIS部署目标(例如公共web服务器)上非常简单。使用相同的旧工具或手动在发布目标服务器上创建子应用程序。然而,这在开发工作站上更为困难。在下图中,顶部显示如何配置.NET核心应用程序,而底部显示如何在Visual Studio UI中显示.NET Framework应用程序:

    在这两种情况下,它都会在
    .vs\config\applicationhost.config
    文件中创建它们;但是新的ASP.NET核心工具只在工作站
    .config
    文件中创建根应用程序(而不是子应用程序)。我们可以为每个开发人员手动编辑这些文件,但不幸的是,我们通常不想签入这些文件,因为它们有本地机器路径。无论如何,如果您尝试使用旧的多项目启动属性方法,最终将导致多个站点尝试在同一端口上运行失败。相反,您需要的是一个具有多个应用程序的站点。以下是此类(手动编辑的)工作配置的示例:

    <site name="MyNamespace.RootWeb" id="5">
      <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="E:\Development\MySolution\MyProject" />
      </application>
      <application path="/assets" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="E:\Development\MySolution\MyProject.Assets" />
      </application>
      <bindings>
                  <binding protocol="http" bindingInformation="*:55519:localhost" />
      </bindings>
    </site>
    
    尽管如此,请注意,以前的
    IncludePluginFilesForMsdeploy
    IncludePluginFilesForPackaging
    ,现在在VS2017中,使用
    DotnetPublishFiles
    实现了相同的目标,如下所示:

    <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Target Name="CustomCollectFiles" BeforeTargets="BeforePublish">
            <Message Text="Custom Collect Before Publish" Importance="high" />
            <ItemGroup>
                <_CustomFiles Include="$(MSBuildProjectDirectory)/../MyProject/compiled/**/*" />
                <DotnetPublishFiles Include="@(_CustomFiles)">
                    <DestinationRelativePath>wwwroot/MyProject/compiled/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
                </DotnetPublishFiles>
            </ItemGroup>
        </Target>
    </Project>
    
    
    wwwroot/MyProject/compiled/%(RecursiveDir)%(文件名)%(扩展名)
    
    3.将子内容部署为父内容的生成依赖项。

    再次,对于静态内容(如浏览器应用程序),我们可以考虑将该应用程序构建到包中,并将其应用到开发中的根应用程序中,使用NuGET、NPM或类似程序。现在只有一个应用程序需要部署,这一事实在这里既有利也有弊。我将把这一点留给由不同团队维护的非常松散耦合的包,或者必须为依赖项单独维护版本控制的包

    4.使用虚拟目录手动部署子内容。
    在服务器上,如果我们不需要子应用程序,我们可能仍然希望此子内容具有外部文件夹层次结构。我们可以使用虚拟目录在父目录下反映此内容,并包括部署标志
    False
    。或者,我们可以使用NPM、FTP或其他技术直接部署到服务器。在开发站上,我们可以像上面那样执行相同的
    UseStaticFiles()。或者,我们可以再次破解
    .vs\config\applicationhost.config
    (与团队工作时的上述缺点相同),但创建一个额外的虚拟目录,而不是一个额外的应用程序。

    您是否需要让一些应用程序重新路由到其他应用程序?如果你做到了,你是如何在当地克服的?通过更改launchSettings配置,我可以轻松地使每个应用程序在不同的端口上运行,但是我想不出任何方法可以让页面之间的路由以代码同时在本地计算机和生产服务器上运行的方式工作。唯一的区别是,所有应用程序都有自己的域。应用程序之间的路由问题只需在co中设置URL值即可解决
    <PropertyGroup>
      <PipelineCopyAllFilesToOneFolderForMsdeployDependsOn>
        IncludePluginFilesForMsdeploy;
        $(PipelineCopyAllFilesToOneFolderForMsdeployDependsOn);
      </PipelineCopyAllFilesToOneFolderForMsdeployDependsOn>
    </PropertyGroup>
    <Target Name="IncludePluginFilesForMsdeploy">
      <ItemGroup>
        <FileWrites Include="$(MSBuildProjectDirectory)\bin\**\*" />
        <_CustomFiles Include="$(MSBuildProjectDirectory)\bin\**\*" />
        <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
          <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
        </FilesForPackagingFromProject>
      </ItemGroup>
    </Target>
    
    <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Target Name="CustomCollectFiles" BeforeTargets="BeforePublish">
            <Message Text="Custom Collect Before Publish" Importance="high" />
            <ItemGroup>
                <_CustomFiles Include="$(MSBuildProjectDirectory)/../MyProject/compiled/**/*" />
                <DotnetPublishFiles Include="@(_CustomFiles)">
                    <DestinationRelativePath>wwwroot/MyProject/compiled/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
                </DotnetPublishFiles>
            </ItemGroup>
        </Target>
    </Project>