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()
{