【发布时间】: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