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

Use BlazorWebAssemblySDK (#24371)

* Use BlazorWebAssemblySDK

* Update projects to use the BlazorSDK
* Remove tasks and targets from RazorSDK
* Remove workarounds from BlazorSDK

* Fixup

* Fixup
Pranav K 5 лет назад
Родитель
Сommit
8e5533f2a3
38 измененных файлов с 46 добавлено и 1761 удалено
  1. 19 2
      eng/targets/CSharp.Common.props
  2. 2 2
      src/Components/Directory.Build.targets
  3. 7 1
      src/Components/WebAssembly/Sdk/integrationtests/WasmPublishIntegrationTest.cs
  4. 1 0
      src/Components/WebAssembly/Sdk/src/build/net5.0/Microsoft.NET.Sdk.BlazorWebAssembly.props
  5. 0 16
      src/Components/WebAssembly/Sdk/src/build/net5.0/Microsoft.NET.Sdk.BlazorWebAssembly.targets
  6. 1 6
      src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props
  7. 1 1
      src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets
  8. 1 5
      src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/blazorwasm-minimal.csproj
  9. 1 5
      src/Components/WebAssembly/Sdk/testassets/blazorwasm/blazorwasm.csproj
  10. 1 3
      src/Components/WebAssembly/testassets/HostedInAspNet.Client/HostedInAspNet.Client.csproj
  11. 1 4
      src/Components/WebAssembly/testassets/StandaloneApp/StandaloneApp.csproj
  12. 1 3
      src/Components/WebAssembly/testassets/Wasm.Authentication.Client/Wasm.Authentication.Client.csproj
  13. 1 3
      src/Components/benchmarkapps/Wasm.Performance/TestApp/Wasm.Performance.TestApp.csproj
  14. 1 3
      src/Components/test/testassets/BasicTestApp/BasicTestApp.csproj
  15. 1 1
      src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj
  16. 0 3
      src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs
  17. 2 0
      src/ProjectTemplates/BlazorTemplates.Tests/Infrastructure/Directory.Build.props.in
  18. 1 0
      src/ProjectTemplates/BlazorTemplates.Tests/Infrastructure/TemplateTests.props.in
  19. 1 3
      src/ProjectTemplates/Web.ProjectTemplates/ComponentsWebAssembly-CSharp.Client.csproj.in
  20. 1 0
      src/ProjectTemplates/test/Infrastructure/TemplateTests.props.in
  21. 1 1
      src/ProjectTemplates/test/ProjectTemplates.Tests.csproj
  22. 0 5
      src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj
  23. 0 33
      src/Razor/Microsoft.NET.Sdk.Razor/src/AssetsManifestFile.cs
  24. 0 38
      src/Razor/Microsoft.NET.Sdk.Razor/src/BlazorReadSatelliteAssemblyFile.cs
  25. 0 53
      src/Razor/Microsoft.NET.Sdk.Razor/src/BlazorWriteSatelliteAssemblyFile.cs
  26. 0 85
      src/Razor/Microsoft.NET.Sdk.Razor/src/BootJsonData.cs
  27. 0 99
      src/Razor/Microsoft.NET.Sdk.Razor/src/BrotliCompress.cs
  28. 0 79
      src/Razor/Microsoft.NET.Sdk.Razor/src/CreateBlazorTrimmerRootDescriptorFile.cs
  29. 0 70
      src/Razor/Microsoft.NET.Sdk.Razor/src/GZipCompress.cs
  30. 0 155
      src/Razor/Microsoft.NET.Sdk.Razor/src/GenerateBlazorWebAssemblyBootJson.cs
  31. 0 97
      src/Razor/Microsoft.NET.Sdk.Razor/src/GenerateServiceWorkerAssetsManifest.cs
  32. 0 166
      src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Components.ServiceWorkerAssetsManifest.targets
  33. 0 550
      src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Components.Wasm.targets
  34. 1 1
      src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.ScopedCss.targets
  35. 0 2
      src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets
  36. 0 68
      src/Razor/Microsoft.NET.Sdk.Razor/test/BlazorReadSatelliteAssemblyFileTest.cs
  37. 0 195
      src/Razor/Microsoft.NET.Sdk.Razor/test/GenerateBlazorBootJsonTest.cs
  38. 0 3
      src/Razor/test/testassets/RestoreTestProjects/RestoreTestProjects.csproj

+ 19 - 2
eng/targets/CSharp.Common.props

@@ -12,7 +12,7 @@
     <PackageReference Include="MicroBuild.Core" Version="0.3.0" PrivateAssets="All" AllowExplicitReference="true" ExcludeAssets="All" />
     <PackageReference Include="MicroBuild.Core" Version="0.3.0" PrivateAssets="All" AllowExplicitReference="true" ExcludeAssets="All" />
   </ItemGroup>
   </ItemGroup>
 
 
-  <ItemGroup Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''">
+  <ItemGroup Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''">
     <!--
     <!--
       Use the Razor SDK as a project reference. The version of the .NET Core SDK we build with often contains a version of the Razor SDK
       Use the Razor SDK as a project reference. The version of the .NET Core SDK we build with often contains a version of the Razor SDK
       several versions older than latest. We reference the project to ensure it's built before the other projects that use it. Since this
       several versions older than latest. We reference the project to ensure it's built before the other projects that use it. Since this
@@ -25,11 +25,28 @@
       UndefineProperties="TargetFramework;TargetFrameworks" />
       UndefineProperties="TargetFramework;TargetFrameworks" />
   </ItemGroup>
   </ItemGroup>
 
 
-  <ImportGroup Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''">
+  <ImportGroup Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''">
     <Import Project="$(RepoRoot)eng\targets\GetRazorSDKDirectory.props" />
     <Import Project="$(RepoRoot)eng\targets\GetRazorSDKDirectory.props" />
     <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\net5.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" />
   </ItemGroup>
   </ItemGroup>

+ 2 - 2
src/Components/Directory.Build.targets

@@ -1,5 +1,5 @@
 <Project>
 <Project>
-  <PropertyGroup Condition="'$(UseBlazorWebAssembly)' == 'true'">
+  <PropertyGroup Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'">
     <BlazorWebAssemblyJSPath>$(RepoRoot)src\Components\Web.JS\dist\$(Configuration)\blazor.webassembly.js</BlazorWebAssemblyJSPath>
     <BlazorWebAssemblyJSPath>$(RepoRoot)src\Components\Web.JS\dist\$(Configuration)\blazor.webassembly.js</BlazorWebAssemblyJSPath>
     <BlazorWebAssemblyJSMapPath>$(BlazorWebAssemblyJSPath).map</BlazorWebAssemblyJSMapPath>
     <BlazorWebAssemblyJSMapPath>$(BlazorWebAssemblyJSPath).map</BlazorWebAssemblyJSMapPath>
 
 
@@ -12,7 +12,7 @@
     <!-- Add a project dependency without reference output assemblies to enforce build order -->
     <!-- Add a project dependency without reference output assemblies to enforce build order -->
     <!-- Applying workaround for https://github.com/microsoft/msbuild/issues/2661 and https://github.com/dotnet/sdk/issues/952 -->
     <!-- Applying workaround for https://github.com/microsoft/msbuild/issues/2661 and https://github.com/dotnet/sdk/issues/952 -->
     <ProjectReference
     <ProjectReference
-      Condition="'$(UseBlazorWebAssembly)' == 'true' and '$(BuildNodeJS)' != 'false' and '$(BuildingInsideVisualStudio)' != 'true'"
+      Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true' and '$(BuildNodeJS)' != 'false' and '$(BuildingInsideVisualStudio)' != 'true'"
       Include="$(RepoRoot)src\Components\Web.JS\Microsoft.AspNetCore.Components.Web.JS.npmproj"
       Include="$(RepoRoot)src\Components\Web.JS\Microsoft.AspNetCore.Components.Web.JS.npmproj"
       ReferenceOutputAssemblies="false"
       ReferenceOutputAssemblies="false"
       SkipGetTargetFrameworkProperties="true"
       SkipGetTargetFrameworkProperties="true"

+ 7 - 1
src/Components/WebAssembly/Sdk/integrationtests/WasmPublishIntegrationTest.cs

@@ -321,6 +321,8 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
             project.AddProjectFileContent(
             project.AddProjectFileContent(
 @"
 @"
 <PropertyGroup>
 <PropertyGroup>
+    <!-- Workaround for https://github.com/mono/linker/issues/1390 -->
+    <PublishTrimmed>false</PublishTrimmed>
     <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
     <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
 </PropertyGroup>
 </PropertyGroup>
 <ItemGroup>
 <ItemGroup>
@@ -450,6 +452,8 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
             wasmProject.AddProjectFileContent(
             wasmProject.AddProjectFileContent(
 @"
 @"
 <PropertyGroup>
 <PropertyGroup>
+    <!-- Workaround for https://github.com/mono/linker/issues/1390 -->
+    <PublishTrimmed>false</PublishTrimmed>
     <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
     <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
 </PropertyGroup>
 </PropertyGroup>
 <ItemGroup>
 <ItemGroup>
@@ -637,7 +641,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
             // Arrange
             // Arrange
             using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
             using var project = ProjectDirectory.Create("blazorhosted", additionalProjects: new[] { "blazorwasm", "razorclasslibrary", });
             File.WriteAllText(Path.Combine(project.SolutionPath, "blazorwasm", "App.razor.css"), "h1 { font-size: 16px; }");
             File.WriteAllText(Path.Combine(project.SolutionPath, "blazorwasm", "App.razor.css"), "h1 { font-size: 16px; }");
-            
+
             project.Configuration = "Release";
             project.Configuration = "Release";
             var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build", "/p:BuildInsideVisualStudio=true");
             var result = await MSBuildProcessManager.DotnetMSBuild(project, "Build", "/p:BuildInsideVisualStudio=true");
 
 
@@ -701,6 +705,8 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
             var existing = File.ReadAllText(blazorwasmProjFile);
             var existing = File.ReadAllText(blazorwasmProjFile);
             var updatedContent = @"
             var updatedContent = @"
         <PropertyGroup>
         <PropertyGroup>
+            <!-- Workaround for https://github.com/mono/linker/issues/1390 -->
+            <PublishTrimmed>false</PublishTrimmed>
             <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
             <DefineConstants>$(DefineConstants);REFERENCE_classlibrarywithsatelliteassemblies</DefineConstants>
         </PropertyGroup>
         </PropertyGroup>
         <ItemGroup>
         <ItemGroup>

+ 1 - 0
src/Components/WebAssembly/Sdk/src/build/net5.0/Microsoft.NET.Sdk.BlazorWebAssembly.props

@@ -12,5 +12,6 @@ Copyright (c) .NET Foundation. All rights reserved.
 <Project ToolsVersion="14.0">
 <Project ToolsVersion="14.0">
   <PropertyGroup>
   <PropertyGroup>
     <_BlazorWebAssemblyPropsFile>$(MSBuildThisFileDirectory)..\..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.props</_BlazorWebAssemblyPropsFile>
     <_BlazorWebAssemblyPropsFile>$(MSBuildThisFileDirectory)..\..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.props</_BlazorWebAssemblyPropsFile>
+    <_BlazorWebAssemblyTargetsFile>$(MSBuildThisFileDirectory)..\..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets</_BlazorWebAssemblyTargetsFile>
   </PropertyGroup>
   </PropertyGroup>
 </Project>
 </Project>

+ 0 - 16
src/Components/WebAssembly/Sdk/src/build/net5.0/Microsoft.NET.Sdk.BlazorWebAssembly.targets

@@ -1,16 +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>
-    <_BlazorWebAssemblyTargetsFile>$(MSBuildThisFileDirectory)..\..\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets</_BlazorWebAssemblyTargetsFile>
-  </PropertyGroup>
-</Project>

+ 1 - 6
src/Components/WebAssembly/Sdk/src/targets/Microsoft.NET.Sdk.BlazorWebAssembly.Current.props

@@ -24,12 +24,7 @@ Copyright (c) .NET Foundation. All rights reserved.
     <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
     <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
   </PropertyGroup>
   </PropertyGroup>
 
 
-  <PropertyGroup>
-    <!-- Determines if this Sdk is responsible for importing Microsoft.NET.Sdk.Razor. Temporary workaround until we can create a SDK. -->
-    <_RazorSdkImportsMicrosoftNetSdkRazor Condition="'$(UsingMicrosoftNETSdkRazor)' != 'true'">true</_RazorSdkImportsMicrosoftNetSdkRazor>
-  </PropertyGroup>
-
-  <Import Sdk="Microsoft.NET.Sdk.Razor" Project="Sdk.props" Condition="'$(_RazorSdkImportsMicrosoftNetSdkRazor)' == 'true'" />
+  <Import Sdk="Microsoft.NET.Sdk.Razor" Project="Sdk.props" />
   <Import Sdk="Microsoft.NET.Sdk.Web.ProjectSystem" Project="Sdk.props" />
   <Import Sdk="Microsoft.NET.Sdk.Web.ProjectSystem" Project="Sdk.props" />
   <Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.props" />
   <Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.props" />
 
 

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

@@ -15,7 +15,7 @@ Copyright (c) .NET Foundation. All rights reserved.
     <EnableDefaultContentItems Condition=" '$(EnableDefaultContentItems)' == '' ">true</EnableDefaultContentItems>
     <EnableDefaultContentItems Condition=" '$(EnableDefaultContentItems)' == '' ">true</EnableDefaultContentItems>
   </PropertyGroup>
   </PropertyGroup>
 
 
-  <Import Sdk="Microsoft.NET.Sdk.Razor" Project="Sdk.targets" Condition="'$(_RazorSdkImportsMicrosoftNetSdkRazor)' == 'true'" />
+  <Import Sdk="Microsoft.NET.Sdk.Razor" Project="Sdk.targets" />
   <Import Sdk="Microsoft.NET.Sdk.Web.ProjectSystem" Project="Sdk.targets" />
   <Import Sdk="Microsoft.NET.Sdk.Web.ProjectSystem" Project="Sdk.targets" />
   <Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.targets" />
   <Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.targets" />
 
 

+ 1 - 5
src/Components/WebAssembly/Sdk/testassets/blazorwasm-minimal/blazorwasm-minimal.csproj

@@ -1,6 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
-
-  <Import Project="$(RepoRoot)src\Components\WebAssembly\Sdk\src\Sdk\Sdk.props" />
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>net5.0</TargetFramework>
     <TargetFramework>net5.0</TargetFramework>
@@ -26,6 +24,4 @@
     <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
     <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
   </ItemGroup>
   </ItemGroup>
 
 
-  <Import Project="$(RepoRoot)src\Components\WebAssembly\Sdk\src\Sdk\Sdk.targets" />
-
 </Project>
 </Project>

+ 1 - 5
src/Components/WebAssembly/Sdk/testassets/blazorwasm/blazorwasm.csproj

@@ -1,6 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
-
-  <Import Project="$(RepoRoot)src\Components\WebAssembly\Sdk\src\Sdk\Sdk.props" />
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>net5.0</TargetFramework>
     <TargetFramework>net5.0</TargetFramework>
@@ -52,6 +50,4 @@
     <ServiceWorker Include="wwwroot\serviceworkers\my-service-worker.js" PublishedContent="wwwroot\serviceworkers\my-prod-service-worker.js" />
     <ServiceWorker Include="wwwroot\serviceworkers\my-service-worker.js" PublishedContent="wwwroot\serviceworkers\my-prod-service-worker.js" />
   </ItemGroup>
   </ItemGroup>
 
 
-  <Import Project="$(RepoRoot)src\Components\WebAssembly\Sdk\src\Sdk\Sdk.targets" />
-
 </Project>
 </Project>

+ 1 - 3
src/Components/WebAssembly/testassets/HostedInAspNet.Client/HostedInAspNet.Client.csproj

@@ -1,9 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 1 - 4
src/Components/WebAssembly/testassets/StandaloneApp/StandaloneApp.csproj

@@ -1,10 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
-    <FixupWebAssemblyHttpHandlerReference>true</FixupWebAssemblyHttpHandlerReference>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 1 - 3
src/Components/WebAssembly/testassets/Wasm.Authentication.Client/Wasm.Authentication.Client.csproj

@@ -1,9 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 1 - 3
src/Components/benchmarkapps/Wasm.Performance/TestApp/Wasm.Performance.TestApp.csproj

@@ -1,9 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
     <IsTestAssetProject>true</IsTestAssetProject>
     <IsTestAssetProject>true</IsTestAssetProject>
   </PropertyGroup>
   </PropertyGroup>
 
 

+ 1 - 3
src/Components/test/testassets/BasicTestApp/BasicTestApp.csproj

@@ -1,9 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
     <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
-    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
 
 
     <!-- Must be defined before ReferenceFromSource.props is imported -->
     <!-- Must be defined before ReferenceFromSource.props is imported -->
     <AdditionalRunArguments>--pathbase /subdir</AdditionalRunArguments>
     <AdditionalRunArguments>--pathbase /subdir</AdditionalRunArguments>

+ 1 - 1
src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj

@@ -141,7 +141,7 @@
 
 
     <GenerateFileFromTemplate
     <GenerateFileFromTemplate
       TemplateFile="$(MSBuildThisFileDirectory)Infrastructure\Directory.Build.props.in"
       TemplateFile="$(MSBuildThisFileDirectory)Infrastructure\Directory.Build.props.in"
-      Properties=""
+      Properties="RepoRoot=$(RepoRoot)"
       OutputPath="$(TestTemplateCreationFolder)Directory.Build.props" />
       OutputPath="$(TestTemplateCreationFolder)Directory.Build.props" />
 
 
     <!-- Workaround https://github.com/dotnet/core-setup/issues/6420 - there is no MSBuild setting for rollforward yet -->
     <!-- Workaround https://github.com/dotnet/core-setup/issues/6420 - there is no MSBuild setting for rollforward yet -->

+ 0 - 3
src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs

@@ -47,7 +47,6 @@ namespace Templates.Test
             Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
             Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
 
 
             var project = await ProjectFactory.GetOrCreateProject("blazorstandalone", Output);
             var project = await ProjectFactory.GetOrCreateProject("blazorstandalone", Output);
-            project.RuntimeIdentifier = "browser-wasm";
 
 
             var createResult = await project.RunDotNetNewAsync("blazorwasm");
             var createResult = await project.RunDotNetNewAsync("blazorwasm");
             Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
             Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -145,7 +144,6 @@ namespace Templates.Test
             Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
             Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
 
 
             var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", Output);
             var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", Output);
-            project.RuntimeIdentifier = "browser-wasm";
 
 
             var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--pwa" });
             var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--pwa" });
             Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
             Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult));
@@ -355,7 +353,6 @@ namespace Templates.Test
             Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
             Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true");
 
 
             var project = await ProjectFactory.GetOrCreateProject("blazorstandaloneindividual", Output);
             var project = await ProjectFactory.GetOrCreateProject("blazorstandaloneindividual", Output);
-            project.RuntimeIdentifier = "browser-wasm";
 
 
             var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] {
             var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] {
                 "-au",
                 "-au",

+ 2 - 0
src/ProjectTemplates/BlazorTemplates.Tests/Infrastructure/Directory.Build.props.in

@@ -3,4 +3,6 @@
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>net5.0</TargetFramework>
     <TargetFramework>net5.0</TargetFramework>
   </PropertyGroup>
   </PropertyGroup>
+  <Import Project="${RepoRoot}src\Components\WebAssembly\Sdk\src\build\net5.0\Microsoft.NET.Sdk.BlazorWebAssembly.props" Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'" />
+
 </Project>
 </Project>

+ 1 - 0
src/ProjectTemplates/BlazorTemplates.Tests/Infrastructure/TemplateTests.props.in

@@ -36,6 +36,7 @@
   -->
   -->
   <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" Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''" />
   <Import Project="${RepoRoot}src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props" Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''" />
 </Project>
 </Project>

+ 1 - 3
src/ProjectTemplates/Web.ProjectTemplates/ComponentsWebAssembly-CSharp.Client.csproj.in

@@ -1,9 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>${DefaultNetCoreTargetFramework}</TargetFramework>
     <TargetFramework>${DefaultNetCoreTargetFramework}</TargetFramework>
-    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
-    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
     <!--#if PWA -->
     <!--#if PWA -->
     <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
     <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
     <!--#endif -->
     <!--#endif -->

+ 1 - 0
src/ProjectTemplates/test/Infrastructure/TemplateTests.props.in

@@ -37,4 +37,5 @@
     <RazorSdkDirectoryRoot>${ArtifactsBinDir}Microsoft.NET.Sdk.Razor\${Configuration}\sdk-output\</RazorSdkDirectoryRoot>
     <RazorSdkDirectoryRoot>${ArtifactsBinDir}Microsoft.NET.Sdk.Razor\${Configuration}\sdk-output\</RazorSdkDirectoryRoot>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="${RepoRoot}src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props"  Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''" />
   <Import Project="${RepoRoot}src\Razor\Microsoft.NET.Sdk.Razor\src\build\netstandard2.0\Microsoft.NET.Sdk.Razor.props"  Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' OR '$(RazorSdkCurrentVersionProps)' != ''" />
+  <Import Project="${RepoRoot}src\Components\WebAssembly\Sdk\src\build\net5.0\Microsoft.NET.Sdk.BlazorWebAssembly.props"  Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'" />
 </Project>
 </Project>

+ 1 - 1
src/ProjectTemplates/test/ProjectTemplates.Tests.csproj

@@ -155,7 +155,7 @@
 
 
     <GenerateFileFromTemplate
     <GenerateFileFromTemplate
       TemplateFile="$(MSBuildThisFileDirectory)Infrastructure\Directory.Build.props.in"
       TemplateFile="$(MSBuildThisFileDirectory)Infrastructure\Directory.Build.props.in"
-      Properties=""
+      Properties="RepoRoot=$(RepoRoot)"
       OutputPath="$(TestTemplateCreationFolder)Directory.Build.props" />
       OutputPath="$(TestTemplateCreationFolder)Directory.Build.props" />
 
 
     <!-- Workaround https://github.com/dotnet/core-setup/issues/6420 - there is no MSBuild setting for rollforward yet -->
     <!-- Workaround https://github.com/dotnet/core-setup/issues/6420 - there is no MSBuild setting for rollforward yet -->

+ 0 - 5
src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj

@@ -33,11 +33,6 @@
     <Reference Include="Microsoft.NET.Sdk.Razor" ReferenceOutputAssembly="false" SkipGetTargetFrameworkProperties="true" />
     <Reference Include="Microsoft.NET.Sdk.Razor" ReferenceOutputAssembly="false" SkipGetTargetFrameworkProperties="true" />
   </ItemGroup>
   </ItemGroup>
 
 
-  <ItemGroup>
-    <Compile Include="..\src\BootJsonData.cs" LinkBase="Wasm" />
-    <Compile Include="..\src\AssetsManifestFile.cs" LinkBase="Wasm" />
-  </ItemGroup>
-
   <Target Name="GenerateTestData" BeforeTargets="GetAssemblyAttributes">
   <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">
     <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" />
       <Output TaskParameter="ConsoleOutput" PropertyName="_VSInstallDir" />

+ 0 - 33
src/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-#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/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    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/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    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 - 85
src/Razor/Microsoft.NET.Sdk.Razor/src/BootJsonData.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.Collections.Generic;
-using System.Runtime.Serialization;
-using ResourceHashesByNameDictionary = System.Collections.Generic.Dictionary<string, string>;
-
-namespace Microsoft.AspNetCore.Razor.Tasks
-{
-#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; }
-    }
-
-    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; }
-    }
-#pragma warning restore IDE1006 // Naming Styles
-}

