From 9e281f200a93a4b25cdd5e54730427a336cada9e Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Sat, 8 Apr 2023 18:52:11 -0300 Subject: [PATCH] Allow using ThisAssembly.Resources and ThisAssembly.Strings SxS This fixes an issue where the additional file metadata (as persisted by the generated editorconfig for that) is duplicated and overriden between these two packages since both use EmbeddedResource item to drive the source generator. Switch to per-generator item metadata and avoid using AdditionalFiles item metadata, which has this problem. --- src/ThisAssembly.Resources/ResourcesGenerator.cs | 4 ++-- src/ThisAssembly.Resources/ThisAssembly.Resources.targets | 5 +++-- src/ThisAssembly.Strings/StringsGenerator.cs | 8 ++++---- src/ThisAssembly.Strings/ThisAssembly.Strings.targets | 7 ++++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ThisAssembly.Resources/ResourcesGenerator.cs b/src/ThisAssembly.Resources/ResourcesGenerator.cs index cc5e8160..a8164ed5 100644 --- a/src/ThisAssembly.Resources/ResourcesGenerator.cs +++ b/src/ThisAssembly.Resources/ResourcesGenerator.cs @@ -22,8 +22,8 @@ public void Initialize(IncrementalGeneratorInitializationContext context) var files = context.AdditionalTextsProvider .Combine(context.AnalyzerConfigOptionsProvider) .Where(x => - x.Right.GetOptions(x.Left).TryGetValue("build_metadata.AdditionalFiles.SourceItemType", out var itemType) - && itemType == "EmbeddedResource") + x.Right.GetOptions(x.Left).TryGetValue("build_metadata.EmbeddedResource.ThisAssemblyResource", out var assemblyResource) + && bool.TryParse(assemblyResource, out var isAssemblyResource) && isAssemblyResource) .Where(x => x.Right.GetOptions(x.Left).TryGetValue("build_metadata.EmbeddedResource.Value", out var value) && value != null) .Select((x, ct) => { diff --git a/src/ThisAssembly.Resources/ThisAssembly.Resources.targets b/src/ThisAssembly.Resources/ThisAssembly.Resources.targets index 8a6b9c6b..e5d57d8a 100644 --- a/src/ThisAssembly.Resources/ThisAssembly.Resources.targets +++ b/src/ThisAssembly.Resources/ThisAssembly.Resources.targets @@ -9,7 +9,7 @@ - + @@ -38,7 +38,8 @@ $([MSBuild]::ValueOrDefault('%(AreaPath)', '').Replace('\', '.').Replace('/', '.')) %(AreaPath)%(FileExtension) - + + diff --git a/src/ThisAssembly.Strings/StringsGenerator.cs b/src/ThisAssembly.Strings/StringsGenerator.cs index 76e39de6..f00b642f 100644 --- a/src/ThisAssembly.Strings/StringsGenerator.cs +++ b/src/ThisAssembly.Strings/StringsGenerator.cs @@ -33,12 +33,12 @@ public void Initialize(IncrementalGeneratorInitializationContext context) var files = context.AdditionalTextsProvider .Combine(context.AnalyzerConfigOptionsProvider) .Where(x => - x.Right.GetOptions(x.Left).TryGetValue("build_metadata.AdditionalFiles.SourceItemType", out var itemType) - && itemType == "ResourceString") - .Where(x => x.Right.GetOptions(x.Left).TryGetValue("build_metadata.AdditionalFiles.ManifestResourceName", out var value) && value != null) + x.Right.GetOptions(x.Left).TryGetValue("build_metadata.ResxCode.ThisAssemblyStrings", out var resourceString) + && bool.TryParse(resourceString, out var isResourceString) && isResourceString) + .Where(x => x.Right.GetOptions(x.Left).TryGetValue("build_metadata.ResxCode.ManifestResourceName", out var value) && value != null) .Select((x, ct) => { - x.Right.GetOptions(x.Left).TryGetValue("build_metadata.AdditionalFiles.ManifestResourceName", out var resourceName); + x.Right.GetOptions(x.Left).TryGetValue("build_metadata.ResxCode.ManifestResourceName", out var resourceName); return (fileName: Path.GetFileName(x.Left.Path), text: x.Left.GetText(ct), resourceName!); }) .Where(x => x.text != null); diff --git a/src/ThisAssembly.Strings/ThisAssembly.Strings.targets b/src/ThisAssembly.Strings/ThisAssembly.Strings.targets index 14caa0d1..3a05199b 100644 --- a/src/ThisAssembly.Strings/ThisAssembly.Strings.targets +++ b/src/ThisAssembly.Strings/ThisAssembly.Strings.targets @@ -11,14 +11,15 @@ DependsOnTargets="PrepareResourceNames"> - + - - + +