diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentImportProjectFeature.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentImportProjectFeature.cs index 701c484dae..367bca910d 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentImportProjectFeature.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentImportProjectFeature.cs @@ -11,8 +11,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Components { internal class ComponentImportProjectFeature : IImportProjectFeature { - private const string ImportsFileName = "_ViewImports.cshtml"; - private static readonly char[] PathSeparators = new char[]{ '/', '\\' }; // Using explicit newlines here to avoid fooling our baseline tests @@ -74,7 +72,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Components public IEnumerable GetHierarchicalImports(RazorProject project, RazorProjectItem projectItem) { // We want items in descending order. FindHierarchicalItems returns items in ascending order. - return project.FindHierarchicalItems(projectItem.FilePath, ImportsFileName).Reverse(); + return project.FindHierarchicalItems(projectItem.FilePath, ComponentMetadata.ImportsFileName).Reverse(); } private class VirtualProjectItem : RazorProjectItem @@ -99,6 +97,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Components public override bool Exists => true; + public override string FileKind => FileKinds.ComponentImport; + public override Stream Read() => new MemoryStream(_bytes); } } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentMetadata.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentMetadata.cs index a203bb2690..ad3a7cd44d 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentMetadata.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentMetadata.cs @@ -11,6 +11,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Components // use our own metadata entry to denote non-Component tag helpers. public static readonly string SpecialKindKey = "Components.IsSpecialKind"; + public static readonly string ImportsFileName = "_Imports.razor"; + public static class Bind { public static readonly string RuntimeName = "Components.None"; diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/FileKinds.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/FileKinds.cs index 93a5a21c03..c69df04e60 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/FileKinds.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/FileKinds.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using Microsoft.AspNetCore.Razor.Language.Components; namespace Microsoft.AspNetCore.Razor.Language { @@ -10,12 +11,20 @@ namespace Microsoft.AspNetCore.Razor.Language { public static readonly string Component = "component"; + public static readonly string ComponentImport = "componentImport"; + public static readonly string Legacy = "mvc"; public static bool IsComponent(string fileKind) { // fileKind might be null. - return string.Equals(fileKind, FileKinds.Component, StringComparison.OrdinalIgnoreCase); + return string.Equals(fileKind, FileKinds.Component, StringComparison.OrdinalIgnoreCase) || IsComponentImport(fileKind); + } + + public static bool IsComponentImport(string fileKind) + { + // fileKind might be null. + return string.Equals(fileKind, FileKinds.ComponentImport, StringComparison.OrdinalIgnoreCase); } public static string GetFileKindFromFilePath(string filePath) @@ -25,7 +34,11 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(filePath)); } - if (string.Equals(".razor", Path.GetExtension(filePath), StringComparison.OrdinalIgnoreCase)) + if (string.Equals(ComponentMetadata.ImportsFileName, Path.GetFileName(filePath), StringComparison.Ordinal)) + { + return FileKinds.ComponentImport; + } + else if (string.Equals(".razor", Path.GetExtension(filePath), StringComparison.OrdinalIgnoreCase)) { return FileKinds.Component; } diff --git a/src/Razor/test/testassets/ComponentApp/Components/_ViewImports.cshtml b/src/Razor/test/testassets/ComponentApp/Components/_Imports.razor similarity index 100% rename from src/Razor/test/testassets/ComponentApp/Components/_ViewImports.cshtml rename to src/Razor/test/testassets/ComponentApp/Components/_Imports.razor