引用多个 C# 项目时 Firebase 函数构建错误

Max*_*eue 3 c# firebase gcloud serverless

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

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

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

这个类位于一个名为 CloudFunctions 的项目中。我添加了对名为 Services 的项目的项目引用,以便我可以调用登录服务,但出现以下错误:

The referenced project '../Services/Services.csproj' does not exist
Run Code Online (Sandbox Code Playgroud)

这就是我的部署方式:

gcloud functions deploy login --entry-point CloudFunctions.Login --runtime dotnet3 --trigger-http --allow-unauthenticated
Run Code Online (Sandbox Code Playgroud)

我无法想象我们需要将所有内容都放在一个项目中才能进行部署?

Jon*_*eet 5

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

来自Functions Framework GitHub 存储库中的部署文档

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

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

当部署具有多个项目的功能时,确保您拥有合适的.gcloudignore文件非常重要,以便您只上传所需的代码。特别是,您几乎应该始终在文件中包含bin/和 ,这样您就不会上传本地构建的二进制文件。obj/.gcloudignore

目录中的示例部署命令行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
Run Code Online (Sandbox Code Playgroud)