Просмотр исходного кода

Remove Blazor WASM SDK from repo (#29427)

* Remove Blazor WASM Sdk in repo

* Bump dotnet and fix platform compat issues

* Remove Blazor WASM SDK from solution files

* Disable removal of Web.Spa 6.0 templates

* Update check for uninstalled templates

* Commit broken tests and fix installer check

* Remove BlazorWebAssemblySdkDirectoryRoot references

* Try to resolve Helix publish issues

* Disable ErrorOnDuplicatePublishOutputFiles property

* Bump tfm in Helix test project

* Add explainer note in Workaround.props
Safia Abdalla 5 лет назад
Родитель
Сommit
bdec803c73
95 измененных файлов с 39 добавлено и 5531 удалено
  1. 0 60
      AspNetCore.sln
  2. 0 1
      eng/ProjectReferences.props
  3. 7 0
      eng/Workarounds.props
  4. 1 1
      eng/helix/content/RunTests/RunTests.csproj
  5. 0 16
      eng/targets/CSharp.Common.props
  6. 2 2
      global.json
  7. 1 4
      src/Components/Components.slnf
  8. 1 5
      src/Components/ComponentsNoDeps.slnf
  9. 0 0
      src/Components/Web.JS/dist/Release/blazor.server.js
  10. 0 9
      src/Components/WebAssembly/Sdk/integrationtests/Directory.Build.props
  11. 0 80
      src/Components/WebAssembly/Sdk/integrationtests/Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj
  12. 0 85
      src/Components/WebAssembly/Sdk/integrationtests/ServiceWorkerAssert.cs
  13. 0 191
      src/Components/WebAssembly/Sdk/integrationtests/WasmBuildIncrementalismTest.cs
  14. 0 354
      src/Components/WebAssembly/Sdk/integrationtests/WasmBuildIntegrationTest.cs
  15. 0 216
      src/Components/WebAssembly/Sdk/integrationtests/WasmBuildLazyLoadTest.cs
  16. 0 168
      src/Components/WebAssembly/Sdk/integrationtests/WasmCompressionTests.cs
  17. 0 1044
      src/Components/WebAssembly/Sdk/integrationtests/WasmPublishIntegrationTest.cs
  18. 0 213
      src/Components/WebAssembly/Sdk/integrationtests/WasmPwaManifestTests.cs
  19. 0 5
      src/Components/WebAssembly/Sdk/integrationtests/xunit.runner.json
  20. 0 33
      src/Components/WebAssembly/Sdk/src/AssetsManifestFile.cs
  21. 0 38
      src/Components/WebAssembly/Sdk/src/BlazorReadSatelliteAssemblyFile.cs
  22. 0 53
      src/Components/WebAssembly/Sdk/src/BlazorWriteSatelliteAssemblyFile.cs
  23. 0 108
      src/Components/WebAssembly/Sdk/src/BootJsonData.cs
  24. 0 136
      src/Components/WebAssembly/Sdk/src/BrotliCompress.cs
  25. 0 79
      src/Components/WebAssembly/Sdk/src/CreateBlazorTrimmerRootDescriptorFile.cs
  26. 0 70
      src/Components/WebAssembly/Sdk/src/GZipCompress.cs
  27. 0 176
      src/Components/WebAssembly/Sdk/src/GenerateBlazorWebAssemblyBootJson.cs
  28. 0 97
      src/Components/WebAssembly/Sdk/src/GenerateServiceWorkerAssetsManifest.cs
  29. 0 95
      src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.csproj
  30. 0 19
      src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.nuspec
  31. 0 22
      src/Components/WebAssembly/Sdk/src/Sdk/Sdk.props
  32. 0 24
      src/Components/WebAssembly/Sdk/src/Sdk/Sdk.targets
  33. 0 0
      src/Components/WebAssembly/Sdk/src/_._
  34. 0 15
      src/Components/WebAssembly/Sdk/src/build/net6.0/Microsoft.NET.Sdk.BlazorWebAssembly.props
  35. 0 42
      src/Components/WebAssembly/Sdk/src/targets/BlazorWasm.web.config
  36. 0 34
      src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props
  37. 0 661
      src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets
  38. 0 170
      src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.targets
  39. 0 68
      src/Components/WebAssembly/Sdk/test/BlazorReadSatelliteAssemblyFileTest.cs
  40. 0 195
      src/Components/WebAssembly/Sdk/test/GenerateBlazorBootJsonTest.cs
  41. 0 12
      src/Components/WebAssembly/Sdk/test/Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj
  42. 0 40
      src/Components/WebAssembly/Sdk/testassets/Directory.Build.props
  43. 0 7
      src/Components/WebAssembly/Sdk/testassets/Directory.Build.targets
  44. 0 1
      src/Components/WebAssembly/Sdk/testassets/LinkBaseToWebRoot/js/LinkedScript.js
  45. 0 14
      src/Components/WebAssembly/Sdk/testassets/RestoreBlazorWasmTestProjects/RestoreBlazorWasmTestProjects.csproj
  46. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazor.webassembly.js
  47. 0 12
      src/Components/WebAssembly/Sdk/testassets/blazorhosted-rid/Program.cs
  48. 0 22
      src/Components/WebAssembly/Sdk/testassets/blazorhosted-rid/blazorhosted-rid.csproj
  49. 0 16
      src/Components/WebAssembly/Sdk/testassets/blazorhosted/Program.cs
  50. 0 12
      src/Components/WebAssembly/Sdk/testassets/blazorhosted/blazorhosted.csproj
  51. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-fxref/App.razor
  52. 0 11
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-fxref/Program.cs
  53. 0 31
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-fxref/blazorwasm-fxref.csproj
  54. 0 8
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/App.razor
  55. 0 5
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/Pages/Index.razor
  56. 0 11
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/Program.cs
  57. 0 2
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/_Imports.razor
  58. 0 27
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/blazorwasm-minimal.csproj
  59. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/wwwroot/css/app.css
  60. 0 24
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/wwwroot/index.html
  61. 0 8
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/App.razor
  62. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/LinkToWebRoot/css/app.css
  63. 0 5
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/Pages/Index.razor
  64. 0 16
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/Program.cs
  65. 0 123
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/Resources.ja.resx.txt
  66. 0 2
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/_Imports.razor
  67. 0 53
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/blazorwasm.csproj
  68. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/Fake-License.txt
  69. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/css/app.css
  70. 0 24
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/index.html
  71. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/serviceworkers/my-prod-service-worker.js
  72. 0 1
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/serviceworkers/my-service-worker.js
  73. 0 12
      src/Components/WebAssembly/Sdk/testassets/classlibrarywithsatelliteassemblies/Class1.cs
  74. 0 123
      src/Components/WebAssembly/Sdk/testassets/classlibrarywithsatelliteassemblies/Resources.es-ES.resx
  75. 0 14
      src/Components/WebAssembly/Sdk/testassets/classlibrarywithsatelliteassemblies/classlibrarywithsatelliteassemblies.csproj
  76. 0 6
      src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/Class1.cs
  77. 0 9
      src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/RazorClassLibrary.csproj
  78. 0 1
      src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/wwwroot/styles.css
  79. 0 0
      src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/wwwroot/wwwroot/exampleJsInterop.js
  80. 0 98
      src/Components/WebAssembly/Sdk/tools/Application.cs
  81. 0 85
      src/Components/WebAssembly/Sdk/tools/BrotliCompressCommand.cs
  82. 0 27
      src/Components/WebAssembly/Sdk/tools/DebugMode.cs
  83. 0 21
      src/Components/WebAssembly/Sdk/tools/Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj
  84. 0 30
      src/Components/WebAssembly/Sdk/tools/Program.cs
  85. 0 3
      src/Components/WebAssembly/Sdk/tools/runtimeconfig.template.json
  86. 5 0
      src/DataProtection/DataProtection/src/DataProtectionServiceCollectionExtensions.cs
  87. 3 0
      src/DataProtection/DataProtection/src/EphemeralDataProtectionProvider.cs
  88. 17 6
      src/DataProtection/DataProtection/src/LoggingExtensions.cs
  89. 1 1
      src/ProjectTemplates/Shared/TemplatePackageInstaller.cs
  90. 0 2
      src/ProjectTemplates/TestInfrastructure/Directory.Build.props.in
  91. 0 1
      src/ProjectTemplates/TestInfrastructure/Directory.Build.targets.in
  92. 1 1
      src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs
  93. 0 2
      src/Shared/MSBuild.Testing/BuildVariables.cs
  94. 0 5
      src/Shared/MSBuild.Testing/MSBuild.Testing.targets
  95. 0 1
      src/Shared/MSBuild.Testing/MSBuildProcessManager.cs

+ 0 - 60
AspNetCore.sln

@@ -1385,14 +1385,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Testin
 EndProject
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{FED4267E-E5E4-49C5-98DB-8B3F203596EE}"
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{FED4267E-E5E4-49C5-98DB-8B3F203596EE}"
 EndProject
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.BlazorWebAssembly", "src\Components\WebAssembly\Sdk\src\Microsoft.NET.Sdk.BlazorWebAssembly.csproj", "{6B2734BF-C61D-4889-ABBF-456A4075D59B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.BlazorWebAssembly.Tests", "src\Components\WebAssembly\Sdk\test\Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj", "{83371889-9A3E-4D16-AE77-EB4F83BC6374}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests", "src\Components\WebAssembly\Sdk\integrationtests\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj", "{525EBCB4-A870-470B-BC90-845306C337D1}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.BlazorWebAssembly.Tools", "src\Components\WebAssembly\Sdk\tools\Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj", "{175E5CD8-92D4-46BB-882E-3A930D3302D4}"
-EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{6126DCE4-9692-4EE2-B240-C65743572995}"
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{6126DCE4-9692-4EE2-B240-C65743572995}"
 EndProject
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{46FB7E93-1294-4068-B80A-D4864F78277A}"
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{46FB7E93-1294-4068-B80A-D4864F78277A}"
@@ -6693,54 +6685,6 @@ Global
 		{1542DC58-1836-4191-A9C5-51D1716D2543}.Release|x64.Build.0 = Release|Any CPU
 		{1542DC58-1836-4191-A9C5-51D1716D2543}.Release|x64.Build.0 = Release|Any CPU
 		{1542DC58-1836-4191-A9C5-51D1716D2543}.Release|x86.ActiveCfg = Release|Any CPU
 		{1542DC58-1836-4191-A9C5-51D1716D2543}.Release|x86.ActiveCfg = Release|Any CPU
 		{1542DC58-1836-4191-A9C5-51D1716D2543}.Release|x86.Build.0 = Release|Any CPU
 		{1542DC58-1836-4191-A9C5-51D1716D2543}.Release|x86.Build.0 = Release|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x64.Build.0 = Debug|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x86.Build.0 = Debug|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Release|Any CPU.Build.0 = Release|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Release|x64.ActiveCfg = Release|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Release|x64.Build.0 = Release|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Release|x86.ActiveCfg = Release|Any CPU
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Release|x86.Build.0 = Release|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Debug|x64.Build.0 = Debug|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Debug|x86.Build.0 = Debug|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Release|Any CPU.Build.0 = Release|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Release|x64.ActiveCfg = Release|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Release|x64.Build.0 = Release|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Release|x86.ActiveCfg = Release|Any CPU
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374}.Release|x86.Build.0 = Release|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Debug|x64.Build.0 = Debug|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Debug|x86.Build.0 = Debug|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Release|x64.ActiveCfg = Release|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Release|x64.Build.0 = Release|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Release|x86.ActiveCfg = Release|Any CPU
-		{525EBCB4-A870-470B-BC90-845306C337D1}.Release|x86.Build.0 = Release|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Debug|x64.Build.0 = Debug|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Debug|x86.Build.0 = Debug|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|Any CPU.Build.0 = Release|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x64.ActiveCfg = Release|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x64.Build.0 = Release|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x86.ActiveCfg = Release|Any CPU
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x86.Build.0 = Release|Any CPU
 		{46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -8223,10 +8167,6 @@ Global
 		{48E64014-B249-4644-8AEB-CDEE8ABA0DC2} = {3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643}
 		{48E64014-B249-4644-8AEB-CDEE8ABA0DC2} = {3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643}
 		{1542DC58-1836-4191-A9C5-51D1716D2543} = {05A169C7-4F20-4516-B10A-B13C5649D346}
 		{1542DC58-1836-4191-A9C5-51D1716D2543} = {05A169C7-4F20-4516-B10A-B13C5649D346}
 		{FED4267E-E5E4-49C5-98DB-8B3F203596EE} = {562D5067-8CD8-4F19-BCBB-873204932C61}
 		{FED4267E-E5E4-49C5-98DB-8B3F203596EE} = {562D5067-8CD8-4F19-BCBB-873204932C61}
-		{6B2734BF-C61D-4889-ABBF-456A4075D59B} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE}
-		{83371889-9A3E-4D16-AE77-EB4F83BC6374} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE}
-		{525EBCB4-A870-470B-BC90-845306C337D1} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE}
-		{175E5CD8-92D4-46BB-882E-3A930D3302D4} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE}
 		{6126DCE4-9692-4EE2-B240-C65743572995} = {0508E463-0269-40C9-B5C2-3B600FB2A28B}
 		{6126DCE4-9692-4EE2-B240-C65743572995} = {0508E463-0269-40C9-B5C2-3B600FB2A28B}
 		{46FB7E93-1294-4068-B80A-D4864F78277A} = {6126DCE4-9692-4EE2-B240-C65743572995}
 		{46FB7E93-1294-4068-B80A-D4864F78277A} = {6126DCE4-9692-4EE2-B240-C65743572995}
 		{25FA84DB-EEA7-4068-8E2D-F3D48B281C16} = {6126DCE4-9692-4EE2-B240-C65743572995}
 		{25FA84DB-EEA7-4068-8E2D-F3D48B281C16} = {6126DCE4-9692-4EE2-B240-C65743572995}

+ 0 - 1
eng/ProjectReferences.props

@@ -147,7 +147,6 @@
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Server" ProjectPath="$(RepoRoot)src\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Server" ProjectPath="$(RepoRoot)src\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj" />
     <ProjectReferenceProvider Include="Microsoft.Authentication.WebAssembly.Msal" ProjectPath="$(RepoRoot)src\Components\WebAssembly\Authentication.Msal\src\Microsoft.Authentication.WebAssembly.Msal.csproj" />
     <ProjectReferenceProvider Include="Microsoft.Authentication.WebAssembly.Msal" ProjectPath="$(RepoRoot)src\Components\WebAssembly\Authentication.Msal\src\Microsoft.Authentication.WebAssembly.Msal.csproj" />
     <ProjectReferenceProvider Include="Microsoft.JSInterop.WebAssembly" ProjectPath="$(RepoRoot)src\Components\WebAssembly\JSInterop\src\Microsoft.JSInterop.WebAssembly.csproj" />
     <ProjectReferenceProvider Include="Microsoft.JSInterop.WebAssembly" ProjectPath="$(RepoRoot)src\Components\WebAssembly\JSInterop\src\Microsoft.JSInterop.WebAssembly.csproj" />
-    <ProjectReferenceProvider Include="Microsoft.NET.Sdk.BlazorWebAssembly" ProjectPath="$(RepoRoot)src\Components\WebAssembly\Sdk\src\Microsoft.NET.Sdk.BlazorWebAssembly.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.WebAssembly.Server" ProjectPath="$(RepoRoot)src\Components\WebAssembly\Server\src\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.WebAssembly.Server" ProjectPath="$(RepoRoot)src\Components\WebAssembly\Server\src\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" ProjectPath="$(RepoRoot)src\Components\WebAssembly\WebAssembly.Authentication\src\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" ProjectPath="$(RepoRoot)src\Components\WebAssembly\WebAssembly.Authentication\src\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.WebAssembly" ProjectPath="$(RepoRoot)src\Components\WebAssembly\WebAssembly\src\Microsoft.AspNetCore.Components.WebAssembly.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.WebAssembly" ProjectPath="$(RepoRoot)src\Components\WebAssembly\WebAssembly\src\Microsoft.AspNetCore.Components.WebAssembly.csproj" />

+ 7 - 0
eng/Workarounds.props

@@ -29,4 +29,11 @@
     <!-- Ignore warning about calling the Pack target on Web SDK projects. Our build scripts call /t:pack on everything in this repo. -->
     <!-- Ignore warning about calling the Pack target on Web SDK projects. Our build scripts call /t:pack on everything in this repo. -->
     <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
     <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
   </PropertyGroup>
   </PropertyGroup>
+
+  <!-- The SDK includes some conflict resolution targets that check for duplicate items in the publish targets. It's very greedy
+       and ends up marking the same files in different projects as duplicates of each other. We disable this check here to work
+       around this issue. -->
+  <PropertyGroup>
+    <ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
+  </PropertyGroup>
 </Project>
 </Project>

+ 1 - 1
eng/helix/content/RunTests/RunTests.csproj

@@ -2,7 +2,7 @@
 
 
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net5.0</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 0 - 16
eng/targets/CSharp.Common.props

@@ -35,22 +35,6 @@
     <Import Project="$(RepoRoot)src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props" />
     <Import Project="$(RepoRoot)src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props" />
   </ImportGroup>
   </ImportGroup>
 
 
-  <ItemGroup Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'">
-    <!-- See comments further up in the file when we import the Razor SDK-->
-    <Reference Include="Microsoft.NET.Sdk.BlazorWebAssembly"
-      PrivateAssets="All"
-      ReferenceOutputAssembly="false"
-      SkipGetTargetFrameworkProperties="true"
-      UndefineProperties="TargetFramework;TargetFrameworks" />
-  </ItemGroup>
-
-  <ImportGroup Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'">
-    <Import Project="$(RepoRoot)src\Components\WebAssembly\Sdk\src\build\net6.0\Microsoft.NET.Sdk.BlazorWebAssembly.props" />
-  </ImportGroup>
-
-  <PropertyGroup Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'">
-    <BlazorWebAssemblySdkDirectoryRoot>$(ArtifactsBinDir)\Microsoft.NET.Sdk.BlazorWebAssembly\$(Configuration)\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
-  </PropertyGroup>
 
 
   <ItemGroup Condition=" '$(IsTestProject)' != 'true' AND '$(DotNetBuildFromSource)' != 'true' ">
   <ItemGroup Condition=" '$(IsTestProject)' != 'true' AND '$(DotNetBuildFromSource)' != 'true' ">
     <Reference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" PrivateAssets="All" />
     <Reference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" PrivateAssets="All" />

+ 2 - 2
global.json

@@ -1,9 +1,9 @@
 {
 {
   "sdk": {
   "sdk": {
-    "version": "6.0.100-alpha.1.20523.3"
+    "version": "6.0.100-alpha.1.21063.4"
   },
   },
   "tools": {
   "tools": {
-    "dotnet": "6.0.100-alpha.1.20523.3",
+    "dotnet": "6.0.100-alpha.1.21063.4",
     "runtimes": {
     "runtimes": {
       "dotnet/x64": [
       "dotnet/x64": [
         "2.1.23",
         "2.1.23",

+ 1 - 4
src/Components/Components.slnf

@@ -21,9 +21,6 @@
       "src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
       "src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
       "src\\Components\\WebAssembly\\DevServer\\src\\Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj",
       "src\\Components\\WebAssembly\\DevServer\\src\\Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj",
       "src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
       "src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\integrationtests\\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\src\\Microsoft.NET.Sdk.BlazorWebAssembly.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\test\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj",
       "src\\Components\\WebAssembly\\Server\\src\\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj",
       "src\\Components\\WebAssembly\\Server\\src\\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj",
       "src\\Components\\WebAssembly\\Server\\test\\Microsoft.AspNetCore.Components.WebAssembly.Server.Tests.csproj",
       "src\\Components\\WebAssembly\\Server\\test\\Microsoft.AspNetCore.Components.WebAssembly.Server.Tests.csproj",
       "src\\Components\\WebAssembly\\WebAssembly.Authentication\\src\\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj",
       "src\\Components\\WebAssembly\\WebAssembly.Authentication\\src\\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj",
@@ -114,4 +111,4 @@
       "src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj"
       "src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj"
     ]
     ]
   }
   }
-}
+}

+ 1 - 5
src/Components/ComponentsNoDeps.slnf

@@ -20,10 +20,6 @@
       "src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
       "src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
       "src\\Components\\WebAssembly\\DevServer\\src\\Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj",
       "src\\Components\\WebAssembly\\DevServer\\src\\Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj",
       "src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
       "src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\integrationtests\\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\src\\Microsoft.NET.Sdk.BlazorWebAssembly.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\test\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj",
-      "src\\Components\\WebAssembly\\Sdk\\tools\\Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj",
       "src\\Components\\WebAssembly\\Server\\src\\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj",
       "src\\Components\\WebAssembly\\Server\\src\\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj",
       "src\\Components\\WebAssembly\\Server\\test\\Microsoft.AspNetCore.Components.WebAssembly.Server.Tests.csproj",
       "src\\Components\\WebAssembly\\Server\\test\\Microsoft.AspNetCore.Components.WebAssembly.Server.Tests.csproj",
       "src\\Components\\WebAssembly\\WebAssembly.Authentication\\src\\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj",
       "src\\Components\\WebAssembly\\WebAssembly.Authentication\\src\\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj",
@@ -50,4 +46,4 @@
       "src\\Components\\test\\testassets\\TestServer\\Components.TestServer.csproj"
       "src\\Components\\test\\testassets\\TestServer\\Components.TestServer.csproj"
     ]
     ]
   }
   }
-}
+}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/Components/Web.JS/dist/Release/blazor.server.js


+ 0 - 9
src/Components/WebAssembly/Sdk/integrationtests/Directory.Build.props

@@ -1,9 +0,0 @@
-<Project>
-  <!-- UseVSTestRunner must be configured before $(RepoRoot)\Directory.Build.props is included. -->
-  <PropertyGroup>
-    <UseVSTestRunner>true</UseVSTestRunner>
-    <TestRunnerAdditionalArguments>$(TestRunnerAdditionalArguments) --blame "CollectHangDump;TestTimeout=6m"</TestRunnerAdditionalArguments>
-  </PropertyGroup>
-
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
-</Project>

+ 0 - 80
src/Components/WebAssembly/Sdk/integrationtests/Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj

@@ -1,80 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <!--
-      There's not much value in multi-targeting here, this doesn't run much .NET code, it tests MSBuild.
-
-      This is also a partial workaround for https://github.com/Microsoft/msbuild/issues/2661 - this project
-      has netcoreapp dependencies that need to be built first.
-    -->
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <PreserveCompilationContext>true</PreserveCompilationContext>
-
-    <!-- Tests do not work on Helix yet. When enabled, add Publish to BeforeTargets of RestoreTestProjects. -->
-    <BuildHelixPayload>false</BuildHelixPayload>
-    <TestAppsRoot>$(MSBuildProjectDirectory)\..\testassets\</TestAppsRoot>
-  </PropertyGroup>
-
-  <Import Project="$(SharedSourceRoot)MSBuild.Testing\MSBuild.Testing.targets" />
-
-  <ItemGroup>
-    <None Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Reference Include="Microsoft.Build.Utilities.Core" />
-    <Reference Include="Microsoft.Extensions.DependencyModel" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="$(RepoRoot)src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib.csproj" />
-    <Reference Include="Microsoft.NET.Sdk.BlazorWebAssembly" ReferenceOutputAssembly="false" SkipGetTargetFrameworkProperties="true" />
-    <Reference Include="Microsoft.NET.Sdk.Razor" ReferenceOutputAssembly="false" SkipGetTargetFrameworkProperties="true" />
-  </ItemGroup>
-
-  <!-- Ensure shared framework and targeting packs are laid out under .dotnet/ before executing tests. -->
-  <ItemGroup Condition=" '$(DotNetBuildFromSource)' != 'true' ">
-    <ProjectReference Include="$(RepoRoot)src\Framework\App.Ref\src\Microsoft.AspNetCore.App.Ref.csproj"
-        Condition=" $(IsTargetingPackBuilding) "
-        ReferenceOutputAssembly="false"
-        SkipGetTargetFrameworkProperties="true" />
-    <ProjectReference Include="$(RepoRoot)src\Framework\App.Runtime\src\Microsoft.AspNetCore.App.Runtime.csproj"
-        Condition=" !$(IsTargetingPackBuilding) "
-        ReferenceOutputAssembly="false"
-        SkipGetTargetFrameworkProperties="true" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Compile Include="..\src\BootJsonData.cs" LinkBase="Wasm" />
-    <Compile Include="..\src\AssetsManifestFile.cs" LinkBase="Wasm" />
-    <Compile Include="$(SharedSourceRoot)CommandLineUtils\**\*.cs" />
-
-    <EmbeddedResource Include="..\src\targets\BlazorWasm.web.config" />
-  </ItemGroup>
-
-  <Target Name="GenerateTestData" BeforeTargets="GetAssemblyAttributes">
-    <Exec Condition="'$(OS)' == 'Windows_NT'" Command="&quot;$(NuGetPackageRoot)vswhere\$(VSWhereVersion)\tools\vswhere.exe&quot; -latest -prerelease -property installationPath -requires Microsoft.Component.MSBuild" ConsoleToMsBuild="true" StandardErrorImportance="high">
-      <Output TaskParameter="ConsoleOutput" PropertyName="_VSInstallDir" />
-    </Exec>
-    <Error Condition="'$(OS)' == 'Windows_NT' and '$(_VSInstallDir)'=='' and '$(Test)' == 'true'" Text="Visual Studio not found on Windows." />
-
-    <PropertyGroup>
-      <_DesktopMSBuildPath Condition="'$(OS)' == 'Windows_NT' and Exists('$(_VSInstallDir)\MSBuild\Current\Bin\msbuild.exe')">$(_VSInstallDir)\MSBuild\Current\Bin\msbuild.exe</_DesktopMSBuildPath>
-      <_DesktopMSBuildPath Condition="'$(OS)' == 'Windows_NT' and Exists('$(_VSInstallDir)\MSBuild\15.0\Bin\msbuild.exe')">$(_VSInstallDir)\MSBuild\15.0\Bin\msbuild.exe</_DesktopMSBuildPath>
-    </PropertyGroup>
-
-    <Error Condition="'$(OS)' == 'Windows_NT' and '$(_DesktopMSBuildPath)'=='' and '$(Test)' == 'true'" Text="MSBuild.exe not found on Windows." />
-
-    <ItemGroup>
-      <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
-        <_Parameter1>DesktopMSBuildPath</_Parameter1>
-        <_Parameter2>$(_DesktopMSBuildPath)</_Parameter2>
-      </AssemblyAttribute>
-    </ItemGroup>
-  </Target>
-
-  <Target Name="RestoreTestProjects" BeforeTargets="RunTests;Test;VSTest" Condition=" '$(DotNetBuildFromSource)' != 'true' ">
-    <MSBuild Projects="..\testassets\RestoreBlazorWasmTestProjects\RestoreBlazorWasmTestProjects.csproj" Targets="Restore" />
-  </Target>
-
-</Project>

+ 0 - 85
src/Components/WebAssembly/Sdk/integrationtests/ServiceWorkerAssert.cs

