我在asp.net core 2.1中有两个项目。一个是主Web应用程序,另一个是子应用程序。该子应用程序在很大程度上是独立的。它只需要来自主应用程序的cookie。
我正在尝试并且未能在我的本地开发环境中设置两个项目,并且将来我还需要为实时IIS部署进行设置。我在同一个VS解决方案中有两个VS项目。在他们的项目“调试设置”页面中,我都设置了它们来启动IISExpress,并将应用程序URL设置为“ http://localhost:44305”。我也尝试将子应用程序设置为“ http://localhost:44305/subapp”,但是在vs运行时,IISExpress抱怨该端口已在使用中。
两个应用程序都有一个Web配置。两者的最基本的默认值。在子应用程序中,我有多余的一行来删除aspnetcore处理程序(如我在搜索中发现的那样)。
<remove name="aspNetCore" />
在子应用程序中,我还尝试添加startup.cs:
app.UsePathBase("/subapp")
我从在本地运行于vs的此设置获得的结果是,在基本URL上,它实际上加载了我的子应用程序而不是主应用程序(浏览器URL为localhost:44305)。摆弄多个设置似乎无济于事。两个应用都无法完全加载,或者一个或另一个应用无法访问。
是否存在用于设置多个应用程序以在本地和IIS中协同工作的适当文档?我似乎发现的所有内容都来自2.0之前的版本。
谢谢您的帮助!
编辑: 在部署到IIS时,我实际上设法获得了一个作为子应用程序工作的新项目。要设置:
使用两个aspnetcore 2.1 Web应用程序制作新的VS解决方案。
使用以下命令将web.config添加到子应用程序:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
</handlers>
<aspNetCore processPath="dotnet" arguments=".\IISTestSubApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
没有针对主应用程序的网络配置。
在Program.cs CreateWebHostBuilder中将.UseIISIntegration()添加到两个应用中。
在用于子应用程序的Startup.cs配置方法中,添加app.UsePathBase("/subapp/");
将主应用程序部署到文件夹/ Mainapp。将子应用程序部署到/ Mainapp / subapp。
为主要应用设置iis网站。
右键单击IIS中的主应用程序网站,然后单击“添加应用程序”。添加别名为'/ Subapp'的子应用程序
这应该是您所需要的。某些步骤可能不是必需的。我还没有完全测试哪些步骤是100%必要的。
不幸的是,我仍然无法使其与IISExpress一起使用。我的.vs / applicationhost.config文件看起来几乎与IIS完全一样,但是同时运行两个应用程序时,出现错误,指出该端口已在使用中。我仍在尝试一堆新事物,因此,我们将看看是否可以解决。
答案 0 :(得分:0)
我现在可以在IISExpress中使用它了。首先针对IIS执行上述步骤,然后进行基本设置,包括以下内容:
对于IISExpress,subapp的web.config文件应如下所示:
<configuration>
<system.webServer>
<handlers>
</handlers>
<aspNetCore processPath="dotnet" arguments=".\bin\Debug\netcoreapp2.1\IISTestSubApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
在解决方案的.vs / config / applicationhost.config文件中,确保您的“站点”部分看起来像
<site name="IISTest" id="2" serverAutoStart="true">
<application path="/" applicationPool="IISTest AppPool">
<virtualDirectory path="/" physicalPath="C:\Users\user\Documents\GitHub\IISTest\IISTest" />
</application>
<application path="/subapp" applicationPool="IISTest AppPool">
<virtualDirectory path="/" physicalPath="C:\Users\user\Documents\GitHub\IISTest\IISTestSubApp" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:44301:localhost" />
</bindings>
</site>
两个应用程序使用不同的应用程序池似乎还可以。出于某种原因,在vs运行时将它们设置为相同会被覆盖。