【问题标题】:Bumping Azure.Identity 1.7.0 to 1.8.0 leads to Microsoft.Identity.Client error at Azure Function App start将 Azure.Identity 1.7.0 升级到 1.8.0 会导致 Azure Function App 启动时出现 Microsoft.Identity.Client 错误
【发布时间】:2023-02-17 03:02:29
【问题描述】:

我们有几个引用 Azure.Identity 的 Azure Functions。我们只是将所有引用从 1.7.0 提升到 1.8.0(以及后来的 1.8.1)。这导致一个功能应用程序被破坏 - 但不是其他人。

function app连启动都启动不了,runtime抛出如下异常:

Azure.Identity:“Azure.Identity.DefaultAzureCredentialFactory”的类型初始值设定项引发异常。 Azure.Identity:无法从程序集“Microsoft.Identity.Client,Version=4.21.1.0,Culture=neutral,PublicKeyToken=0a613f4dd989e8ae”加载类型“Microsoft.Identity.Client.Extensibility.AppTokenProviderResult”。

我已经将这个函数(我们称之为函数 A)与另一个具有相同引用的函数(函数 B)进行了比较。 函数 A 抛出上述异常,函数 B 按预期使用 Azure.Identity 1.8.x。

这是函数 A 的 .csproj 文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <Nullable>enable</Nullable>
    <WarningsAsErrors>nullable</WarningsAsErrors>
    <EnableNETAnalyzers>true</EnableNETAnalyzers>
    <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
    <AnalysisLevel>latest</AnalysisLevel>
    <_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.2.2" />
    <PackageReference Include="Azure.Identity" Version="1.8.1" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.6.2" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5" />
    <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.3" />
    <PackageReference Include="Scrutor" Version="3.3.0" />
    <PackageReference Include="SonarAnalyzer.CSharp" Version="8.50.0.58025">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <!-- some project references -->
  </ItemGroup>
</Project>

就像我说的,函数 B 有相同的引用(还有一些额外的 Excel 内容,与这个问题无关)。两者的项目引用相同,因此基本上它们引用相同的项目并引用相同的 NuGet 包。

异常指出,无法从 Microsoft.Identity.Client 版本 4.21.1.0 加载 Microsoft.Identity.Extensibility.AppTokenProviderResult。 这就是它变得奇怪的地方(至少对我而言)。

我已经提取了两个函数 A 的参考树。这是我发现的:

  • Microsoft.Identity.Client 被引用两次,一次被 Azure.Identity 在 4.46.0.0 版中引用,一次被 Microsoft.Data.SqlClient 在 4.21.1.0 版中引用
  • Microsoft.Data.SqlClient 被引用两次,一次被函数 A,一次被 Microsoft.EntityFrameworkCore.SqlServer,两次都在版本 2.0.20168.4 中
  • Microsoft.EntityFrameworkCore.SqlServer 在版本 6.0.12.0 中被函数 A 引用一次
<Node Id="Azure.Identity, Version=1.8.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8" Label="Azure.Identity" Category="Assembly" />
<Node Id="Microsoft.Identity.Client, Version=4.46.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae" Label="Microsoft.Identity.Client" Category="Assembly" />
<Node Id="Microsoft.Data.SqlClient, Version=2.0.20168.4, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5" Label="Microsoft.Data.SqlClient" Category="Assembly" />
<Node Id="Microsoft.EntityFrameworkCore.SqlServer, Version=6.0.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60" Label="Microsoft.EntityFrameworkCore.SqlServer" Category="Assembly" />
<Node Id="Microsoft.Identity.Client, Version=4.21.1.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae" Label="Microsoft.Identity.Client" Category="Assembly" />
<Link Source="Azure.Identity, Version=1.8.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8" Target="Microsoft.Identity.Client, Version=4.46.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae" Category="Reference" />
<Link Source="FunctionA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Target="Microsoft.Data.SqlClient, Version=2.0.20168.4, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5" Category="Reference" />
<Link Source="FunctionA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Target="Microsoft.EntityFrameworkCore.SqlServer, Version=6.0.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60" Category="Reference" />
<Link Source="FunctionA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Target="Azure.Identity, Version=1.8.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8" Category="Reference" />
<Link Source="Microsoft.Data.SqlClient, Version=2.0.20168.4, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5" Target="Microsoft.Identity.Client, Version=4.21.1.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae" Category="Reference" />
<Link Source="Microsoft.EntityFrameworkCore.SqlServer, Version=6.0.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60" Target="Microsoft.Data.SqlClient, Version=2.0.20168.4, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5" Category="Reference" />

在 .csproj 文件中找不到函数 A 引用的包,但是在项目引用中引用了 Microsoft.EntityFrameworkCore.SqlServer:

<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.12" />

所以这就是我能够收集到的信息 - 但是,它并不能帮助我找出实际问题是什么。就像我说的,函数 B 具有完全相同的引用,包括传递引用,并且它可以正常工作。 我们还检查了 Azure 端的基础设施,以确保两个功能应用程序的配置相同,使用相同的运行时等。一切都是相同的。

还值得注意的是: 一开始,.csproj 中的 &lt;_FunctionsSkipCleanOutput&gt;true&lt;/_FunctionsSkipCleanOutput&gt; 仅添加到函数 B。因此,显然,我认为将其添加到函数 A 会修复它,因为该配置的描述听起来可能有所帮助。但这并没有帮助。

我的下一步是尝试在函数 A 中直接引用 Microsoft.Identity.Client 4.46.0.0,看看这是否有助于使用正确的程序集。 但是,我觉得这将是一种解决方法,并且会使维护引用变得更加困难。另外,为什么它对功能 B 有效?

有谁知道,什么可能导致这个问题?或者如何进一步分析?

【问题讨论】:

    标签: .net azure azure-functions nuget azure-functions-runtime


    【解决方案1】:

    您找到解决方案了吗?

    【讨论】:

    • user21229171,请不要添加我也是作为答案。它实际上并没有提供问题的答案。如果您有不同但相关的问题,请ask它(如果它有助于提供上下文,请参考此问题)。如果你对这个具体问题感兴趣,你可以upvote它,留下comment,或者一旦你有足够的reputation就开始bounty
    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 2020-02-10
    • 2022-01-08
    • 2020-11-16
    • 2016-03-27
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多