@@ -1,85 +0,0 @@
-// 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;
-using System.Text.Json;
-using Microsoft.NET.Sdk.BlazorWebAssembly;
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    internal static class ServiceWorkerAssert
-    {
-        internal static void VerifyServiceWorkerFiles(MSBuildResult result,
-            string outputDirectory,
-            string serviceWorkerPath,
-            string serviceWorkerContent,
-            string assetsManifestPath,
-            string staticWebAssetsBasePath = "")
-        {
-            // Check the expected files are there
-            var serviceWorkerResolvedPath = Assert.FileExists(result, outputDirectory, staticWebAssetsBasePath, serviceWorkerPath);
-            var assetsManifestResolvedPath = Assert.FileExists(result, outputDirectory, staticWebAssetsBasePath, assetsManifestPath);
-
-            // Check the service worker contains the expected content (which comes from the PublishedContent file)
-            Assert.FileContains(result, serviceWorkerResolvedPath, serviceWorkerContent);
-
-            // Check the assets manifest version was added to the published service worker
-            var assetsManifest = ReadServiceWorkerAssetsManifest(assetsManifestResolvedPath);
-            Assert.FileContains(result, serviceWorkerResolvedPath, $"/* Manifest version: {assetsManifest.version} */");
-
-            // Check the assets manifest contains correct entries for all static content we're publishing
-            var resolvedPublishDirectory = Path.Combine(result.Project.DirectoryPath, outputDirectory);
-            var outputFiles = Directory.GetFiles(resolvedPublishDirectory, "*", new EnumerationOptions { RecurseSubdirectories = true });
-            var assetsManifestHashesByUrl = (IReadOnlyDictionary<string, string>)assetsManifest.assets.ToDictionary(x => x.url, x => x.hash);
-            foreach (var filePath in outputFiles)
-            {
-                var relativePath = Path.GetRelativePath(resolvedPublishDirectory, filePath);
-
-                // We don't list compressed files in the SWAM, as these are transparent to the client,
-                // nor do we list the service worker itself or its assets manifest, as these don't need to be fetched in the same way
-                if (IsCompressedFile(relativePath)
-                    || string.Equals(relativePath, Path.Combine(staticWebAssetsBasePath, serviceWorkerPath), StringComparison.Ordinal)
-                    || string.Equals(relativePath, Path.Combine(staticWebAssetsBasePath, assetsManifestPath), StringComparison.Ordinal))
-                {
-                    continue;
-                }
-
-                // Verify hash
-                var fileUrl = relativePath.Replace('\\', '/');
-                var expectedHash = ParseWebFormattedHash(assetsManifestHashesByUrl[fileUrl]);
-                Assert.Contains(fileUrl, assetsManifestHashesByUrl);
-                Assert.FileHashEquals(result, filePath, expectedHash);
-            }
-        }
-
-        private static string ParseWebFormattedHash(string webFormattedHash)
-        {
-            Assert.StartsWith("sha256-", webFormattedHash);
-            return webFormattedHash.Substring(7);
-        }
-
-        private static bool IsCompressedFile(string path)
-        {
-            switch (Path.GetExtension(path))
-            {
-                case ".br":
-                case ".gz":
-                    return true;
-                default:
-                    return false;
-            }
-        }
-
-        private static AssetsManifestFile ReadServiceWorkerAssetsManifest(string assetsManifestResolvedPath)
-        {
-            var jsContents = File.ReadAllText(assetsManifestResolvedPath);
-            var jsonStart = jsContents.IndexOf('{');
-            var jsonLength = jsContents.LastIndexOf('}') - jsonStart + 1;
-            var json = jsContents.Substring(jsonStart, jsonLength);
-            return JsonSerializer.Deserialize<AssetsManifestFile>(json);
-        }
-    }
-}

+ 0 - 191
src/Components/WebAssembly/Sdk/integrationtests/WasmBuildIncrementalismTest.cs

@@ -1,191 +0,0 @@
-// 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.IO;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Microsoft.NET.Sdk.BlazorWebAssembly;
-using Xunit;
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    public class WasmBuildIncrementalismTest
-    {
-        [Fact]
-        public async Task Build_IsIncremental()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            // Act
-            var thumbPrint = FileThumbPrint.CreateFolderThumbprint(project, project.BuildOutputDirectory);
-
-            // Assert
-            for (var i = 0; i < 3; i++)
-            {
-                result = await MSBuildProcessManager.DotnetMSBuild(project);
-                Assert.BuildPassed(result);
-
-                var newThumbPrint = FileThumbPrint.CreateFolderThumbprint(project, project.BuildOutputDirectory);
-                Assert.Equal(thumbPrint.Count, newThumbPrint.Count);
-                for (var j = 0; j < thumbPrint.Count; j++)
-                {
-                    Assert.Equal(thumbPrint[j], newThumbPrint[j]);
-                }
-            }
-        }
-
-        [Fact]
-        public async Task Build_GzipCompression_IsIncremental()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var gzipCompressionDirectory = Path.Combine(project.IntermediateOutputDirectory, "build-gz");
-
-            Assert.DirectoryExists(result, gzipCompressionDirectory);
-
-            // Act
-            var thumbPrint = FileThumbPrint.CreateFolderThumbprint(project, gzipCompressionDirectory);
-
-            // Assert
-            for (var i = 0; i < 3; i++)
-            {
-                result = await MSBuildProcessManager.DotnetMSBuild(project);
-                Assert.BuildPassed(result);
-
-                var newThumbPrint = FileThumbPrint.CreateFolderThumbprint(project, gzipCompressionDirectory);
-                Assert.Equal(thumbPrint.Count, newThumbPrint.Count);
-                for (var j = 0; j < thumbPrint.Count; j++)
-                {
-                    Assert.Equal(thumbPrint[j], newThumbPrint[j]);
-                }
-            }
-        }
-
-        [Fact]
-        public async Task Build_SatelliteAssembliesFileIsPreserved()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            File.Move(Path.Combine(project.DirectoryPath, "Resources.ja.resx.txt"), Path.Combine(project.DirectoryPath, "Resource.ja.resx"));
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var satelliteAssemblyCacheFile = Path.Combine(project.IntermediateOutputDirectory, "blazor.satelliteasm.props");
-            var satelliteAssemblyFile = Path.Combine(project.BuildOutputDirectory, "wwwroot", "_framework", "ja", "blazorwasm.resources.dll");
-            var bootJson = Path.Combine(project.DirectoryPath, project.BuildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-
-            // Assert
-            for (var i = 0; i < 3; i++)
-            {
-                result = await MSBuildProcessManager.DotnetMSBuild(project);
-                Assert.BuildPassed(result);
-
-                Verify();
-            }
-
-            // Assert - incremental builds with BuildingProject=false
-            for (var i = 0; i < 3; i++)
-            {
-                result = await MSBuildProcessManager.DotnetMSBuild(project, args: "/p:BuildingProject=false");
-                Assert.BuildPassed(result);
-
-                Verify();
-            }
-
-            void Verify()
-            {
-                Assert.FileExists(result, satelliteAssemblyCacheFile);
-                Assert.FileExists(result, satelliteAssemblyFile);
-
-                var bootJsonFile = JsonSerializer.Deserialize<BootJsonData>(File.ReadAllText(bootJson), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-                var satelliteResources = bootJsonFile.resources.satelliteResources;
-                var kvp = Assert.Single(satelliteResources);
-                Assert.Equal("ja", kvp.Key);
-                Assert.Equal("ja/blazorwasm.resources.dll", Assert.Single(kvp.Value).Key);
-            }
-        }
-
-        [Fact]
-        public async Task Build_SatelliteAssembliesFileIsCreated_IfNewFileIsAdded()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var satelliteAssemblyCacheFile = Path.Combine(project.IntermediateOutputDirectory, "blazor.satelliteasm.props");
-            var satelliteAssemblyFile = Path.Combine(project.BuildOutputDirectory, "wwwroot", "_framework", "ja", "blazorwasm.resources.dll");
-            var bootJson = Path.Combine(project.DirectoryPath, project.BuildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project);
-            Assert.BuildPassed(result);
-
-            Assert.FileDoesNotExist(result, satelliteAssemblyCacheFile);
-            Assert.FileDoesNotExist(result, satelliteAssemblyFile);
-            var bootJsonFile = JsonSerializer.Deserialize<BootJsonData>(File.ReadAllText(bootJson), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-            var satelliteResources = bootJsonFile.resources.satelliteResources;
-            Assert.Null(satelliteResources);
-
-            File.Move(Path.Combine(project.DirectoryPath, "Resources.ja.resx.txt"), Path.Combine(project.DirectoryPath, "Resource.ja.resx"));
-            result = await MSBuildProcessManager.DotnetMSBuild(project);
-            Assert.BuildPassed(result);
-
-            Assert.FileExists(result, satelliteAssemblyCacheFile);
-            Assert.FileExists(result, satelliteAssemblyFile);
-            bootJsonFile = JsonSerializer.Deserialize<BootJsonData>(File.ReadAllText(bootJson), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-            satelliteResources = bootJsonFile.resources.satelliteResources;
-            var kvp = Assert.Single(satelliteResources);
-            Assert.Equal("ja", kvp.Key);
-            Assert.Equal("ja/blazorwasm.resources.dll", Assert.Single(kvp.Value).Key);
-        }
-
-        [Fact]
-        public async Task Build_SatelliteAssembliesFileIsDeleted_IfAllSatelliteFilesAreRemoved()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            File.Move(Path.Combine(project.DirectoryPath, "Resources.ja.resx.txt"), Path.Combine(project.DirectoryPath, "Resource.ja.resx"));
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var satelliteAssemblyCacheFile = Path.Combine(project.IntermediateOutputDirectory, "blazor.satelliteasm.props");
-            var satelliteAssemblyFile = Path.Combine(project.BuildOutputDirectory, "wwwroot", "_framework", "ja", "blazorwasm.resources.dll");
-            var bootJson = Path.Combine(project.DirectoryPath, project.BuildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project);
-            Assert.BuildPassed(result);
-
-            Assert.FileExists(result, satelliteAssemblyCacheFile);
-            Assert.FileExists(result, satelliteAssemblyFile);
-            var bootJsonFile = JsonSerializer.Deserialize<BootJsonData>(File.ReadAllText(bootJson), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-            var satelliteResources = bootJsonFile.resources.satelliteResources;
-            var kvp = Assert.Single(satelliteResources);
-            Assert.Equal("ja", kvp.Key);
-            Assert.Equal("ja/blazorwasm.resources.dll", Assert.Single(kvp.Value).Key);
-
-
-            File.Delete(Path.Combine(project.DirectoryPath, "Resource.ja.resx"));
-            result = await MSBuildProcessManager.DotnetMSBuild(project);
-            Assert.BuildPassed(result);
-
-            Assert.FileDoesNotExist(result, satelliteAssemblyCacheFile);
-            bootJsonFile = JsonSerializer.Deserialize<BootJsonData>(File.ReadAllText(bootJson), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-            satelliteResources = bootJsonFile.resources.satelliteResources;
-            Assert.Null(satelliteResources);
-        }
-    }
-}

+ 0 - 354
src/Components/WebAssembly/Sdk/integrationtests/WasmBuildIntegrationTest.cs

@@ -1,354 +0,0 @@
-// 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.IO;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Microsoft.NET.Sdk.BlazorWebAssembly;
-using Microsoft.AspNetCore.Testing;
-using Xunit;
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    public class WasmBuildIntegrationTest
-    {
-        private static readonly string DotNetJsFileName = $"dotnet.{BuildVariables.MicrosoftNETCoreAppRuntimeVersion}.js";
-
-        [Fact]
-        public async Task BuildMinimal_Works()
-        {
-            // Arrange
-            // Minimal has no project references, service worker etc. This is pretty close to the project template.
-            using var project = ProjectDirectory.Create("blazorwasm-minimal");
-            File.WriteAllText(Path.Combine(project.DirectoryPath, "App.razor.css"), "h1 { font-size: 16px; }");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.timezones.blat");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", DotNetJsFileName);
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm-minimal.dll");
-
-            var staticWebAssets = Assert.FileExists(result, buildOutputDirectory, "blazorwasm-minimal.StaticWebAssets.xml");
-            Assert.FileContains(result, staticWebAssets, Path.Combine(project.TargetFramework, "wwwroot"));
-            Assert.FileContains(result, staticWebAssets, Path.Combine(project.TargetFramework, "scopedcss"));
-        }
-
-        [Fact]
-        public async Task Build_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", DotNetJsFileName);
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "RazorClassLibrary.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.Text.Json.dll.gz"); // Verify dependencies are part of the output.
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.dll.gz");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm.pdb");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "RazorClassLibrary.pdb");
-
-            var staticWebAssets = Assert.FileExists(result, buildOutputDirectory, "blazorwasm.StaticWebAssets.xml");
-            Assert.FileContains(result, staticWebAssets, Path.Combine(project.TargetFramework, "wwwroot"));
-            Assert.FileContains(result, staticWebAssets, Path.GetFullPath(Path.Combine(project.SolutionPath, "razorclasslibrary", "wwwroot")));
-        }
-
-        [Fact]
-        public async Task Build_InRelease_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", DotNetJsFileName);
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "RazorClassLibrary.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.Text.Json.dll.gz");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "System.dll.gz");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm.pdb");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "RazorClassLibrary.pdb");
-
-            var staticWebAssets = Assert.FileExists(result, buildOutputDirectory, "blazorwasm.StaticWebAssets.xml");
-            Assert.FileContains(result, staticWebAssets, Path.Combine(project.TargetFramework, "wwwroot"));
-            Assert.FileContains(result, staticWebAssets, Path.GetFullPath(Path.Combine(project.SolutionPath, "razorclasslibrary", "wwwroot")));
-        }
-
-        [Fact]
-        public async Task Build_ProducesBootJsonDataWithExpectedContent()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Debug";
-            var wwwroot = Path.Combine(project.DirectoryPath, "wwwroot");
-            File.WriteAllText(Path.Combine(wwwroot, "appsettings.json"), "Default settings");
-            File.WriteAllText(Path.Combine(wwwroot, "appsettings.development.json"), "Development settings");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            var bootJsonPath = Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains(DotNetJsFileName, runtime);
-            Assert.Contains("dotnet.wasm", runtime);
-
-            var assemblies = bootJsonData.resources.assembly.Keys;
-            Assert.Contains("blazorwasm.dll", assemblies);
-            Assert.Contains("RazorClassLibrary.dll", assemblies);
-            Assert.Contains("System.Text.Json.dll", assemblies);
-
-            var pdb = bootJsonData.resources.pdb.Keys;
-            Assert.Contains("blazorwasm.pdb", pdb);
-            Assert.Contains("RazorClassLibrary.pdb", pdb);
-
-            Assert.Null(bootJsonData.resources.satelliteResources);
-
-            Assert.Contains("appsettings.json", bootJsonData.config);
-            Assert.Contains("appsettings.development.json", bootJsonData.config);
-        }
-
-        [Fact]
-        public async Task Build_InRelease_ProducesBootJsonDataWithExpectedContent()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            var bootJsonPath = Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains(DotNetJsFileName, runtime);
-            Assert.Contains("dotnet.wasm", runtime);
-
-            var assemblies = bootJsonData.resources.assembly.Keys;
-            Assert.Contains("blazorwasm.dll", assemblies);
-            Assert.Contains("RazorClassLibrary.dll", assemblies);
-            Assert.Contains("System.Text.Json.dll", assemblies);
-
-            var pdb = bootJsonData.resources.pdb.Keys;
-            Assert.Contains("blazorwasm.pdb", pdb);
-            Assert.Contains("RazorClassLibrary.pdb", pdb);
-            Assert.Null(bootJsonData.resources.satelliteResources);
-        }
-
-        [Fact]
-        public async Task Build_WithBlazorEnableTimeZoneSupportDisabled_DoesNotCopyTimeZoneInfo()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-            project.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
-</PropertyGroup>");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            var bootJsonPath = Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains("dotnet.wasm", runtime);
-            Assert.DoesNotContain("dotnet.timezones.blat", runtime);
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileDoesNotExist(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.timezones.blat");
-        }
-
-        [Fact]
-        public async Task Build_WithInvariantGlobalizationEnabled_DoesNotCopyGlobalizationData()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm-minimal");
-            project.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <InvariantGlobalization>true</InvariantGlobalization>
-</PropertyGroup>");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            var bootJsonPath = Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            Assert.Equal(ICUDataMode.Invariant, bootJsonData.icuDataMode);
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains("dotnet.wasm", runtime);
-            Assert.Contains("dotnet.timezones.blat", runtime);
-            Assert.DoesNotContain("icudt.dat", runtime);
-            Assert.DoesNotContain("icudt_EFIGS.dat", runtime);
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileDoesNotExist(result, buildOutputDirectory, "wwwroot", "_framework", "icudt.dat");
-            Assert.FileDoesNotExist(result, buildOutputDirectory, "wwwroot", "_framework", "icudt_CJK.dat");
-            Assert.FileDoesNotExist(result, buildOutputDirectory, "wwwroot", "_framework", "icudt_EFIGS.dat");
-            Assert.FileDoesNotExist(result, buildOutputDirectory, "wwwroot", "_framework", "icudt_no_CJK.dat");
-        }
-
-        [Fact]
-        public async Task Build_WithBlazorWebAssemblyLoadAllGlobalizationData_SetsICUDataMode()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm-minimal");
-            project.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
-</PropertyGroup>");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            var bootJsonPath = Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            Assert.Equal(ICUDataMode.All, bootJsonData.icuDataMode);
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains("dotnet.wasm", runtime);
-            Assert.Contains("dotnet.timezones.blat", runtime);
-            Assert.Contains("icudt.dat", runtime);
-            Assert.Contains("icudt_EFIGS.dat", runtime);
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "icudt.dat");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "icudt_CJK.dat");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "icudt_EFIGS.dat");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "icudt_no_CJK.dat");
-        }
-
-        [Fact]
-        public async Task Build_Hosted_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            Assert.FileDoesNotExist(result, buildOutputDirectory, "wwwroot", "_framework", "_bin", "blazorwasm.dll");
-
-            var staticWebAssets = Assert.FileExists(result, buildOutputDirectory, "blazorhosted.StaticWebAssets.xml");
-            Assert.FileContains(result, staticWebAssets, Path.Combine("net6.0", "wwwroot"));
-            Assert.FileContains(result, staticWebAssets, Path.Combine("razorclasslibrary", "wwwroot"));
-            Assert.FileContains(result, staticWebAssets, Path.Combine("blazorwasm", "wwwroot"));
-        }
-
-        [Fact]
-        public async Task Build_SatelliteAssembliesAreCopiedToBuildOutput()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary", "classlibrarywithsatelliteassemblies" });
-            project.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
-</PropertyGroup>
-<ItemGroup>
-    <ProjectReference Include=""..\classlibrarywithsatelliteassemblies\classlibrarywithsatelliteassemblies.csproj"" />
-</ItemGroup>");
-            var resxfileInProject = Path.Combine(project.DirectoryPath, "Resources.ja.resx.txt");
-            File.Move(resxfileInProject, Path.Combine(project.DirectoryPath, "Resource.ja.resx"));
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, args: "/restore");
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "classlibrarywithsatelliteassemblies.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "Microsoft.CodeAnalysis.CSharp.dll");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "fr", "Microsoft.CodeAnalysis.CSharp.resources.dll"); // Verify satellite assemblies are present in the build output.
-
-            var bootJsonPath = Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            Assert.FileContains(result, bootJsonPath, "\"Microsoft.CodeAnalysis.CSharp.dll\"");
-            Assert.FileContains(result, bootJsonPath, "\"fr\\/Microsoft.CodeAnalysis.CSharp.resources.dll\"");
-        }
-
-        [Fact]
-        public async Task Build_WithCustomOutputPath_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-
-            project.AddDirectoryBuildContent(
-@"<PropertyGroup>
-    <BaseOutputPath>$(MSBuildThisFileDirectory)build\bin\</BaseOutputPath>
-    <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)build\obj\</BaseIntermediateOutputPath>
-</PropertyGroup>");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, args: "/restore");
-            Assert.BuildPassed(result);
-        }
-
-        [Fact]
-        public async Task Build_WithAspNetCoreFrameworkReference_Fails()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm-fxref");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-            Assert.BuildError(result, "BLAZORSDK1001");
-        }
-
-        private static BootJsonData ReadBootJsonData(MSBuildResult result, string path)
-        {
-            return JsonSerializer.Deserialize<BootJsonData>(
-                File.ReadAllText(Path.Combine(result.Project.DirectoryPath, path)),
-                new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-        }
-    }
-}

+ 0 - 216
src/Components/WebAssembly/Sdk/integrationtests/WasmBuildLazyLoadTest.cs

@@ -1,216 +0,0 @@
-// 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.IO;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Testing;
-using Microsoft.NET.Sdk.BlazorWebAssembly;
-using Xunit;
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    public class WasmBuildLazyLoadTest
-    {
-        [Fact]
-        public async Task Build_LazyLoadExplicitAssembly_Debug_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Debug";
-
-            project.AddProjectFileContent(
-@"
-<ItemGroup>
-    <BlazorWebAssemblyLazyLoad Include='RazorClassLibrary.dll' />
-</ItemGroup>
-");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            // Verify that a blazor.boot.json file has been created
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            // And that the assembly is in the output
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "RazorClassLibrary.dll");
-
-            var bootJson = ReadBootJsonData(result, Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json"));
-
-            // And that it has been labelled as a dynamic assembly in the boot.json
-            var lazyAssemblies = bootJson.resources.lazyAssembly;
-            var assemblies = bootJson.resources.assembly;
-
-            Assert.NotNull(lazyAssemblies);
-            Assert.Contains("RazorClassLibrary.dll", lazyAssemblies.Keys);
-            Assert.DoesNotContain("RazorClassLibrary.dll", assemblies.Keys);
-
-            // App assembly should not be lazy loaded
-            Assert.DoesNotContain("blazorwasm.dll", lazyAssemblies.Keys);
-            Assert.Contains("blazorwasm.dll", assemblies.Keys);
-        }
-
-        [Fact]
-        public async Task Build_LazyLoadExplicitAssembly_Release_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-
-            project.AddProjectFileContent(
-@"
-<ItemGroup>
-    <BlazorWebAssemblyLazyLoad Include='RazorClassLibrary.dll' />
-</ItemGroup>
-");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            // Verify that a blazor.boot.json file has been created
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            // And that the assembly is in the output
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "RazorClassLibrary.dll");
-
-            var bootJson = ReadBootJsonData(result, Path.Combine(buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json"));
-
-            // And that it has been labelled as a dynamic assembly in the boot.json
-            var lazyAssemblies = bootJson.resources.lazyAssembly;
-            var assemblies = bootJson.resources.assembly;
-
-            Assert.NotNull(lazyAssemblies);
-            Assert.Contains("RazorClassLibrary.dll", lazyAssemblies.Keys);
-            Assert.DoesNotContain("RazorClassLibrary.dll", assemblies.Keys);
-
-            // App assembly should not be lazy loaded
-            Assert.DoesNotContain("blazorwasm.dll", lazyAssemblies.Keys);
-            Assert.Contains("blazorwasm.dll", assemblies.Keys);
-        }
-
-        [Fact]
-        public async Task Publish_LazyLoadExplicitAssembly_Debug_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Debug";
-
-            project.AddProjectFileContent(
-@"
-<ItemGroup>
-    <BlazorWebAssemblyLazyLoad Include='RazorClassLibrary.dll' />
-</ItemGroup>
-");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            var publishDirectory = project.PublishOutputDirectory;
-
-            // Verify that a blazor.boot.json file has been created
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            // And that the assembly is in the output
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_framework", "RazorClassLibrary.dll");
-
-            var bootJson = ReadBootJsonData(result, Path.Combine(publishDirectory, "wwwroot", "_framework", "blazor.boot.json"));
-
-            // And that it has been labelled as a dynamic assembly in the boot.json
-            var lazyAssemblies = bootJson.resources.lazyAssembly;
-            var assemblies = bootJson.resources.assembly;
-
-            Assert.NotNull(lazyAssemblies);
-            Assert.Contains("RazorClassLibrary.dll", lazyAssemblies.Keys);
-            Assert.DoesNotContain("RazorClassLibrary.dll", assemblies.Keys);
-
-            // App assembly should not be lazy loaded
-            Assert.DoesNotContain("blazorwasm.dll", lazyAssemblies.Keys);
-            Assert.Contains("blazorwasm.dll", assemblies.Keys);
-        }
-
-        [Fact]
-        public async Task Publish_LazyLoadExplicitAssembly_Release_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-
-            project.AddProjectFileContent(
-@"
-<ItemGroup>
-    <BlazorWebAssemblyLazyLoad Include='RazorClassLibrary.dll' />
-</ItemGroup>
-");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            var publishDirectory = project.PublishOutputDirectory;
-
-            // Verify that a blazor.boot.json file has been created
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            // And that the assembly is in the output
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_framework", "RazorClassLibrary.dll");
-
-            var bootJson = ReadBootJsonData(result, Path.Combine(publishDirectory, "wwwroot", "_framework", "blazor.boot.json"));
-
-            // And that it has been labelled as a dynamic assembly in the boot.json
-            var lazyAssemblies = bootJson.resources.lazyAssembly;
-            var assemblies = bootJson.resources.assembly;
-
-            Assert.NotNull(lazyAssemblies);
-            Assert.Contains("RazorClassLibrary.dll", lazyAssemblies.Keys);
-            Assert.DoesNotContain("RazorClassLibrary.dll", assemblies.Keys);
-
-            // App assembly should not be lazy loaded
-            Assert.DoesNotContain("blazorwasm.dll", lazyAssemblies.Keys);
-            Assert.Contains("blazorwasm.dll", assemblies.Keys);
-        }
-
-        [Fact]
-        public async Task Build_LazyLoadExplicitAssembly_InvalidAssembly()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-
-            project.AddProjectFileContent(
-@"
-<ItemGroup>
-    <BlazorWebAssemblyLazyLoad Include='RazorClassLibraryInvalid.dll' />
-</ItemGroup>
-");
-            // Act
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            // Assert
-            Assert.BuildError(result, "BLAZORSDK1001");
-            Assert.BuildFailed(result);
-        }
-
-        [Fact]
-        public async Task Publish_LazyLoadExplicitAssembly_InvalidAssembly()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.Configuration = "Release";
-
-            project.AddProjectFileContent(
-@"
-<ItemGroup>
-    <BlazorWebAssemblyLazyLoad Include='RazorClassLibraryInvalid.dll' />
-</ItemGroup>
-");
-            // Act
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            // Assert
-            Assert.BuildError(result, "BLAZORSDK1001");
-            Assert.BuildFailed(result);
-        }
-
-        private static BootJsonData ReadBootJsonData(MSBuildResult result, string path)
-        {
-            return JsonSerializer.Deserialize<BootJsonData>(
-                File.ReadAllText(Path.Combine(result.Project.DirectoryPath, path)),
-                new JsonSerializerOptions(JsonSerializerDefaults.Web));
-        }
-    }
-}

+ 0 - 168
src/Components/WebAssembly/Sdk/integrationtests/WasmCompressionTests.cs

