【问题标题】:Azure Functions: Can a shared .csx use a nuget package?Azure Functions:共享的 .csx 可以使用 nuget 包吗?
【发布时间】:2017-06-07 07:18:42
【问题描述】:

如果 Azure 函数中的 .csx 文件列在函数的 project.json 文件中,则它可以使用 nuget 包。例如:

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.ProjectOxford.Face": "1.1.0"
      }
    }
  }
}

但是放在函数应用根目录下的共享 .csx 文件会发生什么(即不在特定函数中)?有没有办法在 App Function(根)级别引入 nuget 包?

我发现了一种将 nuget 包的 dll 上传到共享 bin 文件夹的解决方法,如 Azure Functions C# developer reference 中所述:

共享程序集在函数应用中的所有函数之间共享。要引用自定义程序集,请将程序集上传到函数应用,例如函数应用根目录的 bin 文件夹中。

有没有办法更好地做到这一点,以便我的代码依赖于 nuget 包而不是 dll?

【问题讨论】:

  • 您如何处理那些共享的.csx 文件? #load 来自函数体?如果是这样,你仍然可以从函数中引用 NuGet,对吧?
  • 是的,我从一个函数中 #load 共享的 .csx 并且该函数的 project.json 指定了 nuget 依赖项,但仍然出现编译错误。
  • 您遇到了哪些编译错误?您的共享 csx 中有正确的 using 语句吗?
  • 刚试了复制,发现不行。一旦在函数级别正确描述了 nuget 依赖项,问题就会消失。

标签: azure nuget azure-functions


【解决方案1】:

实际的包引用在每个函数中进行管理(即没有函数应用级别的包引用集),但是当使用#load 指令将其引入您的函数时,共享的 CSX 文件将成为同一编译单元的一部分,并且能够使用函数中定义的程序集/包引用。但是您仍然需要在功能级别进行管理。

您可以将#load 行为视为常规 C# 项目中的链接文件,该文件被引入,但在项目的上下文中编译。这适用于这里的函数。

【讨论】:

  • 谢谢。我发现,正如您所描述的,如果我在函数级别正确指定了 nuget 依赖项,那么即使共享的 .csx 使用依赖项,该函数也会编译得很好。
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 2016-07-24
  • 2016-04-27
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2017-07-19
相关资源
最近更新 更多