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

Map*_*ory 7 asp.net iis asp.net-core

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

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

Rya*_*ann 6

您不需要像我们以前所描述的那样在 IIS 中运行 .Net Core 来轻松调试等。

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

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

SET ASPNETCORE_URLS=http://example.com
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想让它在不同的端口上运行

SET ASPNETCORE_URLS=http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

然后设置环境

SET ASPNETCORE_ENVIRONMENT=Development
Run Code Online (Sandbox Code Playgroud)

设置完所有环境变量后,您可以输入

dotnet run
Run Code Online (Sandbox Code Playgroud)

现在要对其进行调试,请附加到 cmd.exe,并在其标题中添加 dotnet run 。您将能够以这种方式调试您的代码。

现在,如果您使用的是 Visual Studio,您的项目中的“属性”下有一个名为“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"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

第一个配置文件是按 F5 时使用的内容。因此,当我按 F5 时,Visual Studio 会为我启动 dotnet run,并设置由 launchSettings.JSON 中我的个人资料的environmentVariables 部分指定的环境和 URL。

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

在此输入图像描述


Sна*_*ƒаӽ 6

按照以下步骤操作即可实现您想要的目标。

  1. 在 launchSettings.json 中,添加一个名为iisunder 的属性iisSettings,如下所示:

    "iis": {
      "applicationUrl": "http://my.aspnetcoreapp.com"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在该部分下,添加一个设置为profiles的新配置文件。我正在打电话给我的。这将向“运行”下拉列表添加一个名为 的新选项。commandNameIISLocal IISLocal IIS

    "Local IIS": {
      "commandName": "IIS",
      "launchBrowser": true,
      "launchUrl": "http://my.aspnetcoreapp.com",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 IIS 中创建一个网站。将主机名设置为my.aspnetcoreapp.com. 还为此网站创建/使用应用程序池,并将 .NET CLR 版本设置为“无托管代码”。

  4. 将该网站的物理路径设置为您的 ASP.NET Core 项目的位置,而不是解决方案的位置,当然,除非您将该项目与解决方案位于同一文件夹中。
  5. 在主机文件中添加环回条目(对于 Windows C:\Windows\System32\drivers\etc\hosts

    127.0.0.1 my.aspnetcoreapp.com

  6. 返回 Visual Studio,然后运行该应用程序。确保您从“运行”下拉列表中选择了“本地 IIS”配置文件。在显示“正在配置 IIS...”的简短加载消息后,这将在浏览器中的 URL 上启动应用程序。

  7. 完毕!从现在开始,您可以在该 URL 启动应用程序,还可以通过附加到进程w3wp进行调试。

您还可以通过指定 ULR(如代替)将应用程序托管在“默认网站”下。如果您这样做,将会创建一个名为 的新应用程序池。localhost/MyAspNetCoreAppmy.aspnetcoreapp.comMyAspNetCoreApp AppPool

我的媒体文章是关于这个的。


Set*_*Set 1

简单的答案:当您发布时,您调用一个启动该publish-iis工具的脚本(请参阅script参考资料中的部分project.json)。

\n\n
\n\n

在您的项目中,您有一个web.config类似以下内容的文件:

\n\n
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" \n stdoutLogEnabled="false" stdoutLogFile=".\\logs\\stdout" forwardWindowsAuthToken="false"/\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

现在打开您的project.json 文件,您将看到一个“脚本”部分,如下所示:

\n\n
"scripts":\n{  \n    "postpublish":"dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

它告诉 dotnet 在应用程序发布后运行publish-iis 工具。怎么运行的

\n\n
\n

publish-iis 工具会转到发布应用程序的文件夹(不是您的项目文件夹)并检查它是否包含 web.config 文件。如果没有\xe2\x80\x99t,它将创建一个。如果是,它将检查您拥有哪种类型的应用程序(即它是否针对完整 CLR 还是 Core CLR,以及 \xe2\x80\x93 对于 Core CLR \xe2\x80\x93 无论它是可移植应用程序还是独立应用程序)以及将设置 processPath 和参数属性的值,同时删除 %LAUNCHER_PATH% 和 %LAUNCHER_ARGS% 占位符。

\n
\n