@@ -1,168 +0,0 @@
-// 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.IO;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Testing;
-using Xunit;
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    public class WasmCompressionTests
-    {
-        [Fact]
-        public async Task Publish_UpdatesFilesWhenSourcesChange()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish");
-
-            Assert.BuildPassed(result);
-
-            // Act
-            var mainAppDll = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-            var mainAppDllThumbPrint = FileThumbPrint.Create(mainAppDll);
-            var mainAppCompressedDll = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll.br");
-            var mainAppCompressedDllThumbPrint = FileThumbPrint.Create(mainAppCompressedDll);
-
-            var blazorBootJson = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var blazorBootJsonThumbPrint = FileThumbPrint.Create(blazorBootJson);
-            var blazorBootJsonCompressed = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework", "blazor.boot.json.br");
-            var blazorBootJsonCompressedThumbPrint = FileThumbPrint.Create(blazorBootJsonCompressed);
-
-            var programFile = Path.Combine(project.DirectoryPath, "..", "blazorwasm", "Program.cs");
-            var programFileContents = File.ReadAllText(programFile);
-            File.WriteAllText(programFile, programFileContents.Replace("args", "arguments"));
-
-            // Assert
-            result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish");
-            Assert.BuildPassed(result);
-            var newMainAppDllThumbPrint = FileThumbPrint.Create(mainAppDll);
-            var newMainAppCompressedDllThumbPrint = FileThumbPrint.Create(mainAppCompressedDll);
-            var newBlazorBootJsonThumbPrint = FileThumbPrint.Create(blazorBootJson);
-            var newBlazorBootJsonCompressedThumbPrint = FileThumbPrint.Create(blazorBootJsonCompressed);
-
-            Assert.NotEqual(mainAppDllThumbPrint, newMainAppDllThumbPrint);
-            Assert.NotEqual(mainAppCompressedDllThumbPrint, newMainAppCompressedDllThumbPrint);
-
-            Assert.NotEqual(blazorBootJsonThumbPrint, newBlazorBootJsonThumbPrint);
-            Assert.NotEqual(blazorBootJsonCompressedThumbPrint, newBlazorBootJsonCompressedThumbPrint);
-        }
-
-        [Fact]
-        public async Task Publish_WithoutLinkerAndCompression_UpdatesFilesWhenSourcesChange()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish", args: "/p:BlazorWebAssemblyEnableLinking=false");
-
-            Assert.BuildPassed(result);
-
-            // Act
-            var mainAppDll = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-            var mainAppDllThumbPrint = FileThumbPrint.Create(mainAppDll);
-
-            var mainAppCompressedDll = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll.br");
-            var mainAppCompressedDllThumbPrint = FileThumbPrint.Create(mainAppCompressedDll);
-
-            var programFile = Path.Combine(project.DirectoryPath, "..", "blazorwasm", "Program.cs");
-            var programFileContents = File.ReadAllText(programFile);
-            File.WriteAllText(programFile, programFileContents.Replace("args", "arguments"));
-
-            // Assert
-            result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish", args: "/p:BlazorWebAssemblyEnableLinking=false");
-            Assert.BuildPassed(result);
-            var newMainAppDllThumbPrint = FileThumbPrint.Create(mainAppDll);
-            var newMainAppCompressedDllThumbPrint = FileThumbPrint.Create(mainAppCompressedDll);
-
-            Assert.NotEqual(mainAppDllThumbPrint, newMainAppDllThumbPrint);
-            Assert.NotEqual(mainAppCompressedDllThumbPrint, newMainAppCompressedDllThumbPrint);
-        }
-
-        [Fact]
-        public async Task Publish_WithLinkerAndCompression_IsIncremental()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish");
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            // Act
-            var compressedFilesFolder = Path.Combine("..", "blazorwasm", project.IntermediateOutputDirectory, "compress");
-            var thumbPrint = FileThumbPrint.CreateFolderThumbprint(project, compressedFilesFolder);
-
-            // Assert
-            for (var i = 0; i < 3; i++)
-            {
-                result = await MSBuildProcessManager.DotnetMSBuild(project);
-                Assert.BuildPassed(result);
-
-                var newThumbPrint = FileThumbPrint.CreateFolderThumbprint(project, compressedFilesFolder);
-                Assert.Equal(thumbPrint.Count, newThumbPrint.Count);
-                for (var j = 0; j < thumbPrint.Count; j++)
-                {
-                    Assert.Equal(thumbPrint[j], newThumbPrint[j]);
-                }
-            }
-        }
-
-        [Fact]
-        [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23756")]
-        public async Task Publish_WithoutLinkerAndCompression_IsIncremental()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish", args: "/p:BlazorWebAssemblyEnableLinking=false");
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            // Act
-            var compressedFilesFolder = Path.Combine("..", "blazorwasm", project.IntermediateOutputDirectory, "compress");
-            var thumbPrint = FileThumbPrint.CreateFolderThumbprint(project, compressedFilesFolder);
-
-            // Assert
-            for (var i = 0; i < 3; i++)
-            {
-                result = await MSBuildProcessManager.DotnetMSBuild(project, args: "/p:BlazorWebAssemblyEnableLinking=false");
-                Assert.BuildPassed(result);
-
-                var newThumbPrint = FileThumbPrint.CreateFolderThumbprint(project, compressedFilesFolder);
-                Assert.Equal(thumbPrint.Count, newThumbPrint.Count);
-                for (var j = 0; j < thumbPrint.Count; j++)
-                {
-                    Assert.Equal(thumbPrint[j], newThumbPrint[j]);
-                }
-            }
-        }
-
-        [Fact]
-        public async Task Publish_CompressesAllFrameworkFiles()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "publish");
-
-            Assert.BuildPassed(result);
-
-            var extensions = new[] { ".dll", ".js", ".pdb", ".wasm", ".map", ".json", ".dat" };
-
-            // Act
-            var frameworkFilesPath = Path.Combine(project.DirectoryPath, project.PublishOutputDirectory, "wwwroot", "_framework");
-
-            foreach (var file in Directory.EnumerateFiles(frameworkFilesPath, "*", new EnumerationOptions {  RecurseSubdirectories = true, }))
-            {
-                var extension = Path.GetExtension(file);
-                if (extension != ".br" && extension != ".gz")
-                {
-                    Assert.FileExists(result, file + ".gz");
-                    Assert.FileExists(result, file + ".br");
-                }
-            }
-        }
-    }
-}

+ 0 - 1044
src/Components/WebAssembly/Sdk/integrationtests/WasmPublishIntegrationTest.cs

@@ -1,1044 +0,0 @@
-// 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.IO;
-using System.IO.Compression;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Microsoft.NET.Sdk.BlazorWebAssembly;
-using Microsoft.AspNetCore.Testing;
-using Xunit;
-using static Microsoft.AspNetCore.Razor.Design.IntegrationTests.ServiceWorkerAssert;
-using ResourceHashesByNameDictionary = System.Collections.Generic.Dictionary<string, string>;
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    public class WasmPublishIntegrationTest
-    {
-        private static readonly string DotNetJsFileName = $"dotnet.{BuildVariables.MicrosoftNETCoreAppRuntimeVersion}.js";
-
-        [Fact]
-        public async Task Publish_MinimalApp_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm-minimal");
-            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", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm-minimal.dll");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-            var webConfigContent = new StreamReader(GetType().Assembly.GetManifestResourceStream("Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.BlazorWasm.web.config")).ReadToEnd();
-            Assert.FileContentEquals(result, Path.Combine(publishDirectory, "web.config"), webConfigContent);
-            Assert.FileCountEquals(result, 1, publishDirectory, "*", SearchOption.TopDirectoryOnly);
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-        }
-
-        [Fact]
-        public async Task Publish_WithDefaultSettings_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", 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");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.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);
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-
-            VerifyTypeGranularTrimming(result, blazorPublishDirectory);
-        }
-
-        [Fact]
-        public async Task Publish_WithScopedCss_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary", "LinkBaseToWebRoot" });
-            File.WriteAllText(Path.Combine(project.DirectoryPath, "App.razor.css"), "h1 { font-size: 16px; }");
-
-            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");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify scoped css
-            Assert.FileExists(result, blazorPublishDirectory, "blazorwasm.styles.css");
-
-            // 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);
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Publish_InRelease_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", 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", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.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_WithExistingWebConfig_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary", "LinkBaseToWebRoot" });
-            project.Configuration = "Release";
-
-            var webConfigContents = "test webconfig contents";
-            AddFileToProject(project, "web.config", webConfigContents);
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", $"/p:PublishIISAssets=true");
-
-            Assert.BuildPassed(result);
-
-            var publishDirectory = project.PublishOutputDirectory;
-
-            // 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()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build");
-
-            Assert.BuildPassed(result);
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:NoBuild=true");
-
-            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", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            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 web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-
-            VerifyCompression(result, blazorPublishDirectory);
-        }
-
-        [Theory]
-        [InlineData("different-path")]
-        [InlineData("/different-path")]
-        [InlineData("different-path/")]
-        [InlineData("/different-path/")]
-        public async Task Publish_WithStaticWebBasePathWorks(string basePath)
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", "razorclasslibrary");
-            project.AddProjectFileContent(
-$@"<PropertyGroup>
-    <StaticWebAssetBasePath>{basePath}</StaticWebAssetBasePath>
-</PropertyGroup>");
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            Assert.BuildPassed(result);
-
-            var publishDirectory = project.PublishOutputDirectory;
-
-            // Verify nothing is published directly to the wwwroot directory
-            Assert.FileCountEquals(result, 0, Path.Combine(publishDirectory, "wwwroot"), "*", SearchOption.TopDirectoryOnly);
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot", "different-path");
-
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-            var webConfigContent = new StreamReader(GetType().Assembly.GetManifestResourceStream("Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.BlazorWasm.web.config")).ReadToEnd();
-            Assert.FileContentEquals(result, Path.Combine(publishDirectory, "web.config"), webConfigContent);
-            Assert.FileCountEquals(result, 1, publishDirectory, "*", SearchOption.TopDirectoryOnly);
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, blazorPublishDirectory, "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, blazorPublishDirectory, "_content", "RazorClassLibrary", "styles.css");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result,
-                Path.Combine(publishDirectory, "wwwroot"),
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js",
-                staticWebAssetsBasePath: "different-path");
-        }
-
-        [Theory]
-        [InlineData("different-path")]
-        [InlineData("/different-path")]
-        [InlineData("different-path/")]
-        [InlineData("/different-path/")]
-        public async Task Publish_Hosted_WithStaticWebBasePathWorks(string basePath)
-        {
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            var wasmProject = project.GetSibling("blazorwasm");
-            wasmProject.AddProjectFileContent(
-$@"<PropertyGroup>
-    <StaticWebAssetBasePath>{basePath}</StaticWebAssetBasePath>
-</PropertyGroup>");
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            Assert.BuildPassed(result);
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-            Assert.FileExists(result, publishDirectory, "blazorwasm.dll");
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot", "different-path");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.webassembly.js");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify project references appear as static web assets
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll");
-            // Also verify project references to the server project appear in the publish output
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br");
-
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.gz");
-        }
-
-        private static void VerifyCompression(MSBuildResult result, string blazorPublishDirectory)
-        {
-            var original = Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            var compressed = Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json.br");
-            using var brotliStream = new BrotliStream(File.OpenRead(compressed), CompressionMode.Decompress);
-            using var textReader = new StreamReader(brotliStream);
-            var uncompressedText = textReader.ReadToEnd();
-            var originalText = File.ReadAllText(original);
-
-            Assert.Equal(originalText, uncompressedText);
-        }
-
-        [Fact]
-        public async Task Publish_WithTrimmingdDisabled_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            project.AddProjectFileContent(
-@"<PropertyGroup>
-    <PublishTrimmed>false</PublishTrimmed>
-</PropertyGroup>");
-
-            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", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br"); //
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify referenced static web assets
-            Assert.FileExists(result, blazorPublishDirectory, "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, blazorPublishDirectory, "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-
-            // Verify assemblies are not trimmed
-            var loggingAssemblyPath = Path.Combine(blazorPublishDirectory, "_framework", "Microsoft.Extensions.Logging.Abstractions.dll");
-            Assert.AssemblyContainsType(result, loggingAssemblyPath, "Microsoft.Extensions.Logging.Abstractions.NullLogger");
-        }
-
-        [Fact]
-        public async Task Publish_SatelliteAssemblies_AreCopiedToBuildOutput()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary", "classlibrarywithsatelliteassemblies" });
-            project.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <!-- Workaround for https://github.com/mono/linker/issues/1390 -->
-    <PublishTrimmed>false</PublishTrimmed>
-    <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
-</PropertyGroup>
-<ItemGroup>
-    <ProjectReference Include=""..\classlibrarywithsatelliteassemblies\classlibrarywithsatelliteassemblies.csproj"" />
-</ItemGroup>");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", args: "/restore");
-
-            Assert.BuildPassed(result);
-
-            var publishDirectory = project.PublishOutputDirectory;
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
-
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "Microsoft.CodeAnalysis.CSharp.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "fr", "Microsoft.CodeAnalysis.CSharp.resources.dll"); // Verify satellite assemblies are present in the build output.
-
-            var bootJsonPath = Path.Combine(blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileContains(result, bootJsonPath, "\"Microsoft.CodeAnalysis.CSharp.dll\"");
-            Assert.FileContains(result, bootJsonPath, "\"fr\\/Microsoft.CodeAnalysis.CSharp.resources.dll\"");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-        }
-
-        [Fact]
-        public async Task Publish_HostedApp_DefaultSettings_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-            Assert.BuildPassed(result);
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            // Verification for https://github.com/dotnet/aspnetcore/issues/19926. Verify binaries for projects
-            // referenced by the Hosted project appear in the publish directory
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-            Assert.FileExists(result, publishDirectory, "blazorwasm.dll");
-
-            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", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify project references appear as static web assets
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll");
-            // Also verify project references to the server project appear in the publish output
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br");
-
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.gz");
-
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-
-            VerifyTypeGranularTrimming(result, blazorPublishDirectory);
-        }
-
-        [Fact]
-        public async Task Publish_HostedApp_ProducesBootJsonDataWithExpectedContent()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            var wwwroot = Path.Combine(project.DirectoryPath, "..", "blazorwasm", "wwwroot");
-            File.WriteAllText(Path.Combine(wwwroot, "appsettings.json"), "Default settings");
-            File.WriteAllText(Path.Combine(wwwroot, "appsettings.development.json"), "Development settings");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-            Assert.BuildPassed(result);
-
-            var bootJsonPath = Path.Combine(project.PublishOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains(DotNetJsFileName, runtime);
-            Assert.Contains("dotnet.wasm", runtime);
-
-            var assemblies = bootJsonData.resources.assembly.Keys;
-            Assert.Contains("blazorwasm.dll", assemblies);
-            Assert.Contains("RazorClassLibrary.dll", assemblies);
-            Assert.Contains("System.Text.Json.dll", assemblies);
-
-            // No pdbs
-            Assert.Null(bootJsonData.resources.pdb);
-            Assert.Null(bootJsonData.resources.satelliteResources);
-
-            Assert.Contains("appsettings.json", bootJsonData.config);
-            Assert.Contains("appsettings.development.json", bootJsonData.config);
-        }
-
-        [Fact]
-        [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23397")]
-        public async Task Publish_HostedApp_WithSatelliteAssemblies()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", "classlibrarywithsatelliteassemblies", });
-            var wasmProject = project.GetSibling("blazorwasm");
-
-            wasmProject.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <!-- Workaround for https://github.com/mono/linker/issues/1390 -->
-    <PublishTrimmed>false</PublishTrimmed>
-    <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
-</PropertyGroup>
-<ItemGroup>
-    <ProjectReference Include=""..\classlibrarywithsatelliteassemblies\classlibrarywithsatelliteassemblies.csproj"" />
-</ItemGroup>");
-            var resxfileInProject = Path.Combine(wasmProject.DirectoryPath, "Resources.ja.resx.txt");
-            File.Move(resxfileInProject, Path.Combine(wasmProject.DirectoryPath, "Resource.ja.resx"));
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/restore");
-            Assert.BuildPassed(result);
-
-            var bootJsonPath = Path.Combine(project.PublishOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            var publishOutputDirectory = project.PublishOutputDirectory;
-
-            Assert.FileExists(result, publishOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, publishOutputDirectory, "wwwroot", "_framework", "classlibrarywithsatelliteassemblies.dll");
-            Assert.FileExists(result, publishOutputDirectory, "wwwroot", "_framework", "Microsoft.CodeAnalysis.CSharp.dll");
-            Assert.FileExists(result, publishOutputDirectory, "wwwroot", "_framework", "fr", "Microsoft.CodeAnalysis.CSharp.resources.dll"); // Verify satellite assemblies are present in the build output.
-
-            Assert.FileContains(result, bootJsonPath, "\"Microsoft.CodeAnalysis.CSharp.dll\"");
-            Assert.FileContains(result, bootJsonPath, "\"fr\\/Microsoft.CodeAnalysis.CSharp.resources.dll\"");
-        }
-
-        [Fact]
-        // Regression test for https://github.com/dotnet/aspnetcore/issues/18752
-        public async Task Publish_HostedApp_WithoutTrimming_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            AddWasmProjectContent(project, @"
-        <PropertyGroup>
-            <PublishTrimmed>false</PublishTrimmed>
-        </PropertyGroup>");
-
-            // VS builds projects individually and then a publish with BuildDependencies=false, but building the main project is a close enough approximation for this test.
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build");
-
-            Assert.BuildPassed(result);
-
-            // Publish
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:BuildDependencies=false");
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            // Verification for https://github.com/dotnet/aspnetcore/issues/19926. Verify binaries for projects
-            // referenced by the Hosted project appear in the publish directory
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-            Assert.FileExists(result, publishDirectory, "blazorwasm.dll");
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify project references appear as static web assets
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll");
-            // Also verify project references to the server project appear in the publish output
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br");
-
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.gz");
-
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Publish_HostedApp_WithNoBuild_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build");
-
-            Assert.BuildPassed(result);
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:NoBuild=true");
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Publish_HostedApp_VisualStudio()
-        {
-            // Simulates publishing the same way VS does by setting BuildProjectReferences=false.
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            project.Configuration = "Release";
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build", "/p:BuildInsideVisualStudio=true");
-
-            Assert.BuildPassed(result);
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:BuildProjectReferences=false /p:BuildInsideVisualStudio=true");
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Publish_HostedAppWithScopedCss_VisualStudio()
-        {
-            // Simulates publishing the same way VS does by setting BuildProjectReferences=false.
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            File.WriteAllText(Path.Combine(project.SolutionPath, "blazorwasm", "App.razor.css"), "h1 { font-size: 16px; }");
-
-            project.Configuration = "Release";
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build", "/p:BuildInsideVisualStudio=true");
-
-            Assert.BuildPassed(result);
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:BuildProjectReferences=false /p:BuildInsideVisualStudio=true");
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify scoped css
-            Assert.FileExists(result, blazorPublishDirectory, "blazorwasm.styles.css");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        // Regression test to verify satellite assemblies from the blazor app are copied to the published app's wwwroot output directory as
-        // part of publishing in VS
-        [Fact]
-        [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23397")]
-        public async Task Publish_HostedApp_VisualStudio_WithSatelliteAssemblies()
-        {
-            // Simulates publishing the same way VS does by setting BuildProjectReferences=false.
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", "classlibrarywithsatelliteassemblies" });
-            var blazorwasmProjectDirectory = Path.Combine(project.DirectoryPath, "..", "blazorwasm");
-
-            // Setup the blazorwasm app to have it's own satellite assemblies as well as transitively imported satellite assemblies.
-            var resxfileInProject = Path.Combine(blazorwasmProjectDirectory, "Resources.ja.resx.txt");
-            File.Move(resxfileInProject, Path.Combine(blazorwasmProjectDirectory, "Resource.ja.resx"));
-
-            var blazorwasmProjFile = Path.Combine(blazorwasmProjectDirectory, "blazorwasm.csproj");
-            var existing = File.ReadAllText(blazorwasmProjFile);
-            var updatedContent = @"
-        <PropertyGroup>
-            <!-- Workaround for https://github.com/mono/linker/issues/1390 -->
-            <PublishTrimmed>false</PublishTrimmed>
-            <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
-        </PropertyGroup>
-        <ItemGroup>
-            <ProjectReference Include=""..\classlibrarywithsatelliteassemblies\classlibrarywithsatelliteassemblies.csproj"" />
-        </ItemGroup>";
-            var updated = existing.Replace("<!-- Test Placeholder -->", updatedContent);
-            File.WriteAllText(blazorwasmProjFile, updated);
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build", $"/restore");
-
-            Assert.BuildPassed(result);
-
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:BuildProjectReferences=false");
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted.dll");
-
-            var blazorPublishDirectory = Path.Combine(publishDirectory, "wwwroot");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "ja", "blazorwasm.resources.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "fr", "Microsoft.CodeAnalysis.resources.dll");
-
-            var bootJson = Path.Combine(project.DirectoryPath, blazorPublishDirectory, "_framework", "blazor.boot.json");
-            var bootJsonFile = JsonSerializer.Deserialize<BootJsonData>(File.ReadAllText(bootJson), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-            var satelliteResources = bootJsonFile.resources.satelliteResources;
-
-            Assert.Contains("es-ES", satelliteResources.Keys);
-            Assert.Contains("es-ES/classlibrarywithsatelliteassemblies.resources.dll", satelliteResources["es-ES"].Keys);
-            Assert.Contains("fr", satelliteResources.Keys);
-            Assert.Contains("fr/Microsoft.CodeAnalysis.CSharp.resources.dll", satelliteResources["fr"].Keys);
-            Assert.Contains("ja", satelliteResources.Keys);
-            Assert.Contains("ja/blazorwasm.resources.dll", satelliteResources["ja"].Keys);
-
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Publish_HostedApp_WithRidSpecifiedInCLI_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted-rid", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            project.RuntimeIdentifier = "linux-x64";
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", "/p:RuntimeIdentifier=linux-x64");
-
-            AssertRIDPublishOuput(project, result);
-        }
-
-        [Fact]
-        public async Task Publish_HostedApp_WithRid_Works()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorhosted-rid", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
-            project.RuntimeIdentifier = "linux-x64";
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            AssertRIDPublishOuput(project, result);
-        }
-
-        private static void AssertRIDPublishOuput(ProjectDirectory project, MSBuildResult result)
-        {
-            Assert.BuildPassed(result);
-
-            var publishDirectory = project.PublishOutputDirectory;
-            // Make sure the main project exists
-            Assert.FileExists(result, publishDirectory, "blazorhosted-rid.dll");
-            Assert.FileExists(result, publishDirectory, "libhostfxr.so"); // Verify that we're doing a self-contained deployment
-
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-            Assert.FileExists(result, publishDirectory, "blazorwasm.dll");
-
-            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", "dotnet.wasm");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", DotNetJsFileName);
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll"); // Verify dependencies are part of the output.
-
-            // Verify project references appear as static web assets
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll");
-            // Also verify project references to the server project appear in the publish output
-            Assert.FileExists(result, publishDirectory, "RazorClassLibrary.dll");
-
-            // Verify static assets are in the publish directory
-            Assert.FileExists(result, blazorPublishDirectory, "index.html");
-
-            // Verify static web assets from referenced projects are copied.
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "wwwroot", "exampleJsInterop.js");
-            Assert.FileExists(result, publishDirectory, "wwwroot", "_content", "RazorClassLibrary", "styles.css");
-
-            // Verify web.config
-            Assert.FileExists(result, publishDirectory, "web.config");
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory);
-
-            // Verify compression works
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.br");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.br");
-
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "dotnet.wasm.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "blazorwasm.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "RazorClassLibrary.dll.gz");
-            Assert.FileExists(result, blazorPublishDirectory, "_framework", "System.Text.Json.dll.gz");
-
-            VerifyServiceWorkerFiles(result, blazorPublishDirectory,
-                serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-                serviceWorkerContent: "// This is the production service worker",
-                assetsManifestPath: "custom-service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Publish_WithInvariantGlobalizationEnabled_DoesNotCopyGlobalizationData()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm-minimal");
-            project.AddProjectFileContent(
-@"
-<PropertyGroup>
-    <InvariantGlobalization>true</InvariantGlobalization>
-</PropertyGroup>");
-
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish");
-
-            Assert.BuildPassed(result);
-
-            var publishOutputDirectory = project.PublishOutputDirectory;
-
-            var bootJsonPath = Path.Combine(publishOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            var bootJsonData = ReadBootJsonData(result, bootJsonPath);
-
-            Assert.Equal(ICUDataMode.Invariant, bootJsonData.icuDataMode);
-            var runtime = bootJsonData.resources.runtime.Keys;
-            Assert.Contains("dotnet.wasm", runtime);
-            Assert.DoesNotContain("icudt.dat", runtime);
-            Assert.DoesNotContain("icudt_EFIGS.dat", runtime);
-
-            Assert.FileExists(result, publishOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileDoesNotExist(result, publishOutputDirectory, "wwwroot", "_framework", "icudt.dat");
-            Assert.FileDoesNotExist(result, publishOutputDirectory, "wwwroot", "_framework", "icudt_CJK.dat");
-            Assert.FileDoesNotExist(result, publishOutputDirectory, "wwwroot", "_framework", "icudt_EFIGS.dat");
-            Assert.FileDoesNotExist(result, publishOutputDirectory, "wwwroot", "_framework", "icudt_no_CJK.dat");
-        }
-
-        private static void AddWasmProjectContent(ProjectDirectory project, string content)
-        {
-            var path = Path.Combine(project.SolutionPath, "blazorwasm", "blazorwasm.csproj");
-            var existing = File.ReadAllText(path);
-            var updated = existing.Replace("<!-- Test Placeholder -->", content);
-            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");
-            var bootManifestJson = File.ReadAllText(bootManifestResolvedPath);
-            var bootManifest = JsonSerializer.Deserialize<BootJsonData>(bootManifestJson);
-
-            VerifyBootManifestHashes(result, blazorPublishDirectory, bootManifest.resources.assembly);
-            VerifyBootManifestHashes(result, blazorPublishDirectory, bootManifest.resources.runtime);
-
-            if (bootManifest.resources.pdb != null)
-            {
-                VerifyBootManifestHashes(result, blazorPublishDirectory, bootManifest.resources.pdb);
-            }
-
-            if (bootManifest.resources.satelliteResources != null)
-            {
-                foreach (var resourcesForCulture in bootManifest.resources.satelliteResources.Values)
-                {
-                    VerifyBootManifestHashes(result, blazorPublishDirectory, resourcesForCulture);
-                }
-            }
-
-            static void VerifyBootManifestHashes(MSBuildResult result, string blazorPublishDirectory, ResourceHashesByNameDictionary resources)
-            {
-                foreach (var (name, hash) in resources)
-                {
-                    var relativePath = Path.Combine(blazorPublishDirectory, "_framework", name);
-                    Assert.FileHashEquals(result, relativePath, ParseWebFormattedHash(hash));
-                }
-            }
-
-            static string ParseWebFormattedHash(string webFormattedHash)
-            {
-                Assert.StartsWith("sha256-", webFormattedHash);
-                return webFormattedHash.Substring(7);
-            }
-        }
-
-
-        private void VerifyTypeGranularTrimming(MSBuildResult result, string blazorPublishDirectory)
-        {
-            var componentsShimAssemblyPath = Path.Combine(blazorPublishDirectory, "_framework", "Microsoft.AspNetCore.Razor.Test.ComponentShim.dll");
-            Assert.FileExists(result, componentsShimAssemblyPath);
-
-            // RouteView is referenced by the app, so we expect it to be preserved
-            Assert.AssemblyContainsType(result, componentsShimAssemblyPath, "Microsoft.AspNetCore.Components.RouteView");
-
-            // RouteData is referenced by RouteView so we expect it to be preserved.
-            Assert.AssemblyContainsType(result, componentsShimAssemblyPath, "Microsoft.AspNetCore.Components.RouteData");
-
-            // CascadingParameterAttribute is not referenced by the app, and should be trimmed.
-            Assert.AssemblyDoesNotContainType(result, componentsShimAssemblyPath, "Microsoft.AspNetCore.Components.CascadingParameterAttribute");
-        }
-
-        private static BootJsonData ReadBootJsonData(MSBuildResult result, string path)
-        {
-            return JsonSerializer.Deserialize<BootJsonData>(
-                File.ReadAllText(Path.Combine(result.Project.DirectoryPath, path)),
-                new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
-        }
-    }
-}

+ 0 - 213
src/Components/WebAssembly/Sdk/integrationtests/WasmPwaManifestTests.cs

@@ -1,213 +0,0 @@
-// 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.IO;
-using System.Linq;
-using System.Text.Json;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Testing;
-using Xunit;
-using static Microsoft.AspNetCore.Razor.Design.IntegrationTests.ServiceWorkerAssert;
-
-
-namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
-{
-    public class WasmPwaManifestTests
-    {
-        private static readonly string DotNetJsFileName = $"dotnet.{BuildVariables.MicrosoftNETCoreAppRuntimeVersion}.js";
-
-        [Fact]
-        public async Task Build_ServiceWorkerAssetsManifest_Works()
-        {
-            // Arrange
-            var expectedExtensions = new[] { ".dll", ".pdb", ".js", ".wasm" };
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, args: "/p:ServiceWorkerAssetsManifest=service-worker-assets.js");
-
-            Assert.BuildPassed(result);
-
-            var buildOutputDirectory = project.BuildOutputDirectory;
-
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazor.boot.json");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "dotnet.wasm");
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", DotNetJsFileName);
-            Assert.FileExists(result, buildOutputDirectory, "wwwroot", "_framework", "blazorwasm.dll");
-
-            var staticWebAssets = Assert.FileExists(result, buildOutputDirectory, "blazorwasm.StaticWebAssets.xml");
-            Assert.FileContains(result, staticWebAssets, Path.Combine(project.TargetFramework, "wwwroot"));
-
-            var serviceWorkerAssetsManifest = Assert.FileExists(result, buildOutputDirectory, "wwwroot", "service-worker-assets.js");
-            // Trim prefix 'self.assetsManifest = ' and suffix ';'
-            var manifestContents = File.ReadAllText(serviceWorkerAssetsManifest).TrimEnd()[22..^1];
-
-            var manifestContentsJson = JsonDocument.Parse(manifestContents);
-            Assert.True(manifestContentsJson.RootElement.TryGetProperty("assets", out var assets));
-            Assert.Equal(JsonValueKind.Array, assets.ValueKind);
-
-            var entries = assets.EnumerateArray().Select(e => e.GetProperty("url").GetString()).OrderBy(e => e).ToArray();
-            Assert.All(entries, e => expectedExtensions.Contains(Path.GetExtension(e)));
-
-            VerifyServiceWorkerFiles(result,
-               Path.Combine(buildOutputDirectory, "wwwroot"),
-               serviceWorkerPath: Path.Combine("serviceworkers", "my-service-worker.js"),
-               serviceWorkerContent: "// This is the development service worker",
-               assetsManifestPath: "service-worker-assets.js");
-        }
-
-        [Fact]
-        public async Task Build_HostedAppWithServiceWorker_Works()
-        {
-            // Arrange
-            var expectedExtensions = new[] { ".dll", ".pdb", ".js", ".wasm" };
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project);
-
-            Assert.BuildPassed(result);
-
-            var wasmProject = project.GetSibling("blazorwasm");
-            var buildOutputDirectory = Path.Combine(wasmProject.DirectoryPath, wasmProject.BuildOutputDirectory);
-
-            var staticWebAssets = Assert.FileExists(result, buildOutputDirectory, "blazorwasm.StaticWebAssets.xml");
-            Assert.FileContains(result, staticWebAssets, Path.Combine(project.TargetFramework, "wwwroot"));
-
-            var serviceWorkerAssetsManifest = Assert.FileExists(result, buildOutputDirectory, "wwwroot", "custom-service-worker-assets.js");
-            // Trim prefix 'self.assetsManifest = ' and suffix ';'
-            var manifestContents = File.ReadAllText(serviceWorkerAssetsManifest).TrimEnd()[22..^1];
-
-            var manifestContentsJson = JsonDocument.Parse(manifestContents);
-            Assert.True(manifestContentsJson.RootElement.TryGetProperty("assets", out var assets));
-            Assert.Equal(JsonValueKind.Array, assets.ValueKind);
-
-            var entries = assets.EnumerateArray().Select(e => e.GetProperty("url").GetString()).OrderBy(e => e).ToArray();
-            Assert.All(entries, e => expectedExtensions.Contains(Path.GetExtension(e)));
-        }
-
-        [Fact]
-        public async Task PublishWithPWA_ProducesAssets()
-        {
-            // Arrange
-            var expectedExtensions = new[] { ".dll", ".pdb", ".js", ".wasm" };
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "Publish");
-
-            Assert.BuildPassed(result);
-
-            var publishOutputDirectory = project.PublishOutputDirectory;
-
-            var serviceWorkerAssetsManifest = Assert.FileExists(result, publishOutputDirectory, "wwwroot", "custom-service-worker-assets.js");
-            // Trim prefix 'self.assetsManifest = ' and suffix ';'
-            var manifestContents = File.ReadAllText(serviceWorkerAssetsManifest).TrimEnd()[22..^1];
-
-            var manifestContentsJson = JsonDocument.Parse(manifestContents);
-            Assert.True(manifestContentsJson.RootElement.TryGetProperty("assets", out var assets));
-            Assert.Equal(JsonValueKind.Array, assets.ValueKind);
-
-            var entries = assets.EnumerateArray().Select(e => e.GetProperty("url").GetString()).OrderBy(e => e).ToArray();
-            Assert.All(entries, e => expectedExtensions.Contains(Path.GetExtension(e)));
-
-            var serviceWorkerFile = Path.Combine(publishOutputDirectory, "wwwroot", "serviceworkers", "my-service-worker.js");
-            Assert.FileContainsLine(result, serviceWorkerFile, "// This is the production service worker");
-        }
-
-        [Fact]
-        [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23756")]
-        public async Task PublishHostedWithPWA_ProducesAssets()
-        {
-            // Arrange
-            var expectedExtensions = new[] { ".dll", ".pdb", ".js", ".wasm" };
-            using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, target: "Publish");
-
-            Assert.BuildPassed(result);
-
-            var publishOutputDirectory = project.PublishOutputDirectory;
-
-            var serviceWorkerAssetsManifest = Assert.FileExists(result, publishOutputDirectory, "wwwroot", "custom-service-worker-assets.js");
-            // Trim prefix 'self.assetsManifest = ' and suffix ';'
-            var manifestContents = File.ReadAllText(serviceWorkerAssetsManifest).TrimEnd()[22..^1];
-
-            var manifestContentsJson = JsonDocument.Parse(manifestContents);
-            Assert.True(manifestContentsJson.RootElement.TryGetProperty("assets", out var assets));
-            Assert.Equal(JsonValueKind.Array, assets.ValueKind);
-
-            var entries = assets.EnumerateArray().Select(e => e.GetProperty("url").GetString()).OrderBy(e => e).ToArray();
-            Assert.All(entries, e => expectedExtensions.Contains(Path.GetExtension(e)));
-
-            var serviceWorkerFile = Path.Combine(publishOutputDirectory, "wwwroot", "serviceworkers", "my-service-worker.js");
-            Assert.FileContainsLine(result, serviceWorkerFile, "// This is the production service worker");
-        }
-
-        [Fact]
-        public async Task Publish_UpdatesServiceWorkerVersionHash_WhenSourcesChange()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", args: "/bl:initial.binlog /p:ServiceWorkerAssetsManifest=service-worker-assets.js");
-
-            Assert.BuildPassed(result);
-
-            var publishOutputDirectory = project.PublishOutputDirectory;
-
-            var serviceWorkerFile = Assert.FileExists(result, publishOutputDirectory, "wwwroot", "serviceworkers", "my-service-worker.js");
-            var version = File.ReadAllLines(serviceWorkerFile).Last();
-            var match = Regex.Match(version, "\\/\\* Manifest version: (.{8}) \\*\\/");
-            Assert.True(match.Success);
-            Assert.Equal(2, match.Groups.Count);
-            Assert.NotNull(match.Groups[1].Value);
-            var capture = match.Groups[1].Value;
-
-            // Act
-            var cssFile = Path.Combine(project.DirectoryPath, "LinkToWebRoot", "css", "app.css");
-            File.WriteAllText(cssFile, ".updated { }");
-
-            // Assert
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", args: "/bl:updated.binlog /p:ServiceWorkerAssetsManifest=service-worker-assets.js");
-
-            Assert.BuildPassed(result);
-
-            var updatedVersion = File.ReadAllLines(serviceWorkerFile).Last();
-            var updatedMatch = Regex.Match(updatedVersion, "\\/\\* Manifest version: (.{8}) \\*\\/");
-            Assert.True(updatedMatch.Success);
-            Assert.Equal(2, updatedMatch.Groups.Count);
-            Assert.NotNull(updatedMatch.Groups[1].Value);
-            var updatedCapture = updatedMatch.Groups[1].Value;
-
-            Assert.NotEqual(capture, updatedCapture);
-        }
-
-        [Fact]
-        public async Task Publish_DeterministicAcrossBuilds_WhenNoSourcesChange()
-        {
-            // Arrange
-            using var project = ProjectDirectory.Create("blazorwasm", additionalProjects: new[] { "razorclasslibrary" });
-            var result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", args: "/bl:initial.binlog /p:ServiceWorkerAssetsManifest=service-worker-assets.js");
-
-            Assert.BuildPassed(result);
-
-            var publishOutputDirectory = project.PublishOutputDirectory;
-
-            var serviceWorkerFile = Assert.FileExists(result, publishOutputDirectory, "wwwroot", "serviceworkers", "my-service-worker.js");
-            var version = File.ReadAllLines(serviceWorkerFile).Last();
-            var match = Regex.Match(version, "\\/\\* Manifest version: (.{8}) \\*\\/");
-            Assert.True(match.Success, $"No match found for manifest version regex in line: {version}");
-            Assert.Equal(2, match.Groups.Count);
-            Assert.NotNull(match.Groups[1].Value);
-            var capture = match.Groups[1].Value;
-
-            // Act && Assert
-            result = await MSBuildProcessManager.DotnetMSBuild(project, "Publish", args: "/bl:updated.binlog /p:ServiceWorkerAssetsManifest=service-worker-assets.js");
-
-            Assert.BuildPassed(result);
-
-            var updatedVersion = File.ReadAllLines(serviceWorkerFile).Last();
-            var updatedMatch = Regex.Match(updatedVersion, "\\/\\* Manifest version: (.{8}) \\*\\/");
-            Assert.True(updatedMatch.Success);
-            Assert.Equal(2, updatedMatch.Groups.Count);
-            Assert.NotNull(updatedMatch.Groups[1].Value);
-            var updatedCapture = updatedMatch.Groups[1].Value;
-
-            Assert.Equal(capture, updatedCapture);
-        }
-    }
-}

