Azure 函数使用不正确的 DLL 版本

Azure function uses incorrect DLL version

我创建了一个通过 Webhook 从 Dynamics 365 调用的 Azure 函数。读取远程上下文对象的简单方案确实有效;但是,更复杂的情况会引发错误。尝试使用 CrmServiceClient (Microsoft.Xrm.Tooling.Connector) 获取 Dynamics 服务对象的实例,但当此行 运行s CrmServiceClient client = new CrmServiceClient(crmConnectionString):

时抛出错误

"Could not load type 'Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior' from assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=3.14.2.11, Culture=neutral, PublicKeyToken=31bf3856ad364e35'"

我检查了Azure bin 目录中的DLL,Microsoft.IdentityModel.Clients.ActiveDirectory 的版本是2.22。

此外,我检查了 Azure 中的 xxx.deps.json 文件,它显示相同的版本:

"Microsoft.IdentityModel.Clients.ActiveDirectory/2.22.0.0": {
        "runtime": {
          "Microsoft.IdentityModel.Clients.ActiveDirectory.dll": {
            "assemblyVersion": "2.22.0.0",
            "fileVersion": "2.22.30211.1727"
          }
        }

我已为上述 DLL 搜索版本 3.14.2.11,但找不到。所以我想知道为什么 Azure 加载那个版本?

根据其他一些帖子的建议,我在我的函数文件夹下添加了一个文件 -function.proj- 以降级 Azure 加载的那个 DLL 的版本,内容如下:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="2.22.0" />
</ItemGroup>
</Project>

不幸的是,它并没有改变结果。有人 运行 遇到同样的问题吗?

Microsoft.Xrm.Tooling.Connector 依赖于 .net framework 4.6.2,而您的 Azure 函数 TargetFramework 是 netstandard 2.0。因此请确保您的函数的运行时版本。

然后升级Microsoft.IndentityModel.Client.ActiveDirectory2.28.3版本.

如果您的函数运行时间为 ~1,请使用以下内容创建 project.json

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.IdentityModel.Clients.ActiveDirectory": "2.28.3"
      }
    }
} 

如果您的函数运行时间为 ~2,请按如下方式创建 function.proj。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.IndentityModel.Client.ActiveDirectory" Version="2.28.3"/>
    </ItemGroup>
</Project>

只需将运行时降级到版本 1 即可。