将预编译的 .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 函数执行的主要内容,如果未能解决你的问题,请参考以下文章
在调试模式下尝试将预编译头文件与 VS2010 (VC100) 一起使用时,如何消除错误 C2859?