Skip to content

Commit 5206a92

Browse files
committed
Mark source generated routes as require dynamic code when RDG is off
1 parent b1b433f commit 5206a92

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public static class Constants
1818
public const string Namespace = "Net.Sdk.Web";
1919
public const string UsingSystemThreading = "System.Threading";
2020
public const string UsingSystemRuntimeCompilerServices = "System.Runtime.CompilerServices";
21+
public const string UsingSystemDiagnosticsCodeAnalysis = "System.Diagnostics.CodeAnalysis";
2122
public const string UsingMicrosoftAspNetCoreHttp = "Microsoft.AspNetCore.Http";
2223
public const string UsingMicrosoftAspNetCoreRouting = "Microsoft.AspNetCore.Routing";
2324
public const string UsingMicrosoftAspNetCoreBuilder = "Microsoft.AspNetCore.Builder";
@@ -120,5 +121,10 @@ public static class Constants
120121
public const string RequiresAuthorization = "RequireAuthorization";
121122
public const string WithOpenApiExtension = "WithOpenApi";
122123

124+
public const string RequiresUnreferencedCode = "RequiresUnreferencedCode";
125+
public const string RequiresUnreferencedCodeMessage = "Uses Map methods (reflection-heavy fall-back)";
126+
public const string RequiresDynamicCode = "RequiresDynamicCode";
127+
public const string RequiresDynamicCodeMessage = "Minimal-API helper needs dynamic code when RDG is off";
128+
123129
public const string Default200Status = "StatusCodes.Status200OK";
124130
}

Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5-
<Version>0.9.4</Version>
5+
<Version>0.9.5</Version>
66
<LangVersion>latest</LangVersion>
77
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
88
<Authors>Alexandru Macocian</Authors>

Net.Sdk.Web.Extensions.SourceGenerators/UseRoutesGenerator.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,13 @@ private static void Execute(Compilation compilation, ImmutableArray<(ClassDeclar
7676
var languageVersion = maybeLanguageVersion.Value;
7777
var routeUsings = new HashSet<string>
7878
{
79+
Constants.UsingSystemDiagnosticsCodeAnalysis,
80+
Constants.UsingSystemRuntimeCompilerServices,
7981
Constants.UsingSystemThreading,
80-
Constants.UsingMicrosoftAspNetCoreRouting,
81-
Constants.UsingMicrosoftAspNetCoreHttp,
8282
Constants.UsingMicrosoftAspNetCoreBuilder,
83+
Constants.UsingMicrosoftAspNetCoreHttp,
8384
Constants.UsingMicrosoftAspNetCoreMvc,
84-
Constants.UsingSystemRuntimeCompilerServices
85+
Constants.UsingMicrosoftAspNetCoreRouting
8586
};
8687

8788
var builder = SyntaxBuilder.CreateCompilationUnit();
@@ -188,6 +189,11 @@ or Constants.DeleteAttributeName
188189

189190
useRoutesWebAppBody.AppendLine("return builder;");
190191
useRoutesWebAppMethodBuilder.WithBody(useRoutesWebAppBody.ToString());
192+
useRoutesWebAppMethodBuilder
193+
.WithAttribute(SyntaxBuilder.CreateAttribute(Constants.RequiresUnreferencedCode)
194+
.WithArgument(Constants.RequiresUnreferencedCodeMessage))
195+
.WithAttribute(SyntaxBuilder.CreateAttribute(Constants.RequiresDynamicCode)
196+
.WithArgument(Constants.RequiresDynamicCodeMessage));
191197
foreach (var classUsing in routeUsings)
192198
{
193199
builder.WithUsing(classUsing);

0 commit comments

Comments
 (0)