【问题标题】:Problems with deploy ASP.NET 5 (ASP.NET Core) app to Azure将 ASP.NET 5 (ASP.NET Core) 应用程序部署到 Azure 的问题
【发布时间】:2016-06-01 16:04:18
【问题描述】:

我在 ASP.NET 5 (CoreCLR) 上有一个应用程序,我尝试将它发布到 Microsoft Azure。我使用免费的Web App(不是 VDS)

我正在使用 Visual Studio 2015 Publish->Microsoft Azure 并遵循 this instructions 发布应用程序。

但是当我发布它并尝试打开时,我看到的只是不停地加载空白页面。我启用了日志记录并从 Azure 查看日志(stdout.log),结果只有:

'"dnx.exe"' is not recognized as an internal or external command,

可运行的程序或批处理文件。

我也尝试用 git 做Continiusly publishing。在推送期间,它开始恢复包并失败并出现错误no disk space available

有没有办法将 ASP.NET 5 应用发布到 Azure Web App?

【问题讨论】:

  • 请贴出你仓库的关键内容(如project.json、startup.cs、web.config...),我们可以提供具体的帮助。

标签: c# azure asp.net-core azure-web-app-service


【解决方案1】:

简答

但是当我发布它并尝试打开时,我看到的只是不停地加载空白页面。

当我们的应用无法与应用发布运行时 (dnx.exe) 时,就会发生这种情况。

讨论

有多种方法可以将 ASP.NET Core rc1 应用程序发布到 Azure Web 应用程序。其中包括使用 Git 进行持续部署和使用 Visual Studio 发布。发布您的存储库内容以获得特定帮助。

该示例是一个 ASP.NET Core rc1 应用程序,通过 GitHub 持续部署部署到 Azure Web 应用程序。这些是重要文件。

app/
    wwwroot/
        web.config
    project.json
    startup.cs
.deployment           <-- optional: if your app is not in the repo root 
global.json           <-- optional: if you need dnxcore50 support

app/wwwroot/web.config

添加HttpPlatformHandler。将其配置为将所有请求转发到 DNX 进程。换句话说,告诉 Azure Web 应用使用 DNX。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" 
           path="*" verb="*" 
           modules="httpPlatformHandler" 
           resourceType="Unspecified"/>
    </handlers>
    <httpPlatform 
         processPath="%DNX_PATH%" 
         arguments="%DNX_ARGS%" 
         stdoutLogEnabled="false" 
         startupTimeLimit="3600"/>
  </system.webServer>
</configuration>

app/project.json

包括对 Kestrel 服务器的依赖。设置将启动 Kestrel 的 web 命令。使用dnx451 作为目标框架。有关针对 dnxCore50 的其他工作,请参见下文。

{
  "dependencies": {
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  },

  "frameworks": {
    "dnx451": { }
  }
}

app/Startup.cs

包括Configure 方法。这个添加了一个非常简单的响应处理程序。

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;

namespace WebNotWar
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync(
                    "Hello from a minimal ASP.NET Core rc1 Web App.");
            });
        }
    }
}

.deployment(可选)

如果您的应用不在存储库根目录中,请告诉 Azure Web 应用哪个目录包含该应用。

[config]
project =  app/

global.json(可选)

如果您希望以 .NET Core 为目标,请告诉 Azure 我们希望以它为目标。添加此文件后,我们可以将 project.json 中的 dnx451 条目替换(或补充)为 dnxCore50

{
  "sdk": {
    "version": "1.0.0-rc1-update1",
    "runtime": "coreclr",
    "architecture": "x64"
  }
}

【讨论】:

  • 我遇到的两个问题 1) 我遇到了部署失败错误 - 我使用的是免费定价层,我不得不更改为 BASIC。 2) 对于 MVC 项目,加载需要一些时间 - 我在内存中的 sql 应用程序中遇到 500 错误。
【解决方案2】:

首先,是的,您可以愉快地在 Azure 上运行 ASP.Net 5 核心应用程序,但有一些问题。

知道为什么当你从 Visual Studio 本身发布时它不起作用(所以他为什么要发布我听到你问的答案......),但这里有一些事情看看;

  • 尝试在本地运行 IIS(而不是 kestrel)- 看看是否有问题。例如,您需要一个带有一些设置的 Web.config 您需要 startup.cs 中的 app.UseIISPlatformHandler。
  • 查看您的global.json 文件。从 Visual Studio 发布时不应该重要,但正确设置它不会有什么坏处。你可以这样做:

.

{
  "sdk": {
    "version": "1.0.0-rc1-update1",
    "runtime": "coreclr",
    "architecture": "x64"
  }
}

关于持续发布 - 这是免费和共享网站的一个已知问题,并且花费了我几个小时。基本上,当您通过这种机制进行部署并指定 corecelr 时,整个运行时都是从 Nuget 重新安装的,并且占用了将近 1GB(免费和共享站点的限额)。添加几个 NPM 包,你就超过了限制,嘿,你不能部署。 @shanselman 最近在他的一个播客中讨论了这个问题。占用所有空间的实际上并不是运行时二进制文件,而是因为我们处于构建模式,所以也安装了所有文档 XML 文件,因为 Nuget 不知道您不在开发环境中,而且它们很大。 现在,如果您想在 freeshared 网站上使用持续发布,最简单的答案是在 project.json 中包含完整的运行时并设置您的 @987654324 @ 使用完整的 CLR 而不是 coreclr。只是非常令人沮丧。

【讨论】:

  • 我们不需要 app.UseIISPlatformHandler 在 Azure Web 应用程序中托管。尽管如此,我还是赞成这个有用的答案。 :)
  • 这还是最新的吗?您是否看到过有关免费/共享实例上运行时安装问题的任何其他讨论?我一直在尝试查找更多信息,但现在谷歌搜索正确的信息很困难,因为每个人都在调用 ASP.NET Core 五个不同的东西。另外值得一提的是:在尝试通过 VS online 构建和部署应用程序时,这似乎也是一个问题。
  • @aejay:我不知道,但还没有听到任何消息说它已经解决了。这很棘手,因为问题的根源与 nuget 的工作方式有关。不过很容易尝试;如果您的部署失败,请查看日志文件并查看它是否在包还原期间失败。
  • @Frans 这是一个已知问题,但不完全清楚我们是否需要基本订阅。请在 0:34:40 观看以下视频,Deploying ASP.NET Core Applications
【解决方案3】:

我遇到了同样的问题。这个answer 解决了这个问题。

使用 asp.net 核心模板创建新项目时,global.json 文件是我的 API 项目的一部分,但它也在解决方案项目文件夹中被引用。发布到 Azure API 应用时,部署了两个 global.json 文件:

  1. /approot/global.json
  2. /approot/src/MyAPI/global.json

我将 global.json 文件从项目文件夹移到解决方案根目录,并将引用重新添加回解决方案项文件夹。

部署时只部署了/approot/global.json 文件,从而解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多