+ 0 - 5
src/Components/WebAssembly/Sdk/integrationtests/xunit.runner.json

@@ -1,5 +0,0 @@
-{
-  "methodDisplay": "method",
-  "shadowCopy": false,
-  "maxParallelThreads": -1
-}

+ 0 - 33
src/Components/WebAssembly/Sdk/src/AssetsManifestFile.cs

@@ -1,33 +0,0 @@
-// 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.
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-#pragma warning disable IDE1006 // Naming Styles
-    public class AssetsManifestFile
-    {
-        /// <summary>
-        /// Gets or sets a version string.
-        /// </summary>
-        public string version { get; set; }
-
-        /// <summary>
-        /// Gets or sets the assets. Keys are URLs; values are base-64-formatted SHA256 content hashes.
-        /// </summary>
-        public AssetsManifestFileEntry[] assets { get; set; }
-    }
-
-    public class AssetsManifestFileEntry
-    {
-        /// <summary>
-        /// Gets or sets the asset URL. Normally this will be relative to the application's base href.
-        /// </summary>
-        public string url { get; set; }
-
-        /// <summary>
-        /// Gets or sets the file content hash. This should be the base-64-formatted SHA256 value.
-        /// </summary>
-        public string hash { get; set; }
-    }
-#pragma warning restore IDE1006 // Naming Styles
-}

+ 0 - 38
src/Components/WebAssembly/Sdk/src/BlazorReadSatelliteAssemblyFile.cs

@@ -1,38 +0,0 @@
-// 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.Linq;
-using System.Xml.Linq;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class BlazorReadSatelliteAssemblyFile : Task
-    {
-        [Output]
-        public ITaskItem[] SatelliteAssembly { get; set; }
-
-        [Required]
-        public ITaskItem ReadFile { get; set; }
-
-        public override bool Execute()
-        {
-            var document = XDocument.Load(ReadFile.ItemSpec);
-            SatelliteAssembly = document.Root
-                .Elements()
-                .Select(e =>
-                {
-                    // <Assembly Name="..." Culture="..." DestinationSubDirectory="..." />
-
-                    var taskItem = new TaskItem(e.Attribute("Name").Value);
-                    taskItem.SetMetadata("Culture", e.Attribute("Culture").Value);
-                    taskItem.SetMetadata("DestinationSubDirectory", e.Attribute("DestinationSubDirectory").Value);
-
-                    return taskItem;
-                }).ToArray();
-
-            return true;
-        }
-    }
-}

+ 0 - 53
src/Components/WebAssembly/Sdk/src/BlazorWriteSatelliteAssemblyFile.cs

@@ -1,53 +0,0 @@
-// 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.IO;
-using System.Xml;
-using System.Xml.Linq;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class BlazorWriteSatelliteAssemblyFile : Task
-    {
-        [Required]
-        public ITaskItem[] SatelliteAssembly { get; set; }
-
-        [Required]
-        public ITaskItem WriteFile { get; set; }
-
-        public override bool Execute()
-        {
-            using var fileStream = File.Create(WriteFile.ItemSpec);
-            WriteSatelliteAssemblyFile(fileStream);
-            return true;
-        }
-
-        internal void WriteSatelliteAssemblyFile(Stream stream)
-        {
-            var root = new XElement("SatelliteAssembly");
-
-            foreach (var item in SatelliteAssembly)
-            {
-                // <Assembly Name="..." Culture="..." DestinationSubDirectory="..." />
-
-                root.Add(new XElement("Assembly",
-                    new XAttribute("Name", item.ItemSpec),
-                    new XAttribute("Culture", item.GetMetadata("Culture")),
-                    new XAttribute("DestinationSubDirectory", item.GetMetadata("DestinationSubDirectory"))));
-            }
-
-            var xmlWriterSettings = new XmlWriterSettings
-            {
-                Indent = true,
-                OmitXmlDeclaration = true
-            };
-
-            using var writer = XmlWriter.Create(stream, xmlWriterSettings);
-            var xDocument = new XDocument(root);
-
-            xDocument.Save(writer);
-        }
-    }
-}

+ 0 - 108
src/Components/WebAssembly/Sdk/src/BootJsonData.cs

@@ -1,108 +0,0 @@
-// 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.Collections.Generic;
-using System.Runtime.Serialization;
-using ResourceHashesByNameDictionary = System.Collections.Generic.Dictionary<string, string>;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-#pragma warning disable IDE1006 // Naming Styles
-    /// <summary>
-    /// Defines the structure of a Blazor boot JSON file
-    /// </summary>
-    public class BootJsonData
-    {
-        /// <summary>
-        /// Gets the name of the assembly with the application entry point
-        /// </summary>
-        public string entryAssembly { get; set; }
-
-        /// <summary>
-        /// Gets the set of resources needed to boot the application. This includes the transitive
-        /// closure of .NET assemblies (including the entrypoint assembly), the dotnet.wasm file,
-        /// and any PDBs to be loaded.
-        ///
-        /// Within <see cref="ResourceHashesByNameDictionary"/>, dictionary keys are resource names,
-        /// and values are SHA-256 hashes formatted in prefixed base-64 style (e.g., 'sha256-abcdefg...')
-        /// as used for subresource integrity checking.
-        /// </summary>
-        public ResourcesData resources { get; set; } = new ResourcesData();
-
-        /// <summary>
-        /// Gets a value that determines whether to enable caching of the <see cref="resources"/>
-        /// inside a CacheStorage instance within the browser.
-        /// </summary>
-        public bool cacheBootResources { get; set; }
-
-        /// <summary>
-        /// Gets a value that determines if this is a debug build.
-        /// </summary>
-        public bool debugBuild { get; set; }
-
-        /// <summary>
-        /// Gets a value that determines if the linker is enabled.
-        /// </summary>
-        public bool linkerEnabled { get; set; }
-
-        /// <summary>
-        /// Config files for the application
-        /// </summary>
-        public List<string> config { get; set; }
-
-        /// <summary>
-        /// Gets or sets the <see cref="ICUDataMode"/> that determines how icu files are loaded.
-        /// </summary>
-        public ICUDataMode icuDataMode { get; set; }
-    }
-
-    public class ResourcesData
-    {
-        /// <summary>
-        /// .NET Wasm runtime resources (dotnet.wasm, dotnet.js) etc.
-        /// </summary>
-        public ResourceHashesByNameDictionary runtime { get; set; } = new ResourceHashesByNameDictionary();
-
-        /// <summary>
-        /// "assembly" (.dll) resources
-        /// </summary>
-        public ResourceHashesByNameDictionary assembly { get; set; } = new ResourceHashesByNameDictionary();
-
-        /// <summary>
-        /// "debug" (.pdb) resources
-        /// </summary>
-        [DataMember(EmitDefaultValue = false)]
-        public ResourceHashesByNameDictionary pdb { get; set; }
-
-        /// <summary>
-        /// localization (.satellite resx) resources
-        /// </summary>
-        [DataMember(EmitDefaultValue = false)]
-        public Dictionary<string, ResourceHashesByNameDictionary> satelliteResources { get; set; }
-
-        /// <summary>
-        /// Assembly (.dll) resources that are loaded lazily during runtime
-        /// </summary>
-        [DataMember(EmitDefaultValue = false)]
-        public ResourceHashesByNameDictionary lazyAssembly { get; set; }
-    }
-
-    public enum ICUDataMode
-    {
-        /// <summary>
-        /// Load optimized icu data file based on the user's locale
-        /// </summary>
-        Sharded,
-
-        /// <summary>
-        /// Use the combined icudt.dat file
-        /// </summary>
-        All,
-
-        /// <summary>
-        /// Do not load any icu data files.
-        /// </summary>
-        Invariant,
-    }
-#pragma warning restore IDE1006 // Naming Styles
-}

+ 0 - 136
src/Components/WebAssembly/Sdk/src/BrotliCompress.cs

@@ -1,136 +0,0 @@
-// 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.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Security.Cryptography;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class BrotliCompress : ToolTask
-    {
-        private static readonly char[] InvalidPathChars = Path.GetInvalidFileNameChars();
-        private string _dotnetPath;
-
-        [Required]
-        public ITaskItem[] FilesToCompress { get; set; }
-
-        [Output]
-        public ITaskItem[] CompressedFiles { get; set; }
-
-        [Required]
-        public string OutputDirectory { get; set; }
-
-        public string CompressionLevel { get; set; }
-
-        public bool SkipIfOutputIsNewer { get; set; }
-
-        [Required]
-        public string ToolAssembly { get; set; }
-
-        protected override string ToolName => Path.GetDirectoryName(DotNetPath);
-
-        private string DotNetPath
-        {
-            get
-            {
-                if (!string.IsNullOrEmpty(_dotnetPath))
-                {
-                    return _dotnetPath;
-                }
-
-                _dotnetPath = Environment.GetEnvironmentVariable("DOTNET_HOST_PATH");
-                if (string.IsNullOrEmpty(_dotnetPath))
-                {
-                    throw new InvalidOperationException("DOTNET_HOST_PATH is not set");
-                }
-
-                return _dotnetPath;
-            }
-        }
-
-        private static string Quote(string path)
-        {
-            if (string.IsNullOrEmpty(path) || (path[0] == '\"' && path[path.Length - 1] == '\"'))
-            {
-                // it's already quoted
-                return path;
-            }
-
-            return $"\"{path}\"";
-        }
-
-        protected override string GenerateCommandLineCommands() => Quote(ToolAssembly);
-
-        protected override string GenerateResponseFileCommands()
-        {
-            var builder = new StringBuilder();
-
-
-            builder.AppendLine("brotli");
-
-            if (!string.IsNullOrEmpty(CompressionLevel))
-            {
-                builder.AppendLine("-c");
-                builder.AppendLine(CompressionLevel);
-            }
-
-            CompressedFiles = new ITaskItem[FilesToCompress.Length];
-
-            for (var i = 0; i < FilesToCompress.Length; i++)
-            {
-                var input = FilesToCompress[i];
-                var inputFullPath = input.GetMetadata("FullPath");
-                var relativePath = input.GetMetadata("RelativePath");
-                var outputRelativePath = Path.Combine(OutputDirectory, CalculateTargetPath(inputFullPath, ".br"));
-                var outputFullPath = Path.GetFullPath(outputRelativePath);
-
-                var outputItem = new TaskItem(outputRelativePath);
-                outputItem.SetMetadata("RelativePath", relativePath + ".br");
-                CompressedFiles[i] = outputItem;
-
-                if (SkipIfOutputIsNewer && File.Exists(outputFullPath) && File.GetLastWriteTimeUtc(inputFullPath) < File.GetLastWriteTimeUtc(outputFullPath))
-                {
-                    Log.LogMessage(MessageImportance.Low, $"Skipping compression for '{input.ItemSpec}' because '{outputRelativePath}' is newer than '{input.ItemSpec}'.");
-                    continue;
-                }
-
-                builder.AppendLine("-s");
-                builder.AppendLine(inputFullPath);
-
-                builder.AppendLine("-o");
-                builder.AppendLine(outputFullPath);
-            }
-
-            return builder.ToString();
-        }
-
-        internal static string CalculateTargetPath(string relativePath, string extension)
-        {
-            // RelativePath can be long and if used as-is to write the output, might result in long path issues on Windows.
-            // Instead we'll calculate a fixed length path by hashing the input file name. This uses SHA1 similar to the Hash task in MSBuild
-            // since it has no crytographic significance.
-            using var hash = SHA1.Create();
-            var bytes = Encoding.UTF8.GetBytes(relativePath);
-            var hashString = Convert.ToBase64String(hash.ComputeHash(bytes));
-
-            var builder = new StringBuilder();
-
-            for (var i = 0; i < 8; i++)
-            {
-                var c = hashString[i];
-                builder.Append(InvalidPathChars.Contains(c) ? '+' : c);
-            }
-
-            builder.Append(extension);
-            return builder.ToString();
-        }
-
-        protected override string GenerateFullPathToTool() => DotNetPath;
-    }
-}

+ 0 - 79
src/Components/WebAssembly/Sdk/src/CreateBlazorTrimmerRootDescriptorFile.cs

@@ -1,79 +0,0 @@
-// 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;
-using System.Xml;
-using System.Xml.Linq;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    // Based on https://github.com/mono/linker/blob/3b329b9481e300bcf4fb88a2eebf8cb5ef8b323b/src/ILLink.Tasks/CreateRootDescriptorFile.cs
-    public class CreateBlazorTrimmerRootDescriptorFile : Task
-    {
-        [Required]
-        public ITaskItem[] Assemblies { get; set; }
-
-        [Required]
-        public ITaskItem TrimmerFile { get; set; }
-
-        public override bool Execute()
-        {
-            var rootDescriptor = CreateRootDescriptorContents();
-            if (File.Exists(TrimmerFile.ItemSpec))
-            {
-                var existing = File.ReadAllText(TrimmerFile.ItemSpec);
-
-                if (string.Equals(rootDescriptor, existing, StringComparison.Ordinal))
-                {
-                    Log.LogMessage(MessageImportance.Low, "Skipping write to file {0} because contents would not change.", TrimmerFile.ItemSpec);
-                    // Avoid writing if the file contents are identical. This is required for build incrementalism.
-                    return !Log.HasLoggedErrors;
-                }
-            }
-
-            File.WriteAllText(TrimmerFile.ItemSpec, rootDescriptor);
-            return !Log.HasLoggedErrors;
-        }
-
-        internal string CreateRootDescriptorContents()
-        {
-            var roots = new XElement("linker");
-            foreach (var assembly in Assemblies.OrderBy(a => a.ItemSpec))
-            {
-                // NOTE: Descriptor files don't include the file extension
-                // in the assemblyName.
-                var assemblyName = assembly.GetMetadata("FileName");
-                var typePreserved = assembly.GetMetadata("Preserve");
-                var typeRequired = assembly.GetMetadata("Required");
-
-                var attributes = new List<XAttribute>
-                {
-                    new XAttribute("fullname", "*"),
-                    new XAttribute("required", typeRequired),
-                };
-
-                if (!string.IsNullOrEmpty(typePreserved))
-                {
-                    attributes.Add(new XAttribute("preserve", typePreserved));
-                }
-
-                roots.Add(new XElement("assembly",
-                    new XAttribute("fullname", assemblyName),
-                    new XElement("type", attributes)));
-            }
-
-            var xmlWriterSettings = new XmlWriterSettings
-            {
-                Indent = true,
-                OmitXmlDeclaration = true
-            };
-
-            return new XDocument(roots).Root.ToString();
-        }
-    }
-}

+ 0 - 70
src/Components/WebAssembly/Sdk/src/GZipCompress.cs

@@ -1,70 +0,0 @@
-// 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.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Security.Cryptography;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class GZipCompress : Task
-    {
-        [Required]
-        public ITaskItem[] FilesToCompress { get; set; }
-
-        [Output]
-        public ITaskItem[] CompressedFiles { get; set; }
-
-        [Required]
-        public string OutputDirectory { get; set; }
-
-        public override bool Execute()
-        {
-            CompressedFiles = new ITaskItem[FilesToCompress.Length];
-
-            Directory.CreateDirectory(OutputDirectory);
-
-            System.Threading.Tasks.Parallel.For(0, FilesToCompress.Length, i =>
-            {
-                var file = FilesToCompress[i];
-                var inputFullPath = file.GetMetadata("FullPath");
-                var relativePath = file.GetMetadata("RelativePath");
-                var outputRelativePath = Path.Combine(
-                    OutputDirectory,
-                    BrotliCompress.CalculateTargetPath(inputFullPath, ".gz"));
-
-                var outputItem = new TaskItem(outputRelativePath);
-                outputItem.SetMetadata("RelativePath", relativePath + ".gz");
-                CompressedFiles[i] = outputItem;
-
-                if (File.Exists(outputRelativePath) && File.GetLastWriteTimeUtc(inputFullPath) < File.GetLastWriteTimeUtc(outputRelativePath))
-                {
-                    // Incrementalism. If input source doesn't exist or it exists and is not newer than the expected output, do nothing.
-                    Log.LogMessage(MessageImportance.Low, $"Skipping '{file.ItemSpec}' because '{outputRelativePath}' is newer than '{file.ItemSpec}'.");
-                    return;
-                }
-
-                try
-                {
-                    using var sourceStream = File.OpenRead(file.ItemSpec);
-                    using var fileStream = File.Create(outputRelativePath);
-                    using var stream = new GZipStream(fileStream, CompressionLevel.Optimal);
-
-                    sourceStream.CopyTo(stream);
-                }
-                catch (Exception e)
-                {
-                    Log.LogErrorFromException(e);
-                    return;
-                }
-            });
-
-            return !Log.HasLoggedErrors;
-        }
-    }
-}

+ 0 - 176
src/Components/WebAssembly/Sdk/src/GenerateBlazorWebAssemblyBootJson.cs

