Mark source generated routes as require dynamic code when RDG is off

This commit is contained in:
2025-06-29 13:31:50 +02:00
parent b1b433f5f3
commit 5206a92f85
3 changed files with 16 additions and 4 deletions
@@ -18,6 +18,7 @@ public static class Constants
public const string Namespace = "Net.Sdk.Web";
public const string UsingSystemThreading = "System.Threading";
public const string UsingSystemRuntimeCompilerServices = "System.Runtime.CompilerServices";
public const string UsingSystemDiagnosticsCodeAnalysis = "System.Diagnostics.CodeAnalysis";
public const string UsingMicrosoftAspNetCoreHttp = "Microsoft.AspNetCore.Http";
public const string UsingMicrosoftAspNetCoreRouting = "Microsoft.AspNetCore.Routing";
public const string UsingMicrosoftAspNetCoreBuilder = "Microsoft.AspNetCore.Builder";
@@ -120,5 +121,10 @@ public static class Constants
public const string RequiresAuthorization = "RequireAuthorization";
public const string WithOpenApiExtension = "WithOpenApi";
public const string RequiresUnreferencedCode = "RequiresUnreferencedCode";
public const string RequiresUnreferencedCodeMessage = "Uses Map methods (reflection-heavy fall-back)";
public const string RequiresDynamicCode = "RequiresDynamicCode";
public const string RequiresDynamicCodeMessage = "Minimal-API helper needs dynamic code when RDG is off";
public const string Default200Status = "StatusCodes.Status200OK";
}
@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.9.4</Version>
<Version>0.9.5</Version>
<LangVersion>latest</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>Alexandru Macocian</Authors>
@@ -76,12 +76,13 @@ public class UseRoutesGenerator : IIncrementalGenerator
var languageVersion = maybeLanguageVersion.Value;
var routeUsings = new HashSet<string>
{
Constants.UsingSystemDiagnosticsCodeAnalysis,
Constants.UsingSystemRuntimeCompilerServices,
Constants.UsingSystemThreading,
Constants.UsingMicrosoftAspNetCoreRouting,
Constants.UsingMicrosoftAspNetCoreHttp,
Constants.UsingMicrosoftAspNetCoreBuilder,
Constants.UsingMicrosoftAspNetCoreHttp,
Constants.UsingMicrosoftAspNetCoreMvc,
Constants.UsingSystemRuntimeCompilerServices
Constants.UsingMicrosoftAspNetCoreRouting
};
var builder = SyntaxBuilder.CreateCompilationUnit();
@@ -188,6 +189,11 @@ public class UseRoutesGenerator : IIncrementalGenerator
useRoutesWebAppBody.AppendLine("return builder;");
useRoutesWebAppMethodBuilder.WithBody(useRoutesWebAppBody.ToString());
useRoutesWebAppMethodBuilder
.WithAttribute(SyntaxBuilder.CreateAttribute(Constants.RequiresUnreferencedCode)
.WithArgument(Constants.RequiresUnreferencedCodeMessage))
.WithAttribute(SyntaxBuilder.CreateAttribute(Constants.RequiresDynamicCode)
.WithArgument(Constants.RequiresDynamicCodeMessage));
foreach (var classUsing in routeUsings)
{
builder.WithUsing(classUsing);