使用Azure Functions,我可以在我的 C# 函数中引用和使用 NuGet 包吗?
5 回答
是的!尽管 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
:
- 在函数的开发部分,单击查看文件
- 单击创建
project.json
文件的选项(如果您的机器上有以前创建的文件,您也可以单击上传文件的选项 - 命名文件
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
- 按照此处的说明配置 FTP
连接后(按照上面的说明)将
Project.json
文件复制到/site/wwwroot/<function_name>
有关其他部署选项,请参阅:https ://azure.microsoft.com/en-us/documentation/articles/web-sites-deploy/
持续集成
如果project.json
在 Function App 未运行时启用持续集成并使用文件部署函数,则在 Function App 初始化后将自动进行包还原。建议您不要将project.lock.json
文件添加到源代码管理。
预编译的程序集
函数也可以部署为预编译的程序集,在这种情况下,所有依赖项管理都在 Visual Studio 中处理。此选项可用作任何版本的 Visual Studio 上的标准类库或使用Visual Studio 2017 Azure Functions Tools。
这个线程对我帮助很大——但我仍然浪费了几个小时试图让 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>
保存后,您应该会看到控制台更新说明正在安装软件包。这真的没有很好的记录,我花了好几个小时才发现这一点。所以我希望这对某人有帮助。
可以在 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 或更高版本时有效,否则您必须按照其他人解释的其他方式进行操作。
假设我们要使用SFTP
客户端,它是一个外部库,存储在NuGet
.
为此,根据最新的Azure Functions规范,请执行以下操作:
在Azure 函数中打开文件部分并添加一个名为
function.proj
.有关详细信息,请参阅 Microsoft文档。
在其中
function.proj
放置Nuget
使用结构的包引用(如果您使用Visual Studio创建本地项目并在其中安装一些包,则XML
可以在文件中找到相同类型的结构)。*.csproj
NuGet
-
这里最重要的是您应该提供库的完整路径,就像在示例中您可以看到的那样:
"D:\home\site\wwwroot\bin\your_custom_library.dll"
如果库仍然显示为未知,请尝试使用Visual Studio中的Azure Cloud explorer将其Dll
手动添加到 bin 文件夹中。
请注意,还支持 Visual Studio 2017 中的新 .csproj 格式。如果将项目创建为 ASPNET Web 项目,Azure Functions 运行时会在构建项目之前下载所有必需的 nuget 包。