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

C# Azure函数使用了不正确的DLL版本,c#,azure-functions,webhooks,dynamics-365,C#,Azure Functions,Webhooks,Dynamics 365,我已经创建了一个Azure函数,它是通过Dynamics 365中的webhook调用的。读取远程上下文对象的简单场景确实有效;但是,更复杂的场景会抛出一个错误。试图使用CrmServiceClient(Microsoft.Xrm.Tooling.Connector)获取Dynamics服务对象的实例,但当此行运行CrmServiceClient=new CrmServiceClient(crmConnectionString)时,它抛出错误: “无法从程序集“Microsoft.Identit

我已经创建了一个Azure函数,它是通过Dynamics 365中的webhook调用的。读取远程上下文对象的简单场景确实有效;但是,更复杂的场景会抛出一个错误。试图使用CrmServiceClient(Microsoft.Xrm.Tooling.Connector)获取Dynamics服务对象的实例,但当此行运行
CrmServiceClient=new CrmServiceClient(crmConnectionString)
时,它抛出错误:

“无法从程序集“Microsoft.IdentityModel.Clients.ActiveDirectory,版本=3.14.2.11,区域性=中性,PublicKeyToken=31bf3856ad364e35”加载类型“Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior”

我已检查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>

netstandard2.0
不幸的是,这并没有改变结果。有人遇到过同样的问题吗?

该软件包依赖于
.net framework 4.6.2
,而您的azure函数TargetFramework则依赖于
netstandard 2.0
。因此,请确保函数的运行时版本

然后将
Microsoft.IndentityModel.Client.ActiveDirectory升级到2.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>

netstandard2.0

将运行时降级到版本1就成功了。

函数的运行时是2。我们已经有了一个function.proj,正如帖子中所描述的那样。我们指的是适用于其他环境的正确版本(2.22.0)。顺便说一下,2.28.3版适用于Windows phone。