如何在 Azure 函数中使用 NuGet 包?

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

67945 次浏览

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

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

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

Azure 函数门户提供了一种方便的方式来管理你的函数文件,我们可以用它来创建(或上传)我们的 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.

As expected, the Azure Functions runtime will automatically add the references to the package assemblies, so you DO NOT need to explicitly add assembly references using #r "AssemblyName", you can just add the required using statements to your function and use the types defined in the NuGet package you've referenced.

Additional deployment options

由于 Azure 功能是建立在应用服务之上的,作为上述步骤的替代,您还可以访问所有可用于标准 Azure Web 应用程序(Azure 网站)的优秀部署选项。

下面是一些例子:

使用 App Service Editor (Monaco)

In order to manage your files directly from your browser by using the App Service Editor (Monaco):

  • 在 Azure 函数门户上,单击 Function app settings
  • 高级设置部分下,单击 Go to App Service Settings
  • 点击 Tools按钮
  • 冲洗下,单击 应用服务编辑器
  • 如果还没有启用,将其转为 On,然后单击 Go
  • 加载完成后,将 project.json文件拖放到函数的文件夹(以函数命名的文件夹)中。

Using SCM (Kudu) endpoint

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

FTP

  • 按照说明 给你配置 FTP
  • 一旦连接(按照上面的说明)复制您的 Project.json文件到 /site/wwwroot/<function_name>

    有关其他部署选项,请参阅: < a href = “ https://azure.microsoft.com/en-us/document/article/web-site-department/”rel = “ norefrer”> https://azure.microsoft.com/en-us/documentation/articles/web-sites-deploy/

持续集成

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

Pre-compiled assemblies

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

注意新的。也支持 VisualStudio2017中的 csproj 格式。如果您将项目创建为 ASPNET Web 项目,那么 Azure 函数运行时将在构建项目之前下载所有必要的 nuget 包。

你可以在 Azure 函数中使用 Nuget 包。最简单的方法是使用 Visual Studio 201715.4,其中有一个 Azure 函数模板。按照下面的步骤

1)添加 Azure 功能项目: 右键单击解决方案并选择添加新项目。到云选项那里你会发现“ Azure 函数”项目。

Azure Function

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

3) Now publish your Azure function, Visual Studio will take care of all settings, etc.

此方法只有在使用 Visual Studio 201715.4或更高版本时才有效,否则将不得不遵循其他人解释的其他方法。

这个帖子帮了我很多——但是我还是浪费了几个小时试图让 Project.json 工作——但是没有用。

如果你在2.x 版本中创建了一个 Azure 函数,你需要用一种不同的方式来完成。

Create a new file as stated but name it Proj. This file has an XML structure for importing libraries via Nuget.

下面是我为.Net 导入 Amazon S3 SDK 的示例;

<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>

upon saving this you should see the console update stating that the packages are getting installed. This really isn't well documented and it took me a good few hours to find this out. So I hope this helps someone.

Let's assume we want to use the SFTP client, which is an external library, stored somewhere in NuGet.

To accomplish that, according to the latest Azure 函数 specification, do the following:

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

    enter image description here 有关详细信息,请参阅 Microsoft documentation.


  1. function.proj内部,使用 XML结构放置 Nuget包引用(如果您使用 视觉工作室创建一个本地项目并在其中安装一些 NuGet包,那么您可以在 *.csproj文件中找到同样的结构)。

    enter image description here


  1. 接下来,让我们包含对该项目的库引用: enter image description here

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


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

  1. 最后,打开 Logs 部分并保存代码。 一段时间后,您应该会看到 NuGet包还原日志。 enter image description here

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


如果库仍然显示为未知,请尝试从 视觉工作室中使用 蔚蓝之云探险家手动将它的 Dll添加到 bin 文件夹中。

enter image description here