@@ -1,176 +0,0 @@
-// 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;
-using System.Reflection;
-using System.Runtime.Serialization.Json;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-using ResourceHashesByNameDictionary = System.Collections.Generic.Dictionary<string, string>;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class GenerateBlazorWebAssemblyBootJson : Task
-    {
-        [Required]
-        public string AssemblyPath { get; set; }
-
-        [Required]
-        public ITaskItem[] Resources { get; set; }
-
-        [Required]
-        public bool DebugBuild { get; set; }
-
-        [Required]
-        public bool LinkerEnabled { get; set; }
-
-        [Required]
-        public bool CacheBootResources { get; set; }
-
-        public bool LoadAllICUData { get; set; }
-
-        public string InvariantGlobalization { get; set; }
-
-        public ITaskItem[] ConfigurationFiles { get; set; }
-
-        [Required]
-        public string OutputPath { get; set; }
-
-        public ITaskItem[] LazyLoadedAssemblies { get; set; }
-
-        public override bool Execute()
-        {
-            using var fileStream = File.Create(OutputPath);
-            var entryAssemblyName = AssemblyName.GetAssemblyName(AssemblyPath).Name;
-
-            try
-            {
-                WriteBootJson(fileStream, entryAssemblyName);
-            }
-            catch (Exception ex)
-            {
-                Log.LogErrorFromException(ex);
-            }
-
-            return !Log.HasLoggedErrors;
-        }
-
-        // Internal for tests
-        public void WriteBootJson(Stream output, string entryAssemblyName)
-        {
-            var icuDataMode = ICUDataMode.Sharded;
-
-            if (string.Equals(InvariantGlobalization, "true", StringComparison.OrdinalIgnoreCase))
-            {
-                icuDataMode = ICUDataMode.Invariant;
-            }
-            else if (LoadAllICUData)
-            {
-                icuDataMode = ICUDataMode.All;
-            }
-
-            var result = new BootJsonData
-            {
-                entryAssembly = entryAssemblyName,
-                cacheBootResources = CacheBootResources,
-                debugBuild = DebugBuild,
-                linkerEnabled = LinkerEnabled,
-                resources = new ResourcesData(),
-                config = new List<string>(),
-                icuDataMode = icuDataMode,
-            };
-
-            // Build a two-level dictionary of the form:
-            // - assembly:
-            //   - UriPath (e.g., "System.Text.Json.dll")
-            //     - ContentHash (e.g., "4548fa2e9cf52986")
-            // - runtime:
-            //   - UriPath (e.g., "dotnet.js")
-            //     - ContentHash (e.g., "3448f339acf512448")
-            if (Resources != null)
-            {
-                var resourceData = result.resources;
-                foreach (var resource in Resources)
-                {
-                    ResourceHashesByNameDictionary resourceList;
-
-                    var fileName = resource.GetMetadata("FileName");
-                    var extension = resource.GetMetadata("Extension");
-                    var resourceCulture = resource.GetMetadata("Culture");
-                    var assetType = resource.GetMetadata("AssetType");
-                    var resourceName = $"{fileName}{extension}";
-
-                    if (IsLazyLoadedAssembly(resourceName))
-                    {
-                        resourceData.lazyAssembly ??= new ResourceHashesByNameDictionary();
-                        resourceList = resourceData.lazyAssembly;
-                    }
-                    else if (!string.IsNullOrEmpty(resourceCulture))
-                    {
-                        resourceData.satelliteResources ??= new Dictionary<string, ResourceHashesByNameDictionary>(StringComparer.OrdinalIgnoreCase);
-                        resourceName = resourceCulture + "/" + resourceName;
-
-                        if (!resourceData.satelliteResources.TryGetValue(resourceCulture, out resourceList))
-                        {
-                            resourceList = new ResourceHashesByNameDictionary();
-                            resourceData.satelliteResources.Add(resourceCulture, resourceList);
-                        }
-                    }
-                    else if (string.Equals(extension, ".pdb", StringComparison.OrdinalIgnoreCase))
-                    {
-                        resourceData.pdb ??= new ResourceHashesByNameDictionary();
-                        if (IsLazyLoadedAssembly($"{fileName}.dll"))
-                        {
-                            resourceList = resourceData.lazyAssembly;
-                        } else {
-                            resourceList = resourceData.pdb;
-                        }
-                    }
-                    else if (string.Equals(extension, ".dll", StringComparison.OrdinalIgnoreCase))
-                    {
-                        resourceList = resourceData.assembly;
-                    }
-                    else if (string.Equals(assetType, "native", StringComparison.OrdinalIgnoreCase))
-                    {
-                        resourceList = resourceData.runtime;
-                    }
-                    else
-                    {
-                        // This should include items such as XML doc files, which do not need to be recorded in the manifest.
-                        continue;
-                    }
-
-                    if (!resourceList.ContainsKey(resourceName))
-                    {
-                        resourceList.Add(resourceName, $"sha256-{resource.GetMetadata("FileHash")}");
-                    }
-                }
-            }
-
-            if (ConfigurationFiles != null)
-            {
-                foreach (var configFile in ConfigurationFiles)
-                {
-                    result.config.Add(Path.GetFileName(configFile.ItemSpec));
-                }
-            }
-
-            var serializer = new DataContractJsonSerializer(typeof(BootJsonData), new DataContractJsonSerializerSettings
-            {
-                UseSimpleDictionaryFormat = true
-            });
-
-            using var writer = JsonReaderWriterFactory.CreateJsonWriter(output, Encoding.UTF8, ownsStream: false, indent: true);
-            serializer.WriteObject(writer, result);
-        }
-
-        private bool IsLazyLoadedAssembly(string fileName)
-        {
-            return LazyLoadedAssemblies != null && LazyLoadedAssemblies.Any(a => a.ItemSpec == fileName);
-        }
-    }
-}

+ 0 - 97
src/Components/WebAssembly/Sdk/src/GenerateServiceWorkerAssetsManifest.cs

@@ -1,97 +0,0 @@
-// 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.IO;
-using System.Linq;
-using System.Runtime.Serialization.Json;
-using System.Security.Cryptography;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public partial class GenerateServiceWorkerAssetsManifest : Task
-    {
-        [Required]
-        public ITaskItem[] Assets { get; set; }
-
-        public string Version { get; set; }
-
-        [Required]
-        public string OutputPath { get; set; }
-
-        [Output]
-        public string CalculatedVersion { get; set; }
-
-        public override bool Execute()
-        {
-            using var fileStream = File.Create(OutputPath);
-            CalculatedVersion = GenerateAssetManifest(fileStream);
-
-            return true;
-        }
-
-        internal string GenerateAssetManifest(Stream stream)
-        {
-            var assets = new AssetsManifestFileEntry[Assets.Length];
-            System.Threading.Tasks.Parallel.For(0, assets.Length, i =>
-            {
-                var item = Assets[i];
-                var hash = item.GetMetadata("FileHash");
-                var url = item.GetMetadata("AssetUrl");
-
-                if (string.IsNullOrEmpty(hash))
-                {
-                    // Some files that are part of the service worker manifest may not have their hashes previously
-                    // calcualted. Calculate them at this time.
-                    using var sha = SHA256.Create();
-                    using var file = File.OpenRead(item.ItemSpec);
-                    var bytes = sha.ComputeHash(file);
-
-                    hash = Convert.ToBase64String(bytes);
-                }
-
-                assets[i] = new AssetsManifestFileEntry
-                {
-                    hash = "sha256-" + hash,
-                    url = url,
-                };
-            });
-
-            var version = Version;
-            if (string.IsNullOrEmpty(version))
-            {
-                // If a version isn't specified (which is likely the most common case), construct a Version by combining
-                // the file names + hashes of all the inputs.
-
-                var combinedHash = string.Join(
-                    Environment.NewLine,
-                    assets.OrderBy(f => f.url, StringComparer.Ordinal).Select(f => f.hash));
-
-                using var sha = SHA256.Create();
-                var bytes = sha.ComputeHash(Encoding.UTF8.GetBytes(combinedHash));
-                version = Convert.ToBase64String(bytes).Substring(0, 8);
-            }
-
-            var data = new AssetsManifestFile
-            {
-                version = version,
-                assets = assets,
-            };
-
-            using var streamWriter = new StreamWriter(stream, Encoding.UTF8, bufferSize: 50, leaveOpen: true);
-            streamWriter.Write("self.assetsManifest = ");
-            streamWriter.Flush();
-
-            using var jsonWriter = JsonReaderWriterFactory.CreateJsonWriter(stream, Encoding.UTF8, ownsStream: false, indent: true);
-            new DataContractJsonSerializer(typeof(AssetsManifestFile)).WriteObject(jsonWriter, data);
-            jsonWriter.Flush();
-
-            streamWriter.WriteLine(";");
-
-            return version;
-        }
-    }
-}

+ 0 - 95
src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.csproj

