Make PreserveCompilationContext=true

This commit is contained in:
Pranav K 2018-03-26 14:07:53 -07:00
parent 7c0a486bcc
commit 3f6051c9d5
3 changed files with 2 additions and 77 deletions

View File

@ -62,6 +62,8 @@ Copyright (c) .NET Foundation. All rights reserved.
Configures the file extension used for generated C# files. Configures the file extension used for generated C# files.
--> -->
<RazorGenerateOutputFileExtension>.g.cshtml.cs</RazorGenerateOutputFileExtension> <RazorGenerateOutputFileExtension>.g.cshtml.cs</RazorGenerateOutputFileExtension>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition="'$(EnableDefaultItems)' == 'true' And '$(EnableDefaultContentItems)' == 'true'"> <ItemGroup Condition="'$(EnableDefaultItems)' == 'true' And '$(EnableDefaultContentItems)' == 'true'">

View File

@ -69,11 +69,6 @@ Copyright (c) .NET Foundation. All rights reserved.
_RazorAddDebugSymbolsProjectOutputGroupOutput _RazorAddDebugSymbolsProjectOutputGroupOutput
</DebugSymbolsProjectOutputGroupDependsOn> </DebugSymbolsProjectOutputGroupDependsOn>
<PrepareForBuildDependsOn>
_InitializePreserveCompilationContext;
$(PrepareForBuildDependsOn)
</PrepareForBuildDependsOn>
</PropertyGroup> </PropertyGroup>
<!-- <!--
@ -172,13 +167,6 @@ Copyright (c) .NET Foundation. All rights reserved.
<MvcRazorCompileOnPublish Condition="'$(MvcRazorCompileOnPublish)' == ''">true</MvcRazorCompileOnPublish> <MvcRazorCompileOnPublish Condition="'$(MvcRazorCompileOnPublish)' == ''">true</MvcRazorCompileOnPublish>
</PropertyGroup> </PropertyGroup>
<PropertyGroup>
<!-- Set PreserveCompilationContext = true, if RazorCompileToolSet = PrecompilationTool since the precompilation tool requires it to work correctly.
This is an important to maintain back-compat when the Sdk is used to compile 2.0 applications.
-->
<PreserveCompilationContext Condition="'$(PreserveCompilationContext)'=='' AND '$(ResolvedRazorCompileToolset)' == 'PrecompilationTool'">true</PreserveCompilationContext>
</PropertyGroup>
<!-- <!--
Properties that configure Razor SDK, but need to be defined in targets due to evaluation order. Properties that configure Razor SDK, but need to be defined in targets due to evaluation order.
--> -->
@ -219,16 +207,6 @@ Copyright (c) .NET Foundation. All rights reserved.
<Target Name="RazorCompile" DependsOnTargets="$(RazorCompileDependsOn)"> <Target Name="RazorCompile" DependsOnTargets="$(RazorCompileDependsOn)">
</Target> </Target>
<!--
PreserveCompilationContext needs to enabled by default only for "applications" (OutputType = exe) which have one or more Razor files.
We cannot only inspect ItemGroups globally, therefore setting this must be done inside a target. We wire this up to run before Build.
-->
<Target Name="_InitializePreserveCompilationContext">
<PropertyGroup Condition="'$(PreserveCompilationContext)' == '' AND '$(OutputType)' == 'exe' AND '@(Content->AnyHaveMetadataValue('Extension', '.cshtml'))' == 'true'">
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
</Target>
<!-- <!--
Computes the applicable @(ResolvedRazorConfiguration) and @(ResolvedRazorExtension) items that match the project's Computes the applicable @(ResolvedRazorConfiguration) and @(ResolvedRazorExtension) items that match the project's
configuration. configuration.

View File

@ -255,61 +255,6 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.Contains(customDefine, dependencyContext.CompilationOptions.Defines); Assert.Contains(customDefine, dependencyContext.CompilationOptions.Defines);
} }
[Fact]
[InitializeTestProject("SimpleMvc")]
public async Task Build_WithoutViews_ProducesDepsFileWithoutCompiilationContext()
{
Directory.Delete(Path.Combine(Project.DirectoryPath, "Views"), recursive: true);
var customDefine = "RazorSdkTest";
var result = await DotnetMSBuild("Build", $"/p:DefineConstants={customDefine}");
Assert.BuildPassed(result);
Assert.FileExists(result, OutputPath, "SimpleMvc.deps.json");
var depsFilePath = Path.Combine(Project.DirectoryPath, OutputPath, "SimpleMvc.deps.json");
var dependencyContext = ReadDependencyContext(depsFilePath);
Assert.All(dependencyContext.CompileLibraries, library => Assert.Empty(library.Assemblies));
Assert.Empty(dependencyContext.CompilationOptions.Defines);
}
[Fact]
[InitializeTestProject("SimpleMvc")]
public async Task Build_WithoutViews_ProducesDepsFileWithCompiilationContext_WhenUsingPrecompilationTool()
{
Directory.Delete(Path.Combine(Project.DirectoryPath, "Views"), recursive: true);
var customDefine = "RazorSdkTest";
var result = await DotnetMSBuild("Build", $"/p:DefineConstants={customDefine} /p:MvcRazorCompileOnPublish=true");
Assert.BuildPassed(result);
Assert.FileExists(result, OutputPath, "SimpleMvc.deps.json");
var depsFilePath = Path.Combine(Project.DirectoryPath, OutputPath, "SimpleMvc.deps.json");
var dependencyContext = ReadDependencyContext(depsFilePath);
// Pick a couple of libraries and ensure they have some compile references
var packageReference = dependencyContext.CompileLibraries.First(l => l.Name == "Microsoft.AspNetCore.Html.Abstractions");
Assert.NotEmpty(packageReference.Assemblies);
var projectReference = dependencyContext.CompileLibraries.First(l => l.Name == "SimpleMvc");
Assert.NotEmpty(packageReference.Assemblies);
Assert.Contains(customDefine, dependencyContext.CompilationOptions.Defines);
}
[Fact]
[InitializeTestProject("ClassLibrary")]
public async Task Build_ClassLibrary_ProducesDepsFileWithoutCompiilationContext()
{
var result = await DotnetMSBuild("Build");
Assert.BuildPassed(result);
Assert.FileExists(result, OutputPath, "ClassLibrary.deps.json");
var depsFilePath = Path.Combine(Project.DirectoryPath, OutputPath, "ClassLibrary.deps.json");
var dependencyContext = ReadDependencyContext(depsFilePath);
Assert.All(dependencyContext.CompileLibraries, library => Assert.Empty(library.Assemblies));
Assert.Empty(dependencyContext.CompilationOptions.Defines);
}
[Fact] [Fact]
[InitializeTestProject("ClassLibrary")] [InitializeTestProject("ClassLibrary")]
public async Task Build_CodeGensAssemblyInfoUsingValuesFromProject() public async Task Build_CodeGensAssemblyInfoUsingValuesFromProject()