如何配置ASP.NET Core 1.0以使用本地IIS而非IIS Express?

36

如何设置一个.Net Core 1.0 项目在调试时使用本地IIS而不是IIS Express

我曾尝试以各种方式修改launchSettings.json文件,例如将所有的IIS Express替换为本地IIS并更新applicationUrllaunchUrl以使用我的自定义本地主机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个回答

44

在开发过程中,您当前无法直接使用IIS来托管ASP.NET Core应用程序,因为开发文件夹没有提供IIS托管所需的所有必要文件。这使得在开发环境中运行ASP.NET Core有点麻烦。

正如Rick Strahl在这篇文章中指出的那样,尝试这样做的原因并不多。当运行ASP.NET Core应用程序时,IIS几乎不做任何事情--实际上,您的应用程序不再直接运行在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


14
我不太理解Rick Strahl的观点。例如,如果你正在开发一个带有JS前端的.NET后端,那么你需要始终保持后端运行。现在,我必须每次修改后端的代码时都重新发布,或者在Visual Studio中打开后端项目并保持调试运行。而以前,我只需要根据需要构建并通过IIS进行托管。现在多了一步操作,不是很方便。 - Andy-Delosdos
4
这实际上是他提出的一个关于在开发时不使用IIS的论点。相反,在开始JS前端工作之前,直接使用dotnet run在Kestrel上运行即可。这样你就不需要打开解决方案,也不需要发布,完全不需要使用IIS。 - Sock
9
在 .NET 核心版本之前,你的应用程序可以由 IIS 托管,除非你需要做特定的更改,否则不需要打开 Visual Studio。在进行更改后,只需构建即可完成。但是使用 Kestrel,不仅需要构建,而且还需要在启动 JS 前端开发之前发布或使用 dotnet run 命令,这是额外的步骤。我理解他的观点,但我不认为这样做更容易或更好。 - Andy-Delosdos
5
是的,我经常在本地使用IIS进行托管,尽管我这样做的原因是IIS和IIS Express之间的行为差异,在Core中不再存在。我知道使用dotnet run会多一步操作,但如果您想要更接近于“编辑即完成”的方法,请考虑使用dotnet watch run。它甚至可以省略显式构建的步骤。只需编辑文件(例如在记事本中)并刷新浏览器即可。有关详细信息,请查看此链接:https://jonhilton.net/2016/08/04/compile-your-changes-on-the-fly-with-net-core/ - Sock
7
我认为不应该要求发布网站才能使用完整版IIS,特别是没有真正的PowerShell API可用于设置IIS Express...这真的很令人沮丧...给微软点个踩... - daehaai
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接