@@ -1,95 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <Description>MSBuild support for building Blazor WebAssembly apps.</Description>
-    <TargetFrameworks>$(DefaultNetCoreTargetFramework);net46</TargetFrameworks>
-
-    <TargetName>Microsoft.NET.Sdk.BlazorWebAssembly.Tasks</TargetName>
-    <NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
-    <Serviceable>true</Serviceable>
-    <SdkOutputPath>$(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly\$(Configuration)\sdk-output\</SdkOutputPath>
-
-    <!-- Allow assemblies outside of lib in the package -->
-    <NoWarn>$(NoWarn);NU5100</NoWarn>
-    <!-- Need to build this project in source build -->
-    <ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
-    <!-- No need to track public APIs of these MSBuild tasks. -->
-    <AddPublicApiAnalyzers>false</AddPublicApiAnalyzers>
-
-    <!-- Temporarily target the previous runtime until https://github.com/dotnet/sdk/pull/14574 is merged. -->
-    <TargetLatestDotNetRuntime>false</TargetLatestDotNetRuntime>
-
-    <IsShipping>false</IsShipping>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Reference Include="Microsoft.Build.Framework" />
-    <Reference Include="Microsoft.Build.Utilities.Core" />
-
-    <ProjectReference
-      Include="..\tools\Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj"
-      Targets="Publish"
-      ReferenceOutputAssembly="false"
-      SkipGetTargetFrameworkProperties="true"
-      UndefineProperties="TargetFramework;TargetFrameworks;RuntimeIdentifier;PublishDir" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Content Include="_._" CopyToOutputDirectory="PreserveNewest" />
-  </ItemGroup>
-
-  <Target Name="LayoutDependencies" BeforeTargets="Build"
-    Condition="'$(IsInnerBuild)' != 'true' AND '$(NoBuild)' != 'true'">
-    <!-- Layout tasks, compiler, and extensions in the sdk-output folder. The entire folder structure gets packaged as-is into the SDK -->
-
-    <PropertyGroup Condition="'$(ContinuousIntegrationBuild)' != 'true'">
-      <_ContinueOnError>true</_ContinueOnError>
-      <_Retries>1</_Retries>
-    </PropertyGroup>
-
-    <PropertyGroup Condition="'$(ContinuousIntegrationBuild)' == 'true'">
-      <_ContinueOnError>false</_ContinueOnError>
-      <_Retries>10</_Retries>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_WebAssemblyToolsOutput Include="$(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly.Tools\$(Configuration)\$(DefaultNetCoreTargetFramework)\publish\Microsoft.*" />
-    </ItemGroup>
-
-    <Error
-      Text="WebAssembly SDK tools outputs were not found in $(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly.Tools\$(Configuration)\$(DefaultNetCoreTargetFramework)\publish"
-      Condition="'@(_WebAssemblyToolsOutput->Count())' == '0'" />
-
-    <Copy
-      SourceFiles="@(_WebAssemblyToolsOutput)"
-      DestinationFolder="$(SdkOutputPath)tools\$(DefaultNetCoreTargetFramework)\"
-      SkipUnchangedFiles="true"
-      Retries="$(_Retries)"
-      ContinueOnError="$(_ContinueOnError)" />
-
-    <ItemGroup>
-      <ProjectOutput Include="$(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly\$(Configuration)\net46*\Microsoft.NET.Sdk.BlazorWebAssembly.*" />
-      <ProjectOutput Include="$(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly\$(Configuration)\$(DefaultNetCoreTargetFramework)*\Microsoft.NET.Sdk.BlazorWebAssembly.*" />
-    </ItemGroup>
-
-    <Copy SourceFiles="@(ProjectOutput)" DestinationFiles="$(SdkOutputPath)tasks\%(RecursiveDir)%(FileName)%(Extension)" SkipUnchangedFiles="true" Retries="$(_Retries)" ContinueOnError="$(_ContinueOnError)">
-      <Output TaskParameter="CopiedFiles" ItemName="FileWrites" />
-    </Copy>
-
-    <Message Text="Blazor WebAssembly SDK output -&gt; $(SdkOutputPath)" Importance="High" />
-  </Target>
-
-  <Target Name="PopulateNuspec" BeforeTargets="InitializeStandardNuspecProperties" DependsOnTargets="LayoutDependencies">
-    <PropertyGroup>
-      <PackageTags>$(PackageTags.Replace(';',' '))</PackageTags>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <NuspecProperty Include="outputPath=$(OutputPath)\sdk-output" />
-    </ItemGroup>
-  </Target>
-
-  <!-- Workarounds to allow publishing to work when the SDK is referenced as a project.  -->
-  <Target Name="GetTargetPath" />
-  <Target Name="GetCopyToPublishDirectoryItems" />
-
-</Project>

+ 0 - 19
src/Components/WebAssembly/Sdk/src/Microsoft.NET.Sdk.BlazorWebAssembly.nuspec

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
-  <metadata>
-    $CommonMetadataElements$
-    <dependencies>
-      <group targetFramework=".NET6.0" />
-    </dependencies>
-  </metadata>
-
-  <files>
-    $CommonFileElements$
-    <file src="Sdk\*" target="Sdk" />
-    <file src="build\**" target="build" />
-    <file src="targets\**" target="targets" />
-    <file src="_._" target="lib\net6.0\_._" />
-
-    <file src="$outputPath$\**" target="\" />
-  </files>
-</package>

+ 0 - 22
src/Components/WebAssembly/Sdk/src/Sdk/Sdk.props

@@ -1,22 +0,0 @@
-<!--
-***********************************************************************************************
-Sdk.props
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-Copyright (c) .NET Foundation. All rights reserved.
-***********************************************************************************************
--->
-<Project ToolsVersion="14.0" TreatAsLocalProperty="RuntimeIdentifier">
-  <PropertyGroup>
-    <UsingMicrosoftNETSdkBlazorWebAssembly>true</UsingMicrosoftNETSdkBlazorWebAssembly>
-  </PropertyGroup>
-
-  <PropertyGroup>
-    <_BlazorWebAssemblyPropsFile Condition="'$(_BlazorWebAssemblyPropsFile)' == ''">$(MSBuildThisFileDirectory)..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.props</_BlazorWebAssemblyPropsFile>
-  </PropertyGroup>
-
-  <Import Project="$(_BlazorWebAssemblyPropsFile)" />
-</Project>

+ 0 - 24
src/Components/WebAssembly/Sdk/src/Sdk/Sdk.targets

@@ -1,24 +0,0 @@
-<!--
-***********************************************************************************************
-Sdk.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-Copyright (c) .NET Foundation. All rights reserved.
-***********************************************************************************************
--->
-<Project ToolsVersion="14.0">
-
-  <PropertyGroup>
-    <_BlazorWebAssemblyTargetsFile Condition="'$(_BlazorWebAssemblyTargetsFile)' == ''">$(MSBuildThisFileDirectory)..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets</_BlazorWebAssemblyTargetsFile>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectCapability Include="WebAssembly" />
-  </ItemGroup>
-  
-  <Import Project="$(_BlazorWebAssemblyTargetsFile)" />
-
-</Project>

+ 0 - 0
src/Components/WebAssembly/Sdk/src/_._


+ 0 - 15
src/Components/WebAssembly/Sdk/src/build/net6.0/Microsoft.NET.Sdk.BlazorWebAssembly.props

@@ -1,15 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.NET.Sdk.BlazorWebAssembly.props
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-Copyright (c) .NET Foundation. All rights reserved.
-***********************************************************************************************
--->
-<Project ToolsVersion="14.0">
-  <PropertyGroup>
-    <_BlazorWebAssemblyPropsFile>$(MSBuildThisFileDirectory)..\..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.props</_BlazorWebAssemblyPropsFile>
-    <_BlazorWebAssemblyTargetsFile>$(MSBuildThisFileDirectory)..\..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets</_BlazorWebAssemblyTargetsFile>
-  </PropertyGroup>
-</Project>

+ 0 - 42
src/Components/WebAssembly/Sdk/src/targets/BlazorWasm.web.config

@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-  <system.webServer>
-    <staticContent>
-      <remove fileExtension=".blat" />
-      <remove fileExtension=".dat" />
-      <remove fileExtension=".dll" />
-      <remove fileExtension=".json" />
-      <remove fileExtension=".wasm" />
-      <remove fileExtension=".woff" />
-      <remove fileExtension=".woff2" />
-      <mimeMap fileExtension=".blat" mimeType="application/octet-stream" />
-      <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
-      <mimeMap fileExtension=".dat" mimeType="application/octet-stream" />
-      <mimeMap fileExtension=".json" mimeType="application/json" />
-      <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
-      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
-      <mimeMap fileExtension=".woff2" mimeType="application/font-woff" />
-    </staticContent>
-    <httpCompression>
-      <dynamicTypes>
-        <add mimeType="application/octet-stream" enabled="true" />
-        <add mimeType="application/wasm" enabled="true" />
-      </dynamicTypes>
-    </httpCompression>
-    <rewrite>
-      <rules>
-        <rule name="Serve subdir">
-          <match url=".*" />
-          <action type="Rewrite" url="wwwroot\{R:0}" />
-        </rule>
-        <rule name="SPA fallback routing" stopProcessing="true">
-          <match url=".*" />
-          <conditions logicalGrouping="MatchAll">
-            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
-          </conditions>
-          <action type="Rewrite" url="wwwroot\" />
-        </rule>
-      </rules>
-    </rewrite>
-  </system.webServer>
-</configuration>

+ 0 - 34
src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props

@@ -1,34 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.NET.Sdk.BlazorWebAssembly.props
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-Copyright (c) .NET Foundation. All rights reserved.
-***********************************************************************************************
--->
-<Project ToolsVersion="14.0" TreatAsLocalProperty="RuntimeIdentifier">
-  <PropertyGroup>
-    <!-- Blazor WASM projects are always browser-wasm -->
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-
-    <!-- Avoid having the rid show up in output paths -->
-    <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
-
-    <OutputType>exe</OutputType>
-
-    <IsPackable>false</IsPackable>
-
-    <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
-
-    <!-- Turn off symbol publishing by default -->
-    <CopyOutputSymbolsToPublishDirectory>false</CopyOutputSymbolsToPublishDirectory>
-  </PropertyGroup>
-
-  <Import Sdk="Microsoft.NET.Sdk.Razor" Project="Sdk.props" />
-  <Import Sdk="Microsoft.NET.Sdk.Web.ProjectSystem" Project="Sdk.props" />
-  <Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.props" />
-
-</Project>

+ 0 - 661
src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets

@@ -1,661 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.NET.Sdk.BlazorWebAssembly.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-Copyright (c) .NET Foundation. All rights reserved.
-***********************************************************************************************
--->
-<Project ToolsVersion="14.0">
-
-  <PropertyGroup>
-    <EnableDefaultContentItems Condition=" '$(EnableDefaultContentItems)' == '' ">true</EnableDefaultContentItems>
-  </PropertyGroup>
-
-  <Import Sdk="Microsoft.NET.Sdk.Razor" Project="Sdk.targets" />
-  <Import Sdk="Microsoft.NET.Sdk.Web.ProjectSystem" Project="Sdk.targets" />
-  <Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.targets" />
-
-  <!--
-    Targets supporting Razor MSBuild integration. Contain support for generating C# code using Razor
-    and including the generated code in the project lifecycle, including compiling, publishing and producing
-    nuget packages.
-  -->
-
-  <!--
-    This is a hook to import a set of targets before the Blazor targets. By default this is unused.
-  -->
-  <Import Project="$(CustomBeforeBlazorWebAssemblySdkTargets)" Condition="'$(CustomBeforeBlazorWebAssemblySdkTargets)' != '' and Exists('$(CustomBeforeBlazorWebAssemblySdkTargets)')"/>
-
-  <PropertyGroup>
-    <!-- Paths to tools, tasks, and extensions are calculated relative to the BlazorWebAssemblySdkDirectoryRoot. This can be modified to test a local build. -->
-    <BlazorWebAssemblySdkDirectoryRoot Condition="'$(BlazorWebAssemblySdkDirectoryRoot)'==''">$(MSBuildThisFileDirectory)..\</BlazorWebAssemblySdkDirectoryRoot>
-    <_BlazorWebAssemblySdkTasksTFM Condition=" '$(MSBuildRuntimeType)' == 'Core'">net6.0</_BlazorWebAssemblySdkTasksTFM>
-    <_BlazorWebAssemblySdkTasksTFM Condition=" '$(MSBuildRuntimeType)' != 'Core'">net46</_BlazorWebAssemblySdkTasksTFM>
-    <_BlazorWebAssemblySdkTasksAssembly>$(BlazorWebAssemblySdkDirectoryRoot)tasks\$(_BlazorWebAssemblySdkTasksTFM)\Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.dll</_BlazorWebAssemblySdkTasksAssembly>
-    <_BlazorWebAssemblySdkToolAssembly>$(BlazorWebAssemblySdkDirectoryRoot)tools\net6.0\Microsoft.NET.Sdk.BlazorWebAssembly.Tools.dll</_BlazorWebAssemblySdkToolAssembly>
-  </PropertyGroup>
-
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.GenerateBlazorWebAssemblyBootJson" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.BlazorWriteSatelliteAssemblyFile" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.BlazorReadSatelliteAssemblyFile" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.BrotliCompress" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.GzipCompress" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.CreateBlazorTrimmerRootDescriptorFile" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-
-  <PropertyGroup>
-    <SelfContained>true</SelfContained>
-    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
-
-    <!-- Trimmer defaults -->
-    <PublishTrimmed Condition="'$(PublishTrimmed)' == ''">true</PublishTrimmed>
-    <TrimMode Condition="'$(TrimMode)' == ''">link</TrimMode>
-    <TrimmerRemoveSymbols Condition="'$(TrimmerRemoveSymbols)' == ''">false</TrimmerRemoveSymbols>
-
-    <!-- Runtime feature defaults to trim unnecessary code -->
-    <EventSourceSupport Condition="'$(EventSourceSupport)' == ''">false</EventSourceSupport>
-    <UseSystemResourceKeys Condition="'$(UseSystemResourceKeys)' == ''">true</UseSystemResourceKeys>
-    <EnableUnsafeUTF7Encoding Condition="'$(EnableUnsafeUTF7Encoding)' == ''">false</EnableUnsafeUTF7Encoding>
-    <HttpActivityPropagationSupport Condition="'$(HttpActivityPropagationSupport)' == ''">false</HttpActivityPropagationSupport>
-    <DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(Configuration)' != 'Debug'">false</DebuggerSupport>
-
-    <StaticWebAssetBasePath Condition="'$(StaticWebAssetBasePath)' == ''">/</StaticWebAssetBasePath>
-    <BlazorCacheBootResources Condition="'$(BlazorCacheBootResources)' == ''">true</BlazorCacheBootResources>
-
-    <!-- Turn off parts of the build that do not apply to WASM projects -->
-    <GenerateDependencyFile>false</GenerateDependencyFile>
-    <GenerateRuntimeConfigurationFiles>false</GenerateRuntimeConfigurationFiles>
-    <PreserveCompilationContext>false</PreserveCompilationContext>
-    <PreserveCompilationReferences>false</PreserveCompilationReferences>
-    <IsWebConfigTransformDisabled>true</IsWebConfigTransformDisabled>
-
-    <!-- Internal properties -->
-    <_BlazorOutputPath>wwwroot\_framework\</_BlazorOutputPath>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <!-- Configuration for the platform compatibility analyzer. See https://github.com/dotnet/designs/blob/master/accepted/2020/platform-exclusion/platform-exclusion.md#build-configuration-for-platforms -->
-    <SupportedPlatform Remove="@(SupportedPlatform)" />
-    <SupportedPlatform Include="browser" />
-  </ItemGroup>
-
-  <Import Project="Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.targets" Condition="'$(ServiceWorkerAssetsManifest)' != ''" />
-
-  <Target Name="_ScrambleDotnetJsFileName" AfterTargets="ResolveRuntimePackAssets">
-    <!--
-      We want the dotnet.js file output to have a version to better work with caching. We'll append the runtime version to the file name as soon as file has been discovered.
-    -->
-    <PropertyGroup>
-      <_DotNetJsVersion>$(BundledNETCoreAppPackageVersion)</_DotNetJsVersion>
-      <_DotNetJsVersion Condition="'$(RuntimeFrameworkVersion)' != ''">$(RuntimeFrameworkVersion)</_DotNetJsVersion>
-      <_BlazorDotnetJsFileName>dotnet.$(_DotNetJsVersion).js</_BlazorDotnetJsFileName>
-      <_BlazorDotNetJsFilePath>$(IntermediateOutputPath)$(_BlazorDotnetJsFileName)</_BlazorDotNetJsFilePath>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_DotNetJsItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.DestinationSubPath)' == 'dotnet.js' AND '%(ReferenceCopyLocalPaths.AssetType)' == 'native'" />
-    </ItemGroup>
-
-    <Copy
-      SourceFiles="@(_DotNetJsItem)"
-      DestinationFiles="$(_BlazorDotNetJsFilePath)"
-      SkipUnchangedFiles="true"
-      OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)" />
-
-    <ItemGroup Condition="'@(_DotNetJsItem->Count())' != '0'">
-      <ReferenceCopyLocalPaths
-        Include="$(_BlazorDotNetJsFilePath)"
-        AssetType="native"
-        CopyLocal="true"
-        DestinationSubPath="$(_BlazorDotnetJsFileName)" />
-
-      <ReferenceCopyLocalPaths Remove="@(_DotNetJsItem)" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_ResolveBlazorWasmOutputs" DependsOnTargets="ResolveReferences;PrepareResourceNames;ComputeIntermediateSatelliteAssemblies">
-    <!--
-      Calculates the outputs and the paths for Blazor WASM. This target is invoked frequently and should perform minimal work.
-    -->
-
-    <PropertyGroup>
-      <_BlazorSatelliteAssemblyCacheFile>$(IntermediateOutputPath)blazor.satelliteasm.props</_BlazorSatelliteAssemblyCacheFile>
-      <!-- Workaround for https://github.com/dotnet/sdk/issues/12114-->
-      <PublishDir Condition="'$(AppendRuntimeIdentifierToOutputPath)' != 'true' AND '$(PublishDir)' == '$(OutputPath)$(RuntimeIdentifier)\$(PublishDirName)\'">$(OutputPath)$(PublishDirName)\</PublishDir>
-
-      <_BlazorWebAssemblyLoadAllGlobalizationData>$(BlazorWebAssemblyLoadAllGlobalizationData)</_BlazorWebAssemblyLoadAllGlobalizationData>
-      <_BlazorWebAssemblyLoadAllGlobalizationData Condition="'$(_BlazorWebAssemblyLoadAllGlobalizationData)' == ''">false</_BlazorWebAssemblyLoadAllGlobalizationData>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_BlazorJSFile Include="$(BlazorWebAssemblyJSPath)" />
-      <_BlazorJSFile Include="$(BlazorWebAssemblyJSMapPath)" Condition="Exists('$(BlazorWebAssemblyJSMapPath)')" />
-
-      <_BlazorConfigFile Include="wwwroot\appsettings*.json" />
-
-      <!-- Clear out temporary build artifacts that the runtime packages -->
-      <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.a'" />
-
-      <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)"
-        Condition="'$(BlazorEnableTimeZoneSupport)' == 'false' AND '%(ReferenceCopyLocalPaths.FileName)%(ReferenceCopyLocalPaths.Extension)' == 'dotnet.timezones.blat'" />
-
-      <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)"
-        Condition="'$(InvariantGlobalization)' == 'true' AND '%(ReferenceCopyLocalPaths.Extension)' == '.dat' AND $([System.String]::Copy('%(ReferenceCopyLocalPaths.FileName)').StartsWith('icudt'))" />
-
-      <!--
-        ReferenceCopyLocalPaths includes satellite assemblies from referenced projects but are inexpicably missing
-        any metadata that might allow them to be differentiated. We'll explicitly add those
-        to _BlazorOutputWithTargetPath so that satellite assemblies from packages, the current project and referenced project
-        are all treated the same.
-       -->
-
-      <_BlazorCopyLocalPath
-        Include="@(ReferenceCopyLocalPaths)"
-        Exclude="@(ReferenceSatellitePaths)"/>
-
-      <_BlazorCopyLocalPath Include="@(IntermediateSatelliteAssembliesWithTargetPath)">
-        <DestinationSubDirectory>%(IntermediateSatelliteAssembliesWithTargetPath.Culture)\</DestinationSubDirectory>
-      </_BlazorCopyLocalPath>
-
-      <_BlazorOutputWithTargetPath Include="
-          @(_BlazorCopyLocalPath);
-          @(IntermediateAssembly);
-          @(_DebugSymbolsIntermediatePath);
-          @(_BlazorJSFile)" />
-
-      <_BlazorOutputWithTargetPath Include="@(ReferenceSatellitePaths)">
-        <Culture>$([System.String]::Copy('%(ReferenceSatellitePaths.DestinationSubDirectory)').Trim('\').Trim('/'))</Culture>
-      </_BlazorOutputWithTargetPath>
-    </ItemGroup>
-
-    <!--
-      BuildingProject=false is typically set for referenced projects when building inside VisualStudio.
-
-      When building with BuildingProject=false, satellite assemblies do not get resolved (the ones for the current project and the one for
-      referenced project). Satellite assemblies from packages get resolved.
-      To workaround this, we'll cache metadata during a regular build, and rehydrate from it when BuildingProject=false.
-    -->
-    <BlazorReadSatelliteAssemblyFile
-        ReadFile="$(_BlazorSatelliteAssemblyCacheFile)"
-        Condition="'$(BuildingProject)' != 'true' AND EXISTS('$(_BlazorSatelliteAssemblyCacheFile)')">
-      <Output TaskParameter="SatelliteAssembly" ItemName="_BlazorReadSatelliteAssembly" />
-    </BlazorReadSatelliteAssemblyFile>
-
-    <ItemGroup>
-      <!-- We've imported a previously Cacheed file. Let's turn in to a _BlazorOutputWithTargetPath -->
-      <_BlazorOutputWithTargetPath
-        Include="@(_BlazorReadSatelliteAssembly)"
-        Exclude="@(_BlazorOutputWithTargetPath)"
-        Condition="'@(_BlazorReadSatelliteAssembly->Count())' != '0'" />
-
-      <!-- Calculate the target path -->
-      <_BlazorOutputWithTargetPath
-        TargetPath="$(_BlazorOutputPath)%(_BlazorOutputWithTargetPath.DestinationSubDirectory)%(FileName)%(Extension)"
-        Condition="'%(__BlazorOutputWithTargetPath.TargetPath)' == ''" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_ProcessBlazorWasmOutputs" DependsOnTargets="_ResolveBlazorWasmOutputs">
-    <PropertyGroup>
-      <_BlazorBuildGZipCompressDirectory>$(IntermediateOutputPath)build-gz\</_BlazorBuildGZipCompressDirectory>
-    </PropertyGroup>
-
-    <!--
-      Compress referenced binaries using GZip during build. This skips files such as the project's assemblies
-      that change from build to build. Runtime assets contribute to the bulk of the download size. Compressing it
-      has the most benefit while avoiding any ongoing costs to the dev inner loop.
-    -->
-    <ItemGroup>
-      <_GzipFileToCompressForBuild
-        Include="@(ReferenceCopyLocalPaths)"
-        RelativePath="$(_BlazorOutputPath)%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(FileName)%(Extension)"
-        Condition="'%(Extension)' == '.dll' or '%(ReferenceCopyLocalPaths.AssetType)' == 'native'" />
-    </ItemGroup>
-
-    <GZipCompress
-      FilesToCompress="@(_GzipFileToCompressForBuild)"
-      OutputDirectory="$(_BlazorBuildGZipCompressDirectory)">
-
-      <Output TaskParameter="CompressedFiles" ItemName="_BlazorBuildGZipCompressedFile" />
-      <Output TaskParameter="CompressedFiles" ItemName="FileWrites" />
-    </GZipCompress>
-
-    <ItemGroup>
-      <_BlazorWriteSatelliteAssembly Include="@(_BlazorOutputWithTargetPath->HasMetadata('Culture'))" />
-
-      <!-- Retarget ReferenceCopyLocalPaths to copy to the wwwroot directory -->
-      <ReferenceCopyLocalPaths DestinationSubDirectory="$(_BlazorOutputPath)%(ReferenceCopyLocalPaths.DestinationSubDirectory)" />
-    </ItemGroup>
-
-    <!-- A missing blazor.webassembly.js is our packaging error. Produce an error so it's discovered early. -->
-    <Error
-      Text="Unable to find BlazorWebAssembly JS files. This usually indicates a packaging error."
-      Code="RAZORSDK1007"
-      Condition="'@(_BlazorJSFile->Count())' == '0'" />
-
-    <!--
-      When building with BuildingProject=false, satellite assemblies do not get resolved (the ones for the current project and the one for
-      referenced project). BuildingProject=false is typically set for referenced projects when building inside VisualStudio.
-      To workaround this, we'll cache metadata during a regular build, and rehydrate from it when BuildingProject=false.
-    -->
-
-    <BlazorWriteSatelliteAssemblyFile
-      SatelliteAssembly="@(_BlazorWriteSatelliteAssembly)"
-      WriteFile="$(_BlazorSatelliteAssemblyCacheFile)"
-      Condition="'$(BuildingProject)' == 'true' AND '@(_BlazorWriteSatelliteAssembly->Count())' != '0'" />
-
-    <Delete
-      Files="$(_BlazorSatelliteAssemblyCacheFile)"
-      Condition="'$(BuildingProject)' == 'true' AND '@(_BlazorWriteSatelliteAssembly->Count())' == '0' and EXISTS('$(_BlazorSatelliteAssemblyCacheFile)')" />
-
-    <ItemGroup>
-      <FileWrites Include="$(_BlazorSatelliteAssemblyCacheFile)" Condition="Exists('$(_BlazorSatelliteAssemblyCacheFile)')" />
-    </ItemGroup>
-
-    <GetFileHash Files="@(_BlazorOutputWithTargetPath)" Algorithm="SHA256" HashEncoding="base64">
-      <Output TaskParameter="Items" ItemName="_BlazorOutputWithHash" />
-    </GetFileHash>
-  </Target>
-
-  <PropertyGroup>
-    <PrepareForRunDependsOn>
-      _BlazorWasmPrepareForRun;
-      $(PrepareForRunDependsOn)
-    </PrepareForRunDependsOn>
-
-    <GetCurrentProjectStaticWebAssetsDependsOn>
-      $(GetCurrentProjectStaticWebAssetsDependsOn);
-      _BlazorWasmReplaceBundle;
-      _BlazorWasmPrepareForRun;
-    </GetCurrentProjectStaticWebAssetsDependsOn>
-  </PropertyGroup>
-
-  <Target Name="_BlazorWasmReplaceBundle">
-    <ItemGroup>
-      <StaticWebAsset Include="@(_AppBundleStaticWebAsset)" />
-      <Staticwebasset Remove="@(_ProjectBundleStaticWebAsset)" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_BlazorWasmPrepareForRun" DependsOnTargets="_ProcessBlazorWasmOutputs" BeforeTargets="_RazorPrepareForRun" AfterTargets="GetCurrentProjectStaticWebAssets">
-    <PropertyGroup>
-      <_BlazorBuildBootJsonPath>$(IntermediateOutputPath)blazor.boot.json</_BlazorBuildBootJsonPath>
-      <_BlazorOutputContent>@(_BlazorOutputWithHash)</_BlazorOutputContent>
-      <_BlazorWebAssemblyLoadAllGlobalizationData Condition="'$(BlazorWebAssemblyLoadAllGlobalizationData)' == ''">false</_BlazorWebAssemblyLoadAllGlobalizationData>
-    </PropertyGroup>
-
-    <Error
-      Text="Unable to find %(BlazorWebAssemblyLazyLoad.Identity) to be lazy loaded later. Confirm that project or package references are included and the reference is used in the project."
-      Code="BLAZORSDK1001"
-      Condition="'@(BlazorWebAssemblyLazyLoad)' != '' And !($([System.String]::Copy('$(_BlazorOutputContent)').Contains('%(BlazorWebAssemblyLazyLoad.Identity)')))" />
-
-    <GenerateBlazorWebAssemblyBootJson
-      AssemblyPath="@(IntermediateAssembly)"
-      Resources="@(_BlazorOutputWithHash)"
-      DebugBuild="true"
-      LinkerEnabled="false"
-      CacheBootResources="$(BlazorCacheBootResources)"
-      OutputPath="$(_BlazorBuildBootJsonPath)"
-      ConfigurationFiles="@(_BlazorConfigFile)"
-      LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)"
-      InvariantGlobalization="$(InvariantGlobalization)"
-      LoadAllICUData="$(_BlazorWebAssemblyLoadAllGlobalizationData)" />
-
-    <ItemGroup>
-      <FileWrites Include="$(OutDir)$(_BlazorOutputPath)blazor.boot.json" />
-    </ItemGroup>
-
-    <ItemGroup>
-      <_BlazorWebAssemblyStaticWebAsset Include="$(_BlazorBuildBootJsonPath)">
-        <SourceId>$(PackageId)</SourceId>
-        <SourceType></SourceType>
-        <ContentRoot>$([MSBuild]::NormalizeDirectory('$(TargetDir)wwwroot\'))</ContentRoot>
-        <BasePath>$(StaticWebAssetBasePath)</BasePath>
-        <RelativePath>_framework/blazor.boot.json</RelativePath>
-        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
-      </_BlazorWebAssemblyStaticWebAsset>
-
-      <_BlazorWebAssemblyStaticWebAsset Include="@(_BlazorOutputWithHash)">
-        <SourceId>$(PackageId)</SourceId>
-        <SourceType></SourceType>
-        <ContentRoot>$([MSBuild]::NormalizeDirectory('$(TargetDir)wwwroot\'))</ContentRoot>
-        <BasePath>$(StaticWebAssetBasePath)</BasePath>
-        <RelativePath>$([System.String]::Copy('%(_BlazorOutputWithHash.TargetPath)').Replace('\','/').Substring(8))</RelativePath>
-        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
-      </_BlazorWebAssemblyStaticWebAsset>
-
-      <_BlazorWebAssemblyStaticWebAsset Include="@(_BlazorBuildGZipCompressedFile)">
-        <SourceId>$(PackageId)</SourceId>
-        <SourceType></SourceType>
-        <ContentRoot>$([MSBuild]::NormalizeDirectory('$(TargetDir)wwwroot\'))</ContentRoot>
-        <BasePath>$(StaticWebAssetBasePath)</BasePath>
-        <RelativePath>$([System.String]::Copy('%(_BlazorBuildGZipCompressedFile.RelativePath)').Replace('\','/').Substring(8))</RelativePath>
-        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
-      </_BlazorWebAssemblyStaticWebAsset>
-
-      <StaticWebAsset Include="@(_BlazorWebAssemblyStaticWebAsset)" />
-      <_ExternalStaticWebAsset Include="@(_BlazorWebAssemblyStaticWebAsset)" SourceType="Generated" />
-    </ItemGroup>
-  </Target>
-
-  <!-- Mimics the behavior of CopyFilesToOutputDirectory. We simply copy relevant build outputs to the wwwroot directory -->
-  <Target Name="_BlazorCopyFilesToOutputDirectory" AfterTargets="CopyFilesToOutputDirectory">
-    <Copy
-        SourceFiles="@(IntermediateAssembly)"
-        DestinationFolder="$(OutDir)$(_BlazorOutputPath)"
-        SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
-        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
-        Retries="$(CopyRetryCount)"
-        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
-        UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
-        UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
-        ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)"
-        Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-    </Copy>
-
-    <Message Importance="High" Text="$(MSBuildProjectName) (Blazor output) -&gt; $(TargetDir)wwwroot" Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)'!='true'" />
-
-    <Copy
-        SourceFiles="@(_DebugSymbolsIntermediatePath)"
-        DestinationFolder="$(OutDir)$(_BlazorOutputPath)"
-        SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
-        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
-        Retries="$(CopyRetryCount)"
-        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
-        UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
-        UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
-        ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)"
-        Condition="'$(_DebugSymbolsProduced)'=='true' and '$(SkipCopyingSymbolsToOutputDirectory)' != 'true' and '$(CopyOutputSymbolsToOutputDirectory)'=='true'">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-    </Copy>
-
-    <Copy
-        SourceFiles="@(IntermediateSatelliteAssembliesWithTargetPath)"
-        DestinationFiles="@(IntermediateSatelliteAssembliesWithTargetPath->'$(OutDir)$(_BlazorOutputPath)%(Culture)\$(TargetName).resources.dll')"
-        SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
-        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
-        Retries="$(CopyRetryCount)"
-        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
-        UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
-        UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
-        ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)"
-        Condition="'@(IntermediateSatelliteAssembliesWithTargetPath)' != ''" >
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-    </Copy>
-
-    <Copy
-        SourceFiles="@(_BlazorJSFile);$(_BlazorBuildBootJsonPath)"
-        DestinationFolder="$(OutDir)$(_BlazorOutputPath)"
-        SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
-        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
-        Retries="$(CopyRetryCount)"
-        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
-        UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
-        UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
-        ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-    </Copy>
-
-    <Copy
-        SourceFiles="@(_BlazorBuildGZipCompressedFile)"
-        DestinationFiles="@(_BlazorBuildGZipCompressedFile->'$(OutDir)%(RelativePath)')"
-        SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
-        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
-        Retries="$(CopyRetryCount)"
-        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
-        UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
-        UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
-        ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-    </Copy>
-  </Target>
-
-  <Target Name="_BlazorWasmPrepareForLink" BeforeTargets="PrepareForILLink">
-    <PropertyGroup>
-      <_BlazorTypeGranularTrimmerDescriptorFile>$(IntermediateOutputPath)typegranularity.trimmerdescriptor.xml</_BlazorTypeGranularTrimmerDescriptorFile>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_BlazorTypeGranularAssembly
-          Include="@(ManagedAssemblyToLink)"
-          Condition="'%(Extension)' == '.dll' AND $([System.String]::Copy('%(Filename)').StartsWith('Microsoft.AspNetCore.'))">
-        <Required>false</Required>
-        <Preserve>all</Preserve>
-      </_BlazorTypeGranularAssembly>
-
-      <ManagedAssemblyToLink
-        IsTrimmable="true"
-        Condition="'%(Extension)' == '.dll' AND ($([System.String]::Copy('%(Filename)').StartsWith('Microsoft.AspNetCore.')) or $([System.String]::Copy('%(Filename)').StartsWith('Microsoft.Extensions.')))" />
-    </ItemGroup>
-
-    <CreateBlazorTrimmerRootDescriptorFile
-      Assemblies="@(_BlazorTypeGranularAssembly)"
-      TrimmerFile="$(_BlazorTypeGranularTrimmerDescriptorFile)" />
-
-    <ItemGroup>
-      <TrimmerRootDescriptor Include="$(_BlazorTypeGranularTrimmerDescriptorFile)" />
-
-      <FileWrites Include="$(_BlazorTypeGranularTrimmerDescriptorFile)" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_ProcessPublishFilesForBlazor" DependsOnTargets="_ResolveBlazorWasmOutputs" AfterTargets="ILLink">
-
-    <!--
-      ResolvedFileToPublish.Culture is missing for satellite assemblies from project references.
-      Since we need the culture to correctly generate blazor.boot.json, we cross-reference the culture we calculate as part of _ResolveBlazorWasmOutputs
-    -->
-    <JoinItems Left="@(ResolvedFileToPublish)"
-               Right="@(_BlazorOutputWithTargetPath->HasMetadata('Culture'))"
-               LeftMetadata="*"
-               RightMetadata="Culture"
-               ItemSpecToUse="Left">
-      <Output TaskParameter="JoinResult" ItemName="_ResolvedSatelliteToPublish" />
-    </JoinItems>
-
-    <PropertyGroup>
-      <_BlazorPublishOutputPath Condition="'$(StaticWebAssetBasePath)' != '/'">wwwroot\$(StaticWebAssetBasePath.Replace('/', '\').Trim('\'))\</_BlazorPublishOutputPath>
-      <_BlazorPublishOutputPath Condition="'$(StaticWebAssetBasePath)' == '/'">wwwroot\</_BlazorPublishOutputPath>
-      <_BlazorFrameworkPublishPath>$(_BlazorPublishOutputPath)_framework\</_BlazorFrameworkPublishPath>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <ResolvedFileToPublish Remove="@(_ResolvedSatelliteToPublish)" />
-      <ResolvedFileToPublish Include="@(_ResolvedSatelliteToPublish)" />
-
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)" Condition="'%(Extension)' == '.a'" />
-
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)"
-        Condition="'$(BlazorEnableTimeZoneSupport)' == 'false' AND '%(ResolvedFileToPublish.FileName)%(ResolvedFileToPublish.Extension)' == 'dotnet.timezones.blat'" />
-
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)"
-        Condition="'$(InvariantGlobalization)' == 'true' AND '%(ResolvedFileToPublish.Extension)' == '.dat' AND $([System.String]::Copy('%(ResolvedFileToPublish.FileName)').StartsWith('icudt'))" />
-
-      <!-- Remove dotnet.js from publish output -->
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.RelativePath)' == 'dotnet.js'" />
-
-      <!-- Remove pdbs from the publish output -->
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)" Condition="'$(CopyOutputSymbolsToPublishDirectory)' != 'true' AND '%(Extension)' == '.pdb'" />
-
-      <!-- Retarget so that items are published to the wwwroot directory -->
-      <!--
-        This changes files (such as wwwroot/index.html) that are published to $(PublishDir)wwwroot\ -> $(PublishDir)wwwroot\$(StaticWebAssetBasePath)\.
-        Ignore any user specified web.config in the process.
-      -->
-      <ResolvedFileToPublish
-        RelativePath="$(_BlazorPublishOutputPath)$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('/','\').Substring(8))"
-        Condition="'$(StaticWebAssetBasePath)' != '/' AND $([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('/','\').StartsWith('wwwroot\'))" />
-
-      <!--
-        Change all remaining publish output to publish to appear under the $(PublishDir)wwwroot\$(StaticWebAssetBasePath) path.
-      -->
-      <ResolvedFileToPublish
-        RelativePath="$(_BlazorFrameworkPublishPath)%(ResolvedFileToPublish.RelativePath)"
-        Condition="'%(ResolvedFileToPublish.RelativePath)' != 'web.config' AND !$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('/','\').StartsWith('wwwroot\'))" />
-    </ItemGroup>
-
-    <ItemGroup Condition="'@(ResolvedFileToPublish->AnyHaveMetadataValue('RelativePath', 'web.config'))' != 'true'">
-      <ResolvedFileToPublish
-         Include="$(MSBuildThisFileDirectory)BlazorWasm.web.config"
-         ExcludeFromSingleFile="true"
-         CopyToPublishDirectory="PreserveNewest"
-         RelativePath="web.config" />
-    </ItemGroup>
-
-    <!-- Generate the publish boot json -->
-    <ItemGroup>
-      <_BlazorPublishBootResource
-        Include="@(ResolvedFileToPublish)"
-        Condition="$([System.String]::Copy('%(RelativePath)').Replace('\','/').StartsWith('wwwroot/_framework')) AND '%(Extension)' != '.a'" />
-    </ItemGroup>
-
-    <GetFileHash Files="@(_BlazorPublishBootResource)" Algorithm="SHA256" HashEncoding="base64">
-      <Output TaskParameter="Items" ItemName="_BlazorPublishBootResourceWithHash" />
-    </GetFileHash>
-
-    <PropertyGroup>
-      <_BlazorOutputContent>@(_BlazorPublishBootResourceWithHash)</_BlazorOutputContent>
-    </PropertyGroup>
-
-    <Error
-      Text="Unable to find %(BlazorWebAssemblyLazyLoad.Identity) to be lazy loaded later. Confirm that project or package references are included and the reference is used in the project."
-      Code="BLAZORSDK1001"
-      Condition="'@(BlazorWebAssemblyLazyLoad)' != '' And !($([System.String]::Copy('$(_BlazorOutputContent)').Contains('%(BlazorWebAssemblyLazyLoad.Identity)')))" />
-
-    <GenerateBlazorWebAssemblyBootJson
-      AssemblyPath="@(IntermediateAssembly)"
-      Resources="@(_BlazorPublishBootResourceWithHash)"
-      DebugBuild="false"
-      LinkerEnabled="$(PublishTrimmed)"
-      CacheBootResources="$(BlazorCacheBootResources)"
-      OutputPath="$(IntermediateOutputPath)blazor.publish.boot.json"
-      ConfigurationFiles="@(_BlazorConfigFile)"
-      LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)"
-      InvariantGlobalization="$(InvariantGlobalization)"
-      LoadAllICUData="$(_BlazorWebAssemblyLoadAllGlobalizationData)" />
-
-    <ItemGroup>
-      <ResolvedFileToPublish
-        Include="$(IntermediateOutputPath)blazor.publish.boot.json"
-        RelativePath="$(_BlazorFrameworkPublishPath)blazor.boot.json" />
-
-      <ResolvedFileToPublish
-        Include="@(_BlazorJSFile)"
-        RelativePath="$(_BlazorFrameworkPublishPath)%(FileName)%(Extension)" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_BlazorCompressPublishFiles" AfterTargets="_ProcessPublishFilesForBlazor" Condition="'$(BlazorEnableCompression)' != 'false'">
-    <PropertyGroup>
-      <_CompressedFileOutputPath>$(IntermediateOutputPath)compress\</_CompressedFileOutputPath>
-      <_BlazorWebAssemblyBrotliIncremental>true</_BlazorWebAssemblyBrotliIncremental>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_FileToCompress
-        Include="@(ResolvedFileToPublish)"
-        Condition="$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('\','/').StartsWith('wwwroot/'))" />
-    </ItemGroup>
-
-    <Message Text="Compressing Blazor WebAssembly publish artifacts. This may take a while..." Importance="High" />
-
-    <MakeDir Directories="$(_CompressedFileOutputPath)" Condition="!Exists('$(_CompressedFileOutputPath)')" />
-
-    <PropertyGroup Condition="'$(DOTNET_HOST_PATH)' == ''">
-      <_DotNetHostDirectory>$(NetCoreRoot)</_DotNetHostDirectory>
-      <_DotNetHostFileName>dotnet</_DotNetHostFileName>
-      <_DotNetHostFileName Condition="'$(OS)' == 'Windows_NT'">dotnet.exe</_DotNetHostFileName>
-    </PropertyGroup>
-
-    <BrotliCompress
-      OutputDirectory="$(_CompressedFileOutputPath)"
-      FilesToCompress="@(_FileToCompress)"
-      CompressionLevel="$(_BlazorBrotliCompressionLevel)"
-      SkipIfOutputIsNewer="$(_BlazorWebAssemblyBrotliIncremental)"
-      ToolAssembly="$(_BlazorWebAssemblySdkToolAssembly)"
-      ToolExe="$(_DotNetHostFileName)"
-      ToolPath="$(_DotNetHostDirectory)">
-
-      <Output TaskParameter="CompressedFiles" ItemName="_BrotliCompressedFile" />
-      <Output TaskParameter="CompressedFiles" ItemName="FileWrites" />
-    </BrotliCompress>
-
-    <GZipCompress
-      OutputDirectory="$(_CompressedFileOutputPath)"
-      FilesToCompress="@(_FileToCompress)">
-
-      <Output TaskParameter="CompressedFiles" ItemName="_BlazorPublishGZipCompressedFile" />
-      <Output TaskParameter="CompressedFiles" ItemName="FileWrites" />
-    </GZipCompress>
-
-    <ItemGroup>
-      <ResolvedFileToPublish Include="@(_BrotliCompressedFile)" />
-      <ResolvedFileToPublish Include="@(_BlazorPublishGZipCompressedFile)" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_SetupPublishSemaphore" BeforeTargets="PrepareForPublish">
-    <PropertyGroup>
-      <!--
-        Add marker that indicates Blazor WASM is doing a publish. This is used to identify when GetCopyToPublishDirectoryItems
-        is invoked as a result of a P2P reference.
-      -->
-      <_PublishingBlazorWasmProject>true</_PublishingBlazorWasmProject>
-    </PropertyGroup>
-  </Target>
-
-  <Target Name="_GetBlazorWasmFilesForPublishInner"
-    DependsOnTargets="_ResolveBlazorWasmOutputs;ComputeFilesToPublish"
-    Returns="@(ResolvedFileToPublish)" />
-
-  <Target Name="_GetBlazorWasmFilesForPublish" BeforeTargets="GetCopyToPublishDirectoryItems">
-    <MSBuild
-      Projects="$(MSBuildProjectFullPath)"
-      Targets="_GetBlazorWasmFilesForPublishInner"
-      Properties="BuildProjectReferences=false;ResolveAssemblyReferencesFindRelatedSatellites=true;_PublishingBlazorWasmProject=true"
-      RemoveProperties="NoBuild;RuntimeIdentifier"
-      BuildInParallel="$(BuildInParallel)"
-      Condition="'$(_PublishingBlazorWasmProject)' != 'true'">
-
-      <Output TaskParameter="TargetOutputs" ItemName="_ResolvedFileToPublish" />
-    </MSBuild>
-
-    <ItemGroup>
-      <AllPublishItemsFullPathWithTargetPath Include="@(_ResolvedFileToPublish->'%(FullPath)')">
-        <TargetPath>%(RelativePath)</TargetPath>
-        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
-      </AllPublishItemsFullPathWithTargetPath>
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_BlazorApplyLinkPreferencesToContent" BeforeTargets="AssignTargetPaths;ResolveCurrentProjectStaticWebAssetsInputs;ResolveStaticWebAssetsInputs" Returns="@(Content)">
-    <ItemGroup>
-      <Content
-        Condition="'%(Content.Link)' != '' AND '%(Content.CopyToPublishDirectory)' == '' AND $([System.String]::Copy('%(Content.Link)').Replace('\','/').StartsWith('wwwroot/'))"
-        CopyToPublishDirectory="PreserveNewest" />
-
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_FailIfReferencingAspNetCoreApp" BeforeTargets="ResolveRuntimePackAssets">
-    <Error
-      Code="BLAZORSDK1001"
-      Text="The project references the ASP.NET Core shared framework, which is not supported by Blazor WebAssembly apps. Remove the framework reference if directly referenced, or the package reference that adds the framework reference."
-      Condition="'@(FrameworkReference->WithMetadataValue('Identity', 'Microsoft.AspNetCore.App')->Count())' != '0'" />
-  </Target>
-
-  <!--
-    This is a hook to import a set of targets after the Blazor WebAssembly targets. By default this is unused.
-  -->
-  <Import Project="$(CustomAfterBlazorWebAssemblySdkTargets)" Condition="'$(CustomAfterBlazorWebAssemblySdkTargets)' != '' and Exists('$(CustomAfterBlazorWebAssemblySdkTargets)')"/>
-
-</Project>

+ 0 - 170
src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.targets

@@ -1,170 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.NET.Sdk.BlazorWebAssembly.ServiceWorkerAssetsManifest.targets
-
-WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
-          created a backup copy.  Incorrect changes to this file will make it
-          impossible to load or build your projects from the command-line or the IDE.
-
-Copyright (c) .NET Foundation. All rights reserved.
-***********************************************************************************************
--->
-
-<Project>
-  <UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.GenerateServiceWorkerAssetsManifest" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
-
-  <Target Name="_ComputeServiceWorkerAssets" BeforeTargets="ResolveStaticWebAssetsInputs">
-
-    <PropertyGroup>
-      <_ServiceWorkerAssetsManifestIntermediateOutputPath Condition="'$([System.IO.Path]::IsPathRooted($(BaseIntermediateOutputPath)))' == 'true'">obj\$(Configuration)\$(TargetFramework)\$(ServiceWorkerAssetsManifest)</_ServiceWorkerAssetsManifestIntermediateOutputPath>
-      <_ServiceWorkerAssetsManifestIntermediateOutputPath Condition="'$([System.IO.Path]::IsPathRooted($(BaseIntermediateOutputPath)))' != 'true'">$(IntermediateOutputPath)$(ServiceWorkerAssetsManifest)</_ServiceWorkerAssetsManifestIntermediateOutputPath>
-      <_ServiceWorkerAssetsManifestFullPath>$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)/$(_ServiceWorkerAssetsManifestIntermediateOutputPath)'))</_ServiceWorkerAssetsManifestFullPath>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_ManifestStaticWebAsset Include="$(_ServiceWorkerAssetsManifestFullPath)">
-        <SourceType></SourceType>
-        <SourceId>$(PackageId)</SourceId>
-        <ContentRoot>$([MSBuild]::NormalizeDirectory('$(TargetDir)wwwroot\'))</ContentRoot>
-        <BasePath>$(StaticWebAssetBasePath)</BasePath>
-        <RelativePath>$(ServiceWorkerAssetsManifest)</RelativePath>
-        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
-      </_ManifestStaticWebAsset>
-
-      <!-- Figure out where we're getting the content for each @(ServiceWorker) entry, depending on whether there's a PublishedContent value -->
-      <_ServiceWorkerIntermediateFile Include="@(ServiceWorker->'$(IntermediateOutputPath)serviceworkers\%(Identity)')">
-        <ContentSourcePath Condition="'%(_ServiceWorker.PublishedContent)' != ''">%(ServiceWorker.PublishedContent)</ContentSourcePath>
-        <ContentSourcePath Condition="'%(_ServiceWorker.PublishedContent)' == ''">%(ServiceWorker.Identity)</ContentSourcePath>
-        <OriginalPath>%(ServiceWorker.Identity)</OriginalPath>
-        <TargetOutputPath>%(ServiceWorker.Identity)</TargetOutputPath>
-        <TargetOutputPath Condition="$([System.String]::Copy('%(ServiceWorker.Identity)').Replace('\','/').StartsWith('wwwroot/'))">$([System.String]::Copy('%(ServiceWorker.Identity)').Substring(8))</TargetOutputPath>
-      </_ServiceWorkerIntermediateFile>
-
-      <_ServiceWorkerStaticWebAsset Include="%(_ServiceWorkerIntermediateFile.FullPath)">
-        <SourceType></SourceType>
-        <SourceId>$(PackageId)</SourceId>
-        <ContentRoot>$([MSBuild]::NormalizeDirectory('$(TargetDir)wwwroot\'))</ContentRoot>
-        <BasePath>$(StaticWebAssetBasePath)</BasePath>
-        <RelativePath>%(TargetOutputPath)</RelativePath>
-        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
-      </_ServiceWorkerStaticWebAsset>
-
-      <StaticWebAsset Include="
-          @(_ManifestStaticWebAsset);
-          @(_ServiceWorkerStaticWebAsset)" />
-    </ItemGroup>
-
-  </Target>
-
-  <Target Name="_WriteServiceWorkerAssetsManifest"
-    DependsOnTargets="_ComputeServiceWorkerAssets;ResolveStaticWebAssetsInputs">
-
-    <ItemGroup>
-      <_ServiceWorkItem Include="@(StaticWebAsset)" Exclude="$(_ServiceWorkerAssetsManifestFullPath);@(_ServiceWorkerStaticWebAsset)">
-        <AssetUrl>$([System.String]::Copy('$([System.String]::Copy('%(StaticWebAsset.BasePath)').TrimEnd('/'))/%(StaticWebAsset.RelativePath)').Replace('\','/').TrimStart('/'))</AssetUrl>
-      </_ServiceWorkItem>
-    </ItemGroup>
-
-    <GenerateServiceWorkerAssetsManifest
-      Version="$(ServiceWorkerAssetsManifestVersion)"
-      Assets="@(_ServiceWorkItem)"
-      OutputPath="$(_ServiceWorkerAssetsManifestIntermediateOutputPath)">
-      <Output TaskParameter="CalculatedVersion" PropertyName="_ServiceWorkerAssetsManifestVersion" />
-    </GenerateServiceWorkerAssetsManifest>
-
-    <Copy
-      SourceFiles="%(_ServiceWorkerIntermediateFile.ContentSourcePath)"
-      DestinationFiles="%(_ServiceWorkerIntermediateFile.Identity)" />
-
-    <WriteLinesToFile
-      File="%(_ServiceWorkerIntermediateFile.Identity)"
-      Lines="/* Manifest version: $(_ServiceWorkerAssetsManifestVersion) */"
-      Condition="'$(_ServiceWorkerAssetsManifestVersion)' != ''" />
-
-    <ItemGroup>
-      <FileWrites Include="@(_ServiceWorkerIntermediateFile)" />
-      <FileWrites Include="$(_ServiceWorkerAssetsManifestIntermediateOutputPath)" />
-    </ItemGroup>
-
-  </Target>
-
-  <Target Name="_BlazorStaticAssetsCopyFilesToOutputDirectory" AfterTargets="CopyFilesToOutputDirectory" DependsOnTargets="_WriteServiceWorkerAssetsManifest">
-    <Copy
-        SourceFiles="@(_ManifestStaticWebAsset);@(_ServiceWorkerStaticWebAsset)"
-        DestinationFiles="$(OutDir)wwwroot\%(RelativePath)"
-        SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
-        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
-        Retries="$(CopyRetryCount)"
-        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
-        UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
-        UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
-        ErrorIfLinkFails="$(ErrorIfLinkFailsForCopyFilesToOutputDirectory)"
-        Condition="Exists('%(Identity)')">
-
-      <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
-    </Copy>
-  </Target>
-
-  <Target Name="_OmitServiceWorkerContent"
-    BeforeTargets="AssignTargetPaths;ResolveCurrentProjectStaticWebAssetsInputs">
-
-    <ItemGroup>
-      <!-- Don't emit the service worker source files to the output -->
-      <Content Remove="@(ServiceWorker)" />
-      <Content Remove="@(ServiceWorker->'%(PublishedContent)')" />
-    </ItemGroup>
-  </Target>
-
-  <Target Name="_GenerateServiceWorkerFileForPublish"
-    BeforeTargets="_BlazorCompressPublishFiles"
-    AfterTargets="_ProcessPublishFilesForBlazor">
-
-    <PropertyGroup>
-      <_ServiceWorkerAssetsManifestPublishIntermediateOutputPath>$(IntermediateOutputPath)publish-$(ServiceWorkerAssetsManifest)</_ServiceWorkerAssetsManifestPublishIntermediateOutputPath>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <_ServiceWorkerIntermediatePublishFile Include="$(IntermediateOutputPath)serviceworkers\%(FileName).publish%(Extension)">
-        <ContentSourcePath Condition="'%(ServiceWorker.PublishedContent)' != ''">%(ServiceWorker.PublishedContent)</ContentSourcePath>
-        <ContentSourcePath Condition="'%(ServiceWorker.PublishedContent)' == ''">%(ServiceWorker.Identity)</ContentSourcePath>
-        <RelativePath>%(ServiceWorker.Identity)</RelativePath>
-        <RelativePath Condition="$([System.String]::Copy('%(ServiceWorker.Identity)').Replace('/','\').StartsWith('wwwroot\'))">$(_BlazorPublishOutputPath)$([System.String]::Copy('%(ServiceWorker.Identity)').Substring(8))</RelativePath>
-      </_ServiceWorkerIntermediatePublishFile>
-
-      <_ServiceWorkerPublishFile Include="@(ResolvedFileToPublish)" Condition="$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('\','/').StartsWith('wwwroot/'))">
-        <AssetUrl>$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('\','/').TrimStart('/'))</AssetUrl>
-        <AssetUrl>$([System.String]::Copy('%(RelativePath)').Replace('\','/').Substring(8))</AssetUrl>
-      </_ServiceWorkerPublishFile>
-    </ItemGroup>
-
-    <GenerateServiceWorkerAssetsManifest
-      Version="$(ServiceWorkerAssetsManifestVersion)"
-      Assets="@(_ServiceWorkerPublishFile)"
-      OutputPath="$(_ServiceWorkerAssetsManifestPublishIntermediateOutputPath)">
-
-      <Output TaskParameter="CalculatedVersion" PropertyName="_ServiceWorkerPublishAssetsManifestVersion" />
-    </GenerateServiceWorkerAssetsManifest>
-
-    <Copy SourceFiles="%(_ServiceWorkerIntermediatePublishFile.ContentSourcePath)"
-      DestinationFiles="%(_ServiceWorkerIntermediatePublishFile.Identity)" />
-
-    <WriteLinesToFile
-      File="%(_ServiceWorkerIntermediatePublishFile.Identity)"
-      Lines="/* Manifest version: $(_ServiceWorkerPublishAssetsManifestVersion) */" />
-
-    <ItemGroup>
-      <ResolvedFileToPublish
-        Include="@(_ServiceWorkerIntermediatePublishFile)"
-        CopyToPublishDirectory="PreserveNewest"
-        RelativePath="%(_ServiceWorkerIntermediatePublishFile.RelativePath)"
-        ExcludeFromSingleFile="true" />
-
-      <ResolvedFileToPublish
-        Include="$(_ServiceWorkerAssetsManifestPublishIntermediateOutputPath)"
-        CopyToPublishDirectory="PreserveNewest"
-        RelativePath="$(_BlazorPublishOutputPath)$(ServiceWorkerAssetsManifest)"
-        ExcludeFromSingleFile="true" />
-    </ItemGroup>
-  </Target>
-
-</Project>

+ 0 - 68
src/Components/WebAssembly/Sdk/test/BlazorReadSatelliteAssemblyFileTest.cs

@@ -1,68 +0,0 @@
-// 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.Collections.Generic;
-using System.IO;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-using Moq;
-using Xunit;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class BlazorReadSatelliteAssemblyFileTest
-    {
-        [Fact]
-        public void WritesAndReadsRoundTrip()
-        {
-            // Arrange/Act
-            var tempFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
-
-            var writer = new BlazorWriteSatelliteAssemblyFile
-            {
-                BuildEngine = Mock.Of<IBuildEngine>(),
-                WriteFile = new TaskItem(tempFile),
-                SatelliteAssembly = new[]
-                {
-                    new TaskItem("Resources.fr.dll", new Dictionary<string, string>
-                    {
-                        ["Culture"] = "fr",
-                        ["DestinationSubDirectory"] = "fr\\",
-                    }),
-                    new TaskItem("Resources.ja-jp.dll", new Dictionary<string, string>
-                    {
-                        ["Culture"] = "ja-jp",
-                        ["DestinationSubDirectory"] = "ja-jp\\",
-                    }),
-                },
-            };
-
-            var reader = new BlazorReadSatelliteAssemblyFile
-            {
-                BuildEngine = Mock.Of<IBuildEngine>(),
-                ReadFile = new TaskItem(tempFile),
-            };
-
-            writer.Execute();
-
-            Assert.True(File.Exists(tempFile), "Write should have succeeded.");
-
-            reader.Execute();
-
-            Assert.Collection(
-                reader.SatelliteAssembly,
-                assembly =>
-                {
-                    Assert.Equal("Resources.fr.dll", assembly.ItemSpec);
-                    Assert.Equal("fr", assembly.GetMetadata("Culture"));
-                    Assert.Equal("fr\\", assembly.GetMetadata("DestinationSubDirectory"));
-                },
-                assembly =>
-                {
-                    Assert.Equal("Resources.ja-jp.dll", assembly.ItemSpec);
-                    Assert.Equal("ja-jp", assembly.GetMetadata("Culture"));
-                    Assert.Equal("ja-jp\\", assembly.GetMetadata("DestinationSubDirectory"));
-                });
-        }
-    }
-}

+ 0 - 195
src/Components/WebAssembly/Sdk/test/GenerateBlazorBootJsonTest.cs

@@ -1,195 +0,0 @@
-// 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.IO;
-using System.Linq;
-using System.Runtime.Serialization.Json;
-using Microsoft.Build.Framework;
-using Moq;
-using Xunit;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly
-{
-    public class GenerateBlazorWebAssemblyBootJsonTest
-    {
-        [Fact]
-        public void GroupsResourcesByType()
-        {
-            // Arrange
-            var taskInstance = new GenerateBlazorWebAssemblyBootJson
-            {
-                AssemblyPath = "MyApp.Entrypoint.dll",
-                Resources = new[]
-                {
-                    CreateResourceTaskItem(
-                        ("FileName", "My.Assembly1"),
-                        ("Extension", ".dll"),
-                        ("FileHash", "abcdefghikjlmnopqrstuvwxyz")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "My.Assembly2"),
-                        ("Extension", ".dll"),
-                        ("FileHash", "012345678901234567890123456789")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "SomePdb"),
-                        ("Extension", ".pdb"),
-                        ("FileHash", "pdbhashpdbhashpdbhash")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "My.Assembly1"),
-                        ("Extension", ".pdb"),
-                        ("FileHash", "pdbdefghikjlmnopqrstuvwxyz")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "some-runtime-file"),
-                        ("FileHash", "runtimehashruntimehash"),
-                        ("AssetType", "native")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "satellite-assembly1"),
-                        ("Extension", ".dll"),
-                        ("FileHash", "hashsatelliteassembly1"),
-                        ("Culture", "en-GB")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "satellite-assembly2"),
-                        ("Extension", ".dll"),
-                        ("FileHash", "hashsatelliteassembly2"),
-                        ("Culture", "fr")),
-
-                    CreateResourceTaskItem(
-                        ("FileName", "satellite-assembly3"),
-                        ("Extension", ".dll"),
-                        ("FileHash", "hashsatelliteassembly3"),
-                        ("Culture", "en-GB")),
-                }
-            };
-
-            using var stream = new MemoryStream();
-
-            // Act
-            taskInstance.WriteBootJson(stream, "MyEntrypointAssembly");
-
-            // Assert
-            var parsedContent = ParseBootData(stream);
-            Assert.Equal("MyEntrypointAssembly", parsedContent.entryAssembly);
-
-            var resources = parsedContent.resources.assembly;
-            Assert.Equal(2, resources.Count);
-            Assert.Equal("sha256-abcdefghikjlmnopqrstuvwxyz", resources["My.Assembly1.dll"]);
-            Assert.Equal("sha256-012345678901234567890123456789", resources["My.Assembly2.dll"]);
-
-            resources = parsedContent.resources.pdb;
-            Assert.Equal(2, resources.Count);
-            Assert.Equal("sha256-pdbhashpdbhashpdbhash", resources["SomePdb.pdb"]);
-            Assert.Equal("sha256-pdbdefghikjlmnopqrstuvwxyz", resources["My.Assembly1.pdb"]);
-
-            resources = parsedContent.resources.runtime;
-            Assert.Single(resources);
-            Assert.Equal("sha256-runtimehashruntimehash", resources["some-runtime-file"]);
-
-            var satelliteResources = parsedContent.resources.satelliteResources;
-            Assert.Collection(
-                satelliteResources.OrderBy(kvp => kvp.Key),
-                kvp =>
-                {
-                    Assert.Equal("en-GB", kvp.Key);
-                    Assert.Collection(
-                        kvp.Value.OrderBy(item => item.Key),
-                        item =>
-                        {
-                            Assert.Equal("en-GB/satellite-assembly1.dll", item.Key);
-                            Assert.Equal("sha256-hashsatelliteassembly1", item.Value);
-                        },
-                        item =>
-                        {
-                            Assert.Equal("en-GB/satellite-assembly3.dll", item.Key);
-                            Assert.Equal("sha256-hashsatelliteassembly3", item.Value);
-                        });
-                },
-                kvp =>
-                {
-                    Assert.Equal("fr", kvp.Key);
-                    Assert.Collection(
-                        kvp.Value.OrderBy(item => item.Key),
-                        item =>
-                        {
-                            Assert.Equal("fr/satellite-assembly2.dll", item.Key);
-                            Assert.Equal("sha256-hashsatelliteassembly2", item.Value);
-                        });
-                });
-        }
-
-        [Theory]
-        [InlineData(false)]
-        [InlineData(true)]
-        public void CanSpecifyCacheBootResources(bool flagValue)
-        {
-            // Arrange
-            var taskInstance = new GenerateBlazorWebAssemblyBootJson { CacheBootResources = flagValue };
-            using var stream = new MemoryStream();
-
-            // Act
-            taskInstance.WriteBootJson(stream, "MyEntrypointAssembly");
-
-            // Assert
-            var parsedContent = ParseBootData(stream);
-            Assert.Equal(flagValue, parsedContent.cacheBootResources);
-        }
-
-        [Theory]
-        [InlineData(false)]
-        [InlineData(true)]
-        public void CanSpecifyDebugBuild(bool flagValue)
-        {
-            // Arrange
-            var taskInstance = new GenerateBlazorWebAssemblyBootJson { DebugBuild = flagValue };
-            using var stream = new MemoryStream();
-
-            // Act
-            taskInstance.WriteBootJson(stream, "MyEntrypointAssembly");
-
-            // Assert
-            var parsedContent = ParseBootData(stream);
-            Assert.Equal(flagValue, parsedContent.debugBuild);
-        }
-
-        [Theory]
-        [InlineData(false)]
-        [InlineData(true)]
-        public void CanSpecifyLinkerEnabled(bool flagValue)
-        {
-            // Arrange
-            var taskInstance = new GenerateBlazorWebAssemblyBootJson { LinkerEnabled = flagValue };
-            using var stream = new MemoryStream();
-
-            // Act
-            taskInstance.WriteBootJson(stream, "MyEntrypointAssembly");
-
-            // Assert
-            var parsedContent = ParseBootData(stream);
-            Assert.Equal(flagValue, parsedContent.linkerEnabled);
-        }
-
-        private static BootJsonData ParseBootData(Stream stream)
-        {
-            stream.Position = 0;
-            var serializer = new DataContractJsonSerializer(
-                typeof(BootJsonData),
-                new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true });
-            return (BootJsonData)serializer.ReadObject(stream);
-        }
-
-        private static ITaskItem CreateResourceTaskItem(params (string key, string value)[] values)
-        {
-            var mock = new Mock<ITaskItem>();
-
-            foreach (var (key, value) in values)
-            {
-                mock.Setup(m => m.GetMetadata(key)).Returns(value);
-            }
-            return mock.Object;
-        }
-    }
-}

+ 0 - 12
src/Components/WebAssembly/Sdk/test/Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj

@@ -1,12 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Reference Include="Microsoft.Build.Utilities.Core" />
-    <Reference Include="Microsoft.NET.Sdk.BlazorWebAssembly" />
-  </ItemGroup>
-
-</Project>

+ 0 - 40
src/Components/WebAssembly/Sdk/testassets/Directory.Build.props

@@ -1,40 +0,0 @@
-<Project>
-  <Import Project="Before.Directory.Build.props" Condition="Exists('Before.Directory.Build.props')" />
-
-  <PropertyGroup>
-    <RepoRoot
-      Condition="'$(RepoRoot)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, 'AspNetCore.sln'))\</RepoRoot>
-    <ArtifactsBinDir
-      Condition="'$(ArtifactsBinDir)' == ''">$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts', 'bin'))</ArtifactsBinDir>
-  </PropertyGroup>
-  <Import Project="$(ArtifactsBinDir)GenerateFiles\Directory.Build.props" />
-
-  <PropertyGroup>
-    <!-- Do not resolve Reference ItemGroup since it has a different semantic meaning in Razor test apps -->
-    <EnableCustomReferenceResolution>false</EnableCustomReferenceResolution>
-
-    <RazorSdkCurrentVersionProps>$(RepoRoot)src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Sdk.Razor.CurrentVersion.props</RazorSdkCurrentVersionProps>
-    <RazorSdkCurrentVersionTargets>$(RepoRoot)src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Sdk.Razor.CurrentVersion.targets</RazorSdkCurrentVersionTargets>
-    <RazorSdkArtifactsDirectory>$(RepoRoot)artifacts\bin\Microsoft.NET.Sdk.Razor\</RazorSdkArtifactsDirectory>
-    <BlazorWebAssemblySdkArtifactsDirectory>$(RepoRoot)artifacts\bin\Microsoft.NET.Sdk.BlazorWebAssembly\</BlazorWebAssemblySdkArtifactsDirectory>
-    <_BlazorWebAssemblyTargetsFile>$(RepoRoot)src\Components\WebAssembly\Sdk\src\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets</_BlazorWebAssemblyTargetsFile>
-    <BlazorWebAssemblyJSPath>$(MSBuildThisFileDirectory)blazor.webassembly.js</BlazorWebAssemblyJSPath>
-  </PropertyGroup>
-
-  <Import Project="$(RepoRoot)eng\Versions.props" />
-
-  <PropertyGroup>
-    <!-- Reset version prefix to 1.0.0 for test projects -->
-    <VersionPrefix>1.0.0</VersionPrefix>
-
-    <!-- Turn down the compression level for brotli -->
-    <_BlazorBrotliCompressionLevel>NoCompression</_BlazorBrotliCompressionLevel>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <!-- Have the SDK treat the MvcShim as an MVC assembly -->
-    <_MvcAssemblyName Include="Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib" />
-  </ItemGroup>
-
-  <Import Project="After.Directory.Build.props" Condition="Exists('After.Directory.Build.props')" />
-</Project>

+ 0 - 7
src/Components/WebAssembly/Sdk/testassets/Directory.Build.targets

@@ -1,7 +0,0 @@
-<Project>
-  <Import Project="$(ArtifactsBinDir)GenerateFiles\Directory.Build.targets" />
-
-  <PropertyGroup>
-    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' ">$(MicrosoftNETCoreAppRuntimeVersion)</RuntimeFrameworkVersion>
-  </PropertyGroup>
-</Project>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/LinkBaseToWebRoot/js/LinkedScript.js

@@ -1 +0,0 @@
-

+ 0 - 14
src/Components/WebAssembly/Sdk/testassets/RestoreBlazorWasmTestProjects/RestoreBlazorWasmTestProjects.csproj

@@ -1,14 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\blazorhosted\blazorhosted.csproj" />
-    <ProjectReference Include="..\blazorhosted-rid\blazorhosted-rid.csproj" />
-    <ProjectReference Include="..\blazorwasm\blazorwasm.csproj" />
-    <ProjectReference Include="..\blazorwasm-minimal\blazorwasm-minimal.csproj" />
-    <ProjectReference Include="..\blazorwasm-fxref\blazorwasm-fxref.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazor.webassembly.js

@@ -1 +0,0 @@
-Test file

+ 0 - 12
src/Components/WebAssembly/Sdk/testassets/blazorhosted-rid/Program.cs

@@ -1,12 +0,0 @@
-using System;
-
-namespace blazorhosted.Server
-{
-    public class Program
-    {
-        public static void Main(string[] args)
-        {
-            Console.WriteLine(typeof(string));
-        }
-    }
-}

+ 0 - 22
src/Components/WebAssembly/Sdk/testassets/blazorhosted-rid/blazorhosted-rid.csproj

@@ -1,22 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
-  <PropertyGroup>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-    <!--
-      Specify the RID in the project file to allow the runtime pack to be restored during repo restore.
-      We do not want the rid-specific package to be restored as part of the test.
-    -->
-    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\blazorwasm\blazorwasm.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <FrameworkReference Remove="Microsoft.AspNetCore.App" />
-    <KnownFrameworkReference Remove="Microsoft.AspNetCore.App" />
-  </ItemGroup>
-
-</Project>

+ 0 - 16
src/Components/WebAssembly/Sdk/testassets/blazorhosted/Program.cs

@@ -1,16 +0,0 @@
-using System;
-using Microsoft.AspNetCore;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Configuration;
-
-namespace blazorhosted.Server
-{
-    public class Program
-    {
-        public static void Main(string[] args)
-        {
-            Console.WriteLine(typeof(IWebHost));
-            GC.KeepAlive(typeof(RazorClassLibrary.Class1));
-        }
-    }
-}

+ 0 - 12
src/Components/WebAssembly/Sdk/testassets/blazorhosted/blazorhosted.csproj

@@ -1,12 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
-  <PropertyGroup>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\blazorwasm\blazorwasm.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm-fxref/App.razor

@@ -1 +0,0 @@
-Hello from App

+ 0 - 11
src/Components/WebAssembly/Sdk/testassets/blazorwasm-fxref/Program.cs

@@ -1,11 +0,0 @@
-using System;
-
-namespace standalone
-{
-    public class Program
-    {
-        public static void Main(string[] args)
-        {
-        }
-    }
-}

+ 0 - 31
src/Components/WebAssembly/Sdk/testassets/blazorwasm-fxref/blazorwasm-fxref.csproj

@@ -1,31 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
-
-  <PropertyGroup>
-    <TargetFramework>net5.0</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-    <BlazorWebAssemblySdkDirectoryRoot>$(BlazorWebAssemblySdkArtifactsDirectory)$(Configuration)\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
-  </PropertyGroup>
-
-  <!-- Test Placeholder -->
-
-  <PropertyGroup Condition="'$(RunningAsTest)' == ''">
-    <!-- We don't want to run build server when not running as tests. -->
-    <UseRazorBuildServer>false</UseRazorBuildServer>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(BinariesRoot)'==''">
-    <!-- In test scenarios $(BinariesRoot) is defined in a generated Directory.Build.props file -->
-    <BinariesRoot>$(RepoRoot)artifacts\bin\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\$(Configuration)\netstandard2.0\</BinariesRoot>
-  </PropertyGroup>
-
-  <!-- DO NOT add addition references here. This is meant to simulate a non-MVC library -->
-  <ItemGroup Condition="'$(BinariesRoot)'!=''">
-    <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
-  </ItemGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.0" />
-  </ItemGroup>
-
-</Project>

+ 0 - 8
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/App.razor

@@ -1,8 +0,0 @@
-<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="true">
-    <Found Context="routeData">
-        <RouteView RouteData="@routeData"/>
-    </Found>
-    <NotFound>
-        <p>Sorry, there's nothing at this address.</p>
-    </NotFound>
-</Router>

+ 0 - 5
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/Pages/Index.razor

@@ -1,5 +0,0 @@
-@page "/"
-
-<h1>Hello, world!</h1>
-
-Welcome to your new app.

+ 0 - 11
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/Program.cs

@@ -1,11 +0,0 @@
-using System;
-
-namespace standalone
-{
-    public class Program
-    {
-        public static void Main(string[] args)
-        {
-        }
-    }
-}

+ 0 - 2
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/_Imports.razor

@@ -1,2 +0,0 @@
-@using Microsoft.AspNetCore.Components.Routing
-@using standalone

+ 0 - 27
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/blazorwasm-minimal.csproj

@@ -1,27 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
-
-  <PropertyGroup>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-    <BlazorWebAssemblySdkDirectoryRoot>$(BlazorWebAssemblySdkArtifactsDirectory)$(Configuration)\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
-  </PropertyGroup>
-
-  <!-- Test Placeholder -->
-
-  <PropertyGroup Condition="'$(RunningAsTest)' == ''">
-    <!-- We don't want to run build server when not running as tests. -->
-    <UseRazorBuildServer>false</UseRazorBuildServer>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(BinariesRoot)'==''">
-    <!-- In test scenarios $(BinariesRoot) is defined in a generated Directory.Build.props file -->
-    <BinariesRoot>$(RepoRoot)artifacts\bin\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\$(Configuration)\netstandard2.0\</BinariesRoot>
-  </PropertyGroup>
-
-  <!-- DO NOT add addition references here. This is meant to simulate a non-MVC library -->
-  <ItemGroup Condition="'$(BinariesRoot)'!=''">
-    <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
-  </ItemGroup>
-
-</Project>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/wwwroot/css/app.css

@@ -1 +0,0 @@
-.build { }

+ 0 - 24
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/wwwroot/index.html

@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width" />
-    <title>standalone</title>
-    <base href="/" />
-    <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
-    <link href="css/app.css" rel="stylesheet" />
-</head>
-
-<body>
-    <app>Loading...</app>
-
-    <div id="blazor-error-ui">
-        An unhandled error has occurred.
-        <a href="" class="reload">Reload</a>
-        <a class="dismiss">🗙</a>
-    </div>
-    <script src="_framework/blazor.webassembly.js"></script>
-</body>
-
-</html>

+ 0 - 8
src/Components/WebAssembly/Sdk/testassets/blazorwasm/App.razor

@@ -1,8 +0,0 @@
-<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="true">
-    <Found Context="routeData">
-        <RouteView RouteData="@routeData"/>
-    </Found>
-    <NotFound>
-        <p>Sorry, there's nothing at this address.</p>
-    </NotFound>
-</Router>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm/LinkToWebRoot/css/app.css

@@ -1 +0,0 @@
-.publish { }

+ 0 - 5
src/Components/WebAssembly/Sdk/testassets/blazorwasm/Pages/Index.razor

@@ -1,5 +0,0 @@
-@page "/"
-
-<h1>Hello, world!</h1>
-
-Welcome to your new app.

+ 0 - 16
src/Components/WebAssembly/Sdk/testassets/blazorwasm/Program.cs

@@ -1,16 +0,0 @@
-using System;
-
-namespace standalone
-{
-    public class Program
-    {
-        public static void Main(string[] args)
-        {
-            GC.KeepAlive(typeof(System.Text.Json.JsonSerializer));
-            GC.KeepAlive(typeof(RazorClassLibrary.Class1));
-#if REFERENCE_classlibrarywithsatelliteassemblies
-            GC.KeepAlive(typeof(classlibrarywithsatelliteassemblies.Class1));
-#endif
-        }
-    }
-}

+ 0 - 123
src/Components/WebAssembly/Sdk/testassets/blazorwasm/Resources.ja.resx.txt

@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Hello" xml:space="preserve">
-    <value>Konnichiwa</value>
-  </data>
-</root>

+ 0 - 2
src/Components/WebAssembly/Sdk/testassets/blazorwasm/_Imports.razor

@@ -1,2 +0,0 @@
-@using Microsoft.AspNetCore.Components.Routing
-@using standalone

+ 0 - 53
src/Components/WebAssembly/Sdk/testassets/blazorwasm/blazorwasm.csproj

@@ -1,53 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
-
-  <PropertyGroup>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-    <BlazorWebAssemblySdkDirectoryRoot>$(BlazorWebAssemblySdkArtifactsDirectory)$(Configuration)\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
-    <ServiceWorkerAssetsManifest>custom-service-worker-assets.js</ServiceWorkerAssetsManifest>
-  </PropertyGroup>
-
-  <!-- Test Placeholder -->
-
-  <PropertyGroup Condition="'$(RunningAsTest)' == ''">
-    <!-- We don't want to run build server when not running as tests. -->
-    <UseRazorBuildServer>false</UseRazorBuildServer>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(BinariesRoot)'==''">
-    <!-- In test scenarios $(BinariesRoot) is defined in a generated Directory.Build.props file -->
-    <BinariesRoot>$(RepoRoot)artifacts\bin\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\$(Configuration)\netstandard2.0\</BinariesRoot>
-  </PropertyGroup>
-
-  <!-- DO NOT add addition references here. This is meant to simulate a non-MVC library -->
-  <ItemGroup Condition="'$(BinariesRoot)'!=''">
-    <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
-    <ProjectReference Include="..\razorclasslibrary\RazorClassLibrary.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <!--
-      We need a Microsoft.* package to verify type granular trimming. We'll pick a fixed version to we can bake in some details about
-      the contents of the package in our tests.
-    -->
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.0" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <!-- These assets should be treated as static web assets for publish purposes -->
-    <Content Include="..\LinkBaseToWebRoot\**\*.js">
-      <LinkBase>wwwroot\</LinkBase>
-    </Content>
-
-    <!-- This asset should be ignored as a static web assets as it defines CopyToPublishDirectory="Never" -->
-    <Content Update="wwwroot\css\app.css" CopyToPublishDirectory="Never" />
-
-    <!-- This asset should be treated as a static web asset and copied into the right location defined by its link attribute. -->
-    <Content Include="LinkToWebRoot\css\app.css" Link="wwwroot\css\app.css" />
-
-    <!-- The content from my-prod-service-worker.js should be published under the name my-service-worker.js -->
-    <ServiceWorker Include="wwwroot\serviceworkers\my-service-worker.js" PublishedContent="wwwroot\serviceworkers\my-prod-service-worker.js" />
-  </ItemGroup>
-
-</Project>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/Fake-License.txt

@@ -1 +0,0 @@
-

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/css/app.css

@@ -1 +0,0 @@
-.build { }

+ 0 - 24
src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/index.html

@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width" />
-    <title>standalone</title>
-    <base href="/" />
-    <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
-    <link href="css/app.css" rel="stylesheet" />
-</head>
-
-<body>
-    <app>Loading...</app>
-
-    <div id="blazor-error-ui">
-        An unhandled error has occurred.
-        <a href="" class="reload">Reload</a>
-        <a class="dismiss">🗙</a>
-    </div>
-    <script src="_framework/blazor.webassembly.js"></script>
-</body>
-
-</html>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/serviceworkers/my-prod-service-worker.js

@@ -1 +0,0 @@
-// This is the production service worker

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/blazorwasm/wwwroot/serviceworkers/my-service-worker.js

@@ -1 +0,0 @@
-// This is the development service worker

+ 0 - 12
src/Components/WebAssembly/Sdk/testassets/classlibrarywithsatelliteassemblies/Class1.cs

@@ -1,12 +0,0 @@
-using System;
-
-namespace classlibrarywithsatelliteassemblies
-{
-    public class Class1
-    {
-        public static void Test()
-        {
-            GC.KeepAlive(typeof(Microsoft.CodeAnalysis.CSharp.CSharpCompilation));
-        }
-    }
-}

+ 0 - 123
src/Components/WebAssembly/Sdk/testassets/classlibrarywithsatelliteassemblies/Resources.es-ES.resx

@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Hello" xml:space="preserve">
-    <value>Hola</value>
-  </data>
-</root>

+ 0 - 14
src/Components/WebAssembly/Sdk/testassets/classlibrarywithsatelliteassemblies/classlibrarywithsatelliteassemblies.csproj

@@ -1,14 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-    <RazorLangVersion>3.0</RazorLangVersion>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <!-- The compiler package contains quite a few satellite assemblies -->
-    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.4.0" />
-  </ItemGroup>
-
-</Project>

+ 0 - 6
src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/Class1.cs

@@ -1,6 +0,0 @@
-namespace RazorClassLibrary
-{
-    public class Class1
-    {
-    }
-}

+ 0 - 9
src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/RazorClassLibrary.csproj

@@ -1,9 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-    <RazorLangVersion>3.0</RazorLangVersion>
-    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
-  </PropertyGroup>
-
-</Project>

+ 0 - 1
src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/wwwroot/styles.css

@@ -1 +0,0 @@
-

+ 0 - 0
src/Components/WebAssembly/Sdk/testassets/razorclasslibrary/wwwroot/wwwroot/exampleJsInterop.js


+ 0 - 98
src/Components/WebAssembly/Sdk/tools/Application.cs

@@ -1,98 +0,0 @@
-// 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.Reflection;
-using System.Threading;
-using Microsoft.Extensions.CommandLineUtils;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly.Tools
-{
-    internal class Application : CommandLineApplication
-    {
-        public Application(
-            CancellationToken cancellationToken,
-            TextWriter output = null,
-            TextWriter error = null)
-        {
-            CancellationToken = cancellationToken;
-            Out = output ?? Out;
-            Error = error ?? Error;
-
-            Name = "BlazorWebAssembly.Tools";
-            FullName = "Microsoft Blazor WebAssembly SDK tool";
-            Description = "CLI for Blazor WebAssembly operations.";
-            ShortVersionGetter = GetInformationalVersion;
-
-            HelpOption("-?|-h|--help");
-
-            Commands.Add(new BrotliCompressCommand(this));
-        }
-
-        public CancellationToken CancellationToken { get; }
-
-        public new int Execute(params string[] args)
-        {
-            try
-            {
-                return base.Execute(ExpandResponseFiles(args));
-            }
-            catch (AggregateException ex) when (ex.InnerException != null)
-            {
-                foreach (var innerException in ex.Flatten().InnerExceptions)
-                {
-                    Error.WriteLine(innerException.Message);
-                    Error.WriteLine(innerException.StackTrace);
-                }
-                return 1;
-            }
-            catch (CommandParsingException ex)
-            {
-                // Don't show a call stack when we have unneeded arguments, just print the error message.
-                // The code that throws this exception will print help, so no need to do it here.
-                Error.WriteLine(ex.Message);
-                return 1;
-            }
-            catch (OperationCanceledException)
-            {
-                // This is a cancellation, not a failure.
-                Error.WriteLine("Cancelled");
-                return 1;
-            }
-            catch (Exception ex)
-            {
-                Error.WriteLine(ex.Message);
-                Error.WriteLine(ex.StackTrace);
-                return 1;
-            }
-        }
-
-        private string GetInformationalVersion()
-        {
-            var assembly = typeof(Application).Assembly;
-            var attribute = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
-            return attribute.InformationalVersion;
-        }
-
-        private static string[] ExpandResponseFiles(string[] args)
-        {
-            var expandedArgs = new List<string>();
-            foreach (var arg in args)
-            {
-                if (!arg.StartsWith("@", StringComparison.Ordinal))
-                {
-                    expandedArgs.Add(arg);
-                }
-                else
-                {
-                    var fileName = arg.Substring(1);
-                    expandedArgs.AddRange(File.ReadLines(fileName));
-                }
-            }
-
-            return expandedArgs.ToArray();
-        }
-    }
-}

+ 0 - 85
src/Components/WebAssembly/Sdk/tools/BrotliCompressCommand.cs

@@ -1,85 +0,0 @@
-// 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.IO;
-using System.IO.Compression;
-using System.Threading.Tasks;
-using Microsoft.Extensions.CommandLineUtils;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly.Tools
-{
-    internal class BrotliCompressCommand : CommandLineApplication
-    {
-        public BrotliCompressCommand(Application parent)
-            : base(throwOnUnexpectedArg: true)
-        {
-            base.Parent = parent;
-            Name = "brotli";
-            Sources = Option("-s", "files to compress", CommandOptionType.MultipleValue);
-            Outputs = Option("-o", "Output file path", CommandOptionType.MultipleValue);
-            CompressionLevelOption = Option("-c", "Compression level", CommandOptionType.SingleValue);
-
-            Invoke = () => Execute().GetAwaiter().GetResult();
-        }
-
-        public CommandOption Sources { get; }
-
-        public CommandOption Outputs { get; }
-
-        public CommandOption CompressionLevelOption { get; }
-
-        public CompressionLevel CompressionLevel { get; private set; } = CompressionLevel.Optimal;
-
-        private Task<int> Execute()
-        {
-            if (!ValidateArguments())
-            {
-                ShowHelp();
-                return Task.FromResult(1);
-            }
-
-            return ExecuteCoreAsync();
-        }
-
-        private bool ValidateArguments()
-        {
-            if (Sources.Values.Count != Outputs.Values.Count)
-            {
-                Error.WriteLine($"{Sources.Description} has {Sources.Values.Count}, but {Outputs.Description} has {Outputs.Values.Count} values.");
-                return false;
-            }
-
-            if (CompressionLevelOption.HasValue())
-            {
-                if (!Enum.TryParse<CompressionLevel>(CompressionLevelOption.Value(), out var value))
-                {
-                    Error.WriteLine($"Invalid option {CompressionLevelOption.Value()} for {CompressionLevelOption.Template}.");
-                    return false;
-                }
-
-                CompressionLevel = value;
-            }
-
-            return true;
-        }
-
-        private Task<int> ExecuteCoreAsync()
-        {
-            Parallel.For(0, Sources.Values.Count, i =>
-            {
-                var source = Sources.Values[i];
-                var output = Outputs.Values[i];
-
-                using var sourceStream = File.OpenRead(source);
-                using var fileStream = new FileStream(output, FileMode.Create);
-
-                using var stream = new BrotliStream(fileStream, CompressionLevel);
-
-                sourceStream.CopyTo(stream);
-            });
-
-            return Task.FromResult(0);
-        }
-    }
-}

+ 0 - 27
src/Components/WebAssembly/Sdk/tools/DebugMode.cs

@@ -1,27 +0,0 @@
-// 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.Diagnostics;
-using System.Linq;
-using System.Threading;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly.Tools
-{
-    internal static class DebugMode
-    {
-        public static void HandleDebugSwitch(ref string[] args)
-        {
-            if (args.Length > 0 && string.Equals("--debug", args[0], StringComparison.OrdinalIgnoreCase))
-            {
-                args = args.Skip(1).ToArray();
-
-                Console.WriteLine("Waiting for debugger in pid: {0}", Process.GetCurrentProcess().Id);
-                while (!Debugger.IsAttached)
-                {
-                    Thread.Sleep(TimeSpan.FromSeconds(3));
-                }
-            }
-        }
-    }
-}

+ 0 - 21
src/Components/WebAssembly/Sdk/tools/Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj

@@ -1,21 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <OutputType>Exe</OutputType>
-    <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-
-    <IsPackable>false</IsPackable>
-    <IsShipping>false</IsShipping>
-
-    <UseAppHost>false</UseAppHost>
-    <RuntimeIdentifier />
-
-    <!-- Need to build this project in source build -->
-    <ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
-  </PropertyGroup>
-
-  <ItemGroup>
-     <Compile Include="$(SharedSourceRoot)CommandLineUtils\**\*.cs" />
-  </ItemGroup>
-
-</Project>

+ 0 - 30
src/Components/WebAssembly/Sdk/tools/Program.cs

@@ -1,30 +0,0 @@
-// 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.IO;
-using System.Threading;
-using Microsoft.CodeAnalysis;
-
-namespace Microsoft.NET.Sdk.BlazorWebAssembly.Tools
-{
-    internal static class Program
-    {
-        public static int Main(string[] args)
-        {
-            DebugMode.HandleDebugSwitch(ref args);
-
-            var cancel = new CancellationTokenSource();
-            Console.CancelKeyPress += (sender, e) => { cancel.Cancel(); };
-
-            var application = new Application(
-                cancel.Token,
-                Console.Out,
-                Console.Error);
-
-            application.Commands.Add(new BrotliCompressCommand(application));
-
-            return application.Execute(args);
-        }
-    }
-}

+ 0 - 3
src/Components/WebAssembly/Sdk/tools/runtimeconfig.template.json

@@ -1,3 +0,0 @@
-{
-    "rollForwardOnNoCandidateFx": 2
-}

+ 5 - 0
src/DataProtection/DataProtection/src/DataProtectionServiceCollectionExtensions.cs

@@ -2,6 +2,9 @@
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 
 using System;
 using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
 using Microsoft.AspNetCore.Cryptography.Cng;
 using Microsoft.AspNetCore.Cryptography.Cng;
 using Microsoft.AspNetCore.DataProtection;
 using Microsoft.AspNetCore.DataProtection;
 using Microsoft.AspNetCore.DataProtection.Infrastructure;
 using Microsoft.AspNetCore.DataProtection.Infrastructure;
@@ -67,6 +70,8 @@ namespace Microsoft.Extensions.DependencyInjection
         {
         {
             if (OSVersionUtil.IsWindows())
             if (OSVersionUtil.IsWindows())
             {
             {
+                // Assertion for platform compat analyzer
+                Debug.Assert(RuntimeInformation.IsOSPlatform(OSPlatform.Windows));
                 services.TryAddSingleton<IRegistryPolicyResolver, RegistryPolicyResolver>();
                 services.TryAddSingleton<IRegistryPolicyResolver, RegistryPolicyResolver>();
             }
             }
 
 

+ 3 - 0
src/DataProtection/DataProtection/src/EphemeralDataProtectionProvider.cs

@@ -4,6 +4,7 @@
 using System;
 using System;
 using System.Diagnostics;
 using System.Diagnostics;
 using System.Runtime.InteropServices;
 using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
 using Microsoft.AspNetCore.Cryptography.Cng;
 using Microsoft.AspNetCore.Cryptography.Cng;
 using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption;
 using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption;
 using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel;
 using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel;
@@ -47,6 +48,8 @@ namespace Microsoft.AspNetCore.DataProtection
             IKeyRingProvider keyringProvider;
             IKeyRingProvider keyringProvider;
             if (OSVersionUtil.IsWindows())
             if (OSVersionUtil.IsWindows())
             {
             {
+                // Assertion for platform compat analyzer
+                Debug.Assert(RuntimeInformation.IsOSPlatform(OSPlatform.Windows));
                 // Fastest implementation: AES-256-GCM [CNG]
                 // Fastest implementation: AES-256-GCM [CNG]
                 keyringProvider = new EphemeralKeyRing<CngGcmAuthenticatedEncryptorConfiguration>(loggerFactory);
                 keyringProvider = new EphemeralKeyRing<CngGcmAuthenticatedEncryptorConfiguration>(loggerFactory);
             }
             }

+ 17 - 6
src/DataProtection/DataProtection/src/LoggingExtensions.cs

@@ -4,6 +4,8 @@
 using System;
 using System;
 using System.Diagnostics.CodeAnalysis;
 using System.Diagnostics.CodeAnalysis;
 using System.Runtime.CompilerServices;
 using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
 using System.Xml.Linq;
 using System.Xml.Linq;
 using Microsoft.AspNetCore.DataProtection;
 using Microsoft.AspNetCore.DataProtection;
 using Microsoft.Win32;
 using Microsoft.Win32;
@@ -95,7 +97,7 @@ namespace Microsoft.Extensions.Logging
 
 
         private static Action<ILogger, string, Exception?> _writingDataToFile;
         private static Action<ILogger, string, Exception?> _writingDataToFile;
 
 
-        private static Action<ILogger, RegistryKey, string, Exception?> _readingDataFromRegistryKeyValue;
+        private static Action<ILogger, RegistryKey, string, Exception?>? _readingDataFromRegistryKeyValue;
 
 
         private static Action<ILogger, string, string, Exception?> _nameIsNotSafeRegistryValueName;
         private static Action<ILogger, string, string, Exception?> _nameIsNotSafeRegistryValueName;
 
 
@@ -305,10 +307,15 @@ namespace Microsoft.Extensions.Logging
                 eventId: new EventId(39, "WritingDataToFile"),
                 eventId: new EventId(39, "WritingDataToFile"),
                 logLevel: LogLevel.Information,
                 logLevel: LogLevel.Information,
                 formatString: "Writing data to file '{FileName}'.");
                 formatString: "Writing data to file '{FileName}'.");
-            _readingDataFromRegistryKeyValue = LoggerMessage.Define<RegistryKey, string>(
-                eventId: new EventId(40, "ReadingDataFromRegistryKeyValue"),
-                logLevel: LogLevel.Debug,
-                formatString: "Reading data from registry key '{RegistryKeyName}', value '{Value}'.");
+
+            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            {
+                _readingDataFromRegistryKeyValue = LoggerMessage.Define<RegistryKey, string>(
+                    eventId: new EventId(40, "ReadingDataFromRegistryKeyValue"),
+                    logLevel: LogLevel.Debug,
+                    formatString: "Reading data from registry key '{RegistryKeyName}', value '{Value}'.");
+            }
+
             _nameIsNotSafeRegistryValueName = LoggerMessage.Define<string, string>(
             _nameIsNotSafeRegistryValueName = LoggerMessage.Define<string, string>(
                 eventId: new EventId(41, "NameIsNotSafeRegistryValueName"),
                 eventId: new EventId(41, "NameIsNotSafeRegistryValueName"),
                 logLevel: LogLevel.Debug,
                 logLevel: LogLevel.Debug,
@@ -662,9 +669,13 @@ namespace Microsoft.Extensions.Logging
             _writingDataToFile(logger, finalFilename, null);
             _writingDataToFile(logger, finalFilename, null);
         }
         }
 
 
+        [SupportedOSPlatform("windows")]
         public static void ReadingDataFromRegistryKeyValue(this ILogger logger, RegistryKey regKey, string valueName)
         public static void ReadingDataFromRegistryKeyValue(this ILogger logger, RegistryKey regKey, string valueName)
         {
         {
-            _readingDataFromRegistryKeyValue(logger, regKey, valueName, null);
+            if (_readingDataFromRegistryKeyValue != null)
+            {
+                _readingDataFromRegistryKeyValue(logger, regKey, valueName, null);
+            }
         }
         }
 
 
         public static void NameIsNotSafeRegistryValueName(this ILogger logger, string friendlyName, string newFriendlyName)
         public static void NameIsNotSafeRegistryValueName(this ILogger logger, string friendlyName, string newFriendlyName)

+ 1 - 1
src/ProjectTemplates/Shared/TemplatePackageInstaller.cs

@@ -177,7 +177,7 @@ namespace Templates.Test.Helpers
             {
             {
                 var proc = await RunDotNetNew(output, $"\"{templateName}\"");
                 var proc = await RunDotNetNew(output, $"\"{templateName}\"");
 
 
-                if (!proc.Output.Contains("Couldn't find an installed template that matches the input, searching online for one that does..."))
+                if (!proc.Error.Contains("No templates found matching:"))
                 {
                 {
                     throw new InvalidOperationException($"Failed to uninstall previous templates. The template '{templateName}' could still be found.");
                     throw new InvalidOperationException($"Failed to uninstall previous templates. The template '{templateName}' could still be found.");
                 }
                 }

+ 0 - 2
src/ProjectTemplates/TestInfrastructure/Directory.Build.props.in

@@ -7,6 +7,4 @@
 
 
   <Import Project="${ArtifactsBinDir}GenerateFiles\Directory.Build.props" />
   <Import Project="${ArtifactsBinDir}GenerateFiles\Directory.Build.props" />
 
 
-  <Import Project="${RepoRoot}src\Components\WebAssembly\Sdk\src\build\$(DefaultNetCoreTargetFramework)\Microsoft.NET.Sdk.BlazorWebAssembly.props"
-      Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'" />
 </Project>
 </Project>

+ 0 - 1
src/ProjectTemplates/TestInfrastructure/Directory.Build.targets.in

@@ -15,7 +15,6 @@
   -->
   -->
   <PropertyGroup>
   <PropertyGroup>
     <RazorSdkDirectoryRoot>$(ArtifactsBinDir)Microsoft.NET.Sdk.Razor\${Configuration}\sdk-output\</RazorSdkDirectoryRoot>
     <RazorSdkDirectoryRoot>$(ArtifactsBinDir)Microsoft.NET.Sdk.Razor\${Configuration}\sdk-output\</RazorSdkDirectoryRoot>
-    <BlazorWebAssemblySdkDirectoryRoot>$(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly\${Configuration}\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="$(RepoRoot)src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props"
   <Import Project="$(RepoRoot)src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props"
       Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''" />
       Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''" />

+ 1 - 1
src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs

@@ -132,7 +132,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
             Assert.FileExists(publish, PublishOutputPath, Path.Combine("wwwroot", "AppWithPackageAndP2PReference.styles.css"));
             Assert.FileExists(publish, PublishOutputPath, Path.Combine("wwwroot", "AppWithPackageAndP2PReference.styles.css"));
         }
         }
 
 
-        [Fact]
+        [Fact(Skip = "https://github.com/dotnet/aspnetcore/issues/29224")]
         [InitializeTestProject("AppWithPackageAndP2PReference", additionalProjects: new[] { "ClassLibrary", "ClassLibrary2" })]
         [InitializeTestProject("AppWithPackageAndP2PReference", additionalProjects: new[] { "ClassLibrary", "ClassLibrary2" })]
         public async Task Publish_NoBuild_CopiesStaticWebAssetsToDestinationFolder()
         public async Task Publish_NoBuild_CopiesStaticWebAssetsToDestinationFolder()
         {
         {

+ 0 - 2
src/Shared/MSBuild.Testing/BuildVariables.cs

@@ -19,8 +19,6 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
 
 
         public static string RazorSdkDirectoryRoot => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "RazorSdkDirectoryRoot").Value;
         public static string RazorSdkDirectoryRoot => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "RazorSdkDirectoryRoot").Value;
 
 
-        public static string BlazorWebAssemblySdkDirectoryRoot => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "BlazorWebAssemblySdkDirectoryRoot").Value;
-
         public static string RepoRoot => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "Testing.RepoRoot").Value;
         public static string RepoRoot => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "Testing.RepoRoot").Value;
 
 
         public static string DefaultNetCoreTargetFramework => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "DefaultNetCoreTargetFramework").Value;
         public static string DefaultNetCoreTargetFramework => TestAssemblyMetadata.SingleOrDefault(a => a.Key == "DefaultNetCoreTargetFramework").Value;