+ 0 - 99
src/Razor/Microsoft.NET.Sdk.Razor/src/BrotliCompress.cs

@@ -1,99 +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.Security.Cryptography;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace Microsoft.AspNetCore.Razor.Tasks
-{
-    public class BrotliCompress : DotNetToolTask
-    {
-        private static readonly char[] InvalidPathChars = Path.GetInvalidFileNameChars();
-
-        [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; }
-
-        internal override string Command => "brotli";
-
-        protected override string GenerateResponseFileCommands()
-        {
-            var builder = new StringBuilder();
-
-            builder.AppendLine(Command);
-
-            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(relativePath, ".br"));
-
-                var outputItem = new TaskItem(outputRelativePath);
-                input.CopyMetadataTo(outputItem);
-                // Relative path in the publish dir
-                outputItem.SetMetadata("RelativePath", relativePath + ".br");
-                CompressedFiles[i] = outputItem;
-
-                var outputFullPath = Path.GetFullPath(outputRelativePath);
-
-                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();
-        }
-    }
-}

+ 0 - 79
src/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    // 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/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    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 inputPath = file.ItemSpec;
-                var relativePath = file.GetMetadata("RelativePath");
-                var outputRelativePath = Path.Combine(
-                    OutputDirectory,  
-                    BrotliCompress.CalculateTargetPath(relativePath, ".gz"));
-
-                var outputItem = new TaskItem(outputRelativePath);
-                outputItem.SetMetadata("RelativePath", relativePath + ".gz");
-                CompressedFiles[i] = outputItem;
-
-                if (File.Exists(outputRelativePath) && File.GetLastWriteTimeUtc(inputPath) < 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 '{inputPath}' because '{outputRelativePath}' is newer than '{inputPath}'.");
-                    return;
-                }
-
-                try
-                {
-                    using var sourceStream = File.OpenRead(inputPath);
-                    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 - 155
src/Razor/Microsoft.NET.Sdk.Razor/src/GenerateBlazorWebAssemblyBootJson.cs

@@ -1,155 +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.AspNetCore.Razor.Tasks
-{
-    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 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 result = new BootJsonData
-            {
-                entryAssembly = entryAssemblyName,
-                cacheBootResources = CacheBootResources,
-                debugBuild = DebugBuild,
-                linkerEnabled = LinkerEnabled,
-                resources = new ResourcesData(),
-                config = new List<string>(),
-            };
-
-            // 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(fileName))
-                    {
-                        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();
-                        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/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    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 - 166
src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Components.ServiceWorkerAssetsManifest.targets

@@ -1,166 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.NET.Sdk.Razor.Components.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.AspNetCore.Razor.Tasks.GenerateServiceWorkerAssetsManifest" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-
-  <Target Name="_ComputeServiceWorkerAssets" BeforeTargets="ResolveStaticWebAssetsInputs">
-    <PropertyGroup>
-      <_ServiceWorkerAssetsManifestIntermediateOutputPath>$(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)">
-
-      <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>
-      </_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="wwwroot\$(ServiceWorkerAssetsManifest)"
-        ExcludeFromSingleFile="true" />
-    </ItemGroup>
-  </Target>
-
-</Project>

+ 0 - 550
src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Components.Wasm.targets

@@ -1,550 +0,0 @@
-<!--
-***********************************************************************************************
-Microsoft.NET.Sdk.Razor.Components.Wasm.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">
-  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.GenerateBlazorWebAssemblyBootJson" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.BlazorWriteSatelliteAssemblyFile" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.BlazorReadSatelliteAssemblyFile" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.BrotliCompress" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.GzipCompress" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.CreateBlazorTrimmerRootDescriptorFile" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />
-
-  <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)' == 'Release'">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>
-    <AddRazorSupportForMvc>false</AddRazorSupportForMvc>
-    <OutputType>exe</OutputType>
-
-    <!-- Internal properties -->
-    <_BlazorOutputPath>wwwroot\_framework\</_BlazorOutputPath>
-    <_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>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <FrameworkReference Remove="Microsoft.AspNetCore.App" />
-    <KnownFrameworkReference Remove="Microsoft.AspNetCore.App" />
-  </ItemGroup>
-
-  <Import Project="Microsoft.NET.Sdk.Razor.Components.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.
-    -->
-
-    <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 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);
-      _BlazorWasmPrepareForRun;
-    </GetCurrentProjectStaticWebAssetsDependsOn>
-  </PropertyGroup>
-
-  <Target Name="_BlazorWasmPrepareForRun" DependsOnTargets="_ProcessBlazorWasmOutputs">
-    <PropertyGroup>
-      <_BlazorBuildBootJsonPath>$(IntermediateOutputPath)blazor.boot.json</_BlazorBuildBootJsonPath>
-    </PropertyGroup>
-
-    <GenerateBlazorWebAssemblyBootJson
-      AssemblyPath="@(IntermediateAssembly)"
-      Resources="@(_BlazorOutputWithHash)"
-      DebugBuild="true"
-      LinkerEnabled="false"
-      CacheBootResources="$(BlazorCacheBootResources)"
-      OutputPath="$(_BlazorBuildBootJsonPath)"
-      ConfigurationFiles="@(_BlazorConfigFile)"
-      LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)" />
-
-    <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.')) or $([System.String]::Copy('%(Filename)').StartsWith('Microsoft.Extensions.')))">
-        <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>
-
-    <ItemGroup>
-      <ResolvedFileToPublish Remove="@(_ResolvedSatelliteToPublish)" />
-      <ResolvedFileToPublish Include="@(_ResolvedSatelliteToPublish)" />
-
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)" Condition="'%(Extension)' == '.a'" />
-
-      <!-- Remove dotnet.js from publish output -->
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.RelativePath)' == 'dotnet.js'" />
-
-      <!-- Retarget so that items are published to the wwwroot directory -->
-      <ResolvedFileToPublish
-        RelativePath="$(_BlazorOutputPath)%(ResolvedFileToPublish.RelativePath)"
-        Condition="'%(ResolvedFileToPublish.RelativePath)' != 'web.config' AND !$([System.String]::Copy('%(ResolvedFileToPublish.RelativePath)').Replace('\','/').StartsWith('wwwroot/'))" />
-
-      <!-- Remove pdbs from the publish output -->
-      <ResolvedFileToPublish Remove="@(ResolvedFileToPublish)" Condition="'$(DebuggerSupport)' == 'false' AND '%(Extension)' == '.pdb'" />
-    </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>
-
-    <GenerateBlazorWebAssemblyBootJson
-      AssemblyPath="@(IntermediateAssembly)"
-      Resources="@(_BlazorPublishBootResourceWithHash)"
-      DebugBuild="false"
-      LinkerEnabled="$(PublishTrimmed)"
-      CacheBootResources="$(BlazorCacheBootResources)"
-      OutputPath="$(IntermediateOutputPath)blazor.publish.boot.json"
-      ConfigurationFiles="@(_BlazorConfigFile)"
-      LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)" />
-
-    <ItemGroup>
-      <ResolvedFileToPublish
-        Include="$(IntermediateOutputPath)blazor.publish.boot.json"
-        RelativePath="$(_BlazorOutputPath)blazor.boot.json" />
-
-      <ResolvedFileToPublish
-        Include="@(_BlazorJSFile)"
-        RelativePath="$(_BlazorOutputPath)%(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)')" />
-
-    <BrotliCompress
-      OutputDirectory="$(_CompressedFileOutputPath)"
-      FilesToCompress="@(_FileToCompress)"
-      CompressionLevel="$(_BlazorBrotliCompressionLevel)"
-      SkipIfOutputIsNewer="$(_BlazorWebAssemblyBrotliIncremental)"
-      ToolAssembly="$(_RazorSdkToolAssembly)">
-
-      <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>
-</Project>

