【问题标题】:Where to place the dependencies for shared assemblies in Azure Functions在 Azure Functions 中放置共享程序集的依赖项的位置
【发布时间】:2016-10-19 13:50:10
【问题描述】:

我在 azure 函数中遇到了私有程序集的奇怪问题,我有一个带有五个函数的 Azure 函数应用程序,这些函数有一个共享 bin 文件夹,我在其中放置程序集,这些程序集又依赖于我拥有的 Entity Framework 和 LinqKit在每个函数的所有 project.json 文件中添加了依赖项,但私有程序集无法引用这些并且失败。请帮忙。 项目.json --

{
  "frameworks": {
    "net46":{
      "dependencies": {
         "EntityFramework": "6.1.3",
         "Newtonsoft.Json": "9.0.1",
         "LinqKit": "1.1.7.2"
      }      
    }
   }
}

为了在我的函数应用程序中进一步澄清,我有五个不同的函数,它们依赖于 2 个私有程序集,我不想在每个函数中保留单独的副本(因为这可能会导致不同文件夹中相同 dll 的不同版本导致问题)所以我创建了一个共享 bin 文件夹,从中引用了私有程序集,但是问题发生了,因为这些私有程序集进一步依赖于一些他们无法找到的 nuget 包--

#r "..\bin\Marketware.Domain.dll"
#r "..\bin\Marketware.AzureIntegration.dll"

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics.Eventing.Reader;

【问题讨论】:

标签: azure azure-functions


【解决方案1】:

如果你想使用你的私有程序集(不是来自 nuget),你必须这样做:

  1. 连接到 Functions 应用程序 ftp
  2. 在您的函数文件夹中创建 bin 文件夹(run.csx 在哪里)
  3. 将您的自定义程序集上传到新创建的 bin 文件夹
  4. 更新功能代码并添加参考

不幸的是,这个 dll 需要在每个需要的函数文件夹中。

示例

#r "CustomAssembly.dll"

using System.Net;
using CustomAssembly;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    CustomAssemblyClass.MethodName(); // here call your method
    return req.CreateResponse(HttpStatusCode.OK, "");
}

【讨论】:

    【解决方案2】:

    将花费一些时间尝试重现您的场景,因为乍一看,它应该可以按预期工作。与此同时,您有几个选择:

    1- 部署共享程序集时,从项目输出中复制所有二进制文件,包括它们的依赖项。共享程序集文件夹将在探测逻辑中,它们将从那里得到解决。这也将消除使用 project.json 引用每个函数的依赖项的需要。

    2- 为您的共享程序集创建一个 NuGet 包,并在该包上指定您的包依赖项(EF 和 LinqKit),将该包发布到私有源(可能类似于 MyGet 甚至是函数中的文件夹应用程序)。您的函数只需要引用该包而不是它的依赖项,因为这些将被自动解析。您可以在此处找到有关使用自定义源的更多信息:How do you use custom NuGet feeds with Azure Functions?

    虽然一开始可能需要做更多的工作,但这两个选项都比您原来的方法有优势(包括消除函数了解间接依赖关系的需要)并且应该更可靠。

    希望这会有所帮助!

    【讨论】:

    • 考虑第一种方法,因为我的函数代码中的代码除了共享程序集之外还取决于 EF 和 LinqKit,如果我将它们与共享程序集
    • 是的,您可以像使用共享程序集一样添加这些引用或继续使用 nuget。
    • 为了确保这一点很清楚,第二种方法将使这些间接依赖关系也可用于您的函数代码。
    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 2016-02-18
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多