From e991e86863da885a7d0f02e458aee2fcf08d4a82 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Mon, 10 Mar 2014 23:17:52 -0700 Subject: [PATCH] Updated roslyn compilation to use new host interface. --- .../Compilation/RoslynCompilationService.cs | 78 ++++--------------- .../Services/IDependencyExporter.cs | 10 --- ...IDependencyExport.cs => ILibraryExport.cs} | 4 +- .../Services/ILibraryExportProvider.cs | 10 +++ .../Services/IMetadataFileReference.cs | 5 +- .../Services/IMetadataReference.cs | 3 +- 6 files changed, 33 insertions(+), 77 deletions(-) delete mode 100644 src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExporter.cs rename src/Microsoft.AspNet.Mvc.Razor/Services/{IDependencyExport.cs => ILibraryExport.cs} (85%) create mode 100644 src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExportProvider.cs diff --git a/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs b/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs index 5e6e123490..245bb4c4d5 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs @@ -12,17 +12,17 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation { public class RoslynCompilationService : ICompilationService { - private readonly IDependencyExporter _exporter; + private readonly ILibraryExportProvider _exportProvider; private readonly IApplicationEnvironment _environment; private readonly IAssemblyLoaderEngine _loader; public RoslynCompilationService(IApplicationEnvironment environment, IAssemblyLoaderEngine loaderEngine, - IDependencyExporter exporter) + ILibraryExportProvider exportProvider) { _environment = environment; _loader = loaderEngine; - _exporter = exporter; + _exportProvider = exportProvider; } public Task Compile(string content) @@ -67,76 +67,30 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation { var references = new List(); - // TODO: We need a way to get the current application's dependencies + var export = _exportProvider.GetLibraryExport(_environment.ApplicationName, _environment.TargetFramework); - var assemblies = new[] { - _environment.ApplicationName, -#if NET45 - "mscorlib", - "System", - "System.Core", - "Microsoft.CSharp", -#else - "System.Linq", - "System.Collections", - "System.Dynamic.Runtime", - "System.Collections.Generic", -#endif - "Microsoft.AspNet.Mvc", - "Microsoft.AspNet.Mvc.Razor", - "Microsoft.AspNet.Mvc.Rendering", - }; - - var exports = new List(); - - foreach (var assemblyName in assemblies) + foreach (var metadataReference in export.MetadataReferences) { - var export = _exporter.GetDependencyExport(assemblyName, _environment.TargetFramework); + var fileMetadataReference = metadataReference as IMetadataFileReference; - if (export == null) + if (fileMetadataReference != null) { - continue; + references.Add(CreateMetadataFileReference(fileMetadataReference.Path)); } + else + { + var roslynReference = metadataReference as IRoslynMetadataReference; - exports.Add(export); + if (roslynReference != null) + { + references.Add(roslynReference.MetadataReference); + } + } } - ExtractReferences(exports, references); - return references; } - private void ExtractReferences(List exports, List references) - { - var paths = new HashSet(); - - foreach (var export in exports) - { - foreach (var metadataReference in export.MetadataReferences) - { - var fileMetadataReference = metadataReference as IMetadataFileReference; - - if (fileMetadataReference != null) - { - string path = fileMetadataReference.Path; - - paths.Add(path); - } - else - { - var roslynReference = metadataReference as IRoslynMetadataReference; - - if (roslynReference != null) - { - references.Add(roslynReference.MetadataReference); - } - } - } - } - - references.AddRange(paths.Select(CreateMetadataFileReference)); - } - private MetadataReference CreateMetadataFileReference(string path) { #if NET45 diff --git a/src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExporter.cs b/src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExporter.cs deleted file mode 100644 index bfe702cd81..0000000000 --- a/src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExporter.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Runtime.Versioning; - -namespace Microsoft.Net.Runtime -{ - [AssemblyNeutral] - public interface IDependencyExporter - { - IDependencyExport GetDependencyExport(string name, FrameworkName targetFramework); - } -} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExport.cs b/src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExport.cs similarity index 85% rename from src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExport.cs rename to src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExport.cs index 1f5aca13b4..7ccb5fcc67 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/Services/IDependencyExport.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExport.cs @@ -4,9 +4,9 @@ using System.Collections.Generic; namespace Microsoft.Net.Runtime { [AssemblyNeutral] - public interface IDependencyExport + public interface ILibraryExport { IList MetadataReferences { get; } IList SourceReferences { get; } } -} \ No newline at end of file +} diff --git a/src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExportProvider.cs b/src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExportProvider.cs new file mode 100644 index 0000000000..2fc5bcb76e --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Razor/Services/ILibraryExportProvider.cs @@ -0,0 +1,10 @@ +using System.Runtime.Versioning; + +namespace Microsoft.Net.Runtime +{ + [AssemblyNeutral] + public interface ILibraryExportProvider + { + ILibraryExport GetLibraryExport(string name, FrameworkName targetFramework); + } +} diff --git a/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataFileReference.cs b/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataFileReference.cs index ca63379413..194fcf0be6 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataFileReference.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataFileReference.cs @@ -1,8 +1,9 @@ -namespace Microsoft.Net.Runtime + +namespace Microsoft.Net.Runtime { [AssemblyNeutral] public interface IMetadataFileReference : IMetadataReference { string Path { get; } } -} \ No newline at end of file +} diff --git a/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataReference.cs b/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataReference.cs index 6f011eb3b0..851746ca4f 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataReference.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/Services/IMetadataReference.cs @@ -4,5 +4,6 @@ namespace Microsoft.Net.Runtime [AssemblyNeutral] public interface IMetadataReference { + string Name { get; } } -} \ No newline at end of file +}