我有一个由ServiceBus和BlobStorage触发的具有多个功能的Azure Functions项目。
他们已经进行了数月的建设和部署。
某事最近发生,当您单击功能Error: The binding type(s) 'blobTrigger' are not registered.
时,它们不再从我的构建计算机中部署,并且在Azure中出现错误
虽然它仍然可以从我的开发机器上正常部署。他们正在使用WEBSITE_RUN_FROM_ZIP来部署代码本身。
我从开发机和构建机上都拉了发布目录,看来文件extensions.json
是在本地生成的,但不在构建机上,还有不存在的空本地化文件夹在构建机器上,大小差异约10mb,我还无法解释。
Azure功能的目标是.Net Standard 2.0。在检查.Net版本时,.Net核心在构建和开发机器上是相同的版本。
什么原因导致此文件生成?
答案 0 :(得分:2)
可能的原因之一可能是对Azure Functions v2.0的更新
这可以解释突然的变化导致您提到的直到几个月前起作用的功能的错误。
看看这个问题 https://github.com/Azure/azure-functions-host/issues/3363#issuecomment-417926456
它与您的非常相似。
v2.0中的一项更改是,在使用与存储相关的触发器时,您需要引用存储扩展
在适当的地方引用存储扩展,如果您具有可以与Azure存储一起使用的功能(队列/表/ blob) 触发器,输入绑定或输出绑定,您需要参考 新的Microsoft.Azure.WebJobs.Extensions.Storage扩展。
以下是记录所有重大更改的链接- Azure Functions Runtime 2.0.12050-alpha breaking changes notice
答案 1 :(得分:0)
我已经按照this Github comment中的建议解决了这个问题。
基本上有时,您必须包括一个额外的依赖项,以使msbuild / visual studio运行发布后的步骤并生成扩展文件。
将Foreach-Object {$_.Groups[1].Value}
添加为函数项目的依赖项,它应该始终(到目前为止)正确构建您的发布目录。
通常,将问题留给别人告诉我们为什么需要这样做。
答案 2 :(得分:0)
找出不起作用的最佳方法是在Visual Studio中打开诊断日志,然后进行构建。
然后,在构建之后,您可以搜索单词“ extensions.json”
哪个会这样开始:
2> Task "GenerateFunctionsExtensionsMetadata"
2> Task Parameter:SourcePath=F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin
2> Task Parameter:OutputPath=F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin
2> Extensions generator working directory: 'C:\Users\jsgou\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\1.1.8\tools\net46\..\netstandard2.0\generator'
2> Extensions generator path: 'dotnet'
2> Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.Console.dll "F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin" "F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin\extensions.json"
然后,再进一步,您可能会发现实际错误为什么不起作用:
2> HBTI.ServiceTech.AzureFunctions.dll
2> Resolving assembly: 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
2> Assembly 'System.Runtime' loaded.
2> Resolving assembly: 'Microsoft.Azure.Functions.Extensions, Version=1.1.0.0, Culture=neutral, PublicKeyToken=f655f4c90a0eae19'
2> Assembly 'Microsoft.Azure.Functions.Extensions' loaded from 'F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin\Microsoft.Azure.Functions.Extensions.dll'.
2> Resolving assembly: 'Microsoft.Azure.WebJobs.Host, Version=3.0.18.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
2> Assembly 'Microsoft.Azure.WebJobs.Host' loaded from 'F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin\Microsoft.Azure.WebJobs.Host.dll'.
2> Resolving assembly: 'Microsoft.AspNetCore.Mvc.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
2> Resolving assembly: 'Microsoft.AspNetCore.Mvc.Core, Culture=neutral, PublicKeyToken=null'
2> Cannot load 'Microsoft.AspNetCore.Mvc.Core'. Aborting assembly resolution.
2> Unable to find fallback for assembly 'Microsoft.AspNetCore.Mvc.Core'. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
2> File name: 'Microsoft.AspNetCore.Mvc.Core, Culture=neutral, PublicKeyToken=null'
2> at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
2> at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
2> at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, StackCrawlMark& stackMark, IntPtr pPrivHostBinder)
2> at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, StackCrawlMark& stackMark)
2> at System.Reflection.Assembly.Load(String assemblyString)
2> at ExtensionsMetadataGenerator.Console.Program.AssemblyLoader.<>c__DisplayClass1_0.<Initialize>b__0(Object sender, ResolveEventArgs args) in d:\a\1\s\tools\ExtensionsMetadataGenerator\src\ExtensionsMetadataGenerator.Console\Program.cs:line 78
2>
2>
2> Could not evaluate 'HBTI.ServiceTech.AzureFunctions.dll' for extension metadata. If this assembly contains a Functions extension, ensure that all dependent assemblies exist in 'F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin'. If this assembly does not contain any Functions extensions, this message can be ignored. Exception message: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
在这种情况下,我的解决方案是简单地创建自己的extensions.json并将其放入bin文件夹中,如下所示: