【问题标题】:How can I use NuGet packages in my Azure Functions?如何在 Azure Functions 中使用 NuGet 包?
【发布时间】:2016-07-24 12:27:21
【问题描述】:

使用Azure Functions,我可以在我的 C# 函数中引用和使用 NuGet 包吗?

【问题讨论】:

  • 我必须手动更新我的 project.json 文件才能重新启动功能服务。然后它恢复了我的 nuget 包。任何人都知道重新启动服务以使其恢复软件包的更好方法? Kudu 没有帮助
  • 您可以在函数应用设置中使用标准站点恢复选项。但请记住,当一个函数第一次执行时,如果 project.json 文件包含一组与之前恢复的不同的引用,那么此时将自动执行恢复操作。
  • 此线程的任何最新更新都将有助于我在此处的帖子:stackoverflow.com/questions/68136717/…

标签: c# azure azure-functions nuget-package azure-web-app-service


【解决方案1】:

是的!尽管 Azure Functions 门户目前不提供添加和管理 NuGet 包的机制,但运行时支持 NuGet 引用,并确保在编译和执行函数时正确使用它们。

为了定义您的依赖项,您需要使用所需的 NuGet 包引用创建一个 Project.json 文件。这是一个添加对Microsoft.ProjectOxford.Face 1.1.0 版本的引用的示例:

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

Azure Functions 门户提供了一种方便的方式来管理您的函数文件,我们可以使用它来创建(或上传)我们的project.json

  1. 在函数的develop部分,点击view files
  2. 点击选项创建一个文件(如果你的机器上有一个之前创建的project.json文件,你也可以点击上传文件的选项
  3. 将文件命名为project.json 并定义您的包引用(您可以使用上面的示例作为模板)。

程序包还原过程将开始,您应该会在日志窗口中看到类似于以下内容的输出:

2016-04-04T19:02:48.745 Restoring packages.
2016-04-04T19:02:48.745 Starting NuGet restore
2016-04-04T19:02:50.183 MSBuild auto-detection: using msbuild version '14.0' from 'D:\Program Files (x86)\MSBuild\14.0\bin'.
2016-04-04T19:02:50.261 Feeds used:
2016-04-04T19:02:50.261 C:\DWASFiles\Sites\facavalfunctest\LocalAppData\NuGet\Cache
2016-04-04T19:02:50.261 https://api.nuget.org/v3/index.json
2016-04-04T19:02:50.261 
2016-04-04T19:02:50.511 Restoring packages for D:\home\site\wwwroot\HttpTriggerCSharp1\Project.json...
2016-04-04T19:02:52.800 Installing Newtonsoft.Json 6.0.8.
2016-04-04T19:02:52.800 Installing Microsoft.ProjectOxford.Face 1.1.0.
2016-04-04T19:02:57.095 All packages are compatible with .NETFramework,Version=v4.6.
2016-04-04T19:02:57.189 
2016-04-04T19:02:57.189 
2016-04-04T19:02:57.455 Packages restored.

正如预期的那样,Azure Functions 运行时会自动添加对包程序集的引用,因此您不需要使用 #r "AssemblyName" 显式添加程序集引用,您只需将所需的 using 语句添加到您的函数并使用您引用的 NuGet 包中定义的类型。

其他部署选项

由于 Azure Functions 构建在应用服务之上,作为上述步骤的替代方案,您还可以访问标准 Azure Web 应用(Azure 网站)可用的所有出色部署选项。

这里有一些例子:

使用应用服务编辑器(摩纳哥)

为了使用应用服务编辑器(摩纳哥)直接从浏览器管理您的文件:

  • 在 Azure Functions 门户上,单击 Function app settings
  • 高级设置部分下,点击Go to App Service Settings
  • 点击Tools按钮
  • 开发下,点击应用服务编辑器
  • 如果尚未启用,请转至On,然后单击Go
  • 加载后,将 project.json 文件拖放到函数的文件夹(以函数命名的文件夹。

使用 SCM (Kudu) 端点

  • 导航到:https://<function_app_name>.scm.azurewebsites.net
  • 点击调试控制台> CMD
  • 导航到D:\home\site\wwwroot\<function_name>
  • 将您的 Project.json 文件拖放到文件夹中(文件网格上)

FTP

持续集成

如果您在 Function App 未运行时启用持续集成并使用 project.json 文件部署您的函数,则一旦您的 Function App 初始化,程序包还原将自动发生。建议您不要将您的 project.lock.json 文件添加到源代码管理中。

预编译程序集

函数也可以部署为预编译的程序集,在这种情况下,所有依赖项管理都在 Visual Studio 中处理。此选项可用作任何版本的 Visual Studio 上的标准类库或使用 Visual Studio 2017 Azure Functions Tools

【讨论】:

  • 最后一段中的function script root 是什么?我知道这是project.json 所在的位置。对吗?
  • @JustInChronicles,这实际上是一个文件夹。 project.json 位于您的函数文件夹中,该文件夹是脚本根目录的子文件夹。脚本根映射到 Azure 中的 wwwroot 文件夹。
  • 感谢您的澄清!
  • @FabioCavalcante,喜欢你放在示例中的 nuget 包,天蓝色的认知服务带来了许多令人惊奇的事情!!!
  • 请注意,stackoverflow.com/a/36411537/5288052 上面的 stackoverflow 答案中提到的“Visual Studio Online”可作为“应用服务编辑器”从 Azure 工具中获得(请参阅 stackoverflow.com/a/38173438/5288052
【解决方案2】:

这个帖子帮了我很多 - 但我仍然浪费了几个小时试图让 Project.json 工作 - 无济于事。

如果您在 2.x 版中创建 Azure 函数,则需要以不同的方式执行此操作。

按照说明创建一个新文件,但将其命名为 function.proj。此文件具有用于通过 Nuget 导入库的 XML 结构。

这是我为 .Net 导入 Amazon S3 开发工具包的示例;

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="AWSSDK.S3" Version="3.3.26.3"/>
    <PackageReference Include="AWSSDK.Core" Version="3.3.29.1"/>
  </ItemGroup>

</Project>

保存后,您应该会看到控制台更新说明正在安装软件包。这真的没有很好的记录,我花了好几个小时才发现这一点。所以我希望这对某人有所帮助。

【讨论】:

  • 这是一个很大的帮助,感谢发帖。 Here 是一个包含更多信息的链接。
  • 和你一样,我也花了几个小时来做​​同样的事情。这样可行。非常感谢。喜欢 stackoverflow!
【解决方案3】:

您可以在 Azure Functions 中使用 Nuget 包。最简单的方法是使用有 Azure Functions 模板的 Visual Studio 2017 15.4。请按照以下步骤操作

1) 添加 Azure 功能项目:右键单击解决方案并选择添加新项目。转到 CLOUD 选项,您将找到“Azure Function”项目。

2) 现在可以添加任何 Nuget 包了。展开“DEPENDENCIES”并右键单击它以选择“Manage Nuget Packages”选项。将出现 Nuget 包对话框,选择您要安装的任何 Nuget 包。请看下面的截图

3) 现在发布您的 Azure 函数,Visual Studio 将处理所有设置等。

