diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index e00fdeb..5adf0a1 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -16,5 +16,7 @@
despite the fact that .NET 6 is out of support. Support will be dropped from Yardarm at a later date.
-->
true
+
+ true
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index a4493cd..38c3340 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -1,5 +1,5 @@
-
+
true
$(MSBuildThisFileDirectory)Yardarm.snk
@@ -22,4 +22,39 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+ RootNamespace
+ $(DefineConstants);FORTESTS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/Yardarm.Client/Yardarm.Client.csproj b/src/main/Yardarm.Client/Yardarm.Client.csproj
index e9b311c..4f4afff 100644
--- a/src/main/Yardarm.Client/Yardarm.Client.csproj
+++ b/src/main/Yardarm.Client/Yardarm.Client.csproj
@@ -2,13 +2,10 @@
netstandard2.0;net6.0;net8.0
- RootNamespace
Library
enable
false
-
- $(DefineConstants);FORTESTS
@@ -24,9 +21,4 @@
-
-
-
-
-
diff --git a/src/main/Yardarm.MicrosoftExtensionsHttp.Client/Yardarm.MicrosoftExtensionsHttp.Client.csproj b/src/main/Yardarm.MicrosoftExtensionsHttp.Client/Yardarm.MicrosoftExtensionsHttp.Client.csproj
index ce575fd..6a1fffc 100644
--- a/src/main/Yardarm.MicrosoftExtensionsHttp.Client/Yardarm.MicrosoftExtensionsHttp.Client.csproj
+++ b/src/main/Yardarm.MicrosoftExtensionsHttp.Client/Yardarm.MicrosoftExtensionsHttp.Client.csproj
@@ -2,11 +2,9 @@
netstandard2.0;net6.0;net8.0
- RootNamespace
Library
enable
- false
@@ -22,9 +20,4 @@
-
-
-
-
-
diff --git a/src/main/Yardarm.NewtonsoftJson.Client/Yardarm.NewtonsoftJson.Client.csproj b/src/main/Yardarm.NewtonsoftJson.Client/Yardarm.NewtonsoftJson.Client.csproj
index e5b93c8..3fa6711 100644
--- a/src/main/Yardarm.NewtonsoftJson.Client/Yardarm.NewtonsoftJson.Client.csproj
+++ b/src/main/Yardarm.NewtonsoftJson.Client/Yardarm.NewtonsoftJson.Client.csproj
@@ -2,11 +2,9 @@
netstandard2.0;net6.0;net8.0
- RootNamespace
Library
enable
- false
@@ -18,9 +16,4 @@
-
-
-
-
-
diff --git a/src/main/Yardarm.SystemTextJson.Client/Yardarm.SystemTextJson.Client.csproj b/src/main/Yardarm.SystemTextJson.Client/Yardarm.SystemTextJson.Client.csproj
index 5a6c27f..967a199 100644
--- a/src/main/Yardarm.SystemTextJson.Client/Yardarm.SystemTextJson.Client.csproj
+++ b/src/main/Yardarm.SystemTextJson.Client/Yardarm.SystemTextJson.Client.csproj
@@ -2,13 +2,9 @@
netstandard2.0;net6.0;net8.0
- RootNamespace
Library
enable
- false
-
- $(DefineConstants);FORTESTS
@@ -26,11 +22,4 @@
-
-
-
-
-
-
-
diff --git a/src/main/Yardarm.sln b/src/main/Yardarm.sln
index d221ee9..ddeb7ac 100644
--- a/src/main/Yardarm.sln
+++ b/src/main/Yardarm.sln
@@ -32,6 +32,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0F27CDEF-318E-4305-AE2B-AA44C670E7C2}"
ProjectSection(SolutionItems) = preProject
..\Directory.Build.props = ..\Directory.Build.props
+ ..\Directory.Build.targets = ..\Directory.Build.targets
Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
diff --git a/src/main/Yardarm/Generation/ResourceSyntaxTreeGenerator.cs b/src/main/Yardarm/Generation/ResourceSyntaxTreeGenerator.cs
index b572156..ab45c7f 100644
--- a/src/main/Yardarm/Generation/ResourceSyntaxTreeGenerator.cs
+++ b/src/main/Yardarm/Generation/ResourceSyntaxTreeGenerator.cs
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.Text;
@@ -12,8 +14,29 @@
namespace Yardarm.Generation
{
- public abstract class ResourceSyntaxTreeGenerator : ISyntaxTreeGenerator
+ public abstract partial class ResourceSyntaxTreeGenerator : ISyntaxTreeGenerator
{
+ [GeneratedRegex(@"\.netstandard\.cs$")]
+ private static partial Regex NetStandardSuffix();
+
+ [GeneratedRegex(@"\.netcoreapp\.cs$")]
+ private static partial Regex NetCoreAppSuffix();
+
+ [GeneratedRegex(@"\.net\d+\.\d+\.cs$")]
+ private static partial Regex AnyNetNumberSuffix();
+
+ [GeneratedRegex(@"\.net6\.0\.cs$")]
+ private static partial Regex Net60Suffix();
+
+ [GeneratedRegex(@"\.net7\.0\.cs$")]
+ private static partial Regex Net70Suffix();
+
+ [GeneratedRegex(@"\.net8\.0\.cs$")]
+ private static partial Regex Net80Suffix();
+
+ [GeneratedRegex(@"\.net9\.0\.cs$")]
+ private static partial Regex Net90Suffix();
+
private static readonly UTF8Encoding s_utf8NoBom = new(encoderShouldEmitUTF8Identifier: false);
private static ReadOnlySpan RootNamespaceBytes => "RootNamespace"u8;
@@ -31,19 +54,23 @@ protected ResourceSyntaxTreeGenerator(GenerationContext generationContext, IRoot
RootNamespace = rootNamespace;
}
+ public virtual IEnumerable GetResourceNameExclusions() =>
+ GenerationContext.CurrentTargetFramework.Framework ==
+ NuGetFrameworkConstants.NetStandardFramework
+ ? [NetCoreAppSuffix(), AnyNetNumberSuffix()]
+ : [NetStandardSuffix(), .. GetNetVersionSuffixExclusions(GenerationContext.CurrentTargetFramework.Version)];
+
public virtual IEnumerable Generate()
{
- string excludeSuffix = GenerationContext.CurrentTargetFramework.Framework ==
- NuGetFrameworkConstants.NetStandardFramework
- ? ".netcoreapp.cs"
- : ".netstandard.cs";
+ Regex[] excludeSuffixes = GetResourceNameExclusions().ToArray();
byte[] namespaceName = s_utf8NoBom.GetBytes(RootNamespace.Name.ToString());
var result = new List();
foreach (string resourceName in GetType().Assembly.GetManifestResourceNames())
{
- if (resourceName.StartsWith(ResourcePrefix) && resourceName.EndsWith(".cs") && !resourceName.EndsWith(excludeSuffix))
+ if (resourceName.StartsWith(ResourcePrefix) && resourceName.EndsWith(".cs") &&
+ !IsAnyMatch(excludeSuffixes, resourceName))
{
result.Add(ParseResource(resourceName, namespaceName));
}
@@ -88,5 +115,38 @@ private unsafe SyntaxTree ParseResource(string resourceName, ReadOnlySpan
return syntaxTree;
}
+
+ private static IEnumerable GetNetVersionSuffixExclusions(Version version)
+ {
+ if (version.Major < 6)
+ {
+ yield return Net60Suffix();
+ }
+ if (version.Major < 7)
+ {
+ yield return Net70Suffix();
+ }
+ if (version.Major < 8)
+ {
+ yield return Net80Suffix();
+ }
+ if (version.Major < 9)
+ {
+ yield return Net90Suffix();
+ }
+ }
+
+ private static bool IsAnyMatch(Regex[] patterns, string input)
+ {
+ foreach (Regex pattern in patterns)
+ {
+ if (pattern.IsMatch(input))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
}