Change CopyToPublishDirectory on Content items instead of explicitly removing this from publish items

Fixes #2295
This commit is contained in:
Pranav K 2018-04-24 12:52:44 -07:00
parent 05c84f008a
commit a94323499b
4 changed files with 103 additions and 0 deletions

View File

@ -69,6 +69,11 @@ Copyright (c) .NET Foundation. All rights reserved.
_RazorAddDebugSymbolsProjectOutputGroupOutput
</DebugSymbolsProjectOutputGroupDependsOn>
<PrepareForBuildDependsOn>
$(PrepareForBuildDependsOn);
ResolveRazorGenerateInputs
</PrepareForBuildDependsOn>
<PrepareForRunDependsOn>
_RazorPrepareForRun;
$(PrepareForRunDependsOn)
@ -285,6 +290,8 @@ Copyright (c) .NET Foundation. All rights reserved.
<!--
Gathers input source files for code generation. This is a separate target so that we can avoid
lots of work when there are no inputs for code generation.
This target runs as part of PrepareForBuild. This gives us an opportunitity to change things like CopyToPublishDirectory
for Content items before they are processed by other Build targets.
NOTE: This target is called as part of an incremental build scenario in VS. Do not perform any work
outside of calculating RazorGenerate items in this target.
@ -305,6 +312,20 @@ Copyright (c) .NET Foundation. All rights reserved.
<ItemGroup Condition="'$(EnableDefaultRazorGenerateItems)'=='true'">
<RazorGenerate Include="@(Content)" Condition="'%(Content.Extension)'=='.cshtml'" />
</ItemGroup>
<!--
Ideally we want to able to update all Content items that also appear in RazorGenerate to have
CopyToPublishDirectory=Never. However, there isn't a simple way to do this (https://github.com/Microsoft/msbuild/issues/1618).
Instead, we'll update all cshtml Content items when EnableDefaultRazorGenerateItems=true and Razor Sdk is used for publishing.
-->
<ItemGroup Condition="
'$(EnableDefaultRazorGenerateItems)'=='true' and
'$(CopyRazorGenerateFilesToPublishDirectory)'=='false' and
'$(ResolvedRazorCompileToolset)'=='RazorSdk' and
'$(RazorCompileOnPublish)'=='true'">
<Content Condition="'%(Content.Extension)'=='.cshtml'" CopyToPublishDirectory="Never" />
</ItemGroup>
</Target>
<Target Name="AssignRazorGenerateTargetPaths" Condition="'@(RazorGenerate)' != ''">

View File

@ -27,6 +27,10 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.Views.dll");
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.Views.pdb");
// Verify assets get published
Assert.FileExists(result, PublishOutputPath, "wwwroot", "js", "SimpleMvc.js");
Assert.FileExists(result, PublishOutputPath, "wwwroot", "css", "site.css");
// 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");
@ -294,6 +298,11 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.FileExists(result, PublishOutputPath, "ClassLibrary.pdb");
Assert.FileExists(result, PublishOutputPath, "ClassLibrary.Views.dll");
Assert.FileExists(result, PublishOutputPath, "ClassLibrary.Views.pdb");
// Verify fix for https://github.com/aspnet/Razor/issues/2295. No cshtml files should be published from the app
// or the ClassLibrary.
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "refs"), "*.dll");
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "Views"), "*.cshtml");
}
[Fact]
@ -310,5 +319,40 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.FileDoesNotExist(result, OutputPath, "SimpleMvcFSharp.Views.dll");
Assert.FileDoesNotExist(result, OutputPath, "SimpleMvcFSharp.Views.pdb");
}
[Fact]
[InitializeTestProject("SimpleMvc")]
public async Task Publish_DoesNotPublishCustomRazorGenerateItems()
{
var additionalProjectContent = @"
<PropertyGroup>
<EnableDefaultRazorGenerateItems>false</EnableDefaultRazorGenerateItems>
</PropertyGroup>
<ItemGroup>
<RazorGenerate Include=""Views\_ViewImports.cshtml"" />
<RazorGenerate Include=""Views\Home\Index.cshtml"" />
</ItemGroup>
";
AddProjectFileContent(additionalProjectContent);
var result = await DotnetMSBuild("Publish");
Assert.BuildPassed(result);
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.dll");
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.pdb");
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.Views.dll");
Assert.FileExists(result, PublishOutputPath, "SimpleMvc.Views.pdb");
// Verify assets get published
Assert.FileExists(result, PublishOutputPath, "wwwroot", "js", "SimpleMvc.js");
Assert.FileExists(result, PublishOutputPath, "wwwroot", "css", "site.css");
// By default refs and .cshtml files will not be copied on publish
Assert.FileCountEquals(result, 0, Path.Combine(PublishOutputPath, "refs"), "*.dll");
// Custom RazorGenerate item does not get published
Assert.FileDoesNotExist(result, PublishOutputPath, "Views", "Home", "Home.cshtml");
// cshtml Content item that's not part of RazorGenerate gets published.
Assert.FileExists(result, PublishOutputPath, "Views", "Home", "About.cshtml");
}
}
}

View File

@ -0,0 +1,37 @@
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\
for details on configuring this project to bundle and minify static web assets. */
body {
padding-top: 50px;
padding-bottom: 20px;
}
/* Wrapping element */
/* Set some basic padding to keep content from hitting the edges */
.body-content {
padding-left: 15px;
padding-right: 15px;
}
/* Carousel */
.carousel-caption p {
font-size: 20px;
line-height: 1.4;
}
/* Make .svg files in the carousel display properly in older browsers */
.carousel-inner .item img[src$=".svg"] {
width: 100%;
}
/* QR code generator */
#qrCode {
margin: 15px;
}
/* Hide/rearrange for smaller screens */
@media screen and (max-width: 767px) {
/* Hide captions */
.carousel-caption {
display: none;
}
}

View File

@ -0,0 +1 @@
// This is a test file