【发布时间】:2019-09-10 08:24:55
【问题描述】:
我从我的应用程序中引用两个 (nuget) 包并设置 KeyVault DI 配置。这两个包都引用了 Microsoft.IdentityModel.Clients.ActiveDirectory nuget 包。一个引用主要版本 3,另一个引用主要版本 4。主要版本 4 删除了 dll Microsoft.IdentityModel.Clients.ActiveDirectory.Platform。
当我使用证书调用 AddAzureKeyVault() 以添加 KV 配置时,我会在运行时为 dll Microsoft.IdentityModel.Clients.ActiveDirectory.Platform 获得一个 AssemblyNotFoundException。该文件正确不存在,并且我已将关联 dll 的绑定重定向到主要版本,那么为什么在运行时请求它?有没有办法将对Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll 的调用绑定回Microsoft.IdentityModel.Clients.ActiveDirectory.dll?我提供了绑定重定向并尝试了多种排列方式。
要复制,您可以从控制台应用程序引用包:
Microsoft.Extensions.Configuration.AzureKeyVault 2.2.0 Microsoft.IdentityModel.Client.ActiveDirectory 4.5.1
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Extensions.Configuration;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var cb = new ConfigurationBuilder();
using (var store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectName, "DummyValue", false);
cb.AddAzureKeyVault("https://this-is-a-dummy.vault.azure.net", "dummy-client-id", certs.OfType<X509Certificate2>().Single());
store.Close();
}
var config = cb.Build();
}
}
}
无法加载文件或程序集“Microsoft.IdentityModel.Clients.ActiveDirectory.Platform, Version=3.14.2.11, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。
预绑定 FusionLog
日志:DisplayName = Microsoft.IdentityModel.Clients.ActiveDirectory.Platform,版本=3.14.2.11,文化=中性,PublicKeyToken=31bf3856ad364e35 (完全指定)
日志:Appbase = file:///C:/Code/sandbox/why-doesnt-this-work/ConsoleApp1/ConsoleApp1/bin/Debug/
日志:初始 PrivatePath = NULL 调用程序集:Microsoft.Extensions.Configuration.AzureKeyVault,Version=2.2.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60。
【问题讨论】:
-
您使用什么版本的 .NET Framework / .NET Core?
-
.NET Core 2.2 或 .NET Framework 4.7.2 的结果相同。再深入一点,我可以看到其他人对这个包有类似的问题:github.com/aspnet/Extensions/issues/1728