如何配置 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 并更新 applicationUrllaunchUrl 以使用我的自定义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简介

如何在 ASP.NET Core 1.0 应用程序中使用 SqlServer.Types / 空间类型

ASP.NET Core 1.0 的 Kudu 部署脚本