【问题标题】:Firebase functions build error when referencing multiple c# projects引用多个 c# 项目时,Firebase 函数构建错误
【发布时间】:2021-10-01 23:48:05
【问题描述】:

我能够毫无问题地部署我的 firebase c# 函数,但是,当我引用另一个 c# 项目以便我可以利用另一个对象时,我收到错误消息说项目不存在。

所以能够毫无问题地部署以下内容:

namespace CloudFunctions
{
    public class Login : IHttpFunction
    {
        public async Task HandleAsync(HttpContext context) {
            await context.Response.WriteAsync("Hello World!");
        }
    }
}

这个类存在于一个名为 CloudFunctions 的项目中。我添加了对名为 Services 的项目的项目引用,以便我可以调用登录服务并收到以下错误:

The referenced project '../Services/Services.csproj' does not exist

这就是我的部署方式:

gcloud functions deploy login --entry-point CloudFunctions.Login --runtime dotnet3 --trigger-http --allow-unauthenticated

我无法想象我们需要在一个项目中拥有所有东西才能进行部署?

【问题讨论】:

    标签: c# firebase gcloud serverless


    【解决方案1】:

    您需要使所有项目都可用于构建包(即从父目录部署),但还需要使用 GOOGLE_BUILDABLE 构建时环境变量指定包含入口点的项目。

    来自deployment documentation in the Functions Framework GitHub repo

    现实世界中的函数通常是大型应用程序的一部分,该应用程序通常包含数据类型的通用代码和通用业务逻辑。如果您的函数通过本地项目引用(您的 .csproj 文件中的 <ProjectReference> 元素)依赖于另一个项目,则在部署到 Google Cloud Functions 时还必须包含该项目的源代码。此外,您需要指定哪个项目包含您要部署的功能。

    在所有项目并排放置在一个顶级目录中的典型目录结构中,这意味着您需要从该顶级目录而不是函数的项目目录进行部署。您还需要使用--set-build-env-vars 命令行标志来指定GOOGLE_BUILDABLE 构建时环境变量。这告诉 Google Cloud Functions 部署过程要构建和部署哪个项目。请注意,GOOGLE_BUILDABLE 环境变量值区分大小写,并且应与使用的目录和文件名匹配。

    使用多个项目部署一个函数时,确保您有一个合适的.gcloudignore 文件很重要,这样您就可以只上传您想要的代码。特别是,您几乎应该始终在 .gcloudignore 文件中包含 bin/obj/,这样您就不会上传本地构建的二进制文件。

    examples 目录中的示例部署命令行:

    gcloud functions deploy multi-project \
      --runtime dotnet3 \
      --trigger-http \
      --entry-point=Google.Cloud.Functions.Examples.MultiProjectFunction.Function \
      --set-build-env-vars=GOOGLE_BUILDABLE=Google.Cloud.Functions.Examples.MultiProjectFunction
    

    【讨论】:

    • .gcloudignore 文件是否属于父目录?
    • @Maxqueue:是的,它应该在您运行gcloud functions deploy 的目录中。您还可以指定要与--ignore-file 一起使用的文件。
    • 因此尝试设置以下内容:--set-build-env-vars=GOOGLE_BUILDABLE=./CloudFunctions/CloudFunctions.Login。我在父目录中,我要部署的功能直接在父目录中名为 CloudFunctions 的文件夹中。我尝试了 ./ 和 CloudFunctions 前面的任何内容?
    • getting message=构建失败:./CloudFunctions/CloudFunctions.Login 不存在;错误 ID:7c542a7d
    • 我怀疑你只是想要--set-build-env-bars=GOOGLE_BUILDABLE=CloudFunctions,因为那是包含项目的目录。 CloudFunctions.Login 是类的名称,而不是要构建的项目。例如,通常从命令行(从父目录)构建项目,您将运行dotnet build CloudFunctions。这大致也是 buildpack 需要做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多