|
4 | 4 | using System.Collections.Generic; |
5 | 5 | using System.Diagnostics.CodeAnalysis; |
6 | 6 | using System.IO; |
| 7 | +#if SYSTEM_REFLECTION_NULLABILITYINFOCONTEXT |
| 8 | +using System.Reflection; |
| 9 | +#endif |
7 | 10 | using System.Text; |
8 | 11 |
|
9 | 12 | using Microsoft.Build.Framework; |
@@ -103,7 +106,8 @@ private ApiListWriterOptions BuildApiListWriterOptions() |
103 | 106 | if (Enum.TryParse<MethodBodyOption>(GenerateMethodBody, out var methodBody)) |
104 | 107 | options.MemberDeclaration.MethodBody = methodBody; |
105 | 108 |
|
106 | | - options.Writer.OrderStaticMembersFirst = GenerateStaticMembersFirst; |
| 109 | + options.Writer.WriteNullableAnnotationDirective = true; |
| 110 | + options.Writer.OrderStaticMembersFirst = GenerateStaticMembersFirst; |
107 | 111 |
|
108 | 112 | options.AttributeDeclaration.TypeFilter = AttributeFilter.Default; |
109 | 113 |
|
@@ -140,12 +144,28 @@ private static void WriteApiListFile( |
140 | 144 | encoding: new UTF8Encoding(false) // TODO: make encoding configurable |
141 | 145 | ); |
142 | 146 |
|
143 | | - var writer = new ApiListWriter(outputWriter, assm, arg.options); |
144 | | - |
145 | | - writer.WriteAssemblyInfoHeader(); |
146 | | - writer.WriteExportedTypes(); |
| 147 | + try { |
| 148 | +#if SYSTEM_REFLECTION_NULLABILITYINFOCONTEXT |
| 149 | + // assign NullabilityInfoContext to each assembly |
| 150 | + var nullabilityInfoContext = new NullabilityInfoContext(); |
147 | 151 |
|
148 | | - return arg.outputApiListFilePath; |
| 152 | + arg.options.TypeDeclaration.NullabilityInfoContext = nullabilityInfoContext; |
| 153 | + arg.options.MemberDeclaration.NullabilityInfoContext = nullabilityInfoContext; |
| 154 | +#endif |
| 155 | + var writer = new ApiListWriter(outputWriter, assm, arg.options); |
| 156 | + |
| 157 | + writer.WriteAssemblyInfoHeader(); |
| 158 | + writer.WriteExportedTypes(); |
| 159 | + |
| 160 | + return arg.outputApiListFilePath; |
| 161 | + } |
| 162 | + finally { |
| 163 | +#if SYSTEM_REFLECTION_NULLABILITYINFOCONTEXT |
| 164 | + // release the references held by the NullabilityInfoContext so that the assembly can be unloaded |
| 165 | + arg.options.TypeDeclaration.NullabilityInfoContext = null; |
| 166 | + arg.options.MemberDeclaration.NullabilityInfoContext = null; |
| 167 | +#endif |
| 168 | + } |
149 | 169 | } |
150 | 170 | ); |
151 | 171 |
|
|
0 commit comments