Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move asset compression to the StaticWebAssets SDK #31559

Merged
merged 17 commits into from
Apr 14, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge branch 'main' into mbuck/static-web-assets-compression
  • Loading branch information
MackinnonBuck committed Mar 31, 2023
commit 09e1476f0d779fcfbe62fb0a7b49a42cbcec132e
24 changes: 24 additions & 0 deletions sdk.sln
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,21 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tool", "Tool", "{51A31407-7
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.StaticWebAssets.Tool", "src\StaticWebAssetsSdk\Tool\Microsoft.NET.Sdk.StaticWebAssets.Tool.csproj", "{B8550E71-0CBE-4F88-AC79-2003EFED1DE1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WasmSdk", "WasmSdk", "{21835A9E-D667-4761-8675-B2BC105CC2FE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{71BC1256-D225-4272-ADB2-95264E09AF73}"
ProjectSection(SolutionItems) = preProject
src\WasmSdk\Targets\Microsoft.NET.Sdk.WebAssembly.Current.props = src\WasmSdk\Targets\Microsoft.NET.Sdk.WebAssembly.Current.props
src\WasmSdk\Targets\Microsoft.NET.Sdk.WebAssembly.Current.targets = src\WasmSdk\Targets\Microsoft.NET.Sdk.WebAssembly.Current.targets
src\WasmSdk\Targets\Wasm.web.config = src\WasmSdk\Targets\Wasm.web.config
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{B2CE3F28-8FEC-4715-B483-5B442E3136CE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tasks", "Tasks", "{F720D695-F35A-4700-9463-C359163D14EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.WebAssembly.Tasks", "src\WasmSdk\Tasks\Microsoft.NET.Sdk.WebAssembly.Tasks.csproj", "{754C18B9-AEDB-4455-BAF4-844C6CEEF8F7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -835,6 +850,10 @@ Global
{B8550E71-0CBE-4F88-AC79-2003EFED1DE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8550E71-0CBE-4F88-AC79-2003EFED1DE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8550E71-0CBE-4F88-AC79-2003EFED1DE1}.Release|Any CPU.Build.0 = Release|Any CPU
{754C18B9-AEDB-4455-BAF4-844C6CEEF8F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{754C18B9-AEDB-4455-BAF4-844C6CEEF8F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{754C18B9-AEDB-4455-BAF4-844C6CEEF8F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{754C18B9-AEDB-4455-BAF4-844C6CEEF8F7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -987,6 +1006,11 @@ Global
{3D42A6BA-38DB-4AA5-9F86-8A78D00D9A07} = {6C8E1E65-EA73-434D-818F-E564BFFE9F86}
{51A31407-7C6A-42E9-93B8-F21DEC518A34} = {9E9F3BB2-6FED-47BC-869C-BFAF6E7C85FC}
{B8550E71-0CBE-4F88-AC79-2003EFED1DE1} = {51A31407-7C6A-42E9-93B8-F21DEC518A34}
{21835A9E-D667-4761-8675-B2BC105CC2FE} = {22AB674F-ED91-4FBC-BFEE-8A1E82F9F05E}
{71BC1256-D225-4272-ADB2-95264E09AF73} = {21835A9E-D667-4761-8675-B2BC105CC2FE}
{B2CE3F28-8FEC-4715-B483-5B442E3136CE} = {21835A9E-D667-4761-8675-B2BC105CC2FE}
{F720D695-F35A-4700-9463-C359163D14EE} = {21835A9E-D667-4761-8675-B2BC105CC2FE}
{754C18B9-AEDB-4455-BAF4-844C6CEEF8F7} = {F720D695-F35A-4700-9463-C359163D14EE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FB8F26CE-4DE6-433F-B32A-79183020BBD6}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,8 @@ Copyright (c) .NET Foundation. All rights reserved.
<_BlazorWebAssemblySdkToolAssembly>$(BlazorWebAssemblySdkDirectoryRoot)tools\net8.0\Microsoft.NET.Sdk.BlazorWebAssembly.Tool.dll</_BlazorWebAssemblySdkToolAssembly>
</PropertyGroup>

<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.GenerateBlazorWebAssemblyBootJson" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.BlazorWriteSatelliteAssemblyFile" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.BlazorReadSatelliteAssemblyFile" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.CreateBlazorTrimmerRootDescriptorFile" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.ComputeBlazorBuildAssets" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.ComputeBlazorPublishAssets" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />
<UsingTask TaskName="Microsoft.NET.Sdk.BlazorWebAssembly.GenerateBlazorBootExtensionJson" AssemblyFile="$(_BlazorWebAssemblySdkTasksAssembly)" />

<PropertyGroup>
<SelfContained>true</SelfContained>
Expand Down Expand Up @@ -83,6 +79,18 @@ Copyright (c) .NET Foundation. All rights reserved.
_CollectAssetsToCompress;
</ResolveCompressedFilesForPublishDependsOn>

<AddWasmStaticWebAssetsDependsOn>
$(AddWasmStaticWebAssetsDependsOn);
_ResolveBlazorWasmOutputs;
</AddWasmStaticWebAssetsDependsOn>
<GenerateBuildWasmBootJsonDependsOn>
$(GenerateBuildWasmBootJsonDependsOn);
GenerateBlazorBootExtensionJson;
</GenerateBuildWasmBootJsonDependsOn>
<GeneratePublishWasmBootJsonDependsOn>
$(GeneratePublishWasmBootJsonDependsOn);
GenerateBlazorBootExtensionJson;
</GeneratePublishWasmBootJsonDependsOn>
</PropertyGroup>

<PropertyGroup>
Expand Down Expand Up @@ -158,67 +166,6 @@ Copyright (c) .NET Foundation. All rights reserved.
>
<Output TaskParameter="Assets" ItemName="_BlazorJSStaticWebAsset" />
</DefineStaticWebAssets>

<PropertyGroup>
<_BlazorBuildBootJsonPath>$(IntermediateOutputPath)blazor.boot.json</_BlazorBuildBootJsonPath>
</PropertyGroup>

<ItemGroup>
<_BuildBlazorBootJson
Include="$(_BlazorBuildBootJsonPath)"
RelativePath="_framework/blazor.boot.json" />
</ItemGroup>

<ItemGroup>
<StaticWebAsset Include="@(_BlazorStaticWebAsset)" />
<StaticWebAsset Include="@(_BuildBlazorBootJsonStaticWebAsset)" />
</ItemGroup>
</Target>

<Target Name="_GenerateBuildBlazorBootJson" DependsOnTargets="ResolveStaticWebAssetsInputs">
<PropertyGroup>
<_BlazorBuildBootJsonPath>$(IntermediateOutputPath)blazor.boot.json</_BlazorBuildBootJsonPath>
<_BlazorWebAssemblyLoadAllGlobalizationData Condition="'$(BlazorWebAssemblyLoadAllGlobalizationData)' == ''">false</_BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>

<ItemGroup>
<_BlazorJsModuleCandidatesForBuild
Include="@(StaticWebAsset)"
Condition="'%(StaticWebAsset.AssetTraitName)' == 'JSModule' and '%(StaticWebAsset.AssetTraitValue)' == 'JSLibraryModule' and '%(AssetKind)' != 'Publish'" />
</ItemGroup>

<GetFileHash Files="@(_BlazorStaticWebAsset->'%(OriginalItemSpec)')" Algorithm="SHA256" HashEncoding="base64">
<Output TaskParameter="Items" ItemName="_BlazorOutputWithHash" />
</GetFileHash>

<ComputeStaticWebAssetsTargetPaths
Assets="@(_BlazorJsModuleCandidatesForBuild)"
PathPrefix=""
UseAlternatePathDirectorySeparator="true"
>
<Output TaskParameter="AssetsWithTargetPath" ItemName="_BlazorJsModuleCandidatesForBuildWithTargetPath" />
</ComputeStaticWebAssetsTargetPaths>

<GetFileHash Files="@(_BlazorJsModuleCandidatesForBuildWithTargetPath)" Algorithm="SHA256" HashEncoding="base64">
<Output TaskParameter="Items" ItemName="_BlazorOutputWithHash" />
</GetFileHash>

<GenerateBlazorWebAssemblyBootJson
AssemblyPath="@(IntermediateAssembly)"
Resources="@(_BlazorOutputWithHash)"
DebugBuild="true"
LinkerEnabled="false"
CacheBootResources="$(BlazorCacheBootResources)"
OutputPath="$(_BlazorBuildBootJsonPath)"
ConfigurationFiles="@(_BlazorJsConfigStaticWebAsset)"
LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)"
InvariantGlobalization="$(InvariantGlobalization)"
LoadAllICUData="$(_BlazorWebAssemblyLoadAllGlobalizationData)" />

<ItemGroup>
<FileWrites Include="$(_BlazorBuildBootJsonPath)" />
</ItemGroup>

</Target>

<!-- Just print a message here, static web assets takes care of all the copying -->
Expand All @@ -235,229 +182,6 @@ Copyright (c) .NET Foundation. All rights reserved.

<Target Name="_GatherBlazorFilesToPublish">
<ItemGroup>
<_BlazorTypeGranularAssembly
Include="@(ManagedAssemblyToLink)"
Condition="'%(Extension)' == '.dll' AND $([System.String]::Copy('%(Filename)').StartsWith('Microsoft.AspNetCore.'))">
<Required>false</Required>
<Preserve>all</Preserve>
</_BlazorTypeGranularAssembly>

<ManagedAssemblyToLink
IsTrimmable="true"
Condition="'%(Extension)' == '.dll' AND ($([System.String]::Copy('%(Filename)').StartsWith('Microsoft.AspNetCore.')) or $([System.String]::Copy('%(Filename)').StartsWith('Microsoft.Extensions.')))" />
</ItemGroup>

<CreateBlazorTrimmerRootDescriptorFile
Assemblies="@(_BlazorTypeGranularAssembly)"
TrimmerFile="$(_BlazorTypeGranularTrimmerDescriptorFile)" />

<ItemGroup>
<TrimmerRootDescriptor Include="$(_BlazorTypeGranularTrimmerDescriptorFile)" />

<FileWrites Include="$(_BlazorTypeGranularTrimmerDescriptorFile)" />
</ItemGroup>
</Target>

<!-- Wasm's Nested publish is run just to build the native bits. We don't need to run blazor targets for that -->
<Target Name="ProcessPublishFilesForBlazor" DependsOnTargets="_ResolveBlazorWasmConfiguration;LoadStaticWebAssetsBuildManifest" AfterTargets="ILLink" Condition="'$(WasmBuildingForNestedPublish)' != 'true'">
<PropertyGroup>
<_BlazorAotEnabled>$(UsingBrowserRuntimeWorkload)</_BlazorAotEnabled>
<_BlazorAotEnabled Condition="'$(_BlazorAotEnabled)' == ''">false</_BlazorAotEnabled>
<_BlazorLinkerEnabled>$(PublishTrimmed)</_BlazorLinkerEnabled>
<_BlazorLinkerEnabled Condition="'$(_BlazorLinkerEnabled)' == ''">true</_BlazorLinkerEnabled>
</PropertyGroup>

<!-- The list of static web assets already contains all the assets from the build. We want to correct certain assets that might
have changed as part of the publish process. We are going to do so as follows:
* We will update Blazor runtime asset dlls if we are running PublishTrimmed
* We will update Blazor native runtime resources if we are using Aot
Other than that, we'll filter the unwanted assets from the list of resolved files to publish in the same way we did during the build.
-->

<ItemGroup>
<_BlazorPublishPrefilteredAssets
Include="@(StaticWebAsset)"
Condition="'%(StaticWebAsset.AssetTraitName)' == 'BlazorWebAssemblyResource' or '%(StaticWebAsset.AssetTraitName)' == 'Culture' or '%(AssetRole)' == 'Alternative'" />
</ItemGroup>

<ItemGroup>
<_DotNetJsItem Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.DestinationSubPath)' == 'dotnet.js' AND '%(ResolvedFileToPublish.AssetType)' == 'native'" />
</ItemGroup>

<PropertyGroup>
<_DotNetJsVersion>%(_DotNetJsItem.NuGetPackageVersion)</_DotNetJsVersion>
</PropertyGroup>

<ComputeBlazorPublishAssets
ResolvedFilesToPublish="@(ResolvedFileToPublish)"
TimeZoneSupport="$(_BlazorEnableTimeZoneSupport)"
PublishPath="$(PublishDir)"
WasmAotAssets="@(WasmNativeAsset)"
InvariantGlobalization="$(_BlazorInvariantGlobalization)"
CopySymbols="$(CopyOutputSymbolsToPublishDirectory)"
ExistingAssets="@(_BlazorPublishPrefilteredAssets)"
DotNetJsVersion="$(_DotNetJsVersion)"
>
<Output TaskParameter="NewCandidates" ItemName="_NewBlazorPublishStaticWebAssets" />
<Output TaskParameter="FilesToRemove" ItemName="_PublishResolvedFilesToRemove" />
</ComputeBlazorPublishAssets>

<ItemGroup>
<ResolvedFileToPublish Remove="@(_PublishResolvedFilesToRemove)" />
<StaticWebAsset Include="@(_NewBlazorPublishStaticWebAssets)" />
<PublishBlazorBootStaticWebAsset
Include="@(StaticWebAsset)"
Condition="'%(AssetKind)' != 'Build' and
(('%(StaticWebAsset.AssetTraitName)' == 'BlazorWebAssemblyResource' and '%(StaticWebAsset.AssetTraitValue)' != 'manifest' and '%(StaticWebAsset.AssetTraitValue)' != 'boot') or
'%(StaticWebAsset.AssetTraitName)' == 'Culture')" />

</ItemGroup>
</Target>

<Target
Name="ComputeBlazorExtensions"
AfterTargets="ProcessPublishFilesForBlazor"
DependsOnTargets="$(ComputeBlazorExtensionsDependsOn)" >
<ItemGroup>
<_BlazorExtensionsCandidate Include="@(BlazorPublishExtension->'%(FullPath)')">
<SourceId>$(PackageId)</SourceId>
<SourceType>Computed</SourceType>
<ContentRoot>$(PublishDir)wwwroot</ContentRoot>
<BasePath>$(StaticWebAssetBasePath)</BasePath>
<RelativePath>%(BlazorPublishExtension.RelativePath)</RelativePath>
<AssetKind>Publish</AssetKind>
<AssetMode>All</AssetMode>
<AssetRole>Primary</AssetRole>
<AssetTraitName>BlazorWebAssemblyResource</AssetTraitName>
<AssetTraitValue>extension:%(BlazorPublishExtension.ExtensionName)</AssetTraitValue>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<OriginalItemSpec>%(BlazorPublishExtension.Identity)</OriginalItemSpec>
</_BlazorExtensionsCandidate>
</ItemGroup>

<DefineStaticWebAssets CandidateAssets="@(_BlazorExtensionsCandidate)">
<Output TaskParameter="Assets" ItemName="StaticWebAsset" />
<Output TaskParameter="Assets" ItemName="_BlazorExtensionsCandidatesForPublish" />
</DefineStaticWebAssets>

</Target>

<Target Name="_CollectAssetsToCompress" DependsOnTargets="ProcessPublishFilesForBlazor;ComputeBlazorExtensions">
<ItemGroup>
<AssetToCompress
Include="@(StaticWebAsset)"
Condition="'%(AssetKind)' != 'Build' and ('%(StaticWebAsset.AssetTraitName)' == 'BlazorWebAssemblyResource' or '%(StaticWebAsset.AssetTraitName)' == 'Culture')">
<ConfigurationName>BlazorPublishGzip</ConfigurationName>
</AssetToCompress>

<AssetToCompress
Include="@(StaticWebAsset)"
Condition="'%(AssetKind)' != 'Build' and ('%(StaticWebAsset.AssetTraitName)' == 'BlazorWebAssemblyResource' or '%(StaticWebAsset.AssetTraitName)' == 'Culture')">
<ConfigurationName>BlazorPublishBrotli</ConfigurationName>
</AssetToCompress>
</ItemGroup>
</Target>

<Target Name="_AddBlazorWebConfigFile" AfterTargets="ILLink">
<ItemGroup Condition="'@(ResolvedFileToPublish->AnyHaveMetadataValue('RelativePath', 'web.config'))' != 'true'">
<ResolvedFileToPublish
Include="$(MSBuildThisFileDirectory)BlazorWasm.web.config"
ExcludeFromSingleFile="true"
CopyToPublishDirectory="PreserveNewest"
RelativePath="web.config" />
</ItemGroup>
</Target>

<Target Name="_AddPublishBlazorBootJsonToStaticWebAssets">
<ItemGroup>
<_PublishBlazorBootJson
Include="$(IntermediateOutputPath)blazor.publish.boot.json"
RelativePath="_framework/blazor.boot.json" />
</ItemGroup>

<DefineStaticWebAssets
CandidateAssets="@(_PublishBlazorBootJson)"
SourceId="$(PackageId)"
SourceType="Computed"
AssetKind="Publish"
AssetRole="Primary"
AssetTraitName="BlazorWebAssemblyResource"
AssetTraitValue="manifest"
CopyToOutputDirectory="Never"
CopyToPublishDirectory="PreserveNewest"
ContentRoot="$(PublishDir)wwwroot"
BasePath="$(StaticWebAssetBasePath)"
>
<Output TaskParameter="Assets" ItemName="StaticWebAsset" />
</DefineStaticWebAssets>
</Target>

<Target Name="GeneratePublishBlazorBootJson">

<ItemGroup>
<_BlazorPublishAsset
Include="@(StaticWebAsset)"
Condition="'%(AssetKind)' != 'Build' and '%(StaticWebAsset.AssetTraitValue)' != 'manifest' and ('%(StaticWebAsset.AssetTraitName)' == 'BlazorWebAssemblyResource' or '%(StaticWebAsset.AssetTraitName)' == 'Culture') and '%(StaticWebAsset.AssetTraitValue)' != 'boot'" />

<_BlazorPublishConfigFile
Include="@(StaticWebAsset)"
Condition="'%(StaticWebAsset.AssetTraitName)' == 'BlazorWebAssemblyResource' and '%(StaticWebAsset.AssetTraitValue)' == 'settings'"/>

<_BlazorJsModuleCandidatesForPublish
Include="@(StaticWebAsset)"
Condition="'%(StaticWebAsset.AssetTraitName)' == 'JSModule' and '%(StaticWebAsset.AssetTraitValue)' == 'JSLibraryModule' and '%(AssetKind)' != 'Build'" />

<!-- We remove the extensions since they are added to the list of static web assets but we need to compute the target path for them -->
<_BlazorPublishAsset Remove="@(_BlazorExtensionsCandidatesForPublish)" />

</ItemGroup>

<ComputeStaticWebAssetsTargetPaths
Assets="@(_BlazorJsModuleCandidatesForPublish);@(_BlazorExtensionsCandidatesForPublish)"
PathPrefix=""
UseAlternatePathDirectorySeparator="true"
>
<Output TaskParameter="AssetsWithTargetPath" ItemName="_BlazorCandidatesForPublishWithTargetPath" />
</ComputeStaticWebAssetsTargetPaths>

<GetFileHash Files="@(_BlazorPublishAsset);@(_BlazorCandidatesForPublishWithTargetPath)" 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="@(_BlazorPublishConfigFile)"
LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)"
InvariantGlobalization="$(InvariantGlobalization)"
LoadAllICUData="$(_BlazorWebAssemblyLoadAllGlobalizationData)" />

<ItemGroup>
<FileWrites Include="$(IntermediateOutputPath)blazor.publish.boot.json" />
</ItemGroup>

</Target>

<Target Name="_BlazorWasmNative"
DependsOnTargets="_EnsureWasmRuntimeWorkload;WasmTriggerPublishApp"
BeforeTargets="ProcessPublishFilesForBlazor"
Condition="'$(UsingBrowserRuntimeWorkload)' == 'true'" />

<Target Name="_EnsureWasmRuntimeWorkload" Condition="'$(UsingBlazorAOTWorkloadManifest)' != 'true'">
<Error
Text="Publishing with AOT enabled requires the .NET WebAssembly AOT workload to be installed. To learn more, visit https://aka.ms/AAb4uzl."
Code="BLAZORSDK1002" />
</Target>

<Target Name="_GatherWasmFilesToPublish">
<ItemGroup>
<WasmAssembliesToBundle Remove="@(WasmAssembliesToBundle)" />
<WasmAssembliesToBundle Include="%(ResolvedFileToPublish.FullPath)" Exclude="@(_Exclude)" Condition="%(Extension) == '.dll'" />
<WasmAssembliesToBundle Condition="'%(WasmAssembliesToBundle.FileName)' == 'Microsoft.JSInterop.WebAssembly'" AOT_InternalForceToInterpret="true" />
</ItemGroup>
</Target>
Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.