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.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>
只需将运行时降级到版本 1 即可。
我创建了一个通过 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.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>
只需将运行时降级到版本 1 即可。