Add support for MvcPrecompilation settings (#1956)
* Add support for MvcPrecompilation settings Adds support to the Razor SDK for various legacy features of the MVC Precompilation tool. - MvcRazorCompileOnPublish - MvcRazorExcludeViewFilesFromPublish - MvcRazorExcludeRefAssembliesFromPublish - MvcRazorOutputPath - MvcRazorEmbedViewSources - MvcRazorFilesToCompile
This commit is contained in:
parent
b9db1ac7c8
commit
2d87bdf565
|
|
@ -96,8 +96,8 @@
|
||||||
Condition="'@(RazorGenerate)'!= ''">
|
Condition="'@(RazorGenerate)'!= ''">
|
||||||
|
|
||||||
<RemoveDir
|
<RemoveDir
|
||||||
Directories="$(RazorGenerateOutputPath)"
|
Directories="$(RazorGenerateIntermediateOutputPath)"
|
||||||
Condition = "Exists('$(RazorGenerateOutputPath)')"/>
|
Condition = "Exists('$(RazorGenerateIntermediateOutputPath)')"/>
|
||||||
|
|
||||||
<MakeDir
|
<MakeDir
|
||||||
Directories="%(_RazorGenerateOutput.RelativeDir)"
|
Directories="%(_RazorGenerateOutput.RelativeDir)"
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
Sources="@(RazorGenerate)"
|
Sources="@(RazorGenerate)"
|
||||||
ProjectRoot="$(MSBuildProjectDirectory)"
|
ProjectRoot="$(MSBuildProjectDirectory)"
|
||||||
TagHelperManifest="$(_RazorTagHelperOutputCache)"
|
TagHelperManifest="$(_RazorTagHelperOutputCache)"
|
||||||
OutputPath="$(RazorGenerateOutputPath)" />
|
OutputPath="$(RazorGenerateIntermediateOutputPath)" />
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<FileWrites Include="@(_RazorGenerateOutput)" />
|
<FileWrites Include="@(_RazorGenerateOutput)" />
|
||||||
|
|
@ -120,6 +120,18 @@
|
||||||
<Target Name="_ResolveGeneratedRazorCompileInputs" BeforeTargets="ResolveRazorCompileInputs">
|
<Target Name="_ResolveGeneratedRazorCompileInputs" BeforeTargets="ResolveRazorCompileInputs">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<RazorCompile Include="@(_RazorGenerateOutput)" />
|
<RazorCompile Include="@(_RazorGenerateOutput)" />
|
||||||
|
<RazorEmbeddedResource Include="@(RazorGenerate)" Condition="$(EmbedRazorGenerateSources)">
|
||||||
|
<LogicalName>/$([System.String]::Copy('%(Identity)').Replace('\','/'))</LogicalName>
|
||||||
|
<Type>Non-Resx</Type>
|
||||||
|
<WithCulture>false</WithCulture>
|
||||||
|
</RazorEmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Similar to _GenerateCompileInputs -->
|
||||||
|
<ItemGroup>
|
||||||
|
<_RazorCoreCompileResourceInputs
|
||||||
|
Include="@(RazorEmbeddedResource)"
|
||||||
|
Condition="'%(RazorEmbeddedResource.WithCulture)'=='false' and '%(RazorEmbeddedResource.Type)'=='Non-Resx' " />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,13 @@
|
||||||
Replace @(_DebugSymbolsIntermediatePath) with @(_RazorDebugSymbolsIntermediatePath)
|
Replace @(_DebugSymbolsIntermediatePath) with @(_RazorDebugSymbolsIntermediatePath)
|
||||||
Replace @(IntermediateAssembly) with @(RazorIntermediateAssembly)
|
Replace @(IntermediateAssembly) with @(RazorIntermediateAssembly)
|
||||||
Replace @(ReferencePathWithRefAssemblies) with @(RazorReferencePath)
|
Replace @(ReferencePathWithRefAssemblies) with @(RazorReferencePath)
|
||||||
|
Remove @(_CoreCompileResourceInputs) with @(_RazorCoreCompileResourceInputs)
|
||||||
|
|
||||||
Set TargetType="$(OutputType)" to TargetType="Library" - Razor is always a .dll
|
Set TargetType="$(OutputType)" to TargetType="Library" - Razor is always a .dll
|
||||||
|
|
||||||
Remove Returns="@(CscCommandLineArgs)"
|
Remove Returns="@(CscCommandLineArgs)"
|
||||||
Remove @(_CoreCompileResourceInputs)
|
|
||||||
|
Remove @(EmbeddedFiles)
|
||||||
Remove $(ApplicationIcon) $(Win32Resource) $(Win32Manifest)
|
Remove $(ApplicationIcon) $(Win32Resource) $(Win32Manifest)
|
||||||
Remove @(EmbeddedDocumentation) and @(EmbeddedFiles)
|
Remove @(EmbeddedDocumentation) and @(EmbeddedFiles)
|
||||||
Remove @(CustomAdditionalCompileInputs) and @(CustomAdditionalCompileOutputs)
|
Remove @(CustomAdditionalCompileInputs) and @(CustomAdditionalCompileOutputs)
|
||||||
|
|
@ -43,7 +45,8 @@
|
||||||
@(CompiledLicenseFile);
|
@(CompiledLicenseFile);
|
||||||
@(LinkResource);
|
@(LinkResource);
|
||||||
$(ResolvedCodeAnalysisRuleSet);
|
$(ResolvedCodeAnalysisRuleSet);
|
||||||
@(AdditionalFiles)"
|
@(AdditionalFiles);
|
||||||
|
@(_RazorCoreCompileResourceInputs)"
|
||||||
Outputs="@(RazorIntermediateAssembly);
|
Outputs="@(RazorIntermediateAssembly);
|
||||||
@(_RazorDebugSymbolsIntermediatePath);
|
@(_RazorDebugSymbolsIntermediatePath);
|
||||||
$(NonExistentFile)"
|
$(NonExistentFile)"
|
||||||
|
|
@ -134,7 +137,7 @@
|
||||||
ProvideCommandLineArgs="$(ProvideCommandLineArgs)"
|
ProvideCommandLineArgs="$(ProvideCommandLineArgs)"
|
||||||
References="@(RazorReferencePath)"
|
References="@(RazorReferencePath)"
|
||||||
ReportAnalyzer="$(ReportAnalyzer)"
|
ReportAnalyzer="$(ReportAnalyzer)"
|
||||||
Resources="@(CompiledLicenseFile)"
|
Resources="@(_RazorCoreCompileResourceInputs);@(CompiledLicenseFile)"
|
||||||
ResponseFiles="$(CompilerResponseFile)"
|
ResponseFiles="$(CompilerResponseFile)"
|
||||||
RuntimeMetadataVersion="$(RuntimeMetadataVersion)"
|
RuntimeMetadataVersion="$(RuntimeMetadataVersion)"
|
||||||
SharedCompilationId="$(SharedCompilationId)"
|
SharedCompilationId="$(SharedCompilationId)"
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,32 @@
|
||||||
Properties and tasks supporting Razor MSBuild integration
|
Properties and tasks supporting Razor MSBuild integration
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default properties for common Razor SDK behavior.
|
||||||
|
-->
|
||||||
|
<PropertyGroup>
|
||||||
|
<!--
|
||||||
|
Set to true to automatically include Razor (.cshtml) files in @(RazorGenerate) from @(Content).
|
||||||
|
-->
|
||||||
|
<EnableDefaultRazorGenerateItems Condition="'$(EnableDefaultRazorGenerateItems)'==''">true</EnableDefaultRazorGenerateItems>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Set to true to copy RazorGenerate items (.cshtml) to the publish directory.
|
||||||
|
|
||||||
|
Typically Razor files are not needed for a published application if they participate in compilation at build-time
|
||||||
|
or publish-time. By default, the Razor SDK will suppress the copying of RazorGenerate items to the publish directory.
|
||||||
|
-->
|
||||||
|
<CopyRazorGenerateFilesToPublishDirectory Condition="'$(CopyRazorGenerateFilesToPublishDirectory)'==''">false</CopyRazorGenerateFilesToPublishDirectory>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Set to true to copy reference assembly items to the publish directory.
|
||||||
|
|
||||||
|
Typically reference assemblies are not needed for a published application if Razor compilation occurs at build-time
|
||||||
|
or publish-time. By default, the Razor SDK will suppress the copying of reference assemblies to the publish directory.
|
||||||
|
-->
|
||||||
|
<CopyRefAssembliesToPublishDirectory Condition="'$(CopyRefAssembliesToPublishDirectory)'==''">false</CopyRefAssembliesToPublishDirectory>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Razor also attaches itself by default to some of the standard .NET targets. Uses these properties to
|
Razor also attaches itself by default to some of the standard .NET targets. Uses these properties to
|
||||||
configure this behaviour.
|
configure this behaviour.
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,7 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This is a hook to import a set of targets before the Razor targets. By default this is used by MvcPrecompilation
|
This is a hook to import a set of targets before the Razor targets. By default this is unused.
|
||||||
so that we can interop between the 2.0 feature set and the 2.1+ features.
|
|
||||||
-->
|
-->
|
||||||
<Import Project="$(CustomBeforeRazorSdkTargets)" Condition="'$(CustomBeforeRazorSdkTargets)' != '' and Exists('$(CustomBeforeRazorSdkTargets)')"/>
|
<Import Project="$(CustomBeforeRazorSdkTargets)" Condition="'$(CustomBeforeRazorSdkTargets)' != '' and Exists('$(CustomBeforeRazorSdkTargets)')"/>
|
||||||
|
|
||||||
|
|
@ -42,45 +41,64 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Default values for properties that affect Razor MSBuild behavior.
|
Default values for properties that affect Razor targets to the standard build lifecycle.
|
||||||
|
-->
|
||||||
|
<PropertyGroup Condition="'$(RazorCompileOnBuild)'==''">
|
||||||
|
<RazorCompileOnBuild>false</RazorCompileOnBuild>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(RazorCompileOnPublish)'==''">
|
||||||
|
<!-- Always compile on publish by default if we're compiling on build -->
|
||||||
|
<RazorCompileOnPublish Condition="'$(RazorCompileOnBuild)'=='true'">true</RazorCompileOnPublish>
|
||||||
|
|
||||||
|
<!-- Compatibility with the old MVC Precompilation setting -->
|
||||||
|
<RazorCompileOnPublish Condition="'$(RazorCompileOnPublish)'==''">$(MvcRazorCompileOnPublish)</RazorCompileOnPublish>
|
||||||
|
|
||||||
|
<!-- Default to on if MvcRazorCompileOnPublish isn't set for some reason -->
|
||||||
|
<RazorCompileOnPublish Condition="'$(RazorCompileOnPublish)'==''">true</RazorCompileOnPublish>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Properties that configure Razor SDK, but need to be defined in targets due to evaluation order.
|
||||||
-->
|
-->
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<!--
|
|
||||||
Razor also attaches itself by default to some of the standard .NET targets. Uses these properties to
|
|
||||||
configure this behaviour.
|
|
||||||
-->
|
|
||||||
<RazorCompileOnBuild Condition="'$(RazorCompileOnBuild)'==''">false</RazorCompileOnBuild>
|
|
||||||
<RazorCompileOnPublish Condition="'$(RazorCompileOnPublish)'==''">true</RazorCompileOnPublish>
|
|
||||||
|
|
||||||
<!-- Output directory used for generated files -->
|
<!-- Output directory used for generated files -->
|
||||||
<RazorGenerateOutputPath Condition="'$(RazorGenerateOutputPath)'==''">$(IntermediateOutputPath)Razor\</RazorGenerateOutputPath>
|
<RazorGenerateIntermediateOutputPath Condition="'$(RazorGenerateIntermediateOutputPath)'==''">$(IntermediateOutputPath)Razor\</RazorGenerateIntermediateOutputPath>
|
||||||
|
|
||||||
<!-- File name (without extension) of the assembly produced by Razor -->
|
<!-- File name (without extension) of the assembly produced by Razor -->
|
||||||
<RazorTargetName Condition="'$(RazorTargetName)'==''">$(TargetName).PrecompiledViews</RazorTargetName>
|
<RazorTargetName Condition="'$(RazorTargetName)'==''">$(TargetName).PrecompiledViews</RazorTargetName>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Set to true to copy RazorGenerate items to the publish directory (.cshtml) files.
|
The compatibility zone - these properties were provided by the MVC Precompilation tool and they
|
||||||
|
map to supported settings in Razor SDK.
|
||||||
|
|
||||||
Typically Razor files are not needed for a published application if they participate in compilation at build-time
|
We want to set the defaults for these in the .props file, but we need to process the old settings here
|
||||||
or publish-time. By default, the Razor SDK will suppress the copying of RazorGenerate items to the publish directory.
|
in case they were set in the project file. The consequence of this is that the old settings will override
|
||||||
|
the new ones if they are set to conflicting values.
|
||||||
-->
|
-->
|
||||||
<CopyRazorGenerateFilesToPublishDirectory Condition="'$(CopyRazorGenerateFilesToPublishDirectory)'==''">false</CopyRazorGenerateFilesToPublishDirectory>
|
<CopyRazorGenerateFilesToPublishDirectory Condition="'$(MvcRazorExcludeViewFilesFromPublish)'=='true'">false</CopyRazorGenerateFilesToPublishDirectory>
|
||||||
|
<CopyRazorGenerateFilesToPublishDirectory Condition="'$(MvcRazorExcludeViewFilesFromPublish)'=='false'">true</CopyRazorGenerateFilesToPublishDirectory>
|
||||||
|
|
||||||
|
<CopyRefAssembliesToPublishDirectory Condition="'$(MvcRazorExcludeRefAssembliesFromPublish)'=='true'">false</CopyRefAssembliesToPublishDirectory>
|
||||||
|
<CopyRefAssembliesToPublishDirectory Condition="'$(MvcRazorExcludeRefAssembliesFromPublish)'=='false'">true</CopyRefAssembliesToPublishDirectory>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Set to true to copy reference assembly items to the publish directory (.cshtml) files.
|
We can't set the actual default value here due to evaluation order (depends on $(OutDir)).
|
||||||
|
|
||||||
Typically reference assemblies are not needed for a published application if Razor compilation occurs at build-time
|
This handles a compatibility case with MVC Precompilation.
|
||||||
or publish-time. By default, the Razor SDK will suppress the copying of reference assemblies to the publish directory.
|
|
||||||
-->
|
-->
|
||||||
<CopyRefAssembliesToPublishDirectory Condition="'$(CopyRefAssembliesToPublishDirectory)'==''">false</CopyRefAssembliesToPublishDirectory>
|
<RazorOutputPath Condition="'$(MvcRazorOutputPath)'!=''">$([MSBuild]::EnsureTrailingSlash('$(MvcRazorOutputPath)'))</RazorOutputPath>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Configures whether all of the @(RazorGenerate) items will be added as embedded files to the produced assembly.
|
||||||
|
|
||||||
|
When true, everything in @(RazorGenerate) will be added to @(RazorEmbeddedFiles) and passed to CSC.
|
||||||
|
-->
|
||||||
|
<EmbedRazorGenerateSources Condition="'$(MvcRazorEmbedViewSources)'!=''">$(MvcRazorEmbedViewSources)</EmbedRazorGenerateSources>
|
||||||
|
<EmbedRazorGenerateSources Condition="'$(EmbedRazorGenerateSources)'==''">false</EmbedRazorGenerateSources>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<!-- Used to creating the final compiled Razor dll -->
|
|
||||||
<RazorIntermediateAssembly Include="$(IntermediateOutputPath)$(RazorTargetName).dll" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<!-- Implementation details here... -->
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<!-- Similar to https://github.com/Microsoft/msbuild/blob/908cc9ccd4961441628f68e37a148183a87bb067/src/Tasks/Microsoft.Common.CurrentVersion.targets#L146-L153 -->
|
<!-- Similar to https://github.com/Microsoft/msbuild/blob/908cc9ccd4961441628f68e37a148183a87bb067/src/Tasks/Microsoft.Common.CurrentVersion.targets#L146-L153 -->
|
||||||
<_RazorDebugSymbolsProduced>false</_RazorDebugSymbolsProduced>
|
<_RazorDebugSymbolsProduced>false</_RazorDebugSymbolsProduced>
|
||||||
|
|
@ -92,10 +110,14 @@
|
||||||
<_RazorDebugSymbolsProduced Condition="'$(DebugType)'=='embedded'">false</_RazorDebugSymbolsProduced>
|
<_RazorDebugSymbolsProduced Condition="'$(DebugType)'=='embedded'">false</_RazorDebugSymbolsProduced>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Properties that configure Razor SDK, but need to be defined in targets due to evaluation order.
|
||||||
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<!-- These are also referenced in .Compilation.targets - don't just casually change these -->
|
<!-- Used to creating the final compiled Razor dll -->
|
||||||
|
<RazorIntermediateAssembly Condition="'$(RazorIntermediateAssembly)'==''" Include="$(IntermediateOutputPath)$(RazorTargetName).dll" />
|
||||||
|
<!-- Used in Compilation.targets -->
|
||||||
<_RazorDebugSymbolsIntermediatePath Condition="'$(_RazorDebugSymbolsProduced)'=='true'" Include="$(IntermediateOutputPath)$(RazorTargetName).pdb" />
|
<_RazorDebugSymbolsIntermediatePath Condition="'$(_RazorDebugSymbolsProduced)'=='true'" Include="$(IntermediateOutputPath)$(RazorTargetName).pdb" />
|
||||||
<_RazorDebugSymbolsOutputPath Include="@(_RazorDebugSymbolsIntermediatePath->'$(OutDir)%(Filename)%(Extension)')" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
@ -129,9 +151,25 @@
|
||||||
lots of work when there are no inputs for code generation.
|
lots of work when there are no inputs for code generation.
|
||||||
-->
|
-->
|
||||||
<Target Name="ResolveRazorGenerateInputs">
|
<Target Name="ResolveRazorGenerateInputs">
|
||||||
|
<!--
|
||||||
|
In MVC Precompilation MvcRazorFilesToCompile also had the effect of suppressing the default
|
||||||
|
items for Razor code generation. As with all of these MVC Precompilation back-compat settings,
|
||||||
|
using the old thing, overrides the new thing.
|
||||||
|
-->
|
||||||
|
<PropertyGroup Condition="'@(MvcRazorFilesToCompile)'!=''">
|
||||||
|
<EnableDefaultRazorGenerateItems>false</EnableDefaultRazorGenerateItems>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<RazorGenerate Include="@(Content)" Condition="'%(Content.Extension)'=='.cshtml'">
|
<RazorGenerate Include="@(MvcRazorFilesToCompile)" />
|
||||||
<GeneratedOutput>$(RazorGenerateOutputPath)%(RelativeDir)%(Filename).cs</GeneratedOutput>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(EnableDefaultRazorGenerateItems)'=='true'">
|
||||||
|
<RazorGenerate Include="@(Content)" Condition="'%(Content.Extension)'=='.cshtml'" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<RazorGenerate Update="@(RazorGenerate)" Condtion="'%(RazorGenerate.GeneratedOutput)'==''">
|
||||||
|
<GeneratedOutput>$(RazorGenerateIntermediateOutputPath)%(RelativeDir)%(Filename).cs</GeneratedOutput>
|
||||||
</RazorGenerate>
|
</RazorGenerate>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
@ -177,8 +215,12 @@
|
||||||
BeforeTargets="BuiltProjectOutputGroup"
|
BeforeTargets="BuiltProjectOutputGroup"
|
||||||
Condition="'$(ResolvedRazorCompileToolset)'=='RazorSdk' and '$(RazorCompileOnBuild)'=='true'">
|
Condition="'$(ResolvedRazorCompileToolset)'=='RazorSdk' and '$(RazorCompileOnBuild)'=='true'">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<RazorOutputPath Condition="'$(RazorOutputPath)'==''">$([MSBuild]::EnsureTrailingSlash('$(OutDir)'))</RazorOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'@(RazorGenerate)'!= ''">
|
<ItemGroup Condition="'@(RazorGenerate)'!= ''">
|
||||||
<BuiltProjectOutputGroupOutput Include="@(RazorIntermediateAssembly)" FinalOutputPath="$(Outdir)$(RazorTargetName).dll" />
|
<BuiltProjectOutputGroupOutput Include="@(RazorIntermediateAssembly)" FinalOutputPath="$(RazorOutputPath)$(RazorTargetName).dll" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Target>
|
</Target>
|
||||||
|
|
@ -250,10 +292,14 @@
|
||||||
AfterTargets="CopyFilesToOutputDirectory"
|
AfterTargets="CopyFilesToOutputDirectory"
|
||||||
Condition="'$(ResolvedRazorCompileToolset)'=='RazorSdk' and '$(RazorCompileOnBuild)'=='true'">
|
Condition="'$(ResolvedRazorCompileToolset)'=='RazorSdk' and '$(RazorCompileOnBuild)'=='true'">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<RazorOutputPath Condition="'$(RazorOutputPath)'==''">$([MSBuild]::EnsureTrailingSlash('$(OutDir)'))</RazorOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<!-- Copy the Razor dll -->
|
<!-- Copy the Razor dll -->
|
||||||
<Copy
|
<Copy
|
||||||
SourceFiles="@(RazorIntermediateAssembly)"
|
SourceFiles="@(RazorIntermediateAssembly)"
|
||||||
DestinationFolder="$(OutDir)"
|
DestinationFolder="$(RazorOutputPath)"
|
||||||
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
|
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
|
||||||
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
|
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
|
||||||
Retries="$(CopyRetryCount)"
|
Retries="$(CopyRetryCount)"
|
||||||
|
|
@ -274,7 +320,7 @@
|
||||||
<!-- Copy the Razor debug information file (.pdb), if any -->
|
<!-- Copy the Razor debug information file (.pdb), if any -->
|
||||||
<Copy
|
<Copy
|
||||||
SourceFiles="@(_RazorDebugSymbolsIntermediatePath)"
|
SourceFiles="@(_RazorDebugSymbolsIntermediatePath)"
|
||||||
DestinationFiles="@(_RazorDebugSymbolsOutputPath)"
|
DestinationFolder="$(RazorOutputPath)"
|
||||||
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
|
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
|
||||||
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
|
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
|
||||||
Retries="$(CopyRetryCount)"
|
Retries="$(CopyRetryCount)"
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,38 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
|
||||||
Assert.FileExists(result, IntermediateOutputPath, "SimplePages.PrecompiledViews.dll");
|
Assert.FileExists(result, IntermediateOutputPath, "SimplePages.PrecompiledViews.dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task Build_RazorOutputPath_SetToNonDefault()
|
||||||
|
{
|
||||||
|
var customOutputPath = Path.Combine("bin", Configuration, TargetFramework, "Razor");
|
||||||
|
var result = await DotnetMSBuild("Build", $"/p:RazorCompileOnBuild=true /p:RazorOutputPath={customOutputPath}");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
|
||||||
|
Assert.FileExists(result, customOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileExists(result, customOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task Build_MvcRazorOutputPath_SetToNonDefault()
|
||||||
|
{
|
||||||
|
var customOutputPath = Path.Combine("bin", Configuration, TargetFramework, "Razor");
|
||||||
|
var result = await DotnetMSBuild("Build", $"/p:RazorCompileOnBuild=true /p:MvcRazorOutputPath={customOutputPath}");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
|
||||||
|
Assert.FileExists(result, customOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileExists(result, customOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
[InitializeTestProject("SimpleMvc")]
|
[InitializeTestProject("SimpleMvc")]
|
||||||
public async Task Build_SkipsCopyingBinariesToOutputDirectory_IfCopyBuildOutputToOutputDirectory_IsUnset()
|
public async Task Build_SkipsCopyingBinariesToOutputDirectory_IfCopyBuildOutputToOutputDirectory_IsUnset()
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,27 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
|
||||||
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
|
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task Publish_WithMvcRazorCompileOnPublish_PublishesAssembly()
|
||||||
|
{
|
||||||
|
var result = await DotnetMSBuild("Publish", "/p:MvcRazorCompileOnPublish=true");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileDoesNotExist(result, OutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileDoesNotExist(result, OutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.dll");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.pdb");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
|
||||||
|
// By default refs and .cshtml files will not be copied on publish
|
||||||
|
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "refs"), "*.dll");
|
||||||
|
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
[InitializeTestProject("SimpleMvc")]
|
[InitializeTestProject("SimpleMvc")]
|
||||||
public async Task Publish_NoopsWithNoFiles()
|
public async Task Publish_NoopsWithNoFiles()
|
||||||
|
|
@ -91,6 +112,21 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
|
||||||
Assert.FileDoesNotExist(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
Assert.FileDoesNotExist(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task Publish_NoopsWithMvcRazorCompileOnPublish_False()
|
||||||
|
{
|
||||||
|
var result = await DotnetMSBuild("Publish", "/p:MvcRazorCompileOnPublish=false");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
// Everything we do should noop - including building the app.
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.dll");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.pdb");
|
||||||
|
Assert.FileDoesNotExist(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileDoesNotExist(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
[InitializeTestProject("SimpleMvc")]
|
[InitializeTestProject("SimpleMvc")]
|
||||||
public async Task Publish_NoopsWith_RazorCompileOnPublishFalse()
|
public async Task Publish_NoopsWith_RazorCompileOnPublishFalse()
|
||||||
|
|
@ -174,6 +210,27 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
|
||||||
Assert.FileCountEquals(result, 8, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
|
Assert.FileCountEquals(result, 8, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact] // Tests old MvcPrecompilation behavior that we support for compat.
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task Publish_MvcRazorExcludeFilesFromPublish_False_CopiesFiles()
|
||||||
|
{
|
||||||
|
var result = await DotnetMSBuild("Publish", "/p:RazorCompileOnPublish=true /p:MvcRazorExcludeViewFilesFromPublish=false /p:MvcRazorExcludeRefAssembliesFromPublish=false");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileDoesNotExist(result, OutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileDoesNotExist(result, OutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.dll");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.pdb");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
|
|
||||||
|
// By default refs and .cshtml files will not be copied on publish
|
||||||
|
Assert.FileExists(result, PublishOutputPath, "refs", "mscorlib.dll");
|
||||||
|
Assert.FileCountEquals(result, 8, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
[InitializeTestProject("AppWithP2PReference", "ClassLibrary")]
|
[InitializeTestProject("AppWithP2PReference", "ClassLibrary")]
|
||||||
public async Task Publish_WithP2P_AndRazorCompileOnBuild_CopiesRazorAssembly()
|
public async Task Publish_WithP2P_AndRazorCompileOnBuild_CopiesRazorAssembly()
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -40,5 +42,68 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
|
||||||
Assert.FileDoesNotExist(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
Assert.FileDoesNotExist(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
Assert.FileDoesNotExist(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
Assert.FileDoesNotExist(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.pdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task RazorCompile_EmbedRazorGenerateSources_EmbedsCshtmlFiles()
|
||||||
|
{
|
||||||
|
var result = await DotnetMSBuild("RazorCompile", "/p:EmbedRazorGenerateSources=true");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
|
||||||
|
var assembly = LoadAssemblyFromBytes(result.Project.DirectoryPath, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
var resources = assembly.GetManifestResourceNames();
|
||||||
|
|
||||||
|
Assert.Equal(new string[]
|
||||||
|
{
|
||||||
|
"/Views/_ViewImports.cshtml",
|
||||||
|
"/Views/_ViewStart.cshtml",
|
||||||
|
"/Views/Home/About.cshtml",
|
||||||
|
"/Views/Home/Contact.cshtml",
|
||||||
|
"/Views/Home/Index.cshtml",
|
||||||
|
"/Views/Shared/_Layout.cshtml",
|
||||||
|
"/Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
"/Views/Shared/Error.cshtml",
|
||||||
|
},
|
||||||
|
resources.OrderBy(r => r));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task RazorCompile_MvcRazorEmbedViewSources_EmbedsCshtmlFiles()
|
||||||
|
{
|
||||||
|
var result = await DotnetMSBuild("RazorCompile", "/p:EmbedRazorGenerateSources=true");
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
|
||||||
|
var assembly = LoadAssemblyFromBytes(result.Project.DirectoryPath, IntermediateOutputPath, "SimpleMvc.PrecompiledViews.dll");
|
||||||
|
var resources = assembly.GetManifestResourceNames();
|
||||||
|
|
||||||
|
Assert.Equal(new string[]
|
||||||
|
{
|
||||||
|
"/Views/_ViewImports.cshtml",
|
||||||
|
"/Views/_ViewStart.cshtml",
|
||||||
|
"/Views/Home/About.cshtml",
|
||||||
|
"/Views/Home/Contact.cshtml",
|
||||||
|
"/Views/Home/Index.cshtml",
|
||||||
|
"/Views/Shared/_Layout.cshtml",
|
||||||
|
"/Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
"/Views/Shared/Error.cshtml",
|
||||||
|
},
|
||||||
|
resources.OrderBy(r => r));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Assembly LoadAssemblyFromBytes(params string[] paths)
|
||||||
|
{
|
||||||
|
// We need to load the assembly from bytes to load it without locking the file - and yes, we need to
|
||||||
|
// load the pdb too, or else the CLR will load/lock it based on the path specified in the assembly.
|
||||||
|
var assemblyBytes = File.ReadAllBytes(Path.Combine(paths));
|
||||||
|
var symbolBytes = File.ReadAllBytes(Path.ChangeExtension(Path.Combine(paths), ".pdb"));
|
||||||
|
return Assembly.Load(assemblyBytes, symbolBytes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -200,5 +200,52 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
|
||||||
|
|
||||||
Assert.FileCountEquals(result, 0, RazorIntermediateOutputPath, "*.cs");
|
Assert.FileCountEquals(result, 0, RazorIntermediateOutputPath, "*.cs");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task RazorGenerate_MvcRazorFilesToCompile_OverridesDefaultItems()
|
||||||
|
{
|
||||||
|
var content = @"
|
||||||
|
<Project>
|
||||||
|
<Import Project=""$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))"" />
|
||||||
|
<ItemGroup>
|
||||||
|
<MvcRazorFilesToCompile Include=""Views/Home/About.cshtml"" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
|
";
|
||||||
|
File.WriteAllText(Path.Combine(Project.DirectoryPath, "Directory.Build.props"), content);
|
||||||
|
|
||||||
|
var result = await DotnetMSBuild(RazorGenerateTarget);
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileExists(result, RazorIntermediateOutputPath, "Views", "Home", "About.cs");
|
||||||
|
Assert.FileCountEquals(result, 1, RazorIntermediateOutputPath, "*.cs");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[InitializeTestProject("SimpleMvc")]
|
||||||
|
public async Task RazorGenerate_EnableDefaultRazorGenerateItems_False_OverridesDefaultItems()
|
||||||
|
{
|
||||||
|
var content = @"
|
||||||
|
<Project>
|
||||||
|
<Import Project=""$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))"" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<EnableDefaultRazorGenerateItems>false</EnableDefaultRazorGenerateItems>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<RazorGenerate Include=""Views/Home/About.cshtml"" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
|
";
|
||||||
|
File.WriteAllText(Path.Combine(Project.DirectoryPath, "Directory.Build.props"), content);
|
||||||
|
|
||||||
|
var result = await DotnetMSBuild(RazorGenerateTarget);
|
||||||
|
|
||||||
|
Assert.BuildPassed(result);
|
||||||
|
|
||||||
|
Assert.FileExists(result, RazorIntermediateOutputPath, "Views", "Home", "About.cs");
|
||||||
|
Assert.FileCountEquals(result, 1, RazorIntermediateOutputPath, "*.cs");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue