如何上传预编译的 .NET 程序集 (-ies) 并将我的代码作为 Azure Functions 执行?
我正在寻找一种方法来运行一些复杂的域逻辑,这些逻辑包含在自定义程序集中并由单元测试等覆盖。
这段代码有哪些限制?例如访问远程数据存储、网络等。
如何上传预编译的 .NET 程序集 (-ies) 并将我的代码作为 Azure Functions 执行?
我正在寻找一种方法来运行一些复杂的域逻辑,这些逻辑包含在自定义程序集中并由单元测试等覆盖。
这段代码有哪些限制?例如访问远程数据存储、网络等。
更新:下面的答案仍然正确(仍然有效),但是现在也有对预编译函数的一流支持。有关这方面的更多信息,请参阅wiki 页面。
文档(此处的链接)描述了如何使用语法从 C# 函数引用外部库和 Nuget 包#r
,例如:
#r "System.Web.Http"
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
public static Task<HttpResponseMessage> Run(HttpRequestMessage req)
可以在此 SO 帖子中看到有关此的更多详细信息。
你还可以部署自定义可执行文件并从 Azure Functions 调用它们。例如,如果您从 Windows BAT 模板开始,您可以使用它来调用 exe。这是我们的 repo 中的一个示例,显示了一个图像调整大小的示例。在此示例中,我们有一个 BAT 脚本,每当将新图像上传到 blob 容器时就会触发该脚本,并且该脚本会调用一个Resizer.exe
工具来调整大小:
.\Resizer\Resizer.exe %original% %resized% 200
关于限制,所有 Azure Functions 代码都在应用服务沙箱中运行,此处描述了其限制。
若要在 Azure 函数中运行预编译的 .NET 程序集,可以通过 FTP 将自定义 dll 上传到函数根文件夹(在 bin 文件夹中),然后使用 #r 从 azure 函数代码中引用它。
这是一个示例,名为“WorkOnImages.dll”的 dll 上传到 azure 函数文件夹中的 azure 中:
然后在 azure 函数中引用 dll:
这是源博客文章
由于缺乏对 VS2017 的 Azure Function 工具支持,与 Azure SDK 3.0 不兼容,我正准备放弃 Functions 并回退到使用 VS2017 和 WebJobs SDK 的方法。
然后在 2017 年 3 月 16 日宣布,最简单的方法记录在Microsoft 的 Donna Malayeri 的一篇出色的博客文章中。
它可以做我想做的一切——真正的智能感知、调试功能。这很棒,我不会回头。