126

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

4

5 回答 5

153

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

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

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

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

  1. 在函数的开发部分,单击查看文件
  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按钮
  • Develop下,单击App Service Editor
  • On如果尚未启用,请打开它,然后单击Go
  • 加载后,将文件拖放project.json到函数的文件夹(以函数命名的文件夹。

使用 SCM (Kudu) 端点

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

FTP

持续集成

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

预编译的程序集

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

于 2016-04-04T19:45:31.013 回答
41

这个线程对我帮助很大——但我仍然浪费了几个小时试图让 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>

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

于 2018-10-29T21:11:55.443 回答
14

可以在 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 或更高版本时有效,否则您必须按照其他人解释的其他方式进行操作。

于 2017-11-28T11:12:12.817 回答
9

假设我们要使用SFTP客户端,它是一个外部库,存储在NuGet.

为此,根据最新的Azure Functions规范,请执行以下操作:

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

    在此处输入图像描述 有关详细信息,请参阅 Microsoft文档


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

    在此处输入图像描述


  1. 接下来,让我们包含对项目的库引用: 在此处输入图像描述

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


  1. 接下来测试一些特定于库的代码: 在此处输入图像描述

  1. 最后,打开 Logs 部分并保存代码。一段时间后,您应该会看到NuGet软件包恢复日志。 在此处输入图像描述

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


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

在此处输入图像描述

于 2019-08-12T19:12:31.160 回答
2

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

于 2017-05-16T17:52:21.023 回答