+ 1 - 1
src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.ScopedCss.targets

@@ -58,7 +58,7 @@ Integration with static web assets:
   <_ScopedCssExtension>.rz.scp.css</_ScopedCssExtension>
   <_ScopedCssExtension>.rz.scp.css</_ScopedCssExtension>
   <ResolveStaticWebAssetsInputsDependsOn>$(ResolveStaticWebAssetsInputsDependsOn);_CollectAllScopedCssAssets;AddScopedCssBundle</ResolveStaticWebAssetsInputsDependsOn>
   <ResolveStaticWebAssetsInputsDependsOn>$(ResolveStaticWebAssetsInputsDependsOn);_CollectAllScopedCssAssets;AddScopedCssBundle</ResolveStaticWebAssetsInputsDependsOn>
   <ResolveCurrentProjectStaticWebAssetsInputsDependsOn>$(ResolveCurrentProjectStaticWebAssetsInputsDependsOn);_AddGeneratedScopedCssFiles</ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
   <ResolveCurrentProjectStaticWebAssetsInputsDependsOn>$(ResolveCurrentProjectStaticWebAssetsInputsDependsOn);_AddGeneratedScopedCssFiles</ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
-  <GetCurrentProjectStaticWebAssetsDependsOn Condition="'$(UseBlazorWebAssembly)' == 'true'">$(GetCurrentProjectStaticWebAssetsDependsOn);IncludeScopedCssBundle;</GetCurrentProjectStaticWebAssetsDependsOn>
+  <GetCurrentProjectStaticWebAssetsDependsOn Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true'">$(GetCurrentProjectStaticWebAssetsDependsOn);IncludeScopedCssBundle;</GetCurrentProjectStaticWebAssetsDependsOn>
 </PropertyGroup>
 </PropertyGroup>
 
 
 <Target Name="ResolveScopedCssInputs">
 <Target Name="ResolveScopedCssInputs">

