我有一个在函数运行时的v1中作为Azure函数运行良好的项目,但是我忙于为v2重写它,而且我被困住了。
我的Azure函数依赖于我的一个库,而后者又依赖于另一个库。这两个库都依赖于Open,我已经通过NuGet在这些项目中安装了它。他们都通过NuGet安装了NuGet。
如果我通过控制台应用程序运行我的代码,它就能正常运行。当我试图将它作为Azure函数运行时,它会在我的库代码中得到半途而废,但是函数运行时会因为错误而结束:
System.Private.CoreLib:执行函数时的异常: getWorkbook。ExcelGenerator:无法加载文件或程序集'System.IO.Packaging,Version=0.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f7f11d50a3a‘。系统找不到指定的文件。
我尝试将System.IO.Packaging添加到Azure函数项目中(我意识到我不需要这样做),但随后又出现了一个新的错误:
System.Private.CoreLib:执行函数时的异常: getWorkbook。ExcelGenerator:无法从程序集'WindowsBase、Version=4.0.0.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35‘加载'System.IO.Packaging.CompressionOption’类型。
我对第一个错误中的0.0.0.0版本号表示怀疑,我真的不明白第二个错误(或者诚实地说,为什么将System.IO.Packaging添加到Azure函数会产生任何不同,因为这只是运行编译的库代码)。
另一件奇怪的事情是,WindowsBase没有出现在my函数的"Assemblies“依赖项列表中,而是显示在"add”对话框中。如果取消选中,将得到一个神秘的错误:“无法在项目中找到名称为"{0}”的程序集引用“。
我很确定System.IO.Packaging或WindowsBase只是没有通过Azure部署,但我不知道如何实现。我正在迅速地发现,我不太清楚DLL依赖是如何工作的,更不用说在Azure中--有什么想法吗?
发布于 2018-12-11 23:25:05
要将v1函数重写为v2,右键单击function和Edit FunctionProjectName.csproj,将函数项目的TargetFramework更改为netcoreapp2.1,将AzureFunctionsVersion更改为v2。
我们可能不得不安装v2函数包,因为它们不是内置的--就像在v1中一样。
代码重构是必要的,如果我们遇到任何组装问题,那么,试试.Net核心控制台应用程序中的代码,看看它是.net核心问题还是与函数运行时相关的问题。
如果host.json中有一些配置,则需要注意,因为它们的某些格式已经更改。
通常,建议创建一个模板v2函数并将旧的内容与新的v2模板进行比较。
https://stackoverflow.com/questions/53660617
复制相似问题