此方法仅在您使用 Visual Studio 2017 15.4 或更高版本时有效,否则您必须遵循其他人解释的其他方法。

【讨论】:

  • 这是 VS/类库(这是 Azure Functions 项目的内容)的标准流程,并不特定于 Azure Functions。特定于 Azure Functions 的唯一步骤是下面记录的步骤。我将在我的原始答案中添加注释,包括 2.0 中更新过程的详细信息。
【解决方案4】:

假设我们要使用SFTP 客户端,它是一个外部库,存储在NuGet 的某个位置。

要实现这一点,根据最新的 Azure Functions 规范,请执行以下操作:

  1. 在您的 Azure 函数 中打开文件部分并添加一个名为 function.proj 的新文件。

    有关详细信息,请参阅 Microsoft documentation


  1. function.proj 中使用XML 结构放置Nuget 包引用(如果您使用Visual Studio创建本地项目,您可以在*.csproj 文件中找到相同的结构> 并在其中安装一些NuGet 包)。


  1. 接下来,让我们将库引用包含到项目中:

    这里最重要的是您应该提供库的完整路径,就像在示例中您可以看到的那样:"D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. 接下来测试一些特定于库的代码:

  1. 最后,打开日志部分并保存代码。 一段时间后,您应该会看到 NuGet 软件包恢复日志。

    注意:这些日志也可能在保存function.proj 文件或运行项目时出现。


如果库仍然显示为未知,请尝试使用 Visual Studio 中的 Azure 云资源管理器 将其 Dll 手动添加到 bin 文件夹中。

【讨论】:

  • 自这个答案以来有什么变化吗?这似乎不再起作用了。我看到“编译服务错误” - 执行“Functions.TimerTrigger2”(失败,Id=a318d5b7-a02c-4ba0-bb04-037beda89b1c)找不到文件“D:\home\site\wwwroot\bin\Google.Apis .Sheets.v4.dll'。
  • 当您通过function.proj 安装脚本时,dll 的位置会在一段时间后出现在“日志”部分中。有时您需要再次重新加载 Azure Function 的页面,有时单击“运行”按钮以查看 NuGet 包的安装以及位置。请检查日志部分中打印的内容作为位置并尝试放置。
【解决方案5】:

请注意,Visual Studio 2017 中的新 .csproj 格式也受支持。如果您将项目创建为 ASPNET Web 项目,Azure Functions 运行时会在构建项目之前下载所有必需的 nuget 包。

【讨论】:

  • 对于 ASP.NET Web 项目,VS 2015 也可以。对于 Azure Functions Tools,仅适用于 VS 2017。关键区别在于您正在部署预编译位(和依赖项),因此运行时不会为您处理恢复,但是是的,这确实是一种编写函数和管理依赖项的新方法。我会更新答案以反映最新功能。
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多