diff --git a/src/Components/WebAssembly/Build/src/targets/Publish.targets b/src/Components/WebAssembly/Build/src/targets/Publish.targets index 92d2cd2456..21b8639b04 100644 --- a/src/Components/WebAssembly/Build/src/targets/Publish.targets +++ b/src/Components/WebAssembly/Build/src/targets/Publish.targets @@ -9,4 +9,31 @@ true + + + + + + + + + + + + + true + PreserveNewest + web.config + + + + + diff --git a/src/Components/WebAssembly/Build/src/targets/StaticWebAssets.targets b/src/Components/WebAssembly/Build/src/targets/StaticWebAssets.targets index aef4c1a672..9c16d9dd5a 100644 --- a/src/Components/WebAssembly/Build/src/targets/StaticWebAssets.targets +++ b/src/Components/WebAssembly/Build/src/targets/StaticWebAssets.targets @@ -99,12 +99,6 @@ true - - true - PreserveNewest - web.config - - diff --git a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/Assert.cs b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/Assert.cs index c5329f644d..75c223f742 100644 --- a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/Assert.cs +++ b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/Assert.cs @@ -334,7 +334,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build return filePath; } - public static void FileCountEquals(MSBuildResult result, int expected, string directoryPath, string searchPattern) + public static void FileCountEquals(MSBuildResult result, int expected, string directoryPath, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories) { if (result == null) { @@ -355,7 +355,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build if (Directory.Exists(directoryPath)) { - var files = Directory.GetFiles(directoryPath, searchPattern, SearchOption.AllDirectories); + var files = Directory.GetFiles(directoryPath, searchPattern, searchOption); if (files.Length != expected) { throw new FileCountException(result, expected, directoryPath, searchPattern, files); diff --git a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs index faa434efb2..9697952df6 100644 --- a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs +++ b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs @@ -22,11 +22,13 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build { // Arrange using var project = ProjectDirectory.Create("standalone", additionalProjects: new [] { "razorclasslibrary", "LinkBaseToWebRoot" }); + project.Configuration = "Debug"; var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish"); Assert.BuildPassed(result); var publishDirectory = project.PublishOutputDirectory; + var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot"); Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json"); @@ -51,6 +53,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build // Verify web.config Assert.FileExists(result, publishDirectory, "web.config"); + Assert.FileCountEquals(result, 1, publishDirectory, "*", SearchOption.TopDirectoryOnly); VerifyBootManifestHashes(result, blazorPublishDirectory); VerifyServiceWorkerFiles(result, blazorPublishDirectory, @@ -59,6 +62,45 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build assetsManifestPath: "custom-service-worker-assets.js"); } + [Fact] + public async Task Publish_InRelease_Works() + { + // Arrange + using var project = ProjectDirectory.Create("standalone", additionalProjects: new [] { "razorclasslibrary", "LinkBaseToWebRoot" }); + project.Configuration = "Release"; + var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish"); + + Assert.BuildPassed(result); + + var publishDirectory = project.PublishOutputDirectory; + + var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot"); + + Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json"); + Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.webassembly.js"); + Assert.FileExists(result, blazorPublishDirectory, "_framework", "wasm", "dotnet.wasm"); + Assert.FileExists(result, blazorPublishDirectory, "_framework", "wasm", DotNetJsFileName); + Assert.FileExists(result, blazorPublishDirectory, "_framework", "_bin", "standalone.dll"); + Assert.FileExists(result, blazorPublishDirectory, "_framework", "_bin", "Microsoft.Extensions.Logging.Abstractions.dll"); // Verify dependencies are part of the output. + + // Verify referenced static web assets + Assert.FileExists(result, blazorPublishDirectory, "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js"); + Assert.FileExists(result, blazorPublishDirectory, "_content", "RazorClassLibrary", "styles.css"); + + // Verify static assets are in the publish directory + Assert.FileExists(result, blazorPublishDirectory, "index.html"); + + // Verify link item assets are in the publish directory + Assert.FileExists(result, blazorPublishDirectory, "js", "LinkedScript.js"); + var cssFile = Assert.FileExists(result, blazorPublishDirectory, "css", "app.css"); + Assert.FileContains(result, cssFile, ".publish"); + Assert.FileDoesNotExist(result, "dist", "Fake-License.txt"); + + // Verify web.config + Assert.FileExists(result, publishDirectory, "web.config"); + Assert.FileCountEquals(result, 1, publishDirectory, "*", SearchOption.TopDirectoryOnly); + } + [Fact] public async Task Publish_WithNoBuild_Works() {