【问题标题】:.Net Core application fails to publish to GCP App Engine becuase of MVC.Abstractions由于 MVC.Abstractions,.Net Core 应用程序无法发布到 GCP App Engine
【发布时间】:2018-02-17 07:07:14
【问题描述】:

这是我第一次接触 .Net Core 和 App Engines,如果我听起来不了解情况,请原谅我。

我们有一个 .Net Core 应用程序,我们正在尝试将其发布到 GCP App 引擎(显然)。当我运行dotnet publish -c Release 时,它构建得很好,没有任何错误。当我在本地测试程序时,它运行得很好,我可以访问它。但是,每当我尝试在 GCP 上获取它时,都会出现以下错误:

Updating service [default] (this may take several minutes)...
.................................................................................................................................................failed.
ERROR: (gcloud.app.deploy) Error Response: [9] 
Application startup error:
Error:
  An assembly specified in the application dependencies manifest (ApplicationName.deps.json) was not found:
    package: 'Microsoft.AspNetCore.Mvc.Abstractions', version: '2.0.2'
    path: 'lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Abstractions.dll'
  This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
    aspnetcore-store-2.0.5.xml

Failed to deploy project WebApiDotNetCore to App Engine Flex.

我们尝试从依赖项 JSON 中删除它,结果只是破坏了一切,所以它确实是必需的。它是通过 nuget 安装在项目中的,所以它应该包含在 dotnet restore 中。我环顾四周,一些消息来源似乎认为这是 dotnet core sdk 的安装,但我在三台计算机上尝试过,总是得到相同的结果。

最后,我应该说,当我尝试通过命令行以及直接通过带有 GCP SDK 的 Visual Studio 进行部署时,就会发生这种情况。

有没有人遇到过这个错误或类似的错误?非常感谢任何建议或指导。

谢谢!

-BT

【问题讨论】:

    标签: asp.net-mvc google-app-engine google-cloud-platform


    【解决方案1】:

    OP 修订

    作为更新,除了尝试加载应用程序时出现 502 错误之外,我还能够解决此问题。以下是我为其他正在寻找做什么的人采取的步骤:

    先决条件:Docker for Windows 和 Google Cloud SDK 已安装并运行。使用 Docker for Windows 运行起来很痛苦。许多许多重新启动和重新安装。

    1. 打开解决方案,确保启动项目设置正确。
    2. 右键单击启动项目,然后选择添加 > Docker 支持。
    3. 在弹出窗口中选择 Linux 并允许创建文件。
    4. 完成后,Dockerfile 应该会出现在预览窗口中。执行以下操作:

    对我来说,第一行是:FROM microsoft/aspnetcore:2.0 AS base。将其更改为 FROM microsoft/aspnetcore-build:2.0 AS base

    此外,请检查以确保最后一行具有正确的 .dll 名称。 Docker for Windows 将放置项目名称而不是类名称,所以对我来说,我的最终 .dll 名称与项目名称不同。

    最后,如果您的项目有任何需要运行但不需要构建的依赖项,那么您需要手动添加它们。对我来说,我们有几个 XML 文件需要放在 app 文件夹中,所以我必须添加 COPY *.xml /app/ 并将这些文件放在与解决方案文件所在的文件夹相同的文件夹中。

    如果您需要对 Dockerfile 执行其他操作,我强烈推荐 this page。这是所有用英语编写的 Dockerfile 命令的操作指南! (这是我所有这一切的最大问题——我对 Linux 的经验很少,对 Docker 的经验更少,而且对我来说一切都是用希腊语写的)。

    1. 创建一个 app.yaml 文件。我只是使用了标准: runtime: custom env: flex

    2. 将启动项目文件夹中的 Dockerfile 复制到包含解决方案的文件夹中。

    3. 将 gcloud 初始化到正确的项目,然后导航到解决方案文件夹。输入gcloud app deploy app.yaml,然后按照屏幕上的指南进行操作。

    对我来说,部署 GCP 大约需要 15 分钟,因此根据您项目的复杂性,可能需要更长的时间,尽管这个相当复杂。

    现在我正试图找出我的 502 错误...我已经尝试了一切似乎都是 - 更改应用程序中的侦听端口,在 dockerfile 上公开侦听端口,试图让 GCP 打开该端口,并尝试了六个不同的端口。它进展缓慢,因为每次部署都很麻烦。

    希望这对几周前和我一样,甚至从未听说过 Docker 的人有所帮助!

    【讨论】:

    • 您解决了 502 错误吗?你能分享任何提示吗?我也有同样的问题。
    • 是的,实际上。所以这就是我进行部署的方式。当我开始使用 Docker 时,这是正确的,我对 dockerfile 应该为我做什么有一个误解。实际上,在这种情况下,我只是将项目的内容检查到一个容器中,结果它以 502 响应,因为这显然没有任何意义。当我修复我的 dockerfile 时,我修复了 502。我还必须修复与 dotnet core 不兼容的依赖项。
    【解决方案2】:

    这是哪个版本的 .NET Core?另外,您是否尝试过在 Cloud Shell 中运行?也许这会提供更多关于可能出错的线索。

    【讨论】:

    • 这是.Net Core 2.1.4。我还没有尝试过cloud shell,好主意!会让你知道结果。
    • 更新:没有运气,完全相同的错误。 Google 提供的 Docker Image 似乎存在问题。打算尝试构建一个自定义 Docker 映像,看看是否可行。
    • 你可以尝试使用 Microsoft 提供的基本 .NET Core 映像吗?
    【解决方案3】:

    您的系统中似乎没有安装Microsoft.AspNetCore.Mvc.Abstractions 库。使用 .NET CLI,键入以下命令:

    dotnet add package Microsoft.AspNetCore.Mvc.Abstractions --version 2.0.2
    

    之后,为确保包含该库,请运行以下命令:

    dotnet restore
    dotnet build
    

    尝试在本地运行它(它应该可以工作),然后再次使用dotnet publish -c Release 命令。

    【讨论】:

    • 问题最终实际上是解决方案中的一个项目尚未转换为.Net Core。因此,当我在本地运行所有内容时,它运行良好,但那是因为我安装了 .Net Framework。但是,当尝试将其移至 GCP 时,我正在 Linux 环境中构建,这让我遇到了该错误。我的最终解决方案是为 Windows 安装 Docker,并允许它为我创建一个基本的 Dockerfile。从那里我在这里和那里修改它以添加我需要的位。我没有考虑到的一件事是创建的 Dockerfile 使用项目名称 =
    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多