diff --git a/src/Microsoft.AspNet.Mvc.Razor/Compilation/CompilationOptionsProviderExtension.cs b/src/Microsoft.AspNet.Mvc.Razor/Compilation/CompilationOptionsProviderExtension.cs
index a07015da3b..039047cfa9 100644
--- a/src/Microsoft.AspNet.Mvc.Razor/Compilation/CompilationOptionsProviderExtension.cs
+++ b/src/Microsoft.AspNet.Mvc.Razor/Compilation/CompilationOptionsProviderExtension.cs
@@ -23,10 +23,14 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
///
/// The for the executing application.
///
+ ///
+ /// The configuration name to use for compilation.
+ ///
/// The for the current application.
public static CompilationSettings GetCompilationSettings(
this ICompilerOptionsProvider compilerOptionsProvider,
- IApplicationEnvironment applicationEnvironment)
+ IApplicationEnvironment applicationEnvironment,
+ string configuration)
{
if (compilerOptionsProvider == null)
{
@@ -38,10 +42,16 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
throw new ArgumentNullException(nameof(applicationEnvironment));
}
- return compilerOptionsProvider.GetCompilerOptions(applicationEnvironment.ApplicationName,
- applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration)
- .ToCompilationSettings(applicationEnvironment.RuntimeFramework, applicationEnvironment.ApplicationBasePath);
+ if (string.IsNullOrEmpty(configuration))
+ {
+ throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(configuration));
+ }
+
+ return compilerOptionsProvider.GetCompilerOptions(
+ applicationEnvironment.ApplicationName,
+ applicationEnvironment.RuntimeFramework,
+ configuration)
+ .ToCompilationSettings(applicationEnvironment.RuntimeFramework, applicationEnvironment.ApplicationBasePath);
}
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs b/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs
index 1a9dd35d06..bacd815042 100644
--- a/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs
+++ b/src/Microsoft.AspNet.Mvc.Razor/Compilation/RoslynCompilationService.cs
@@ -39,6 +39,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
private readonly IFileProvider _fileProvider;
private readonly Lazy> _applicationReferences;
private readonly string _classPrefix;
+ private readonly string _configuration;
#if DOTNET5_5
private readonly RazorLoadContext _razorLoadContext;
@@ -69,6 +70,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
_compilerOptionsProvider = compilerOptionsProvider;
_fileProvider = optionsAccessor.Value.FileProvider;
_classPrefix = host.MainClassNamePrefix;
+ _configuration = optionsAccessor.Value.Configuration;
#if DOTNET5_5
_razorLoadContext = new RazorLoadContext();
@@ -89,7 +91,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
}
var assemblyName = Path.GetRandomFileName();
- var compilationSettings = _compilerOptionsProvider.GetCompilationSettings(_environment);
+ var compilationSettings = _compilerOptionsProvider.GetCompilationSettings(_environment, _configuration);
var syntaxTree = SyntaxTreeGenerator.Generate(
compilationContent,
assemblyName,
diff --git a/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptions.cs b/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptions.cs
index 20663aa5b8..39327befb5 100644
--- a/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptions.cs
+++ b/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptions.cs
@@ -14,6 +14,8 @@ namespace Microsoft.AspNet.Mvc.Razor
{
private IFileProvider _fileProvider;
+ private string _configuration;
+
///
/// Get a used by the .
///
@@ -42,5 +44,26 @@ namespace Microsoft.AspNet.Mvc.Razor
_fileProvider = value;
}
}
+
+ ///
+ /// Gets or sets the configuration name used by to compile razor views.
+ ///
+ ///
+ /// At startup, this is initialized to "Debug" if service is
+ /// registred and environment is development () else it is set to
+ /// "Release".
+ ///
+ public string Configuration
+ {
+ get { return _configuration; }
+ set
+ {
+ if (string.IsNullOrEmpty(value))
+ {
+ throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(value));
+ }
+ _configuration = value;
+ }
+ }
}
}
diff --git a/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptionsSetup.cs b/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptionsSetup.cs
index 59ef2e9c89..5925e1d9a3 100644
--- a/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptionsSetup.cs
+++ b/src/Microsoft.AspNet.Mvc.Razor/RazorViewEngineOptionsSetup.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNet.FileProviders;
+using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.Extensions.OptionsModel;
using Microsoft.Extensions.PlatformAbstractions;
@@ -17,16 +18,26 @@ namespace Microsoft.AspNet.Mvc
/// Initializes a new instance of .
///
/// for the application.
- public RazorViewEngineOptionsSetup(IApplicationEnvironment applicationEnvironment)
- : base(options => ConfigureRazor(options, applicationEnvironment))
+ /// for the application.
+ public RazorViewEngineOptionsSetup(IApplicationEnvironment applicationEnvironment, IHostingEnvironment hostingEnvironment)
+ : base(options => ConfigureRazor(options, applicationEnvironment, hostingEnvironment))
{
}
private static void ConfigureRazor(
RazorViewEngineOptions razorOptions,
- IApplicationEnvironment applicationEnvironment)
+ IApplicationEnvironment applicationEnvironment,
+ IHostingEnvironment hostingEnvironment)
{
razorOptions.FileProvider = new PhysicalFileProvider(applicationEnvironment.ApplicationBasePath);
+ if (hostingEnvironment.IsDevelopment())
+ {
+ razorOptions.Configuration = "Debug";
+ }
+ else
+ {
+ razorOptions.Configuration = "Release";
+ }
}
}
}
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/TestApplicationEnvironment.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/TestApplicationEnvironment.cs
index 4b83042c8d..95e2c16252 100644
--- a/test/Microsoft.AspNet.Mvc.FunctionalTests/TestApplicationEnvironment.cs
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/TestApplicationEnvironment.cs
@@ -33,14 +33,6 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
public string ApplicationBasePath { get; }
- public string Configuration
- {
- get
- {
- return _original.Configuration;
- }
- }
-
public FrameworkName RuntimeFramework
{
get
@@ -48,15 +40,5 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
return _original.RuntimeFramework;
}
}
-
- public object GetData(string name)
- {
- return _original.GetData(name);
- }
-
- public void SetData(string name, object value)
- {
- _original.SetData(name, value);
- }
}
}
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/Compilation/RoslynCompilationServiceTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/Compilation/RoslynCompilationServiceTest.cs
index 64c10a3e06..799bc4d594 100644
--- a/test/Microsoft.AspNet.Mvc.Razor.Test/Compilation/RoslynCompilationServiceTest.cs
+++ b/test/Microsoft.AspNet.Mvc.Razor.Test/Compilation/RoslynCompilationServiceTest.cs
@@ -19,6 +19,8 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
{
public class RoslynCompilationServiceTest
{
+ private const string ConfigurationName = "Release";
+
[Fact]
public void Compile_ReturnsCompilationResult()
{
@@ -33,7 +35,7 @@ public class MyTestType {}";
.Setup(p => p.GetCompilerOptions(
applicationEnvironment.ApplicationName,
applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration))
+ ConfigurationName))
.Returns(new CompilerOptions());
var mvcRazorHost = new Mock();
mvcRazorHost.SetupGet(m => m.MainClassNamePrefix)
@@ -73,7 +75,7 @@ this should fail";
.Setup(p => p.GetCompilerOptions(
applicationEnvironment.ApplicationName,
applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration))
+ ConfigurationName))
.Returns(new CompilerOptions());
var mvcRazorHost = Mock.Of();
var fileProvider = new TestFileProvider();
@@ -112,7 +114,7 @@ this should fail";
.Setup(p => p.GetCompilerOptions(
applicationEnvironment.ApplicationName,
applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration))
+ ConfigurationName))
.Returns(new CompilerOptions());
var mvcRazorHost = Mock.Of();
@@ -154,7 +156,7 @@ this should fail";
.Setup(p => p.GetCompilerOptions(
applicationEnvironment.ApplicationName,
applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration))
+ ConfigurationName))
.Returns(new CompilerOptions());
var mvcRazorHost = Mock.Of();
@@ -203,7 +205,7 @@ public class MyNonCustomDefinedClass {}
.Setup(p => p.GetCompilerOptions(
applicationEnvironment.ApplicationName,
applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration))
+ ConfigurationName))
.Returns(new CompilerOptions { Defines = new[] { "MY_CUSTOM_DEFINE" } });
var mvcRazorHost = new Mock();
mvcRazorHost.SetupGet(m => m.MainClassNamePrefix)
@@ -242,7 +244,7 @@ public class NotRazorPrefixType {}";
.Setup(p => p.GetCompilerOptions(
applicationEnvironment.ApplicationName,
applicationEnvironment.RuntimeFramework,
- applicationEnvironment.Configuration))
+ ConfigurationName))
.Returns(new CompilerOptions());
var mvcRazorHost = new Mock();
mvcRazorHost.SetupGet(m => m.MainClassNamePrefix)
@@ -397,9 +399,6 @@ public class NotRazorPrefixType {}";
applicationEnvironment
.SetupGet(a => a.RuntimeFramework)
.Returns(new FrameworkName("ASPNET", new Version(5, 0)));
- applicationEnvironment
- .SetupGet(a => a.Configuration)
- .Returns("Debug");
applicationEnvironment
.SetupGet(a => a.ApplicationBasePath)
.Returns("MyBasePath");
@@ -411,7 +410,8 @@ public class NotRazorPrefixType {}";
{
var razorViewEngineOptions = new RazorViewEngineOptions
{
- FileProvider = fileProvider ?? new TestFileProvider()
+ FileProvider = fileProvider ?? new TestFileProvider(),
+ Configuration = ConfigurationName
};
var options = new Mock>();
options
diff --git a/test/Microsoft.AspNet.Mvc.Test/MvcOptionsSetupTest.cs b/test/Microsoft.AspNet.Mvc.Test/MvcOptionsSetupTest.cs
index 660dd34e4f..fc31fbdab6 100644
--- a/test/Microsoft.AspNet.Mvc.Test/MvcOptionsSetupTest.cs
+++ b/test/Microsoft.AspNet.Mvc.Test/MvcOptionsSetupTest.cs
@@ -5,6 +5,7 @@ using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
+using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Mvc.Formatters;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.AspNet.Mvc.ModelBinding;
@@ -237,6 +238,7 @@ namespace Microsoft.AspNet.Mvc
serviceCollection.AddSingleton(Mock.Of());
serviceCollection.AddSingleton(Mock.Of());
serviceCollection.AddSingleton(Mock.Of());
+ serviceCollection.AddSingleton(Mock.Of());
var applicationEnvironment = new Mock();
// ApplicationBasePath is used to set up a PhysicalFileProvider which requires
diff --git a/test/Microsoft.AspNet.Mvc.Test/RazorViewEngineOptionsSetupTest.cs b/test/Microsoft.AspNet.Mvc.Test/RazorViewEngineOptionsSetupTest.cs
index 7bdbb4a1ac..033e0e895d 100644
--- a/test/Microsoft.AspNet.Mvc.Test/RazorViewEngineOptionsSetupTest.cs
+++ b/test/Microsoft.AspNet.Mvc.Test/RazorViewEngineOptionsSetupTest.cs
@@ -3,6 +3,7 @@
using System.IO;
using Microsoft.AspNet.FileProviders;
+using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.Extensions.PlatformAbstractions;
using Moq;
@@ -20,7 +21,10 @@ namespace Microsoft.AspNet.Mvc
var appEnv = new Mock();
appEnv.SetupGet(e => e.ApplicationBasePath)
.Returns(Directory.GetCurrentDirectory());
- var optionsSetup = new RazorViewEngineOptionsSetup(appEnv.Object);
+ var hostingEnv = new Mock();
+ hostingEnv.SetupGet(e => e.EnvironmentName)
+ .Returns("Development");
+ var optionsSetup = new RazorViewEngineOptionsSetup(appEnv.Object, hostingEnv.Object);
// Act
optionsSetup.Configure(options);
@@ -29,5 +33,28 @@ namespace Microsoft.AspNet.Mvc
Assert.NotNull(options.FileProvider);
Assert.IsType(options.FileProvider);
}
+
+ [Theory]
+ [InlineData("Development", "Debug")]
+ [InlineData("Staging", "Release")]
+ [InlineData("Production", "Release")]
+ public void RazorViewEngineOptionsSetup_SetsCorrectConfiguration(string environment, string expectedConfiguration)
+ {
+ // Arrange
+ var options = new RazorViewEngineOptions();
+ var appEnv = new Mock();
+ appEnv.SetupGet(e => e.ApplicationBasePath)
+ .Returns(Directory.GetCurrentDirectory());
+ var hostingEnv = new Mock();
+ hostingEnv.SetupGet(e => e.EnvironmentName)
+ .Returns(environment);
+ var optionsSetup = new RazorViewEngineOptionsSetup(appEnv.Object, hostingEnv.Object);
+
+ // Act
+ optionsSetup.Configure(options);
+
+ // Assert
+ Assert.Equal(expectedConfiguration, options.Configuration);
+ }
}
}
\ No newline at end of file