Update namespace generation in RazorCompilationService to use root
relative paths.
This commit is contained in:
parent
5e32b6380c
commit
3d6740bc8a
|
|
@ -1,6 +1,6 @@
|
||||||
using System.Text;
|
using Microsoft.AspNet.Abstractions;
|
||||||
using Microsoft.AspNet.Abstractions;
|
|
||||||
using Microsoft.AspNet.Mvc;
|
using Microsoft.AspNet.Mvc;
|
||||||
|
using MvcSample.Models;
|
||||||
|
|
||||||
namespace MvcSample
|
namespace MvcSample
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
using Microsoft.AspNet.Mvc;
|
using Microsoft.AspNet.Mvc;
|
||||||
using Microsoft.Owin;
|
using MvcSample.Models;
|
||||||
|
|
||||||
namespace MvcSample
|
namespace MvcSample
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
namespace MvcSample
|
namespace MvcSample.Models
|
||||||
{
|
{
|
||||||
public class User
|
public class User
|
||||||
{
|
{
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
|
@using MvcSample.Models
|
||||||
@{
|
@{
|
||||||
Layout = "/Views/Shared/_Layout.cshtml";
|
Layout = "/Views/Shared/_Layout.cshtml";
|
||||||
ViewBag.Title = "Home Page";
|
ViewBag.Title = "Home Page";
|
||||||
|
|
@ -9,9 +9,11 @@
|
||||||
<p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
|
<p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
|
||||||
<p><a href="http://asp.net" class="btn btn-primary btn-large">Learn more »</a></p>
|
<p><a href="http://asp.net" class="btn btn-primary btn-large">Learn more »</a></p>
|
||||||
</div>
|
</div>
|
||||||
|
@{
|
||||||
|
var user = new User { Name = "Test user" };
|
||||||
|
}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h3>Hello!</h3>
|
<h3>Hello @user.Name!</h3>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<h2>Getting started</h2>
|
<h2>Getting started</h2>
|
||||||
<p>
|
<p>
|
||||||
|
|
@ -32,4 +34,3 @@
|
||||||
<p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301867">Learn more »</a></p>
|
<p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301867">Learn more »</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.FileSystems;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Razor
|
namespace Microsoft.AspNet.Mvc.Razor
|
||||||
{
|
{
|
||||||
|
|
@ -118,8 +117,6 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
|
|
||||||
return process;
|
return process;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -5,6 +5,6 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
{
|
{
|
||||||
public interface IRazorCompilationService
|
public interface IRazorCompilationService
|
||||||
{
|
{
|
||||||
Task<CompilationResult> Compile(IFileInfo fileInfo);
|
Task<CompilationResult> Compile(string appRoot, IFileInfo fileInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics.Contracts;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.FileSystems;
|
using Microsoft.AspNet.FileSystems;
|
||||||
using Microsoft.AspNet.Razor;
|
using Microsoft.AspNet.Razor;
|
||||||
|
|
@ -20,17 +20,25 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
_razorHost = razorHost;
|
_razorHost = razorHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<CompilationResult> Compile(IFileInfo file)
|
public Task<CompilationResult> Compile(string appRoot, IFileInfo file)
|
||||||
{
|
{
|
||||||
return _cache.GetOrAdd(file, () => CompileCore(file));
|
return _cache.GetOrAdd(file, () => CompileCore(appRoot, file));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<CompilationResult> CompileCore(IFileInfo file)
|
private async Task<CompilationResult> CompileCore(string appRoot, IFileInfo file)
|
||||||
{
|
{
|
||||||
GeneratorResults results;
|
GeneratorResults results;
|
||||||
using (Stream inputStream = file.CreateReadStream())
|
using (Stream inputStream = file.CreateReadStream())
|
||||||
{
|
{
|
||||||
results = _razorHost.GenerateCode(file.PhysicalPath, inputStream);
|
Contract.Assert(file.PhysicalPath.StartsWith(appRoot, StringComparison.OrdinalIgnoreCase));
|
||||||
|
// Remove the app name segment so that it appears as part of the root relative path:
|
||||||
|
// work/src/myapp/ -> work/src
|
||||||
|
// root relative path: myapp/views/home/index.cshtml
|
||||||
|
// TODO: The root namespace might be a property we'd have to read via configuration since it
|
||||||
|
// affects other things such as resx files.
|
||||||
|
appRoot = Path.GetDirectoryName(appRoot.TrimEnd(Path.DirectorySeparatorChar));
|
||||||
|
string rootRelativePath = file.PhysicalPath.Substring(appRoot.Length).TrimStart(Path.DirectorySeparatorChar);
|
||||||
|
results = _razorHost.GenerateCode(rootRelativePath, inputStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!results.Success)
|
if (!results.Success)
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,12 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
|
|
||||||
public async Task<IView> CreateInstance(string virtualPath)
|
public async Task<IView> CreateInstance(string virtualPath)
|
||||||
{
|
{
|
||||||
|
// TODO: We need to glean the approot from HttpContext
|
||||||
|
var appRoot = ((PhysicalFileSystem)_fileSystem).Root;
|
||||||
IFileInfo fileInfo;
|
IFileInfo fileInfo;
|
||||||
if (_fileSystem.TryGetFileInfo(virtualPath, out fileInfo))
|
if (_fileSystem.TryGetFileInfo(virtualPath, out fileInfo))
|
||||||
{
|
{
|
||||||
CompilationResult result = await _compilationService.Compile(fileInfo);
|
CompilationResult result = await _compilationService.Compile(appRoot, fileInfo);
|
||||||
return (IView)Activator.CreateInstance(result.CompiledType);
|
return (IView)Activator.CreateInstance(result.CompiledType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue