在IIS上不发布的情况下进行ASP.NET核心应用程序调试

xfyts7mz  于 2022-11-12  发布在  .NET
关注(0)|答案(5)|浏览(222)

我曾经使用asp.net mvc4,在IIS中,我的网站的物理路径将指向我的解决方案目录,每次更新代码时,我只需重新构建我的解决方案,然后就可以使用“Attach to process”(w3wp)开始调试。
在asp.net内核中,当我将自己的网站发布到文件系统时,我可以使用IIS来运行我的网站,但当我将我的IIS网站指向我的网站解决方案代码时,却显示了502错误。

9ceoxa92

9ceoxa921#

你不需要在IIS中运行.Net Core来获得简单的调试等,就像我们过去所做的那样。
有了.Net Core,您只需在项目根目录下打开一个命令行,然后键入“dotnet run”
DotNet Run使用环境变量来驱动它的功能。因此,如果您希望站点在特定URL或端口上运行,请键入:

SET ASPNETCORE_URLS=http://example.com

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

SET ASPNETCORE_URLS=http://localhost:8080

然后设置环境

SET ASPNETCORE_ENVIRONMENT=Development

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

dotnet run

现在,要调试它,您可以在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"
      }
    }
  }
}

第一个配置文件是当你按下F5时使用的,所以当我按下F5时,Visual Studio会为我启动dotnet run,并设置环境和URL,如launchSettings.JSON中我的配置文件的environmentVariables部分所指定的。
现在,因为我有多个配置文件,我得到了一个下拉菜单旁边的运行按钮,所以我可以选择Kestrel生产,如果我想在生产模式下运行本地。

3hvapo4f

3hvapo4f2#

按照这些步骤去做,就能达到你的目的。
1.在launchSettings.json中,在iisSettings下添加一个名为iis的属性,如下所示:

"iis": {
  "applicationUrl": "http://my.aspnetcoreapp.com"
}

1.在profiles部分下,添加一个将commandName设置为IIS的新配置文件。我将我的配置文件命名为Local IIS。这将在运行下拉列表中添加一个名为Local IIS的新选项。

"Local IIS": {
  "commandName": "IIS",
  "launchBrowser": true,
  "launchUrl": "http://my.aspnetcoreapp.com",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
}

1.在IIS中创建网站。将主机名设置为my.aspnetcoreapp.com。还要为此网站创建/使用其.NET CLR版本设置为“无托管代码”的应用程序池。
1.将该网站的物理路径设置为您的asp.net核心项目的位置,而不是解决方案的位置,当然,除非您将该项目与解决方案放在同一个文件夹中。
1.在主机文件中添加一个环回条目(适用于Windows C:\Windows\System32\drivers\etc\hosts
127.0.0.1 my.aspnetcoreapp.com
1.返回Visual Studio并运行应用程序。确保从“运行”下拉列表中选择了“本地IIS”配置文件。这将在显示 “正在设置IIS..." 的简短加载消息后,在浏览器中的URL处启动应用程序。
1.完成!从现在开始,您可以在该URL启动应用程序,还可以通过附加到进程 * w3 wp * 进行调试。
您也可以通过指定类似localhost/MyAspNetCoreApp而不是my.aspnetcoreapp.com的ULR,将应用托管在 “Default Web Site” 下。如果您这样做,将创建一个名为MyAspNetCoreApp AppPool的新应用池。
关于这个。

5cg8jx4n

5cg8jx4n3#

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

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

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
 stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/

如您所见,有占位符"%LAUNCHER_PATH%"%LAUNCHER_ARGS%参数。请记住这些参数。
现在打开project.json文件,您将看到一个“scripts”部分,看起来如下所示:

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

它告诉dotnet在应用程序发布后运行publish-iis工具。How it works
publish-iis工具将转到应用程序发布的文件夹(不是您的项目文件夹),并检查它是否包含web.config文件。如果不包含,它将创建一个。如果包含,它将检查您拥有的应用程序类型(即,它是面向完整CLR还是面向核心CLR,以及对于核心CLR,它是可移植应用程序还是独立应用程序)并将设置processPath和arguments属性的值,同时删除%LAUNCHER_PATH%和%LAUNCHER_ARGS%占位符。

fnvucqvd

fnvucqvd4#

**为什么需要这个?**这个过程将有助于持续开发和调试代码,在这里我们不需要反复部署应用程序,也不需要按F5键来运行应用程序,只需更改代码和构建,您就可以看到应用程序正在使用最近的更改。
说明:

  • 先决条件:从Microsoft官方网站安装ASP.NET核心运行时(托管包)。
  • 搜索.Net核心托管捆绑包并选择Microsoft的官方网站。
  • 从列表中下载合适的版本
  • 创建.Net核心Web应用程序并进行了以下更改。
  • 转到文件夹〉属性〉launchsettings.json〉打开文件并按如下所示进行编辑。
  • 在现有的“配置文件”下添加下面的”JSON. IIS”部分:{“命令名称”:“IIS”,“启动浏览器”:true,“启动URL”:“http://localhost:5000”,//即为iis“环境变量”设置的任何端口:{“ASPNETCORE环境”:“开发”} }
  • 现在,按如下所示更改“iisSettings”。“windows身份验证”:false,“匿名身份验证”:真的,“iis”:{“应用程序URL”:“http://localhost:5000”、“sslPort”:0个字符}
  • 转到解决方案资源管理器〉选择项目〉“Alt + Enter”或“右键单击并选择属性”-转到调试〉常规〉打开调试启动配置文件UI。-从列表中选择IIS配置文件-确保AppURL,URL被正确设置为IIS配置文件启动URL(即http://localhost:5000)
  • 打开IIS〉站点〉添加网站-站点名称:站点的任何名称-应用程序池〉创建或选择.NET CLR版本=无托管代码的应用程序池-物理路径〉项目文件夹路径位置-端口:任何端口号,例如5000
  • 生成应用程序并运行URL -http://localhost:5000
  • 现在,要附加并调试应用程序,请转到Visual Studio并按Ctrl+Alt+P
  • 找到进程〉W3wp.exe,即在搜索部分输入“W3”
  • 选中复选框〉显示所有用户的进程
  • 然后按下连接按钮。
  • 设置调试点。

注意:请访问Microsoft官方网站以了解更多详细信息。(调试ASP.NET核心应用程序部分)https://learn.microsoft.com/en-us/visualstudio/debugger/how-to-enable-debugging-for-aspnet-applications?view=vs-2022

cgvd09ve

cgvd09ve5#

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

相关问题