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");