+ 0 - 2
src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets

@@ -362,8 +362,6 @@ Copyright (c) .NET Foundation. All rights reserved.
 
 
   <Import Project="Microsoft.NET.Sdk.Razor.MvcApplicationPartsDiscovery.targets" Condition="'$(_TargetingNETCoreApp30OrLater)' == 'true'" />
   <Import Project="Microsoft.NET.Sdk.Razor.MvcApplicationPartsDiscovery.targets" Condition="'$(_TargetingNETCoreApp30OrLater)' == 'true'" />
 
 
-  <Import Project="Microsoft.NET.Sdk.Razor.Components.Wasm.targets" Condition="'$(_TargetingNET50OrLater)' == 'true' AND '$(UseBlazorWebAssembly)' == 'true'" />
-
   <!--
   <!--
     These are the targets that actually do compilation using CSC, separated from the main file for ease of maintenance.
     These are the targets that actually do compilation using CSC, separated from the main file for ease of maintenance.
 
 

+ 0 - 68
src/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    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/Razor/Microsoft.NET.Sdk.Razor/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.AspNetCore.Razor.Tasks
-{
-    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 - 3
src/Razor/test/testassets/RestoreTestProjects/RestoreTestProjects.csproj

@@ -7,9 +7,6 @@
     <ProjectReference Include="..\SimpleMvc21\SimpleMvc21.csproj" />
     <ProjectReference Include="..\SimpleMvc21\SimpleMvc21.csproj" />
     <ProjectReference Include="..\SimpleMvc31\SimpleMvc31.csproj" />
     <ProjectReference Include="..\SimpleMvc31\SimpleMvc31.csproj" />
     <ProjectReference Include="..\blazor31\blazor31.csproj" />
     <ProjectReference Include="..\blazor31\blazor31.csproj" />
-    <ProjectReference Include="..\blazorhosted\blazorhosted.csproj" />
-    <ProjectReference Include="..\blazorhosted-rid\blazorhosted-rid.csproj" />
-    <ProjectReference Include="..\blazorwasm\blazorwasm.csproj" />
     <ProjectReference Include="..\ClassLibraryMvc21\ClassLibraryMvc21.csproj" />
     <ProjectReference Include="..\ClassLibraryMvc21\ClassLibraryMvc21.csproj" />
     <ProjectReference Include="..\AppWithP2PReference\AppWithP2PReference.csproj" />
     <ProjectReference Include="..\AppWithP2PReference\AppWithP2PReference.csproj" />
     <ProjectReference Include="..\AppWithPackageAndP2PReferenceAndRID\AppWithPackageAndP2PReferenceAndRID.csproj" />
     <ProjectReference Include="..\AppWithPackageAndP2PReferenceAndRID\AppWithPackageAndP2PReferenceAndRID.csproj" />