从 ASP.NET Core 1.1 迁移到 2.0。失败 "Failed to initialize CoreCLR, HRESULT: 0x80004005"

Migrated from ASP.NET Core 1.1 to 2.0. Fails with "Failed to initialize CoreCLR, HRESULT: 0x80004005"

我已经将我的应用程序从 ASP.NET Core v1.1 更新到 ASP.NET Core 2.0。

我的开发机器上一切正常。但是当我部署到 Azure 时,我得到 "HTTP Error 502.5 - Process Failure" 作为响应。

我已经激活登录 web.config:

<aspNetCore processPath=".\PublicWeb2.Web.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />

日志说:

Failed to initialize CoreCLR, HRESULT: 0x80004005

如果我在 Kudo 中从命令提示符 运行 dotnet mysite.dll 得到同样的错误。

Azure 中的事件日志给出以下错误:

Application 'MACHINE/WEBROOT/APPHOST/XXXXX' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'D:\home\site\wwwroot\XXX ', ErrorCode = '0x80004005 : 80008089.

相关的 Azure 设置:

我的完整csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <UserSecretsId>XXXXXXXXXXX</UserSecretsId>
    <RuntimeIdentifiers>win7-x86;win7-x64</RuntimeIdentifiers>
    <WebProject_DirectoryAccessLevelKey>1</WebProject_DirectoryAccessLevelKey>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="MarkdownWeb" Version="1.3.4" />
    <PackageReference Include="MarkdownWeb.Git" Version="1.0.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" />
    <PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\XXX\XXX.csproj" />
  </ItemGroup>

</Project>

云服务上安装的dotnet版本:

D:\home\site\wwwroot>dotnet --info
.NET Command Line Tools (2.0.0)

Product Information:
 Version:            2.0.0
 Commit SHA-1 hash:  cdcd1928c9

Runtime Environment:
 OS Name:     Windows
 OS Version:  6.2.9200
 OS Platform: Windows
 RID:         win8-x86
 Base Path:   D:\Program Files (x86)\dotnet\sdk.0.0\


Microsoft .NET Core Shared Framework Host
  Version  : 2.0.0
  Build    : e8b8861ac7faf042c87a5c2f9f2d04c98b69f28d

我做了什么(通过阅读其他 SO 问题):

我不知道下一步该做什么。

终于成功了。

1。删除项目文件中的运行时间标识符

在 webproject 的 csproj 文件中,我删除了 <RuntimeIdentifiers> 元素(如果您指定了单个 运行 时间,则为 <RuntimeIdentifier>)。

2。在发布配置文件中删除 <RuntimeIdentifier>

可以在

下的解决方案资源管理器中找到 pubxml
Project -> Properties -> PublishProfiles -> yourfilename.pubxml.

删除以下行(指定了您的 运行时间)

<RuntimeIdentifier>win7-x86</RuntimeIdentifier>

保存文件并关闭它。

下次您 运行 发布命令时,它应该在 Settings 选项下显示 "portable":

这对我有用。

因此我的猜测是真正的解决方案是:

  1. 在 Azure 门户中停止站点
  2. 使用 kudo 删除 "wwwroot" 文件夹中的所有旧文件:https://YOURSITE.scm.azurewebsites.net/DebugConsole、运行 "rmdir /q /s ." 在 wwwroot 文件夹中。
  3. 确保没有在发布配置文件中指定 RuntimeIdentifier
  4. 确保在 csproj 文件中没有指定 RuntimeIdentifier
  5. 发布站点
  6. 在 Azure 门户中启动站点