Azure.Identity 在平台上抛出未实现的异常 Xamarin.iOS
Azure.Identity Throws Not implemented Exception on Platform Xamarin.iOS
我正在尝试使用 Azure.Identity UsernamePasswordCredential 通过图表 api 向 AD 进行身份验证,但每当我初始化凭证 ctor 时,它都会抛出以下异常:
The method or operation is not implemented. at System.Diagnostics.Tracing.EventSource.GetSources ()
堆栈跟踪:
System.TypeInitializationException: The type initializer for 'Azure.Core.Pipeline.LoggingPolicy' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Azure.Core.Diagnostics.AzureCoreEventSource' threw an exception. ---> System.NotImplementedException: The method or operation is not implemented.
at System.Diagnostics.Tracing.EventSource.GetSources () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/corlib/System.Diagnostics.Tracing/EventSource.cs:318
at Azure.Core.Diagnostics.AzureEventSource.DeduplicateName (System.String eventSourceName) [0x00010] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Core.Diagnostics.AzureEventSource..ctor (System.String eventSourceName) [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Core.Diagnostics.AzureCoreEventSource..ctor () [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Core.Diagnostics.AzureCoreEventSource..cctor () [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
--- End of inner exception stack trace ---
at Azure.Core.Pipeline.LoggingPolicy..cctor () [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
--- End of inner exception stack trace ---
at Azure.Core.Pipeline.HttpPipelineBuilder.Build (Azure.Core.ClientOptions options, Azure.Core.Pipeline.HttpPipelinePolicy[] perCallPolicies, Azure.Core.Pipeline.HttpPipelinePolicy[] perRetryPolicies, Azure.Core.ResponseClassifier responseClassifier) [0x00164] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Identity.CredentialPipeline..ctor (Azure.Identity.TokenCredentialOptions options) [0x00023] in <47110d8b120248e4b903ba2cc44741ea>:0
at Azure.Identity.CredentialPipeline.GetInstance (Azure.Identity.TokenCredentialOptions options) [0x00003] in <47110d8b120248e4b903ba2cc44741ea>:0
at Azure.Identity.UsernamePasswordCredential..ctor (System.String username, System.String password, System.String tenantId, System.String clientId, Azure.Identity.TokenCredentialOptions options, Azure.Identity.CredentialPipeline pipeline, Azure.Identity.MsalPublicClient client) [0x00069] in <47110d8b120248e4b903ba2cc44741ea>:0
at Azure.Identity.UsernamePasswordCredential..ctor (System.String username, System.String password, System.String tenantId, System.String clientId, Azure.Identity.TokenCredentialOptions options) [0x00000] in <47110d8b120248e4b903ba2cc44741ea>:0
at MyProject.GraphService.Init (System.String username, System.String password, System.String tenantId, System.String clientId, System.String eventKeyword) [0x00014] in .../MyProject/GraphService.cs:31
at MyProject.Features.Auth.AuthViewModel.InnerGetUser () [0x00077] in .../MyProject/Features/Auth/AuthViewModel.cs:57
我的代码是 graphService 是一个标准库 v2.1,它被 Xamarin.forms 项目中的 AuthViewModel 使用。
public class AuthViewModel: BaseViewModel
{
...
private async Task InnerGetUser()
{
try
{
this.IsBusy = true;
if (string.IsNullOrEmpty(this.Email) ||
string.IsNullOrEmpty(this.Password))
throw new ValidationException("Email e password devono essere compilati");
this._graphService.Init(this.Email, this.Password,
this._settingsService.GetStringSetting(Services.Settings.TenantId),
this._settingsService.GetStringSetting(Services.Settings.ClientId),
this._settingsService.GetStringSetting(Services.Settings.EventKeyword));
var user = await this._graphService.GetUser();
this._userService.CurrentUser = new UserDto()
{
Name = user.DisplayName
};
this._userService.InvokeOnLoginDone();
}
catch (Exception e)
{
await base.ShowError(e);
}
finally
{
this.IsBusy = false;
}
}
...
}
public class GraphService: IGraphService
{
...
public void Init(string username, string password, string tenantId, string clientId, string eventKeyword)
{
this._eventKeyword = eventKeyword;
Console.WriteLine("Creo credentials provider");
var userNamePasswordCredential = new UsernamePasswordCredential(
username, password, tenantId, clientId, new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
});
Console.WriteLine("Creo graph service client");
this._graphClient = new GraphServiceClient(userNamePasswordCredential);
}
...
}
奇怪的是,它在 net5 中的控制台应用程序上运行良好。
Nugets:
- Xamarin.forms 5.0.0.2125,
- Azure.Identity1.4.1,
- Microsoft.Graph 4.6.0
环境:
- mac.os11.6
- visual studio 用于 mac 8.10.10(内部版本 8)
sdks:
- .NET 5.0.401,
- 单声道 6.12.0.140,
- Xamarin.iOS15.0.0.6.
有什么想法吗?
谢谢。
我遇到了类似的问题 Azure.Storage.Blobs 得到异常
System.TypeInitializationException: The type initializer for 'Azure.Core.Pipeline.LoggingPolicy' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Azure.Core.Diagnostics.AzureCoreEventSource' threw an exception. ---> System.NotImplementedException: The method or operation is not implemented.
我通过安装 Azure.Core 解决了这个问题。希望对你有用。
我将此发布为“不是答案”,因为我遇到了同样的问题,但我尝试过但没有成功。
我尝试将所有诊断选项设置为 false。它确实有影响,因为它在我创建 BlobServiceClient 时停止抛出异常,但现在它在我迭代列出 blob 的结果时抛出 System.NotImplementedException。
ClientSecretCredentialOptions options = new ClientSecretCredentialOptions();
options.Diagnostics.IsDistributedTracingEnabled = false;
options.Diagnostics.IsLoggingContentEnabled = false;
options.Diagnostics.IsLoggingEnabled = false;
options.Diagnostics.IsTelemetryEnabled = false;
将 Microsoft.Graph 更新到版本 4.7.0 并将 Azure.Identity 更新到版本 1.5.0 已解决该问题。
我正在尝试使用 Azure.Identity UsernamePasswordCredential 通过图表 api 向 AD 进行身份验证,但每当我初始化凭证 ctor 时,它都会抛出以下异常:
The method or operation is not implemented. at System.Diagnostics.Tracing.EventSource.GetSources ()
堆栈跟踪:
System.TypeInitializationException: The type initializer for 'Azure.Core.Pipeline.LoggingPolicy' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Azure.Core.Diagnostics.AzureCoreEventSource' threw an exception. ---> System.NotImplementedException: The method or operation is not implemented.
at System.Diagnostics.Tracing.EventSource.GetSources () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/corlib/System.Diagnostics.Tracing/EventSource.cs:318
at Azure.Core.Diagnostics.AzureEventSource.DeduplicateName (System.String eventSourceName) [0x00010] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Core.Diagnostics.AzureEventSource..ctor (System.String eventSourceName) [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Core.Diagnostics.AzureCoreEventSource..ctor () [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Core.Diagnostics.AzureCoreEventSource..cctor () [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
--- End of inner exception stack trace ---
at Azure.Core.Pipeline.LoggingPolicy..cctor () [0x00000] in <0aa90fe0646d47bc95bff520717dbf16>:0
--- End of inner exception stack trace ---
at Azure.Core.Pipeline.HttpPipelineBuilder.Build (Azure.Core.ClientOptions options, Azure.Core.Pipeline.HttpPipelinePolicy[] perCallPolicies, Azure.Core.Pipeline.HttpPipelinePolicy[] perRetryPolicies, Azure.Core.ResponseClassifier responseClassifier) [0x00164] in <0aa90fe0646d47bc95bff520717dbf16>:0
at Azure.Identity.CredentialPipeline..ctor (Azure.Identity.TokenCredentialOptions options) [0x00023] in <47110d8b120248e4b903ba2cc44741ea>:0
at Azure.Identity.CredentialPipeline.GetInstance (Azure.Identity.TokenCredentialOptions options) [0x00003] in <47110d8b120248e4b903ba2cc44741ea>:0
at Azure.Identity.UsernamePasswordCredential..ctor (System.String username, System.String password, System.String tenantId, System.String clientId, Azure.Identity.TokenCredentialOptions options, Azure.Identity.CredentialPipeline pipeline, Azure.Identity.MsalPublicClient client) [0x00069] in <47110d8b120248e4b903ba2cc44741ea>:0
at Azure.Identity.UsernamePasswordCredential..ctor (System.String username, System.String password, System.String tenantId, System.String clientId, Azure.Identity.TokenCredentialOptions options) [0x00000] in <47110d8b120248e4b903ba2cc44741ea>:0
at MyProject.GraphService.Init (System.String username, System.String password, System.String tenantId, System.String clientId, System.String eventKeyword) [0x00014] in .../MyProject/GraphService.cs:31
at MyProject.Features.Auth.AuthViewModel.InnerGetUser () [0x00077] in .../MyProject/Features/Auth/AuthViewModel.cs:57
我的代码是 graphService 是一个标准库 v2.1,它被 Xamarin.forms 项目中的 AuthViewModel 使用。
public class AuthViewModel: BaseViewModel
{
...
private async Task InnerGetUser()
{
try
{
this.IsBusy = true;
if (string.IsNullOrEmpty(this.Email) ||
string.IsNullOrEmpty(this.Password))
throw new ValidationException("Email e password devono essere compilati");
this._graphService.Init(this.Email, this.Password,
this._settingsService.GetStringSetting(Services.Settings.TenantId),
this._settingsService.GetStringSetting(Services.Settings.ClientId),
this._settingsService.GetStringSetting(Services.Settings.EventKeyword));
var user = await this._graphService.GetUser();
this._userService.CurrentUser = new UserDto()
{
Name = user.DisplayName
};
this._userService.InvokeOnLoginDone();
}
catch (Exception e)
{
await base.ShowError(e);
}
finally
{
this.IsBusy = false;
}
}
...
}
public class GraphService: IGraphService
{
...
public void Init(string username, string password, string tenantId, string clientId, string eventKeyword)
{
this._eventKeyword = eventKeyword;
Console.WriteLine("Creo credentials provider");
var userNamePasswordCredential = new UsernamePasswordCredential(
username, password, tenantId, clientId, new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
});
Console.WriteLine("Creo graph service client");
this._graphClient = new GraphServiceClient(userNamePasswordCredential);
}
...
}
奇怪的是,它在 net5 中的控制台应用程序上运行良好。
Nugets:
- Xamarin.forms 5.0.0.2125,
- Azure.Identity1.4.1,
- Microsoft.Graph 4.6.0
环境:
- mac.os11.6
- visual studio 用于 mac 8.10.10(内部版本 8)
sdks:
- .NET 5.0.401,
- 单声道 6.12.0.140,
- Xamarin.iOS15.0.0.6.
有什么想法吗?
谢谢。
我遇到了类似的问题 Azure.Storage.Blobs 得到异常
System.TypeInitializationException: The type initializer for 'Azure.Core.Pipeline.LoggingPolicy' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Azure.Core.Diagnostics.AzureCoreEventSource' threw an exception. ---> System.NotImplementedException: The method or operation is not implemented.
我通过安装 Azure.Core 解决了这个问题。希望对你有用。
我将此发布为“不是答案”,因为我遇到了同样的问题,但我尝试过但没有成功。 我尝试将所有诊断选项设置为 false。它确实有影响,因为它在我创建 BlobServiceClient 时停止抛出异常,但现在它在我迭代列出 blob 的结果时抛出 System.NotImplementedException。
ClientSecretCredentialOptions options = new ClientSecretCredentialOptions();
options.Diagnostics.IsDistributedTracingEnabled = false;
options.Diagnostics.IsLoggingContentEnabled = false;
options.Diagnostics.IsLoggingEnabled = false;
options.Diagnostics.IsTelemetryEnabled = false;
将 Microsoft.Graph 更新到版本 4.7.0 并将 Azure.Identity 更新到版本 1.5.0 已解决该问题。