无法加载文件或程序集 'Microsoft.IdentityModel.Clients.ActiveDirectory.Platform'

Could not load file or assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory.Platform'

我有一个 Xamarin.iOS 项目,我想使用 Azure 进行身份验证。最终目标是不让用户登录,并在后台进行身份验证。当我实例化 AuththenticationContext 时,我得到了这个错误。 "Could not load file or assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory.Platform'"。我从 Nuget 安装了 Microsoft.IndentityModel.Clients.ActiveDirectory v3.13.9,using 语句位于代码的顶部。 DLL 设置为复制本地。我不知道为什么这不起作用。我什至卸载了 Nuget 包并将 DLL 添加到项目中并直接引用它们并得到了同样的错误。下面是我正在努力工作的代码。当 AuthenticationContext 被实例化时,它再次中断,所以我什至无法测试它的其余部分。我使用了以下两个网站作为指导,https://blog.xamarin.com/authenticate-xamarin-mobile-apps-using-azure-active-directory/

我在这里 "bug" 找到了这个,但是修复不起作用,对我来说也没有意义。我不确定将代码放在哪里,我也遇到了访问错误。 https://forums.xamarin.com/discussion/45425/azure-authentication-microsoft-identitymodel-clients-activedirectory-platform-no-working

 var authContext = new AuthenticationContext(aadInstance);
        ClientCredential clientCredential = new ClientCredential(clientId, appKey);

            // ADAL includes an in memory cache, so this call will only send a message to the server if the cached token is expired.
                 AuthenticationResult result =  authContext.AcquireTokenAsync(AMServiceResourceId, clientCredential).Result;

            WebRequest Request =
                WebRequest.Create(
                    new Uri(@<API call to test connection>));
            Request.ContentType = "application/json";
            Request.Method = "Get";
            Request.Proxy = null;
            Request.Timeout = 5000;
            Request.Headers.Add("Authorization", "Bearer" + result.AccessToken);

从 Nuget 安装 ADAL 库时,Nuget 应将两个单独的 DLL 安装到 Xamarin 解决方案的每个项目中。一种具有命名空间 Microsoft.IdentityModel.Clients.ActiveDirectory,另一种具有 Microsoft.IdentityModel.Clients.ActiveDirectory.Platform。前者是库的大部分逻辑,而后者是每个目标平台(iOS、Android 等)的特定于平台的逻辑。确保在安装 Nuget 之后,两个包都存在于每个项目的依赖项中。为确保 Nuget 安装正确的包,请确保每个项目都针对项目中的适当平台 properties/settings.

如果您说 DLL 已正确安装但在运行时未被提取,恐怕我无法为您提供答案。

在 appdelegate 中,我必须实例化一个静态方法来注册 ADAL dll。这解决了这个问题。

 PlatformParameters pp = new PlatformParameters(Window.RootViewController);

低于堆栈 url 会有帮助 The located assembly's manifest definition does not match the assembly reference

在我的例子中,我有 Microsoft.IdentityModel.Clients.ActiveDirectory 版本 3.16.1 我卸载了这个版本并再次安装了 3.16.0。我的问题已经解决了。

您也可以查看 bindingRedirect。