Skip to content

Commit f424430

Browse files
AOT compatible: make NuGet.ProjectModel AOT compatible (#7191)
1 parent a553524 commit f424430

3 files changed

Lines changed: 24 additions & 12 deletions

File tree

src/NuGet.Core/NuGet.ProjectModel/CacheFileFormat.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@
99
using System.Text.Encodings.Web;
1010
using System.Text.Json;
1111
using System.Text.Json.Serialization;
12+
using System.Text.Json.Serialization.Metadata;
1213
using NuGet.Common;
1314

1415
namespace NuGet.ProjectModel
1516
{
16-
public static class CacheFileFormat
17+
public static partial class CacheFileFormat
1718
{
19+
[JsonSerializable(typeof(CacheFile))]
20+
private sealed partial class CacheFileSourceGen : JsonSerializerContext
21+
{
22+
}
23+
1824
private static JsonSerializerOptions SerializerOptions = new JsonSerializerOptions
1925
{
2026
WriteIndented = true,
@@ -23,7 +29,10 @@ public static class CacheFileFormat
2329
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
2430
Converters = { new AssetsLogMessageConverter() },
2531
NumberHandling = JsonNumberHandling.AllowReadingFromString,
26-
AllowTrailingCommas = true
32+
AllowTrailingCommas = true,
33+
TypeInfoResolver = JsonTypeInfoResolver.Combine(
34+
CacheFileSourceGen.Default,
35+
AssetsLogMessage.AssetsLogMessageSourceGen.Default)
2736
};
2837

2938
/// <summary>
@@ -33,12 +42,12 @@ private class AssetsLogMessageConverter : JsonConverter<IAssetsLogMessage>
3342
{
3443
public override IAssetsLogMessage Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
3544
{
36-
return JsonSerializer.Deserialize<AssetsLogMessage>(ref reader, options);
45+
return JsonSerializer.Deserialize(ref reader, (JsonTypeInfo<AssetsLogMessage>)options.GetTypeInfo(typeof(AssetsLogMessage)));
3746
}
3847

3948
public override void Write(Utf8JsonWriter writer, IAssetsLogMessage value, JsonSerializerOptions options)
4049
{
41-
JsonSerializer.Serialize(writer, (AssetsLogMessage)value, options);
50+
JsonSerializer.Serialize(writer, (AssetsLogMessage)value, (JsonTypeInfo<AssetsLogMessage>)options.GetTypeInfo(typeof(AssetsLogMessage)));
4251
}
4352
}
4453

@@ -50,8 +59,7 @@ public static CacheFile Read(Stream stream, ILogger log, string path)
5059

5160
try
5261
{
53-
var cacheFile = JsonSerializer.Deserialize<CacheFile>(utf8Json: stream, SerializerOptions);
54-
return cacheFile;
62+
return JsonSerializer.Deserialize(utf8Json: stream, (JsonTypeInfo<CacheFile>)SerializerOptions.GetTypeInfo(typeof(CacheFile)));
5563
}
5664
catch (Exception ex) when (ex is ArgumentNullException || ex is JsonException || ex is NotSupportedException)
5765
{
@@ -89,7 +97,7 @@ public static void Write(Stream stream, CacheFile cacheFile)
8997

9098
private static void Write(TextWriter textWriter, CacheFile cacheFile)
9199
{
92-
textWriter.Write(JsonSerializer.Serialize(cacheFile, SerializerOptions));
100+
textWriter.Write(JsonSerializer.Serialize(cacheFile, (JsonTypeInfo<CacheFile>)SerializerOptions.GetTypeInfo(typeof(CacheFile))));
93101
}
94102
}
95103
}

src/NuGet.Core/NuGet.ProjectModel/LockFile/AssetsLogMessage.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
namespace NuGet.ProjectModel
1313
{
14-
public class AssetsLogMessage : IAssetsLogMessage, IEquatable<IAssetsLogMessage>
14+
public partial class AssetsLogMessage : IAssetsLogMessage, IEquatable<IAssetsLogMessage>
1515
{
16-
[JsonConverter(typeof(JsonStringEnumConverter))]
16+
[JsonConverter(typeof(JsonStringEnumConverter<NuGetLogCode>))]
1717
public NuGetLogCode Code { get; }
18-
[JsonConverter(typeof(JsonStringEnumConverter))]
18+
[JsonConverter(typeof(JsonStringEnumConverter<LogLevel>))]
1919
public LogLevel Level { get; }
2020
public string Message { get; }
2121
public string ProjectPath { get; set; }
@@ -70,8 +70,13 @@ public static IAssetsLogMessage Create(IRestoreLogMessage logMessage)
7070
};
7171
}
7272

73+
[JsonSerializable(typeof(AssetsLogMessage))]
74+
internal sealed partial class AssetsLogMessageSourceGen : JsonSerializerContext
75+
{
76+
}
77+
7378
[JsonConstructor]
74-
private AssetsLogMessage(
79+
internal AssetsLogMessage(
7580
LogLevel level,
7681
NuGetLogCode code,
7782
string message,

src/NuGet.Core/NuGet.ProjectModel/NuGet.ProjectModel.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<Shipping>true</Shipping>
88
<IncludeInVSIX>true</IncludeInVSIX>
99
<XPLATProject>true</XPLATProject>
10-
<IsAotCompatible>false</IsAotCompatible>
1110
<Description>NuGet's core types and interfaces for PackageReference-based restore, such as lock files, assets file and internal restore models.</Description>
1211
</PropertyGroup>
1312

0 commit comments

Comments
 (0)