Azure Timer Function启动时加载ActiveDirectory程序集失败求助
看起来你在开发Azure Timer Function写入Azure DataLake时遇到了程序集加载失败的问题,错误提示找不到Microsoft.IdentityModel.Clients.ActiveDirectory的3.19.5.13701版本。结合你的场景和错误信息,我整理了几个可能的解决方案:
首先明确错误核心:
[21/5/2018 8:36:20 AM] Executed 'NWPimFeederFromAws' (Failed, Id=03395101-41a5-44ef-96d8-f69c5d73eca7) [21/5/2018 8:36:20 AM] System.Private.CoreLib: Exception while executing function: NWPimFeederFromAws. NWPimFeeder: Could not load file or assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=3.19.5.13701, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621). System.Private.CoreLib: Could not load file or assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=3.19.5.13701, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
可能的原因与解决方案:
安装匹配版本的ADAL NuGet包
错误提示的版本是3.19.5.13701,大概率是你安装的Microsoft.IdentityModel.Clients.ActiveDirectory版本和Microsoft.Azure.Management.DataLake.Store依赖的版本不匹配。你可以直接安装指定版本的包:
打开NuGet包管理器控制台,运行:Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 3.19.5.13701或者在NuGet包管理器UI中搜索该包,选择3.19.5.13701版本进行安装。
验证程序集是否正确复制到输出目录
前往你的项目输出路径C:\Users\MattDouhan\source\repos\NWPimFeeder\NWPimFeeder\bin\Debug\netstandard2.0,检查是否存在Microsoft.IdentityModel.Clients.ActiveDirectory.dll,并且右键查看属性里的版本是否为3.19.5.13701。如果没有,尝试先清理解决方案(Build > Clean Solution),再重新生成(Build > Rebuild Solution),避免缓存导致的文件缺失。检查项目文件中的依赖配置
打开你的.csproj文件,确认是否有正确的PackageReference:<PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="3.19.5.13701" />如果存在多个版本的引用或者版本号不对,修改为正确的版本并保存后重新生成项目。
尝试更新DataLake管理包
如果安装指定版本的ADAL仍然有问题,可以尝试更新Microsoft.Azure.Management.DataLake.Store到最新的兼容版本,看看它依赖的ADAL版本是否更易获取,同时也能解决可能存在的依赖冲突问题。不过更新后要注意测试代码的兼容性,因为新版本可能有API变更。确认Azure Functions宿主兼容性
你的宿主版本是2.0.11651.0,属于Functions v2(基于.NET Core),确保所有安装的NuGet包都兼容.NET Standard 2.0。3.19.5版本的ADAL是支持.NET Standard的,但如果还是有问题,可以检查是否有其他依赖包和宿主环境冲突。
希望这些方法能帮你解决问题!
内容的提问来源于stack exchange,提问作者Matt Douhan

