【问题标题】:Azure functions runtime binding failing for System.IO.Packaging using OpenXML SDK使用 OpenXML SDK 的 System.IO.Packaging 的 Azure 函数运行时绑定失败
【发布时间】:2018-12-06 22:25:10
【问题描述】:

我有一个项目在函数运行时 v1 中作为 Azure 函数运行良好,但我正忙于为 v2 重写它并且我被卡住了。

我的 Azure Function 依赖于我的一个库,而后者又依赖于另一个库。这两个库都依赖于我通过 NuGet 安装在这些项目中的 Open XML SDK。他们都通过 NuGet 安装了 System.IO.Packaging。

如果我通过控制台应用程序运行我的代码,它运行良好。当我尝试将它作为 Azure 函数运行时,它会在我的库代码中运行,但随后函数运行时会因错误而崩溃:

System.Private.CoreLib:执行函数时出现异常:getWorkbook。 ExcelGenerator:无法加载文件或程序集 'System.IO.Packaging,版本=0.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a'。系统找不到文件 指定。

我尝试将 System.IO.Packaging 添加到 Azure Function 项目(我意识到我不应该这样做),但它随后因出现新错误而崩溃:

System.Private.CoreLib:执行函数时出现异常: 获取工作簿。 ExcelGenerator:无法加载类型 来自程序集“WindowsBase”的“System.IO.Packaging.CompressionOption”, 版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35'。

我对第一个错误中的 0.0.0.0 版本号持怀疑态度,我真的不明白第二个错误(或者老实说,为什么将 System.IO.Packaging 添加到 Azure 函数会产生任何影响,因为这只是运行编译的库代码)。

另一个奇怪的事情是,WindowsBase 没有显示在我的 Azure 函数的“程序集”依赖项列表中,但它确实显示在“添加引用”对话框中。如果我取消选中它,我会收到一个神秘的错误消息“在项目中找不到名称为“{0}”的程序集引用”。

我很确定 System.IO.Packaging 或 WindowsBase 无法通过 Azure 部署,但我不确定如何。我很快发现我对 DLL 依赖项的工作原理一无所知,更不用说在 Azure 中了 - 有什么想法吗?

【问题讨论】:

  • If I run my code through a console app, it runs fine. 是 .Net Core 控制台应用程序吗?如果是这样,您能否分享如何将函数重写为 v2,例如 FunctionProjectName.csproj 内容?
  • 这是一个 .Net Framework 4.6.1 控制台应用程序。我的 Azure 部分(实际上只是一个非常小的 .cs,可以立即调用我的库)的目标也是 .Net Framework 4.6.1。如果有帮助,可以分享 .csproj 中的任何其他内容!
  • 要使用 ~2 Function 运行时,我们需要使用 .net 核心目标框架 (netcoreapp2.1) 测试代码。如果遇到任何组装问题,请尝试 .net core 控制台应用程序中的代码,看看是 .net core 问题还是与 Function runtime 相关。
  • 我创建了一个面向 .NET Core 2.1 的新控制台应用程序。它最初不起作用,但我为 System.Configuration.ConfigurationManager 和 System.IO.Packaging 添加了 NuGet 包,现在它运行良好。我兴奋地为我的 Azure Functions 项目添加了 System.Configuration.ConfigurationManager 的 NuGet 包,但不幸的是它失败了(上面的第二个错误是 WindowsBase 错误)。难道我的 Azure 函数代码中有点奇怪的 WindowsBase 引用是罪魁祸首吗?
  • 你把Function项目的TargetFramework改成netcoreapp2.1了吗?

标签: c# .net azure azure-functions azure-functions-runtime


【解决方案1】:

要将v1函数重写为v2,右键Function项目,Edit FunctionProjectName.csproj,将Function项目的TargetFramework改为netcoreapp2.1,AzureFunctionsVersion改为v2。

我们可能必须安装 packages for v2 function,因为它们不再像 v1 中那样内置。

代码重构是必要的,如果遇到任何汇编问题,请在 .Net Core 控制台应用程序中尝试代码,看看是 .net 核心问题还是与 Function runtime 相关。

如果host.json中有一些配置,需要注意,因为它们的一些格式已经改变了。

通常,建议创建模板 v2 功能并将旧内容与新 v2 模板进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多