从命令行

时间:2016-03-29 11:06:29

标签: asp.net-mvc asp.net-mvc-5 asp.net-core iis-express

我在IISExpress下从命令行运行ASP.NET5时遇到问题。

我当前的命令行设置(感谢this answer)看起来像是

  

iisexpress.exe /config:" [project_dir] .vs\config\applicationhost.config" /站点:" WebUI中" /程序池:" Clr4IntegratedAppPool"

请注意,从VS2015中运行项目可以正常工作。

当我运行上面的命令时,IISExpress启动,它甚至找到它应该运行的正确端口。主要问题是每个请求都返回502.3。

查看IISExpress\TraceLogFiles的内容,我看到了这个错误

  

ModuleName:httpPlatformHandler

     

通知:EXECUTE_REQUEST_HANDLER

     

HttpStatus:502

     

HttpReason:Bad Gateway

     

HttpSubStatus:3

     

ErrorCode:服务器当前已被禁用。 (0x8007053d)

造成这种情况的原因是什么?为什么我不能让它运行!?

2 个答案:

答案 0 :(得分:1)

如先前的答案所指出,Visual Studio在启动iisexpress时会设置%LAUNCHER_PATH%和%LAUNCHER_ARGS%环境变量。如果设置了这些,则不必运行dotnet publish,但是这些参数的内容随Visual Studio版本的不同而略有不同。幸运的是,您可以使用Process Explorer查看其中的内容。在此引用一篇不错的博客文章:

https://blog.lextudio.com/how-visual-studio-launches-iis-express-to-debug-asp-net-core-apps-d7fd3677e3c3

So in fact Visual Studio silently adds the two environment variables when launching IIS Express, so that ASP.NET Core related bits can be injected.

LAUNCHER_ARGS: -debug -p “C:\Program Files\dotnet\dotnet.exe” -a “exec \”C:\Users\lextm\documents\visual studio 2017\Projects\WebApplication2\WebApplication2\bin\Debug\netcoreapp1.0\WebApplication2.dll\”” -pidFile “C:\Users\lextm\AppData\Local\Temp\2\tmpFD6D.tmp” -wd “C:\Users\lextm\documents\visual studio 2017\Projects\WebApplication2\WebApplication2”
LAUNCHER_PATH: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\Microsoft\Web Tools\ProjectSystem\VSIISExeLauncher.exe```

当我遇到这个问题时(由于我正在运行具有旧版组件的应用程序,因此我不得不使用iisexpress而不是dotnet run),我设置了LAUNCHER_ARGS =“-p C:\ $ XXX \ $ MY_PROGRAM。 exe”和LAUNCHER_PATH:到上面,并且启动该应用程序对我有用。我建议使用Process Explorer查找Visual Studio放在其中的内容,然后使用它来编写启动命令。

答案 1 :(得分:0)

applicationhost.config可能指向项目的根目录,在该目录中,项目的默认web.config文件有一行如下所示:

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

Visual Studio(以及dotnet publish命令)将在F5启动期间将启动器变量替换为ASP.NET Core应用程序的实际路径;我不知道这个新的web.config文件存储在哪里。

也就是说,我能够通过以下步骤为我的ASP.NET Core应用程序启用IIS Express的命令行调用。

  1. 运行dotnet publish
  2. 将applicationhost.config文件从.vs目录复制到发布输出目录。
  3. 修改我的应用程序的新applicationhost.config中的路径以引用发布输出目录。
  4. 运行iisexpress.exe并指向新的applicationhost.config文件。