Updated roslyn compilation to use new host interface.
This commit is contained in:
parent
3e049fed75
commit
e991e86863
|
|
@ -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<CompilationResult> Compile(string content)
|
||||
|
|
@ -67,76 +67,30 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
|
|||
{
|
||||
var references = new List<MetadataReference>();
|
||||
|
||||
// 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<IDependencyExport>();
|
||||
|
||||
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<IDependencyExport> exports, List<MetadataReference> references)
|
||||
{
|
||||
var paths = new HashSet<string>();
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
using System.Runtime.Versioning;
|
||||
|
||||
namespace Microsoft.Net.Runtime
|
||||
{
|
||||
[AssemblyNeutral]
|
||||
public interface IDependencyExporter
|
||||
{
|
||||
IDependencyExport GetDependencyExport(string name, FrameworkName targetFramework);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,9 @@ using System.Collections.Generic;
|
|||
namespace Microsoft.Net.Runtime
|
||||
{
|
||||
[AssemblyNeutral]
|
||||
public interface IDependencyExport
|
||||
public interface ILibraryExport
|
||||
{
|
||||
IList<IMetadataReference> MetadataReferences { get; }
|
||||
IList<ISourceReference> SourceReferences { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
using System.Runtime.Versioning;
|
||||
|
||||
namespace Microsoft.Net.Runtime
|
||||
{
|
||||
[AssemblyNeutral]
|
||||
public interface ILibraryExportProvider
|
||||
{
|
||||
ILibraryExport GetLibraryExport(string name, FrameworkName targetFramework);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
namespace Microsoft.Net.Runtime
|
||||
|
||||
namespace Microsoft.Net.Runtime
|
||||
{
|
||||
[AssemblyNeutral]
|
||||
public interface IMetadataFileReference : IMetadataReference
|
||||
{
|
||||
string Path { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,5 +4,6 @@ namespace Microsoft.Net.Runtime
|
|||
[AssemblyNeutral]
|
||||
public interface IMetadataReference
|
||||
{
|
||||
string Name { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue