diff --git a/src/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets b/src/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets index 49332be01f..591d4a0f4f 100644 --- a/src/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets +++ b/src/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets @@ -185,10 +185,24 @@ Copyright (c) .NET Foundation. All rights reserved. <_RazorDebugSymbolsIntermediatePath Condition="'$(_RazorDebugSymbolsProduced)'=='true'" Include="$(IntermediateOutputPath)$(RazorTargetName).pdb" /> - - + + + + + + + + + + + + diff --git a/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIncrementalismTest.cs b/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIncrementalismTest.cs index e368095630..f6b4c7ac4e 100644 --- a/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIncrementalismTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIncrementalismTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -173,5 +174,46 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests Assert.FileExists(result, OutputPath, "ClassLibrary.Views.dll"); Assert.FileExists(result, OutputPath, "ClassLibrary.Views.pdb"); } + + [Fact] + [InitializeTestProject("ClassLibrary")] + public async Task Build_TouchesUpToDateMarkerFile() + { + var classLibraryDll = Path.Combine(IntermediateOutputPath, "ClassLibrary.dll"); + var classLibraryViewsDll = Path.Combine(IntermediateOutputPath, "ClassLibrary.Views.dll"); + var markerFile = Path.Combine(IntermediateOutputPath, "ClassLibrary.csproj.CopyComplete"); + + var result = await DotnetMSBuild("Build"); + Assert.BuildPassed(result); + + Assert.FileExists(result, classLibraryDll); + Assert.FileExists(result, classLibraryViewsDll); + Assert.FileExists(result, markerFile); + + // Gather thumbprints before incremental build. + var classLibraryThumbPrint = GetThumbPrint(classLibraryDll); + var classLibraryViewsThumbPrint = GetThumbPrint(classLibraryViewsDll); + var markerFileThumbPrint = GetThumbPrint(markerFile); + + result = await DotnetMSBuild("Build"); + Assert.BuildPassed(result); + + // Verify thumbprint file is unchanged between true incremental builds + Assert.Equal(classLibraryThumbPrint, GetThumbPrint(classLibraryDll)); + Assert.Equal(classLibraryViewsThumbPrint, GetThumbPrint(classLibraryViewsDll)); + // In practice, this should remain unchanged. However, since our tests reference + // binaries from other projects, this file gets updated by Microsoft.Common.targets + Assert.NotEqual(markerFileThumbPrint, GetThumbPrint(markerFile)); + + // Change a cshtml file and verify ClassLibrary.Views.dll and marker file are updated + File.AppendAllText(Path.Combine(Project.DirectoryPath, "Views", "_ViewImports.cshtml"), Environment.NewLine); + + result = await DotnetMSBuild("Build"); + Assert.BuildPassed(result); + + Assert.Equal(classLibraryThumbPrint, GetThumbPrint(classLibraryDll)); + Assert.NotEqual(classLibraryViewsThumbPrint, GetThumbPrint(classLibraryViewsDll)); + Assert.NotEqual(markerFileThumbPrint, GetThumbPrint(markerFile)); + } } } diff --git a/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIntrospectionTest.cs b/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIntrospectionTest.cs index a6d7eeac3e..f19401a140 100644 --- a/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIntrospectionTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Design.Test/IntegrationTests/BuildIntrospectionTest.cs @@ -18,11 +18,12 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests [InitializeTestProject("SimpleMvc")] public async Task RazorSdk_AddsCshtmlFilesToUpToDateCheckInput() { - var result = await DotnetMSBuild("_IntrospectUpToDateCheckInput"); + var result = await DotnetMSBuild("_IntrospectUpToDateCheck"); Assert.BuildPassed(result); Assert.BuildOutputContainsLine(result, $"UpToDateCheckInput: {Path.Combine("Views", "Home", "Index.cshtml")}"); Assert.BuildOutputContainsLine(result, $"UpToDateCheckInput: {Path.Combine("Views", "_ViewStart.cshtml")}"); + Assert.BuildOutputContainsLine(result, $"UpToDateCheckBuilt: {Path.Combine(IntermediateOutputPath, "SimpleMvc.Views.dll")}"); } [Fact] diff --git a/test/testapps/RazorTest.Introspection.targets b/test/testapps/RazorTest.Introspection.targets index 03c94f9c44..a22622b0d6 100644 --- a/test/testapps/RazorTest.Introspection.targets +++ b/test/testapps/RazorTest.Introspection.targets @@ -7,8 +7,11 @@ - + + + +