Skip to content

Commit 3b4ece6

Browse files
Mark project as AOT compatible for net 8 (#5458)
* Mark project as AOT compatible for net 8 * Add AOT analyzer to build.props * Fix build errors for Android * Address comments
1 parent 7f93de7 commit 3b4ece6

File tree

9 files changed

+60
-41
lines changed

9 files changed

+60
-41
lines changed

src/Directory.Build.props

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@
2828

2929
</PropertyGroup>
3030

31+
<!-- AOT compatibility for .NET 8+ -->
32+
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
33+
<IsAotCompatible>true</IsAotCompatible>
34+
</PropertyGroup>
35+
3136
<ItemGroup Label="Build Tools" Condition="$([MSBuild]::IsOsPlatform('Windows'))">
3237
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
3338
<PackageReference Include="Microsoft.CodeAnalysis.PublicApiAnalyzers">

src/client/Microsoft.Identity.Client.Extensions.Msal/Accessors/LinuxKeyRingAccessor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public void Clear()
101101
{
102102
try
103103
{
104-
GError err = (GError)Marshal.PtrToStructure(error, typeof(GError));
104+
GError err = Marshal.PtrToStructure<GError>(error);
105105
throw new InteropException(
106106
$"An error was encountered while clearing secret from keyring in the {nameof(Storage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'",
107107
err.Code);
@@ -136,7 +136,7 @@ public byte[] Read()
136136
{
137137
try
138138
{
139-
GError err = (GError)Marshal.PtrToStructure(error, typeof(GError));
139+
GError err = Marshal.PtrToStructure<GError>(error);
140140
throw new InteropException(
141141
$"An error was encountered while reading secret from keyring in the {nameof(Storage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'", err.Code);
142142
}
@@ -181,7 +181,7 @@ public void Write(byte[] data)
181181
{
182182
try
183183
{
184-
GError err = (GError)Marshal.PtrToStructure(error, typeof(GError));
184+
GError err = Marshal.PtrToStructure<GError>(error);
185185
string message = $"An error was encountered while saving secret to keyring in the {nameof(Storage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'";
186186
throw new InteropException(message, err.Code);
187187
}

src/client/Microsoft.Identity.Client.Extensions.Msal/Shared/Mac/LibSystem.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ internal static class LibSystem
2020

2121
public static IntPtr GetGlobal(IntPtr handle, string symbol)
2222
{
23-
IntPtr ptr = dlsym(handle, symbol);
24-
var structure = Marshal.PtrToStructure(ptr, typeof(IntPtr));
23+
IntPtr ptr = dlsym(handle, symbol);
24+
var structure = Marshal.PtrToStructure<IntPtr>(ptr);
2525

2626
return (IntPtr)structure;
2727
}

src/client/Microsoft.Identity.Client/Microsoft.Identity.Client.csproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,8 @@
109109
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
110110
</ItemGroup>
111111

112-
<PropertyGroup Condition="'$(TargetFramework)' == '$(TargetFrameworkNet)' ">
113-
<IsTrimmable>true</IsTrimmable>
114-
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
115-
</PropertyGroup>
116-
117112
<ItemGroup Condition=" '$(TargetFramework)' == '$(TargetFrameworkNetDesktop462)' or '$(TargetFramework)' == '$(TargetFrameworkNetDesktop472)'">
118113
<Compile Include="$(PathToMsalSources)\Platforms\Features\OpenTelemetry\**\*.cs" />
119-
120114
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
121115
</ItemGroup>
122116

src/client/Microsoft.Identity.Client/Platforms/Android/Broker/AndroidAccountManagerBroker.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,14 +350,17 @@ public async Task InitiateBrokerHandshakeAsync()
350350
return;
351351
}
352352

353-
dynamic errorResult = JObject.Parse(helloRequestResult.GetString(BrokerConstants.BrokerResultV2));
353+
JObject errorResultObj = JObject.Parse(helloRequestResult.GetString(BrokerConstants.BrokerResultV2) ?? "{}");
354354
string errorCode = null;
355355
string errorDescription = null;
356356

357-
if (!string.IsNullOrEmpty(errorResult))
357+
if (errorResultObj != null && errorResultObj.Count > 0)
358358
{
359-
errorCode = errorResult[BrokerResponseConst.BrokerErrorCode]?.ToString();
360-
string errorMessage = errorResult[BrokerResponseConst.BrokerErrorMessage]?.ToString();
359+
JToken errorCodeToken = errorResultObj[BrokerResponseConst.BrokerErrorCode];
360+
errorCode = errorCodeToken?.ToString();
361+
362+
JToken errorMsgToken = errorResultObj[BrokerResponseConst.BrokerErrorMessage];
363+
string errorMessage = errorMsgToken?.ToString();
361364
errorDescription = $"[Android broker] An error occurred during hand shake with the broker. Error: {errorCode} Error Message: {errorMessage}";
362365
}
363366
else

src/client/Microsoft.Identity.Client/Platforms/Android/Broker/AndroidBrokerInteractiveResponseHelper.cs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,18 @@ internal static void SetBrokerResult(Intent data, int resultCode, ILoggerAdapter
5858
case (int)BrokerResponseCode.BrowserCodeError:
5959
unreliableLogger?.Info("[Android broker] Response received - error. ");
6060

61-
dynamic errorResult = JObject.Parse(data.GetStringExtra(BrokerConstants.BrokerResultV2));
61+
JObject errorResultObj = JObject.Parse(data.GetStringExtra(BrokerConstants.BrokerResultV2) ?? "{}");
6262

6363
string error;
6464
string errorDescription;
65-
if (errorResult != null)
65+
66+
if (errorResultObj != null && errorResultObj.Count > 0)
6667
{
67-
error = errorResult[BrokerResponseConst.BrokerErrorCode]?.ToString();
68-
errorDescription = errorResult[BrokerResponseConst.BrokerErrorMessage]?.ToString();
68+
JToken errorToken = errorResultObj[BrokerResponseConst.BrokerErrorCode];
69+
error = errorToken?.ToString();
70+
71+
JToken errorDescToken = errorResultObj[BrokerResponseConst.BrokerErrorMessage];
72+
errorDescription = errorDescToken?.ToString();
6973

7074
unreliableLogger?.Error($"[Android broker] error: {error} errorDescription {errorDescription}. ");
7175
}
@@ -77,20 +81,27 @@ internal static void SetBrokerResult(Intent data, int resultCode, ILoggerAdapter
7781
}
7882

7983
var httpResponse = new HttpResponse();
80-
//TODO: figure out how to get status code properly deserialized from JObject
81-
httpResponse.Body = errorResult[BrokerResponseConst.BrokerHttpBody]?.ToString();
84+
//Get HTTP body from the JSON
85+
JToken bodyToken = errorResultObj[BrokerResponseConst.BrokerHttpBody];
86+
httpResponse.Body = bodyToken?.ToString();
87+
88+
JToken subErrorToken = errorResultObj[BrokerResponseConst.BrokerSubError];
89+
JToken tenantIdToken = errorResultObj[BrokerResponseConst.TenantId];
90+
JToken upnToken = errorResultObj[BrokerResponseConst.UserName];
91+
JToken accountUserIdToken = errorResultObj[BrokerResponseConst.LocalAccountId];
92+
JToken authorityUrlToken = errorResultObj[BrokerResponseConst.Authority];
8293

8394
InteractiveBrokerTokenResponse = new MsalTokenResponse
8495
{
8596
Error = error,
8697
ErrorDescription = errorDescription,
87-
SubError = errorResult[BrokerResponseConst.BrokerSubError],
98+
SubError = subErrorToken?.ToString(),
8899
HttpResponse = httpResponse,
89100
CorrelationId = InteractiveRequestCorrelationId,
90-
TenantId = errorResult[BrokerResponseConst.TenantId]?.ToString(),
91-
Upn = errorResult[BrokerResponseConst.UserName]?.ToString(),
92-
AccountUserId = errorResult[BrokerResponseConst.LocalAccountId]?.ToString(),
93-
AuthorityUrl = errorResult[BrokerResponseConst.Authority]?.ToString(),
101+
TenantId = tenantIdToken?.ToString(),
102+
Upn = upnToken?.ToString(),
103+
AccountUserId = accountUserIdToken?.ToString(),
104+
AuthorityUrl = authorityUrlToken?.ToString(),
94105
};
95106
break;
96107
default:

src/client/Microsoft.Identity.Client/Platforms/Android/Broker/AndroidContentProviderBroker.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using Microsoft.Identity.Client.UI;
1919
using Microsoft.Identity.Client.Utils;
2020
using Microsoft.Identity.Json.Linq;
21+
using System.Diagnostics.CodeAnalysis;
2122
using AndroidNative = Android;
2223
using AndroidUri = Android.Net.Uri;
2324

@@ -65,22 +66,26 @@ private async Task<Bundle> GetHandShakeBundleResultFromBrokerAsync()
6566

6667
public string GetProtocolKeyFromHandShakeResult(Bundle bundleResult)
6768
{
68-
var negotiatedBrokerProtocalKey = bundleResult?.GetString(BrokerConstants.NegotiatedBPVersionKey);
69+
var negotiatedBrokerProtocolKey = bundleResult?.GetString(BrokerConstants.NegotiatedBPVersionKey);
6970

70-
if (!string.IsNullOrEmpty(negotiatedBrokerProtocalKey))
71+
if (!string.IsNullOrEmpty(negotiatedBrokerProtocolKey))
7172
{
72-
_logger.Info(() => "[Android broker] Using broker protocol version: " + negotiatedBrokerProtocalKey);
73-
return negotiatedBrokerProtocalKey;
73+
_logger.Info(() => "[Android broker] Using broker protocol version: " + negotiatedBrokerProtocolKey);
74+
return negotiatedBrokerProtocolKey;
7475
}
7576

76-
dynamic errorResult = JObject.Parse(bundleResult?.GetString(BrokerConstants.BrokerResultV2));
77+
JObject errorResultObj = JObject.Parse(bundleResult?.GetString(BrokerConstants.BrokerResultV2) ?? "{}");
7778
string errorCode = null;
7879
string errorDescription = null;
7980

80-
if (!string.IsNullOrEmpty(errorResult))
81+
if (errorResultObj != null && errorResultObj.Count > 0)
8182
{
82-
errorCode = errorResult[BrokerResponseConst.BrokerErrorCode]?.ToString();
83-
string errorMessage = errorResult[BrokerResponseConst.BrokerErrorMessage]?.ToString();
83+
JToken errorCodeToken = errorResultObj[BrokerResponseConst.BrokerErrorCode];
84+
errorCode = errorCodeToken?.ToString();
85+
86+
JToken errorMessageToken = errorResultObj[BrokerResponseConst.BrokerErrorMessage];
87+
string errorMessage = errorMessageToken?.ToString();
88+
8489
errorDescription = $"[Android broker] An error occurred during hand shake with the broker. Error: {errorCode} Error Message: {errorMessage}";
8590
}
8691
else

src/client/Microsoft.Identity.Client/Platforms/Features/DesktopOS/Kerberos/NativeMethods.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ [Out] out LsaSafeHandle LsaHandle
8080
);
8181

8282
[DllImport(SECUR32)]
83-
public static unsafe extern int LsaCallAuthenticationPackage(
83+
public static extern unsafe int LsaCallAuthenticationPackage(
8484
LsaSafeHandle LsaHandle,
8585
int AuthenticationPackage,
8686
void* ProtocolSubmitBuffer,
@@ -403,19 +403,20 @@ public void Dispose()
403403
}
404404
}
405405

406+
// Replace the usage of Marshal.PtrToStructure(IntPtr, Type) with the generic version Marshal.PtrToStructure<T>(IntPtr)
407+
// in the ForEachBuffer method inside SecBufferDesc struct.
408+
406409
private void ForEachBuffer(Action<SecBuffer> onBuffer)
407410
{
408411
for (int Index = 0; Index < cBuffers; Index++)
409412
{
410-
int CurrentOffset = Index * Marshal.SizeOf(typeof(SecBuffer));
413+
int CurrentOffset = Index * Marshal.SizeOf<SecBuffer>();
411414

412-
SecBuffer thisSecBuffer = (SecBuffer)Marshal.PtrToStructure(
415+
SecBuffer thisSecBuffer = (SecBuffer)Marshal.PtrToStructure<SecBuffer>(
413416
IntPtr.Add(
414417
pBuffers,
415418
CurrentOffset
416-
),
417-
typeof(SecBuffer)
418-
);
419+
));
419420

420421
onBuffer(thisSecBuffer);
421422
}

src/client/Microsoft.Identity.Client/Platforms/Features/DesktopOS/Kerberos/TicketCacheWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public unsafe void ImportCredential(byte[] ticketBytes, long luid = 0)
102102
{
103103
MessageType = NativeMethods.KERB_PROTOCOL_MESSAGE_TYPE.KerbSubmitTicketMessage,
104104
KerbCredSize = ticketBytes.Length,
105-
KerbCredOffset = Marshal.SizeOf(typeof(NativeMethods.KERB_SUBMIT_TKT_REQUEST)),
105+
KerbCredOffset = Marshal.SizeOf<NativeMethods.KERB_SUBMIT_TKT_REQUEST>(),
106106
LogonId = luid
107107
};
108108

0 commit comments

Comments
 (0)