diff --git a/src/Razor/Microsoft.AspNetCore.Mvc.Razor.Extensions/src/ViewComponentTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.AspNetCore.Mvc.Razor.Extensions/src/ViewComponentTagHelperDescriptorProvider.cs index c08f3fa01e3e..970b29152b06 100644 --- a/src/Razor/Microsoft.AspNetCore.Mvc.Razor.Extensions/src/ViewComponentTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.AspNetCore.Mvc.Razor.Extensions/src/ViewComponentTagHelperDescriptorProvider.cs @@ -38,13 +38,10 @@ public void Execute(TagHelperDescriptorProviderContext context) var types = new List(); var visitor = new ViewComponentTypeVisitor(vcAttribute, nonVCAttribute, types); - var targetReference = context.Items.GetTargetMetadataReference(); - if (targetReference is not null) + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null) { - if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly && IsTagHelperAssembly(targetAssembly)) - { - visitor.Visit(targetAssembly.GlobalNamespace); - } + visitor.Visit(targetAssembly.GlobalNamespace); } else { diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/BindTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/BindTagHelperDescriptorProvider.cs index 42a7131888f4..3916a28c2900 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/BindTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/BindTagHelperDescriptorProvider.cs @@ -101,6 +101,12 @@ public void Execute(TagHelperDescriptorProviderContext context) return; } + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, bindMethods.ContainingAssembly)) + { + return; + } + // Tag Helper defintion for case #1. This is the most general case. context.Results.Add(CreateFallbackBindTagHelper()); diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/ComponentTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/ComponentTagHelperDescriptorProvider.cs index c47f698c209d..59f8a287e935 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/ComponentTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/ComponentTagHelperDescriptorProvider.cs @@ -40,14 +40,10 @@ public void Execute(TagHelperDescriptorProviderContext context) var types = new List(); var visitor = new ComponentTypeVisitor(symbols, types); - var targetReference = context.Items.GetTargetMetadataReference(); - if (targetReference is not null) + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null) { - if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly) - { - visitor.Visit(targetAssembly.GlobalNamespace); - } - + visitor.Visit(targetAssembly.GlobalNamespace); } else { diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/DefaultTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/DefaultTagHelperDescriptorProvider.cs index 2c2d3e75fea8..7fdb0e538585 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/DefaultTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/DefaultTagHelperDescriptorProvider.cs @@ -35,13 +35,10 @@ public void Execute(TagHelperDescriptorProviderContext context) var types = new List(); var visitor = new TagHelperTypeVisitor(iTagHelper, types); - var targetReference = context.Items.GetTargetMetadataReference(); - if (targetReference is not null) + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null) { - if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly && IsTagHelperAssembly(targetAssembly)) - { - visitor.Visit(targetAssembly.GlobalNamespace); - } + visitor.Visit(targetAssembly.GlobalNamespace); } else { diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/EventHandlerTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/EventHandlerTagHelperDescriptorProvider.cs index b9326ed56a0d..9c83533509ff 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/EventHandlerTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/EventHandlerTagHelperDescriptorProvider.cs @@ -47,15 +47,10 @@ private List GetEventHandlerData(TagHelperDescriptorProviderCo var types = new List(); var visitor = new EventHandlerDataVisitor(types); - - var targetReference = context.Items.GetTargetMetadataReference(); - if (targetReference is not null) + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null) { - if (compilation.GetAssemblyOrModuleSymbol(targetReference) is IAssemblySymbol targetAssembly) - { - visitor.Visit(targetAssembly.GlobalNamespace); - } - + visitor.Visit(targetAssembly.GlobalNamespace); } else { diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/KeyTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/KeyTagHelperDescriptorProvider.cs index 789abca3183a..751de0903f1b 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/KeyTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/KeyTagHelperDescriptorProvider.cs @@ -35,6 +35,12 @@ public void Execute(TagHelperDescriptorProviderContext context) return; } + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, renderTreeBuilderType.ContainingAssembly)) + { + return; + } + context.Results.Add(CreateKeyTagHelper()); } diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/RefTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/RefTagHelperDescriptorProvider.cs index 1eafca4181e8..784de9b8b05b 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/RefTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/RefTagHelperDescriptorProvider.cs @@ -35,6 +35,12 @@ public void Execute(TagHelperDescriptorProviderContext context) return; } + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, elementReference.ContainingAssembly)) + { + return; + } + context.Results.Add(CreateRefTagHelper()); } diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/SplatTagHelperDescriptorProvider.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/SplatTagHelperDescriptorProvider.cs index 3d6421442726..03bc63eee051 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/SplatTagHelperDescriptorProvider.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/SplatTagHelperDescriptorProvider.cs @@ -35,6 +35,12 @@ public void Execute(TagHelperDescriptorProviderContext context) return; } + var targetAssembly = context.Items.GetTargetAssembly(); + if (targetAssembly is not null && !SymbolEqualityComparer.Default.Equals(targetAssembly, renderTreeBuilder.ContainingAssembly)) + { + return; + } + context.Results.Add(CreateSplatTagHelper()); } diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetReferenceExtensions.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetAssemblyExtensions.cs similarity index 57% rename from src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetReferenceExtensions.cs rename to src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetAssemblyExtensions.cs index 76086886a090..bd8f4620dc21 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetReferenceExtensions.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/src/TagHelperTargetAssemblyExtensions.cs @@ -7,23 +7,23 @@ namespace Microsoft.CodeAnalysis.Razor { - internal static class TagHelperTargetReferenceExtensions + internal static class TagHelperTargetAssemblyExtensions { private static readonly object TargetAssemblyKey = new object(); - public static MetadataReference? GetTargetMetadataReference(this ItemCollection items) + public static IAssemblySymbol? GetTargetAssembly(this ItemCollection items) { - if (items.Count == 0 || items[TargetAssemblyKey] is not MetadataReference reference) + if (items.Count == 0 || items[TargetAssemblyKey] is not IAssemblySymbol symbol) { return null; } - return reference; + return symbol; } - public static void SetTargetMetadataReference(this ItemCollection items, MetadataReference reference) + public static void SetTargetAssembly(this ItemCollection items, IAssemblySymbol symbol) { - items[TargetAssemblyKey] = reference; + items[TargetAssemblyKey] = symbol; } } } diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/test/ComponentTagHelperDescriptorProviderTest.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/test/ComponentTagHelperDescriptorProviderTest.cs index 0a1084972276..4a0e2c676d2d 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/test/ComponentTagHelperDescriptorProviderTest.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/test/ComponentTagHelperDescriptorProviderTest.cs @@ -1617,7 +1617,7 @@ public Task SetParametersAsync(ParameterView parameters) var context = TagHelperDescriptorProviderContext.Create(); context.SetCompilation(compilation); - context.Items.SetTargetMetadataReference(compilation.References.Single(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll"))); + context.Items.SetTargetAssembly((IAssemblySymbol) compilation.GetAssemblyOrModuleSymbol(compilation.References.First(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll")))); var provider = new ComponentTagHelperDescriptorProvider(); // Act diff --git a/src/Razor/Microsoft.CodeAnalysis.Razor/test/DefaultTagHelperDescriptorProviderTest.cs b/src/Razor/Microsoft.CodeAnalysis.Razor/test/DefaultTagHelperDescriptorProviderTest.cs index 094709ae3be6..0590c0acdf58 100644 --- a/src/Razor/Microsoft.CodeAnalysis.Razor/test/DefaultTagHelperDescriptorProviderTest.cs +++ b/src/Razor/Microsoft.CodeAnalysis.Razor/test/DefaultTagHelperDescriptorProviderTest.cs @@ -85,7 +85,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output) { } [Fact] - public void Execute_WithTargetMetadataReference_Works() + public void Execute_WithTargetAssembly_Works() { // Arrange var testTagHelper = "TestAssembly.TestTagHelper"; @@ -104,7 +104,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output) { var context = TagHelperDescriptorProviderContext.Create(); context.SetCompilation(compilation); - context.Items.SetTargetMetadataReference(compilation.References.First(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll"))); + context.Items.SetTargetAssembly((IAssemblySymbol) compilation.GetAssemblyOrModuleSymbol(compilation.References.First(r => r.Display.Contains("Microsoft.CodeAnalysis.Razor.Test.dll")))); // Act descriptorProvider.Execute(context);