Azure Functions 2.0 - EventHubTrigger - System.Private.CoreLib: Could not load file or assembly “FunctionsProject.dll”

扶醉桌前 提交于 2020-01-23 13:42:50

问题


I was able to run function app which has eventhub binding from local as well as from West US2 Consumption plan. From last 4 days, after we moved all our dependent projects to build in x64 and updating all nugets to latest - function app started failing. It does not even start, it fails to load the functionsproject.dll itself. Same issue even If I deploy bits to Consumption Plan.

  • Functions Project Name here - EventHubConsumers
  • Azure function version - 2.0
  • Azure function tools version - 2.28
  • Project build configuration - x64
  • Net version - NET CORE 2.1
  • Visual Studio 2019 & 2017
Nuget dependencies:

<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" />

I was not able to pull FusionLog. I guess Functions framework StartLocator has custom logic to load libraries which does not fill fusion log.

I tried debugging LoadFromAssemblyPath(string assemblyPath, bool addProbingPath) in FunctionAssemblyLoadContext.cs which throws this exception. I could see that assembly bin path and verify that my functions app is getting built into that folder itself. I even verified version of the dll and other details by opening up in IlSpy. I cannot make out why assembly (function app dll) could not be loaded when it existed in that path as expected.

  • Logged issues on Github: Link

  • Trying out older versions of Microsoft.Azure.Webjobs.Extensions.Eventhubs i.e. trying out version 3.0.5

  • Clean, delete obj, bin and then running
  • Deleting all older versions of AzureFunctionsTools in LocalAppData except for 2.28.
  • Running from 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
}
More details from Functions Console:

Azure Functions Core Tools (2.7.1505 Commit hash: eb8182995562240ca83dd0e0e3394586cf5fdfa3)

Function Runtime Version: 2.0.12590.0

[8/4/2019 10:09:25 PM] Building host: startup suppressed:False, configuration suppressed: False

[8/4/2019 10:09:26 PM] A host error has occurred

[8/4/2019 10:09:26 PM] System.Private.CoreLib: Could not load file or assembly 'Microsoft..EventHubConsumers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Value cannot be null.

Parameter name: provider

Press any to continue....[8/4/2019 10:09:27 PM] Building host: startup suppressed:False, configuration suppressed: False

[8/4/2019 10:09:27 PM] A host error has occurred

[8/4/2019 10:09:27 PM] System.Private.CoreLib: Could not load file or assembly 'Microsoft..EventHubConsumers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Hosting environment: Production

Content root path: D:some\EventHubConsumers\bin\x64\Debug\netcoreapp2.1

Now listening on: http://0.0.0.0:7071

Application started. Press Ctrl+C to shut down.

[8/4/2019 10:09:29 PM] Building host: startup suppressed:False, configuration suppressed: False

[8/4/2019 10:09:29 PM] A host error has occurred

[8/4/2019 10:09:29 PM] System.Private.CoreLib: Could not load file or assembly 'Microsoft.some.EventHubConsumers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.


回答1:


I got this working after fixing few issues. I will note issues and fixes which I followed.

To repeat, My function app is configured to build with x64 and run on .Netcore 2.1

  1. One of the dependent project (assembly) was built with netstandard 2.0 while all others were built as Netcore 2.1. This caused assembly loading issue with x64 (though that dependent assembly was built with x64 configuration). This sounds bit weird and I'm not convinced if this is a fix or even an issue in the first place.

  2. Visual studio runs x86 core tools probably and hence x64 function app fails with assembly load etc when run from visual studio (2017 and 19). You can set up project to run external app while debugging. You can set Properties->Debug to start 'func.exe host start'.

  3. I was getting "Value cannot be null. Argument - Path" exception after launching function app from Visual Studio.

    Fix -Explained (here - Github). npm path was missing in PATH. I updated npm root path in PATH environment variable.

  4. I had to update azure function core tools and run function app using 'func host start'. Now I run app using 'func host start' and attach debugger to func.exe (CTRL+ALT+P). You can find AzureFunctionTools folder in your local appdata folder - %LocalAPPDATA%\AzureFunctionsTools. You can see all versions of azure function core tools in releases folder along with cli and func.exe example - AzureFunctionsTools\Releases\2.28.0\cli

  5. Major issue with deployment was with Application settings. I had to change application platform as 64 bit on azure portal. By default, function app was created with 32 bit platform setting. Explained here - Github.

Function app does not provide fusion log with assembly load issues which makes it too difficult to understand what is going wrong!



来源:https://stackoverflow.com/questions/57350709/azure-functions-2-0-eventhubtrigger-system-private-corelib-could-not-load-f

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!