C# 在未发布的完整IIS中运行ASP.NET核心应用程序会出现502.5错误

C# 在未发布的完整IIS中运行ASP.NET核心应用程序会出现502.5错误,c#,iis,asp.net-core,C#,Iis,Asp.net Core,我试图在本地计算机上的IIS中托管一个ASP.NET核心应用程序,但收到一个502.5错误我的问题与不同,因为我没有发布我的应用程序,但(出于测试目的)试图让我的开发机器上的IIS(不是express)提供应用程序 复制: 开放VS2017 创建新的ASP.NET核心Web应用程序(.NET核心) 选择“Web API”模板和目标“ASP.NET Core 1.1”(无身份验证) 您的Main现在看起来像这样: public static void Main(string[] args) {

我试图在本地计算机上的IIS中托管一个ASP.NET核心应用程序,但收到一个
502.5
错误我的问题与不同,因为我没有发布我的应用程序,但(出于测试目的)试图让我的开发机器上的IIS(不是express)提供应用程序

复制:

  • 开放VS2017
  • 创建新的
    ASP.NET核心Web应用程序(.NET核心)
  • 选择“Web API”模板和目标“ASP.NET Core 1.1”(无身份验证)

    您的
    Main
    现在看起来像这样:

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();
    
        host.Run();
    }
    
  • 打开IIS管理器GUI

  • 选择“添加网站”,选择名称和端口,设置
    web.config
    所在文件夹的路径
  • 根据,将应用程序池的“.NET CLR版本”设置为“无托管代码”
  • 浏览到您的新应用程序,例如
    http://localhost:8089/api/values

    结果:HTTP错误502.5-进程失败
    预期结果:与步骤4中的结果相同

  • 我试图排除其他问题中提到的所有原因:

    • 为应用程序池设置
      LocalSystem
      标识
    • 如果
      dotnet--version
      运行(即路径上可用),请在控制台上进行检查
    此外,我还尝试了其他一些方法:

    • processPath
      设置为
      %LAUNCHER\u PATH%\bin\Debug\netcoreapp1.1\WebApplication1.dll的变体
    • processPath
      设置为指向
      dotnet.exe
      或其位置
    • 重新阅读,提炼出一种方法
    使用.NET Framework上的ASP.NET MVC应用程序,您可以在完整的IIS中创建一个新网站,指向MVC项目的文件夹,它将“正常工作”

    您需要做些什么才能使此流与ASP.NET Core一起工作?甚至可以在不发布的情况下使此流工作吗

    您需要做什么才能使它与ASP.NET Core一起工作

    执行,而不仅仅是你喜欢的部分。你应该做发布

    甚至可以在不发布的情况下使此流正常工作吗

    没有


    在发布过程中,您的项目被编译,您的
    web.config
    被修改为运行已编译的应用程序(不带SDK)。

    正如@Dmitry所说,我不确定您是否可以将IIS插入“未发布”文件夹,但还有一些事情,如中所述,您需要一个模块,使IIS能够将自身插入名为.NET Core Windows Server Hosting”,您安装了吗?

    您可以使用Visual Studio 15.3及更新版本的新功能,称为“开发时IIS支持”


    有关新功能,请参见和。

    我能够使ASP.Net Core 2在开发模式下运行在IIS之后

  • 创建新的dotnet应用程序。例如,从中运行“
    dotnet new react-o my new app
    ”。按照指示运行npm安装

  • 安装

  • 在IIS中,创建一个不含托管代码的新站点,并将应用程序池设置为在LocalSystem下运行。它需要这样才能写入C:\WINDOWS\system32\config\systemprofile。将物理路径设置为从步骤1创建的目录

  • <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <!--
        Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
      -->
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe"
                    arguments="run --project C:\<your-path-to>\my-new-app" 
                    stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
            <environmentVariables>
              <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
            </environmentVariables>
        </aspNetCore>
      </system.webServer>
    </configuration>
    
  • 将以下web.config放入步骤1中的目录中

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <!--
        Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
      -->
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe"
                    arguments="run --project C:\<your-path-to>\my-new-app" 
                    stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
            <environmentVariables>
              <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
            </environmentVariables>
        </aspNetCore>
      </system.webServer>
    </configuration>
    
    
    

  • 从那里,AspNetCoreModule协调了IIS和dotnet.exe之间的交互,并设置了反向代理。作为奖励,所有的网页包编译、捆绑和热重新加载工作与“dotnet run”一样正常。

    我不确定自前面的回答以来是否有任何变化,因为我刚刚开始使用ASP.NET Core,但是请参阅@Sааааааа的答案。它在ASP.NET Core 3.1上对我很有效


    请注意,如果不生成或发布cshtml文件,则不会反映cshtml文件中的更改。要获取Razor文件的运行时编译,以便在页面刷新后显示更改,请使用Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation,如前所述。

    可能重复@PranavPatel,我在问题中已经解释了它的不同之处,不是吗?我想跳过“发布”步骤,就像使用ASP.NET 4.6 MVC应用程序一样。