diff --git a/src/Components/WebAssembly/Build/src/targets/Publish.targets b/src/Components/WebAssembly/Build/src/targets/Publish.targets
index 21b8639b04..feb3524e1f 100644
--- a/src/Components/WebAssembly/Build/src/targets/Publish.targets
+++ b/src/Components/WebAssembly/Build/src/targets/Publish.targets
@@ -15,25 +15,31 @@
Condition="'$(BlazorPrunePublishOutput)' != 'false'">
-
+
+ Condition="$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').EndsWith('dll'))"/>
+
+
+
+
+
-
-
-
- true
- PreserveNewest
- web.config
-
-
-
+ AfterTargets="CopyFilesToPublishDirectory"
+ Condition="!Exists('$(PublishDir)web.config')">
+
diff --git a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs
index 9697952df6..cd905e7d52 100644
--- a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs
+++ b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs
@@ -101,6 +101,29 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build
Assert.FileCountEquals(result, 1, publishDirectory, "*", SearchOption.TopDirectoryOnly);
}
+ [Fact]
+ public async Task Publish_WithExistingWebConfig_Works()
+ {
+ // Arrange
+ using var project = ProjectDirectory.Create("standalone", additionalProjects: new[] { "razorclasslibrary", "LinkBaseToWebRoot" });
+ project.Configuration = "Release";
+
+ var webConfigContents = "test webconfig contents";
+ AddFileToProject(project, "web.config", webConfigContents);
+
+ var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
+
+ Assert.BuildPassed(result);
+
+ var publishDirectory = project.PublishOutputDirectory;
+
+ var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
+
+ // Verify web.config
+ Assert.FileExists(result, publishDirectory, "web.config");
+ Assert.FileContains(result, Path.Combine(publishDirectory, "web.config"), webConfigContents);
+ }
+
[Fact]
public async Task Publish_WithNoBuild_Works()
{
@@ -392,6 +415,13 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build
File.WriteAllText(path, updated);
}
+ private static void AddFileToProject(ProjectDirectory project, string filename, string content)
+ {
+ var path = Path.Combine(project.DirectoryPath, filename);
+ File.WriteAllText(path, content);
+ }
+
+
private static void VerifyBootManifestHashes(MSBuildResult result, string blazorPublishDirectory)
{
var bootManifestResolvedPath = Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");