将预编译的 .NET 代码作为 Azure 函数执行

Posted

技术标签:

【中文标题】将预编译的 .NET 代码作为 Azure 函数执行【英文标题】:Execute pre-compiled .NET code as Azure Function 【发布时间】:2016-04-05 20:57:21 【问题描述】:

如何上传预编译的 .NET 程序集 (-ies) 并将我的代码作为 Azure Functions 执行?

我正在寻找一种方法来运行一些复杂的域逻辑,这些逻辑包含在自定义程序集中并被单元测试等覆盖。

此代码有哪些限制?例如。访问远程数据存储、网络等。

【问题讨论】:

【参考方案1】:

更新:下面的答案仍然正确(仍然有效),但是现在也有对预编译函数的一流支持。有关更多信息,请参阅wiki page。

文档 (link here) 描述了如何使用 #r 语法从 C# 函数引用 外部库 和 Nuget 包,例如:

#r "System.Web.Http"

using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

public static Task<HttpResponseMessage> Run(HttpRequestMessage req)

更多详情请见this SO post。

您还可以部署自定义可执行文件并从您的 Azure Functions 中调用它们。例如,如果您从 Windows BAT 模板开始,您可以使用该模板调用 exe。这是我们 repo 中的a sample,显示了一个图像调整大小的示例。在此示例中,我们有一个 BAT 脚本,每当将新图像上传到 Blob 容器时就会触发该脚本,并且该脚本会调用 Resizer.exe 工具来调整大小:

.\Resizer\Resizer.exe %original% %resized% 200

关于限制,所有 Azure Functions 代码都在 应用服务沙箱 中运行,其限制已在 here 中描述。

【讨论】:

【参考方案2】:

要在 Azure 函数中运行预编译的 .NET 程序集,可以通过 FTP 将自定义 dll 上传到函数根文件夹(在 bin 文件夹中),然后使用 #r 从 azure 函数代码中引用它.

这里是一个例子,一个名为“WorkOnImages.dll”的dll被上传到一个天蓝色的函数文件夹中:

然后在azure函数中引用dll:

这里是source blog post

【讨论】:

截至 2017 年 2 月,您还可以在函数应用的函数之间共享“bin”文件夹。将它放在您的函数的同一级别(即直接在 wwwroot 下)并使用 #r "..\bin\mylibrary.dll" 引用【参考方案3】:

由于缺乏对 VS2017 的 Azure Function 工具支持incompatibility with Azure SDK 3.0 感到沮丧,我正准备放弃 Functions 并回退到使用 VS2017 和 WebJobs SDK 的方法。

然后在 2017 年 3 月 16 日宣布,最简单的方法记录在 Microsoft 的 Donna Malayeri 的 excellent blog post 中。

它可以满足我的所有需求 - 真正的智能感知、调试功能。太棒了,我不会回头。

【讨论】:

以上是关于将预编译的 .NET 代码作为 Azure 函数执行的主要内容,如果未能解决你的问题,请参考以下文章

将预编译的 GRUB 2 安装到原始映像

将预编译的二进制文件捆绑到电子应用程序中

在调试模式下尝试将预编译头文件与 VS2010 (VC100) 一起使用时,如何消除错误 C2859?

无法使用输出 Azure 函数获得流分析工作

为啥 Azure Web 角色上的 IIS 需要如此频繁地重新编译 ASP.NET 应用程序?

与纯 Python 代码相比,Numba njit 编译器会导致计算不同的数字?