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

时间:2017-03-29 13:43:30

标签: c# azure authentication xamarin adal

我有一个Xamarin.iOS项目,我想用Azure进行身份验证。最终目标是不让用户登录,并在幕后进行身份验证。当我实例化AuththenticationContext时,我得到此错误。 "无法加载文件或程序集' 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);

3 个答案:

答案 0 :(得分:0)

当您从Nuget安装ADAL库时,Nuget应该在Xamarin解决方案的每个项目中安装两个单独的DLL。一个名称空间为Microsoft.IdentityModel.Clients.ActiveDirectory,一个名称为Microsoft.IdentityModel.Clients.ActiveDirectory.Platform。前者是库的大部分逻辑,而后者是每个目标平台(iOS,Android等)的特定于平台的逻辑。确保在安装Nuget之后,每个项目的依赖项中都包含这两个包。要确保Nuget安装正确的软件包,请确保每个项目都以项目属性/设置中的相应平台为目标。

如果你说这些DLL安装正确但是在runttime没有被接收,我恐怕没有给你答案。

答案 1 :(得分:0)

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

 PlatformParameters pp = new PlatformParameters(Window.RootViewController);

答案 2 :(得分:0)

下面的堆栈网址会有所帮助 The located assembly's manifest definition does not match the assembly reference

在我的情况下,我有版本3.16.1的Microsoft.IdentityModel.Clients.ActiveDirectory我卸载此版本,我再次安装3.16.0。我的问题得到了解决。

您还可以查看bindingRedirect。