C# Azure函数使用了不正确的DLL版本
我已经创建了一个Azure函数,它是通过Dynamics 365中的webhook调用的。读取远程上下文对象的简单场景确实有效;但是,更复杂的场景会抛出一个错误。试图使用CrmServiceClient(Microsoft.Xrm.Tooling.Connector)获取Dynamics服务对象的实例,但当此行运行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
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。