ASP.NET核心程序在IIS上无需发布即可运行

我以前使用asp.net mvc4并将我的解决方案目录指向我的IIS网站位置,每次更新我的代码时,我只需单击重新构建我的解决方案,然后使用w3wp的“附加到进程”。

在asp.net核心;当我将我的网站发布到文件系统时,我可以使用带有无托管代码的iis运行我的网站。但是当我将我的iis网站指向我的网站解决方案代码时,它显示502错误。 我以前安装过的所有asp.net核心模块。

简单回答 :当您发布时,您调用启动publish-iis工具的script (请参阅project.json script部分)。


在您的项目中,您有web.config文件,其中包含以下内容:

  

如您所见,有占位符"%LAUNCHER_PATH%"%LAUNCHER_ARGS%参数。 请记住这一点。

现在打开你的project.json文件,你会看到一个“脚本”部分看起来+/-像这样:

“scripts”:{“postpublish”:“dotnet publish-iis --publish-folder%publish:OutputPath% - framework%publish:FullTargetFramework%”}

它告诉dotnet在发布应用程序后运行publish-iis工具。 工作原理 :

publish-iis工具转到发布应用程序的文件夹(而不是项目文件夹),并检查它是否包含web.config文件。 如果没有,它将创建一个。 如果是这样,它将检查您拥有什么类型的应用程序(即它是针对完整的CLR还是Core CLR,以及 - 对于Core CLR - 无论是可移植还是独立应用程序)并将设置processPath和arguments属性的值去除途中%LAUNCHER_PATH%和%LAUNCHER_ARGS%占位符。

你不需要在IIS中运行.Net Core来轻松调试,就像我们过去所做的那样。

使用.Net Core,您只需在项目根目录下打开命令行并输入“dotnet run”

DotNet Run使用环境变量来驱动它的function。 因此,如果您希望您的站点在特定的URL或端口上运行,请键入:

 SET ASPNETCORE_URLS=http://example.com 

或者,如果您只是希望它在不同的端口上运行

 SET ASPNETCORE_URLS=http://localhost:8080 

然后设置环境

 SET ASPNETCORE_ENVIRONMENT=Development 

设置完所有环境变量后,键入

 dotnet run 

现在要调试它,你附加到cmd.exe与dotnet运行在它的标题。 您将能够以这种方式调试代码。

现在,如果您使用的是Visual Studio项目中的Properties下有一个名为“launchSettings.JSON”的文件。 你可以在这里配置配置文件,我的默认配置文件设置为Kestrel Development,然后是Kestrel Production,IIS最后一次使用,这样我就不会在IIS Express中运行F5。

我的LaunchSettings.json看起来像这样:

 { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:56545/", "sslPort": 0 } }, "profiles": { "Kestrel Development": { "executablePath": "dotnet run", "commandName": "Project", "commandLineArgs": "dotnet run", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_URLS": "http://localhost:8080" } }, "Kestrel Production": { "commandLineArgs": "dotnet run", "commandName": "Project", "environmentVariables": { "ASPNETCORE_URLS": "http://localhost:8080", "ASPNETCORE_ENVIRONMENT": "Production" }, "executablePath": "dotnet" }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } 

第一个配置文件是F5在按下时使用的配置文件。 因此,当我按F5时,Visual Studio会启动dotnet运行,并设置我的配置文件的环境和URL在launchSettings.JSON中指定的环境和URL。

现在因为我有多个配置文件,我在运行按钮旁边有一个下拉菜单,所以如果我想在本地生产模式下运行,我可以选择Kestrel Production。

在此处输入图像描述

只需运行Ctrl + F5 ,您就可以在运行站点时更改代码而无需重新启动它。