.net core Azure Functions 2.0-EventHubTrigger-System.Private.CoreLib:无法加载文件或程序集“;函数project.dll“;

.net core Azure Functions 2.0-EventHubTrigger-System.Private.CoreLib:无法加载文件或程序集“;函数project.dll“;,.net-core,azure-functions,azure-functions-runtime,azure-functions-core-tools,.net Core,Azure Functions,Azure Functions Runtime,Azure Functions Core Tools,我能够运行函数应用程序,该应用程序具有来自本地和West US2消费计划的eventhub绑定。从过去4天开始,在我们将所有依赖项目迁移到x64中并将所有NUGET更新为最新版本之后,功能应用程序开始失败。它甚至没有启动,无法加载函数project.dll本身。即使我将bits部署到消费计划中,也存在同样的问题 此处的函数项目名称-EventHubConsumers Azure功能版本-2.0 Azure功能工具版本-2.28 项目生成配置-x64 Net版本-Net核心2.1 Visual

我能够运行函数应用程序,该应用程序具有来自本地和West US2消费计划的eventhub绑定。从过去4天开始,在我们将所有依赖项目迁移到x64中并将所有NUGET更新为最新版本之后,功能应用程序开始失败。它甚至没有启动,无法加载函数project.dll本身。即使我将bits部署到消费计划中,也存在同样的问题

  • 此处的函数项目名称-EventHubConsumers
  • Azure功能版本-2.0
  • Azure功能工具版本-2.28
  • 项目生成配置-x64
  • Net版本-Net核心2.1
  • Visual Studio 2019和2017
Nuget依赖项:

我拉不动FusionLog。我猜函数框架StartOcator有自定义逻辑来加载库,而库不会填充fusion日志

我尝试在FunctionAssemblyLoadContext.cs中调试
LoadFromAssemblyPath(string assemblyPath,bool addProbingPath)
,该异常会引发此异常。我可以看到程序集bin路径,并验证我的函数应用程序是否已内置到该文件夹中。我甚至通过在IlSpy中打开来验证dll的版本和其他细节。我无法理解为什么程序集(函数应用程序dll)在该路径中存在时无法加载

  • Github上记录的问题:

  • 试用Microsoft.Azure.Webjobs.Extensions.Eventhubs的旧版本,即试用3.0.5版

  • 清理、删除obj、bin,然后运行
  • 删除LocalAppData中AzureFunctionsTools的所有旧版本(2.28除外)
  • 从vs2017开始运行
[FunctionName(“WriteToStore”)]
公共异步任务运行([EventHubTrigger(“活动”,Connection=“EventHubConnectionAppSetting”,ConsumerGroup=“%ConsumerGroup%”)EventData[]事件,
[EventHub(“失败的活动”,Connection=“EventHubConnectionAppSetting”)]IAsyncCollector outputEvents)
{
//这里的逻辑
}
有关功能控制台的更多详细信息: Azure函数核心工具(2.7.1505提交哈希:eb8182995562240ca83dd0e0e3394586cf5fdfa3)

函数运行时版本:2.0.12590.0

[2019年8月4日10:09:25 PM]建筑主机:禁止启动:错误,禁止配置:错误

[8/4/2019 10:09:26 PM]发生主机错误

[8/4/2019 10:09:26 PM]System.Private.CoreLib:无法加载文件或程序集“Microsoft..EventHubConsumers,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”

值不能为null

参数名称:提供程序

按任意键继续…[8/4/2019 10:09:27 PM]建筑主机:禁止启动:错误,禁止配置:错误

[2019年8月4日10:09:27 PM]发生主机错误

[8/4/2019 10:09:27 PM]System.Private.CoreLib:无法加载文件或程序集“Microsoft..EventHubConsumers,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”

托管环境:生产

内容根路径:D:some\EventHubConsumers\bin\x64\Debug\netcoreapp2.1

现在收听:

应用程序已启动。按Ctrl+C组合键关闭

[8/4/2019 10:09:29 PM]建筑主机:禁止启动:错误,禁止配置:错误

[2019年8月4日10:09:29 PM]发生主机错误

[8/4/2019 10:09:29 PM]System.Private.CoreLib:无法加载文件或程序集“Microsoft.some.EventHubConsumers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”


在解决了几个问题后,我就可以正常工作了。我将注意我遵循的问题和修复

重复,我的函数应用程序配置为使用x64构建并在.Netcore 2.1上运行

  • 其中一个依赖项目(程序集)是用NetStandard2.0构建的,而其他所有项目都是用Netcore 2.1构建的。这导致x64出现程序集加载问题(尽管该依赖程序集是使用x64配置生成的)。这听起来有点奇怪,我不确定这是否是一个解决方案,甚至是一个问题

  • VisualStudio可能运行x86核心工具,因此当从VisualStudio(2017和19)运行时,x64函数应用程序在程序集加载等方面失败。您可以将project设置为在调试时运行外部应用程序。您可以将属性->调试设置为启动“func.exe主机启动”

  • 从Visual Studio启动函数应用程序后,我遇到“值不能为null.Argument-Path”异常

    修正-解释()。 路径中缺少npm路径。我在path环境变量中更新了npm根路径

  • 我必须更新azure函数核心工具,并使用“func主机启动”运行函数应用程序。现在我使用“func host start”运行应用程序,并将调试器附加到func.exe(CTRL+ALT+P)。您可以在本地appdata文件夹中找到AzureFunctionTools文件夹-
    %LocalAPPDATA%\AzureFunctionsTools
    。您可以在releases文件夹中看到azure function core tools的所有版本以及cli和func.exe示例-
    AzureFunctionsTools\releases\2.28.0\cli

  • 部署的主要问题是应用程序设置。我不得不将azure portal上的应用程序平台更改为64位。默认情况下,函数应用程序是使用32位平台设置创建的。解释道

  • Function app不提供包含程序集加载问题的fusion日志,这使得理解出错的原因变得太困难