有没有办法从多个 .NET 项目创建一个 Azure Function App 并拥有所有这些项目的所有功能?

Posted

技术标签:

【中文标题】有没有办法从多个 .NET 项目创建一个 Azure Function App 并拥有所有这些项目的所有功能?【英文标题】:Is there a way to have an Azure Function App created from multiple .NET projects and have all of the Functions from all of them? 【发布时间】:2020-03-28 21:44:12 【问题描述】:

我们有一个 Azure Function App,它有多个 Function,是使用 .NET 项目(名称:Project1)创建的。

我们希望将来自不同 .NET 项目(名称:Project2)的新 Azure 函数添加到现有 Azure Function App而不覆盖从 Project1 部署的现有函数。目前,当我们从 Project2 部署 Azure Function 时,会删除 Project1 中的函数,Function App 仅包含 Project2 函数。

我们使用 Azure DevOps 发布管道部署该函数,我们还尝试从 Visual Studio 发布 - 两者的行为方式相同。

那么,有没有办法保留项目 1 中的功能 - 具有两个 .NET 项目中的功能?

【问题讨论】:

无法获取您的最新信息,以下解决方法对您有帮助吗?或者,如果您有任何疑问,请随时在此处分享。 【参考方案1】:

我想到了一些事情:

1 - 将函数添加为从项目 2 到项目 1 的链接。这样,在构建项目时,函数也会包含在输出中。此外,当您从任一项目编辑函数时,它会更改为另一个项目。本质上,您在两个项目中拥有相同的文件。

2 - (编辑:显然不显示来自引用项目的函数)另一个更简洁明了的选项是拥有一个包含您要共享的函数的公共共享库。

您可能还需要考虑为什么要在两个函数应用中使用该函数,因为您将拥有两个部署两次的相同函数。您能否将共同共享的逻辑提取到一个公共服务中并具有两个独立的功能?能否使用 HTTP 将 Project 1 中的函数调用到 Project 2 中?

【讨论】:

否定 - 第 2 步不起作用。显示正在运行的“客户端”应用程序中的函数,但忽略引用项目中的任何函数。 @BrettRigby 感谢您分享您的发现。听起来有点奇怪,它们是不是包含在构建中,还是你知道这些 dll 是否存在并且由于某种原因没有被 azure 拾取?【参考方案2】:

我遇到了类似的情况,我让它为我工作的方法是在我的 .csproj 文件中包含该文件和函数,以便我需要的 project1 的函数与 project2 一起编译:

<Compile Include="<Path to file in proj1>" Link="Project1Functions.cs" />

【讨论】:

【参考方案3】:

据我所知,没有好的解决方案可以满足您的需求,但有一个解决方案不太好供您参考。

我在 azure 门户上创建了一个名为“huyrFirstFunapp”的函数应用,其中有一个函数“Function1”。单击“平台功能”->“高级工具(Kudu)”。

在“kudu”页面,导航到“调试控制台”-->“CMD”-->“站点”-->“wwwroot”。你可以看到文件夹“Function1”,一个“host.json”,如果你已经导入了一些外部模块,你还可以看到一个“bin”文件夹”。

现在打开Visual Studio,里面有另一个功能项目。这里我有一个名为“hurySecondFunapp”的项目,其中有一个函数“Function2”。

右击“hurySecondFunapp”并点击“Build”,会生成一个“bin”文件夹和一个“Function2”文件夹,你可以在如下截图所示的目录中找到它们。

然后我们需要将“Function2”文件夹从本地拖到“kudu”页面(到我们导航到的“wwwroot”目录)。 “Function1”文件夹和“Function2”文件夹将共存于“wwwroot”目录下,然后我们需要合并两个“bin”文件夹。如果你的两个函数很简单,不使用任何其他模块,我们只需将本地“bin”文件夹中的“hurySecondFunapp.dll”和“hurySecondFunapp.pdb”拖到“kudu”页面的“bin”文件夹中即可(如下图),那么 azure 门户中的函数应用将在其中显示两个函数。

但是如果你的两个函数很复杂,并且使用了很多模块或外部dll,那么这个解决方案将不是一个好方法。我们需要合并两个“bin”文件夹之间的差异,可能会导致很多问题。所以只是一个供您参考的解决方案,我不确定它是否适合您。

【讨论】:

使用 Azure DevOps 也能达到同样的效果吗? 恐怕这在 azure devops 中无法实现。

以上是关于有没有办法从多个 .NET 项目创建一个 Azure Function App 并拥有所有这些项目的所有功能?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 Java 中的多个图像创建一个 Gif 图像? [关闭]

从多个数据库引擎创建 SQL 服务器视图?

有没有办法处理有很多重复的多个项目?

有没有办法从 Scala 中数据框的现有列创建多个列?

发布到 Azur 失败并出现 500 内部服务器错误

如何在工作室中的多个 ASP.Net 项目之间共享内容文件夹?