Azure Functions 2.0-EventHubTrigger-System.Private.CoreLib:无法加载文件或程序集“ FunctionsProject.dll”

时间:2019-08-04 22:49:49

标签: .net-core azure-functions azure-functions-runtime azure-functions-core-tools

我能够运行具有来自本地以及美国西部2消费计划的eventhub绑定的功能应用程序。从过去4天开始,我们将所有相关项目移至x64中进行构建并将所有nuget更新至最新-函数应用程序开始失败。它甚至没有启动,它无法加载functionsproject.dll本身。即使我将部分部署到消费计划中,也会出现同样的问题。

  • 此处的函数项目名称-EventHubConsumers
  • Azure功能版本-2.0
  • Azure功能工具版本-2.28
  • 项目构建配置-x64
  • 净版本-NET CORE 2.1
  • Visual Studio 2019和2017
Nuget依赖项:

<PackageReference Include="Microsoft.ApplicationInsights" Version="2.10.0" /> <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" /> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.EventHubs" Version="3.0.6" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.2.0" /> <PackageReference Include="Microsoft.Jarvis" Version="20190426.1.0-rc" /> <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.29" /> <PackageReference Include="Newtonsoft.Json" Version="12.0.2" /> <PackageReference Include="Polly" Version="7.1.0" />

我无法提取FusionLog。我猜想,Functions框架StartLocator具有自定义逻辑来加载不会填充融合日志的库。

我尝试在FunctionAssemblyLoadContext.cs中调试LoadFromAssemblyPath(string assemblyPath, bool addProbingPath),从而引发此异常。我可以看到该程序集bin路径,并验证我的功能应用程序已内置到该文件夹​​本身中。我什至通过在IlSpy中打开来验证dll的版本和其他详细信息。我无法弄清为什么程序集(功能应用程序dll)按预期方式存在于该路径中时无法加载。

  • 在Github上记录的问题:Link

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

  • 清理,删除obj,bin,然后运行
  • 在LocalAppData中删除所有旧版本的AzureFunctionsTools(2.28除外)。
  • 从vs2017开始运行
[FunctionName("WriteToStore")]
public async Task Run([EventHubTrigger("activities", Connection = "EventHubConnectionAppSetting", ConsumerGroup = "%ConsumerGroup%")] EventData[] events,
             [EventHub("failed-activities", Connection = "EventHubConnectionAppSetting")]IAsyncCollector<EventData> outputEvents)
{
  //Logic here
}
功能控制台的更多详细信息:
  

Azure函数核心工具(2.7.1505提交哈希:eb8182995562240ca83dd0e0e3394586cf5fdfa3)

     

函数运行时版本:2.0.12590.0

     

[8/4/2019 10:09:25 PM]构建主机:抑制启动:False,抑制配置:False

     

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

     

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

值不能为空。

     

参数名称:provider

     

按任意键继续。...[8/4/2019 10:09:27 PM]构建主机:抑制启动:False,抑制配置:False

     

[2019/8/4下午10:09:27]发生主机错误

     

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

托管环境:生产

     

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

     

现在收听:http://0.0.0.0:7071

     

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

     

[8/4/2019 10:09:29 PM]构建主机:抑制启动:False,抑制配置:False

     

[2019/8/4下午10:09:29]发生主机错误

     

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

1 个答案:

答案 0 :(得分:1)

解决了几个问题后,我开始工作了。我将记录我遵循的问题和修复。

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

  1. 其中一个从属项目(程序集)是使用netstandard 2.0构建的,而其他所有项目都是使用Netcore 2.1构建的。这引起了x64的程序集加载问题(尽管该依赖程序集是使用x64配置构建的)。这听起来有点不可思议,但我不认为这是首先解决的问题,甚至是问题。

  2. Visual Studio可能运行x86核心工具,因此从Visual Studio(2017年和19日)运行时,x64函数应用会由于程序集加载等原因而失败。您可以将项目设置为在调试时运行外部应用程序。您可以设置“属性”->“调试”以启动“ func.exe主机启动”。

  3. 从Visual Studio启动功能应用程序后,出现“值不能为空。参数-路径”异常。

    修复-解释(here - Github)。 路径中缺少npm路径。我在PATH环境变量中更新了npm根路径。

  4. 我不得不使用“ func host start”更新azure函数核心工具并运行函数app。现在,我使用“ func host start”运行应用程序,并将调试器附加到func.exe(CTRL + ALT + P)。您可以在本地appdata文件夹-%LocalAPPDATA%\AzureFunctionsTools中找到AzureFunctionTools文件夹。您可以在releases文件夹中看到所有版本的Azure功能核心工具,以及cli和func.exe示例-AzureFunctionsTools\Releases\2.28.0\cli

  5. 部署的主要问题是应用程序设置。我必须在Azure门户上将应用程序平台更改为 64位。默认情况下,功能应用是使用32位平台设置创建的。说明here - Github

    enter image description here

Function应用程序没有为融合日志提供程序集加载问题,这使得很难理解出了什么问题!