如何在Azure功能中使用NuGet包?

时间:2016-04-04 19:45:31

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

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

5 个答案:

答案 0 :(得分:132)

是的!虽然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. 在功能开发部分中,点击查看文件
  2. 点击创建文件的选项(如果您的计算机上有先前创建的project.json文件,您也可以点击上传文件的选项
  3. 将文件命名为project.json并定义您的包引用(您可以使用上面的示例作为模板)。
  4. 包恢复过程将开始,您应该在日志窗口中看到类似于以下内容的输出:

    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功能是基于App Services构建的,因此作为上述步骤的替代方法,您还可以访问标准Azure Web Apps(Azure网站)可用的所有出色部署选项。

    以下是一些例子:

    使用App Service Editor(摩纳哥)

    使用App Service Editor(摩纳哥)直接从浏览器管理文件:

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

    使用SCM(Kudu)端点

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

    FTP

    持续整合

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

    预编译的程序集

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

答案 1 :(得分:18)

该线程对我有很大帮助-但我仍然浪费了几个小时试图使Project.json正常工作-无济于事。

如果在2.x版中执行Azure功能,则需要以其他方式执行此操作。

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

这是我的示例,该示例为.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>

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

答案 2 :(得分:10)

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

1)添加Azure功能项目:右键单击解决方案,然后选择添加新项目。转到CLOUD选项,你会发现&#34; Azure功能&#34;项目

Azure Function

2)现在可以添加任何Nuget包了。展开&#34;依赖&#34;然后右键单击它以选择选项&#34;管理Nuget包&#34;。将出现Nuget Package对话框,选择要安装的任何Nuget包。见下面的截图

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

此方法仅在您使用Visual Studio 2017 15.4或更高版本时才有效,否则您将不得不按照其他方式解释其他方式。

答案 3 :(得分:3)

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

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

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

    enter image description here 有关更多信息,请参考Microsoft documentation


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

    enter image description here


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

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


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

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

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


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

enter image description here

答案 4 :(得分:1)

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