如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?
Posted
技术标签:
【中文标题】如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?【英文标题】:How to configure ASP.NET Core 1.0 to use Local IIS instead of IIS Express? 【发布时间】:2016-12-01 20:20:23 【问题描述】:如何设置 .Net Core 1.0 项目以在调试时使用 Local IIS 而不是 IIS Express?
我尝试过以各种方式修改 launchSettings.json 文件。例如,将所有出现的 IIS Express 替换为 Local IIS 并更新 applicationUrl 和 launchUrl 以使用我的自定义localhost http://sample.local(我已经更新了主机文件并配置了 IIS 管理器)但不高兴。
Properties/launchSettings.json文件的默认设置:
"iisSettings":
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress":
"applicationUrl": "http://localhost:38601/",
"sslPort": 0
,
"profiles":
"IIS Express":
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables":
"ASPNETCORE_ENVIRONMENT": "Development"
,
"SampleApp":
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "http://localhost:5000",
"environmentVariables":
"ASPNETCORE_ENVIRONMENT": "Development"
【问题讨论】:
【参考方案1】:您目前无法在开发时直接使用 IIS 来托管 ASP.NET Core 应用程序,因为开发文件夹未提供 IIS 需要托管的所有必要文件。这使得在 开发 环境中运行 ASP.NET Core 有点痛苦。
正如this article by Rick Strahl 中所指出的,尝试这样做的理由并不多。 IIS 在运行 ASP.NET Core 应用程序时做的很少——事实上,您的应用程序不再直接在 IIS 进程中运行,而是在托管 Kestrel Web 服务器的完全独立的控制台应用程序中运行。因此,当您自行托管控制台应用程序时,您实际上是在基本相同的环境中运行。
如果您确实需要发布您的应用程序,您可以使用dotnet
命令行或使用 Visual Studio 工具将其发布到本地文件夹。
例如要发布到C:\output
文件夹,可以使用如下命令:
dotnet publish
--framework netcoreapp1.0
--output "c:\temp\AlbumViewerWeb"
--configuration Release
然后您可以将您的 IIS 站点指向输出文件夹。确保将应用程序池 CLR 版本设置为无托管代码,并且AspNetCoreModule 可用。
更多详情请见https://docs.asp.net/en/latest/publishing/iis.html
【讨论】:
我不明白 Rick Strahl 的论点。例如,如果您正在开发带有 JS 前端的 .NET 后端,则需要让后端始终运行。我现在必须在每次进行更改时发布后端,或者在 Visual Studio 中打开我的后端项目并保持调试运行。而以前,我只会根据需要构建并通过 IIS 托管。现在是额外的一步,不是很好。 这实际上是他在开发时不使用IIS的论点。无需在开发中执行此操作,只需在开始 JS 前端工作之前使用dotnet run
在 Kestrel 上直接运行即可。这样你就不需要打开解决方案,不需要发布,也不需要使用 IIS。
在 .NET 的 pre-.NET core 版本中,您的应用可以由 IIS 托管,除非您特别需要进行更改,否则无需打开 Visual Studio。进行更改后,只需点击构建即可。使用 Kestrel,不仅需要构建,还需要在开始 JS 前端开发之前发布或使用 dotnet run
- 这是一个额外的步骤。我明白他的论点,我只是不同意它更容易或更好
是的,我经常在本地托管 IIS,尽管我的原因是 IIS 和 IIS express 之间的行为差异,这在 Core 中不再存在。我接受使用dotnet run
是一个额外的步骤,但如果您想更接近“编辑完成”的方法,请查看使用dotnet watch run
。这甚至消除了显式构建的需要。只需编辑文件(例如记事本)并刷新浏览器。详情请查看此链接:jonhilton.net/2016/08/04/…
我认为您必须发布站点才能使用完整的 IIS,这是不可接受的。特别是。没有真正的 powershell API 可用于设置 IIS express... 真的令人沮丧... 不赞成 Microsoft...以上是关于如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core 1.0 的 DI 中的 Startup 类中添加 IHttpContextAccessor?
如何在 asp.net core 1.0 中查看当前 url
如何在 ASP.NET CORE 3.0 中配置路由以使用带有 [FromQuery] 参数的重载 [HttpGet] 方法?
.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介