+ 0 - 5
src/Shared/MSBuild.Testing/MSBuild.Testing.targets

@@ -36,11 +36,6 @@
       <_Parameter2>$(ArtifactsBinDir)Microsoft.NET.Sdk.Razor\$(Configuration)\sdk-output\</_Parameter2>
       <_Parameter2>$(ArtifactsBinDir)Microsoft.NET.Sdk.Razor\$(Configuration)\sdk-output\</_Parameter2>
     </AssemblyAttribute>
     </AssemblyAttribute>
 
 
-     <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
-      <_Parameter1>BlazorWebAssemblySdkDirectoryRoot</_Parameter1>
-      <_Parameter2>$(ArtifactsBinDir)Microsoft.NET.Sdk.BlazorWebAssembly\$(Configuration)\sdk-output\</_Parameter2>
-    </AssemblyAttribute>
-
     <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
     <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
       <_Parameter1>TestAppsRoot</_Parameter1>
       <_Parameter1>TestAppsRoot</_Parameter1>
       <_Parameter2>$(TestAppsRoot)</_Parameter2>
       <_Parameter2>$(TestAppsRoot)</_Parameter2>

+ 0 - 1
src/Shared/MSBuild.Testing/MSBuildProcessManager.cs

@@ -37,7 +37,6 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
                 $"/p:MicrosoftNETCoreAppRuntimeVersion={BuildVariables.MicrosoftNETCoreAppRuntimeVersion}",
                 $"/p:MicrosoftNETCoreAppRuntimeVersion={BuildVariables.MicrosoftNETCoreAppRuntimeVersion}",
                 $"/p:MicrosoftNetCompilersToolsetVersion={BuildVariables.MicrosoftNetCompilersToolsetVersion}",
                 $"/p:MicrosoftNetCompilersToolsetVersion={BuildVariables.MicrosoftNetCompilersToolsetVersion}",
                 $"/p:RazorSdkDirectoryRoot={BuildVariables.RazorSdkDirectoryRoot}",
                 $"/p:RazorSdkDirectoryRoot={BuildVariables.RazorSdkDirectoryRoot}",
-                $"/p:BlazorWebAssemblySdkDirectoryRoot={BuildVariables.BlazorWebAssemblySdkDirectoryRoot}",
                 $"/p:RepoRoot={BuildVariables.RepoRoot}",
                 $"/p:RepoRoot={BuildVariables.RepoRoot}",
                 $"/p:Configuration={project.Configuration}",
                 $"/p:Configuration={project.Configuration}",
                 $"/t:{target}",
                 $"/t:{target}",

Некоторые файлы не были показаны из-за большого количества измененных файлов