Skip to content

Commit 6ca3d91

Browse files
steveisokSteve Pfistermarek-safarMitchell Hwangradical
authored
Shift Most of Wasm AOT test build to helix (#48226)
Since AOT'ing each test suite takes between 3-9 min, we need to shift the burden over to helix. ## This is done by: 1. building the test assemblies on the build machine - the wasm part of the build is not executed on the build machine, because it has the AOT build part 2. Zip up the test assembly+friends, *and* any bits required to run the wasm app build for that on helix (eg. emsdk, wasm app targets, cross compiler etc) 3. Send all this to helix, and use a custom `aot-build.proj` - which recreates all the build inputs for the `WasmBuildApp` target using the paths for the assets on helix - then we can run `WasmBuildApp` for the build, resulting in a wasm app bundle. 4. Run the tests! - We already have the bits required for building wasm apps on helix, supported for `Wasm.Build.Tests`, which we can use here too. ## Trimming: - Since, AOT can be so expensive, we use `EnableAggressiveTrimming=true`(EAT), but that means that we could have issues due to trimming. - And it can sometimes be unclear whether the build/test failures are due to trimming or AOT. - Because these builds+test runs are different from other builds, owing to the "build partially on helix" step, a normal EAT build would not be the same as - to help with testing this, we add two lanes to `runtime-staging`: - `*_Mono_AOT`: builds AOT+EAT on helix - `*_Mono_EAT`: builds EAT, on helix - this is required because we want to run almost the same kinda build: 1. build test assembly; *2. send to helix; 3. build wasm app;* 4. run tests - This should effectively mean that we can see which errors might be due to EAT, and which are clearly because of EAT+AOT. Co-authored-by: Steve Pfister <steve.pfister@microsoft.com> Co-authored-by: Marek Safar <marek.safar@gmail.com> Co-authored-by: Mitchell Hwang <mitchell.hwang@microsoft.com> Co-authored-by: Ankit Jain <radical@gmail.com>
1 parent edade17 commit 6ca3d91

File tree

27 files changed

+439
-117
lines changed

27 files changed

+439
-117
lines changed

docs/workflow/testing/libraries/testing-wasm.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,21 @@ At the moment supported values are:
144144
145145
By default, `chrome` browser is used.
146146
147+
## AOT library tests
148+
149+
- Building library tests with AOT, and (even) with `EnableAggressiveTrimming` takes 3-9mins on CI, and that adds up for all the assemblies, causing
150+
a large build time. To circumvent that on CI, we build the test assemblies on the build machine, but skip the WasmApp build part of it, since
151+
that includes the expensive AOT step.
152+
153+
- Instead, we take the built test assembly+dependencies, and enough related bits to be able to run the `WasmBuildApp` target, with the original
154+
inputs.
155+
156+
- To recreate a similar build+test run locally, add `/p:BuildAOTTestsOnHelix=true` to the usual command line.
157+
- For example, with `./dotnet.sh build /t:Test src/libraries/System.AppContext/tests /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=Release`
158+
159+
- AOT: add `/p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true /p:BuildAOTTestsOnHelix=true`
160+
- Only trimming (helpful to isolate issues caused by trimming):
161+
- add `/p:EnableAggressiveTrimming=true /p:BuildAOTTestsOnHelix=true`
147162
## Debugging
148163
149164
### Getting more information

eng/pipelines/common/platform-matrix.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ jobs:
219219
targetRid: browser-wasm
220220
platform: Browser_wasm
221221
container:
222-
image: ubuntu-18.04-webassembly-20210223133559-4800846
222+
image: ubuntu-18.04-webassembly-20210309143118-005aab4
223223
registry: mcr
224224
jobParameters:
225225
runtimeFlavor: ${{ parameters.runtimeFlavor }}

eng/pipelines/runtime-staging.yml

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,47 @@ jobs:
205205
jobParameters:
206206
testGroup: innerloop
207207
nameSuffix: AllSubsets_Mono_AOT
208-
buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true /p:EnableAggressiveTrimming=true /p:RunAOTCompilation=true
209-
timeoutInMinutes: 120
208+
buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true /p:EnableAggressiveTrimming=true /p:BuildAOTTestsOnHelix=true /p:RunAOTCompilation=true
209+
timeoutInMinutes: 180
210+
condition: >-
211+
or(
212+
eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
213+
eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true),
214+
eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true),
215+
eq(variables['isFullMatrix'], true))
216+
# extra steps, run tests
217+
extraStepsTemplate: /eng/pipelines/libraries/helix.yml
218+
extraStepsParameters:
219+
creator: dotnet-bot
220+
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
221+
extraHelixArguments: /p:NeedsToBuildWasmAppsOnHelix=true
222+
scenarios:
223+
- normal
224+
condition: >-
225+
or(
226+
eq(variables['librariesContainsChange'], true),
227+
eq(variables['monoContainsChange'], true),
228+
eq(variables['isFullMatrix'], true))
229+
230+
- template: /eng/pipelines/common/platform-matrix.yml
231+
parameters:
232+
jobTemplate: /eng/pipelines/common/global-build-job.yml
233+
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
234+
buildConfig: Release
235+
runtimeFlavor: mono
236+
platforms:
237+
- Browser_wasm
238+
variables:
239+
# map dependencies variables to local variables
240+
- name: librariesContainsChange
241+
value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
242+
- name: monoContainsChange
243+
value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'] ]
244+
jobParameters:
245+
testGroup: innerloop
246+
nameSuffix: AllSubsets_Mono_EAT
247+
buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true /p:EnableAggressiveTrimming=true /p:BuildAOTTestsOnHelix=true /p:RunAOTCompilation=false
248+
timeoutInMinutes: 180
210249
condition: >-
211250
or(
212251
eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
@@ -218,6 +257,7 @@ jobs:
218257
extraStepsParameters:
219258
creator: dotnet-bot
220259
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
260+
extraHelixArguments: /p:NeedsToBuildWasmAppsOnHelix=true
221261
scenarios:
222262
- normal
223263
condition: >-
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<linker>
2+
<assembly fullname="TestUtilities">
3+
<namespace fullname="System" />
4+
</assembly>
5+
</linker>

eng/testing/ILLink.Descriptor.xunit.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<assembly fullname="Microsoft.DotNet.XUnitExtensions" />
1313
<assembly fullname="xunit.core">
1414
<namespace fullname="Xunit" />
15+
<namespace fullname="Xunit.Sdk" />
1516
</assembly>
16-
<assembly fullname="xunit.runner.utility.netcoreapp10" />
17+
<assembly fullname="xunit.runner.utility.netcoreapp10" />
1718
</linker>

eng/testing/tests.mobile.targets

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
<BundleAssemblies Condition="'$(RunAOTCompilation)' != 'true'" Include="$(PublishDir)*.dll" />
168168
</ItemGroup>
169169

170-
<MakeDir Directories="$(_MobileIntermediateOutputPath)"
170+
<MakeDir Directories="$(_MobileIntermediateOutputPath)"
171171
Condition="'$(RunAOTCompilation)' == 'true'"/>
172172
<RemoveDir Directories="$(BundleDir)" />
173173

@@ -243,7 +243,8 @@
243243
</ItemGroup>
244244

245245
<ItemGroup>
246-
<TrimmerRootDescriptor Include="$(MSBuildThisFileDirectory)ILLink.Descriptor.xunit.xml" />
246+
<TrimmerRootDescriptor Include="$(MSBuildThisFileDirectory)ILLink.Descriptor.xunit.xml" Condition="'$(SkipXunitTrimmerDescriptor)' != 'true'" />
247+
<TrimmerRootDescriptor Include="$(MSBuildThisFileDirectory)ILLink.Descriptor.TestUtilities.xml" Condition="'$(SkipTestUtilitiesReference)' != 'true'" />
247248
</ItemGroup>
248249
</Target>
249250

eng/testing/tests.wasm.targets

Lines changed: 113 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33
<PropertyGroup>
44
<BundleTestAppTargets>$(BundleTestAppTargets);BundleTestWasmApp</BundleTestAppTargets>
55
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(Configuration)' == 'Debug'">true</DebuggerSupport>
6+
<!-- Some tests expect to load satellite assemblies by path, eg. System.Runtime.Loader.Tests,
7+
so, just setting it true by default -->
8+
<IncludeSatelliteAssembliesInVFS Condition="'$(IncludeSatelliteAssembliesInVFS)' == ''">true</IncludeSatelliteAssembliesInVFS>
9+
</PropertyGroup>
10+
11+
<PropertyGroup>
12+
<BuildAOTTestsOn Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(Scenario)' == 'BuildWasmApps'">helix</BuildAOTTestsOn>
13+
<BuildAOTTestsOn Condition="'$(BuildAOTTestsOnHelix)' == 'true'">helix</BuildAOTTestsOn>
14+
<BuildAOTTestsOn Condition="'$(BuildAOTTestsOn)' == ''">local</BuildAOTTestsOn>
615
</PropertyGroup>
716

817
<PropertyGroup Condition="'$(RunScriptCommand)' == ''">
@@ -14,49 +23,119 @@
1423

1524
<_XHarnessArgs Condition="'$(Scenario)' != 'WasmTestOnBrowser'">$(_XHarnessArgs) --engine=$(JSEngine) $(JSEngineArgs) --js-file=runtime.js</_XHarnessArgs>
1625
<_XHarnessArgs Condition="'$(IsFunctionalTest)' == 'true'" >$(_XHarnessArgs) --expected-exit-code=$(ExpectedExitCode)</_XHarnessArgs>
17-
<_XHarnessArgs Condition="'$(WasmXHarnessArgs)' != '' and '$(OS)' != 'Windows_NT'">$(_XHarnessArgs) $(WasmXHarnessArgs) %24WasmXHarnessArgs</_XHarnessArgs>
18-
<_XHarnessArgs Condition="'$(WasmXHarnessArgs)' != '' and '$(OS)' == 'Windows_NT'">$(_XHarnessArgs) $(WasmXHarnessArgs) %WasmXHarnessArgs%</_XHarnessArgs>
26+
<_XHarnessArgs Condition="'$(WasmXHarnessArgs)' != ''" >$(_XHarnessArgs) $(WasmXHarnessArgs)</_XHarnessArgs>
1927

2028
<_AppArgs Condition="'$(IsFunctionalTest)' != 'true' and '$(Scenario)' != 'BuildWasmApps'">--run WasmTestRunner.dll $(AssemblyName).dll</_AppArgs>
2129
<_AppArgs Condition="'$(IsFunctionalTest)' == 'true'">--run $(AssemblyName).dll --testing</_AppArgs>
2230

23-
<_AppArgs Condition="'$(WasmTestAppArgs)' != ''">$(_AppArgs) $(WasmTestAppArgs) %24WasmTestAppArgs</_AppArgs>
24-
<RunScriptCommand Condition="'$(OS)' != 'Windows_NT'">$HARNESS_RUNNER $(_XHarnessArgs) -- $(WasmXHarnessMonoArgs) %24WasmXHarnessMonoArgs $(_AppArgs)</RunScriptCommand>
25-
<RunScriptCommand Condition="'$(OS)' == 'Windows_NT'">%HARNESS_RUNNER% $(_XHarnessArgs) -- $(WasmXHarnessMonoArgs) %WasmXHarnessMonoArgs% $(_AppArgs)</RunScriptCommand>
31+
<_AppArgs Condition="'$(WasmTestAppArgs)' != ''">$(_AppArgs) $(WasmTestAppArgs)</_AppArgs>
32+
33+
<RunScriptCommand Condition="'$(OS)' != 'Windows_NT'">$HARNESS_RUNNER $(_XHarnessArgs) %24WasmXHarnessArgs -- $(WasmXHarnessMonoArgs) %24WasmXHarnessMonoArgs $(_AppArgs) %24WasmTestAppArgs</RunScriptCommand>
34+
<RunScriptCommand Condition="'$(OS)' == 'Windows_NT'">$HARNESS_RUNNER $(_XHarnessArgs) %WasmXHarnessArgs% -- $(WasmXHarnessMonoArgs) %WasmXHarnessMonoArgs% $(_AppArgs) %WasmTestAppArgs%</RunScriptCommand>
35+
</PropertyGroup>
36+
37+
<PropertyGroup Condition="'$(BuildAOTTestsOnHelix)' == 'true'">
38+
<_AOTBuildCommand>dotnet msbuild publish/AOTTestProjectForHelix.proj /bl:$XHARNESS_OUT/AOTBuild.binlog</_AOTBuildCommand>
39+
40+
<!-- running aot-helix tests locally, so we can test with the same project file as CI -->
41+
<_AOTBuildCommand Condition="'$(ContinuousIntegrationBuild)' != 'true'">$(_AOTBuildCommand) /p:RuntimeSrcDir=$(RepoRoot) /p:RuntimeConfig=$(Configuration)</_AOTBuildCommand>
42+
43+
<_AOTBuildCommand>$(_AOTBuildCommand) /p:RunAOTCompilation=$(RunAOTCompilation)</_AOTBuildCommand>
44+
<_AOTBuildCommand>$(_AOTBuildCommand) &amp;&amp; cd wasm_build/AppBundle</_AOTBuildCommand>
45+
46+
<RunScriptCommand Condition="'$(RunScriptCommand)' == ''">$(_AOTBuildCommand)</RunScriptCommand>
47+
<RunScriptCommand Condition="'$(RunScriptCommand)' != ''">$(_AOTBuildCommand) &amp;&amp; $(RunScriptCommand)</RunScriptCommand>
2648
</PropertyGroup>
2749

2850
<PropertyGroup Condition="'$(UseDefaultBlazorWASMFeatureSwitches)' == 'true'">
2951
<EventSourceSupport>false</EventSourceSupport>
30-
<UseSystemResourceKeys>true</UseSystemResourceKeys>
52+
<UseSystemResourceKeys>false</UseSystemResourceKeys>
3153
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
3254
<HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
3355

3456
<!-- we want to default to what Blazor has, except if we are building in Debug config -->
35-
<DebuggerSupport Condition="'$(Configuration)' != 'Debug'">false</DebuggerSupport>
57+
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(Configuration)' != 'Debug'">false</DebuggerSupport>
3658
</PropertyGroup>
3759

3860
<!-- Don't include InTree.props here, because the test projects themselves can set the target* properties -->
39-
<Import Project="$(MonoProjectRoot)\wasm\build\WasmApp.props" />
40-
<Import Project="$(MonoProjectRoot)\wasm\build\WasmApp.InTree.targets" />
61+
<Import Project="$(MonoProjectRoot)\wasm\build\WasmApp.props"
62+
Condition="'$(BuildAOTTestsOn)' == 'local'" />
63+
<Import Project="$(MonoProjectRoot)\wasm\build\WasmApp.InTree.targets"
64+
Condition="'$(BuildAOTTestsOn)' == 'local'" />
65+
4166
<PropertyGroup>
4267
<WasmBuildAppDependsOn>PrepareForWasmBuildApp;$(WasmBuildAppDependsOn)</WasmBuildAppDependsOn>
43-
<EmSdkDir>$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))</EmSdkDir>
68+
<EmSdkDirForHelixPayload>$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))</EmSdkDirForHelixPayload>
69+
70+
<BundleTestWasmAppDependsOn Condition="'$(BuildAOTTestsOn)' == 'local'">WasmBuildApp</BundleTestWasmAppDependsOn>
71+
<BundleTestWasmAppDependsOn Condition="'$(BuildAOTTestsOn)' == 'helix'">StageEmSdkForHelix</BundleTestWasmAppDependsOn>
72+
73+
<BundleTestWasmAppDependsOn Condition="'$(BuildAOTTestsOnHelix)' == 'true'">$(BundleTestWasmAppDependsOn);_BundleAOTTestWasmAppForHelix</BundleTestWasmAppDependsOn>
4474
</PropertyGroup>
4575

46-
<Target Name="BundleTestWasmApp" DependsOnTargets="WasmBuildApp;StageEmSdkForHelix" />
76+
<Target Name="BundleTestWasmApp" DependsOnTargets="$(BundleTestWasmAppDependsOn)" />
77+
78+
<UsingTask Condition="'$(BuildAOTTestsOnHelix)' == 'true'"
79+
TaskName="Microsoft.WebAssembly.Build.Tasks.GenerateAOTProps"
80+
AssemblyFile="$(WasmBuildTasksAssemblyPath)" />
81+
82+
<Target Name="_BundleAOTTestWasmAppForHelix" DependsOnTargets="PrepareForWasmBuildApp">
83+
<ItemGroup>
84+
<BundleFiles Include="$(WasmMainJSPath)" TargetDir="publish" />
85+
<BundleFiles Include="@(WasmSatelliteAssemblies)" TargetDir="publish/%(WasmSatelliteAssemblies.CultureName)" />
86+
<BundleFiles Include="@(WasmAssembliesToBundle)" TargetDir="publish" />
87+
88+
<BundleFiles Include="$(MonoProjectRoot)\wasm\data\aot-tests\*" TargetDir="publish" />
89+
</ItemGroup>
90+
91+
<ItemGroup Condition="'$(DebuggerSupport)' == 'true'">
92+
<!-- Add any pdb files, if available -->
93+
<_BundlePdbFiles Include="$([System.IO.Path]::ChangeExtension('%(WasmAssembliesToBundle.Identity)', '.pdb'))" />
94+
<BundleFiles Include="@(_BundlePdbFiles)" TargetDir="publish" Condition="Exists(%(_BundlePdbFiles.Identity))" />
95+
</ItemGroup>
96+
97+
<!-- To recreate the original project on helix, we need to set the wasm properties also, same as the
98+
library test project. Eg. $(InvariantGlobalization) -->
99+
<ItemGroup>
100+
<_WasmPropertyNames Include="InvariantGlobalization" />
101+
<_WasmPropertyNames Include="AOTMode" />
102+
<_WasmPropertyNames Include="WasmDebugLevel" />
103+
<_WasmPropertyNames Include="WasmBuildNative" />
104+
<_WasmPropertyNames Include="_WasmDevel" />
105+
<_WasmPropertyNames Include="WasmLinkIcalls" />
106+
<_WasmPropertyNames Include="WasmDedup" />
107+
<_WasmPropertyNames Include="IncludeSatelliteAssembliesInVFS" />
108+
109+
<_WasmPropertiesToPass
110+
Include="$(%(_WasmPropertyNames.Identity))"
111+
Name="%(_WasmPropertyNames.Identity)"
112+
ConditionToUse="%(_WasmPropertyNames.ConditionToUse)" />
113+
114+
<_WasmVFSFilesToCopy Include="@(WasmFilesToIncludeInFileSystem)" />
115+
<_WasmVFSFilesToCopy TargetPath="%(FileName)%(Extension)" Condition="'%(TargetPath)' == ''" />
116+
</ItemGroup>
117+
118+
<!-- This file gets imported by the project file on helix -->
119+
<GenerateAOTProps
120+
Properties="@(_WasmPropertiesToPass)"
121+
OutputFile="$(BundleDir)publish\AOTTestProjectForHelix.props" />
122+
123+
<Copy SourceFiles="@(BundleFiles)" DestinationFolder="$(BundleDir)%(TargetDir)" />
124+
<Copy SourceFiles="@(_WasmVFSFilesToCopy)" DestinationFiles="$(BundleDir)\extraFiles\%(_WasmVFSFilesToCopy.TargetPath)" />
125+
</Target>
47126

48127
<!-- CI has emscripten provisioned in $(EMSDK_PATH) as `/usr/local/emscripten`. Because helix tasks will
49128
attempt to write a .payload file, we cannot use $(EMSDK_PATH) to package emsdk as a helix correlation
50129
payload. Instead, we copy over the files to a new directory `src/mono/wasm/emsdk` and use that. -->
51-
<Target Name="StageEmSdkForHelix" Condition="'$(Scenario)' == 'BuildWasmApps' and '$(ContinuousIntegrationBuild)' == 'true' and !Exists($(EmSdkDir))">
52-
<Error Condition="!Exists($(EMSDK_PATH))" Text="Could not find emscripten sdk in $(EmSdkDir) or in EMSDK_PATH=$(EMSDK_PATH)" />
130+
<Target Name="StageEmSdkForHelix" Condition="'$(EmSdkDirForHelixPayload)' == '' or !Exists($(EmSdkDirForHelixPayload))">
131+
<Error Condition="'$(EMSDK_PATH)' == '' or !Exists($(EMSDK_PATH))" Text="Could not find emscripten sdk in $(EmSdkDirForHelixPayload) or in EMSDK_PATH=$(EMSDK_PATH)" />
53132

54133
<ItemGroup>
55134
<EmSdkFiles Include="$(EMSDK_PATH)\**\*" Exclude="$(EMSDK_PATH)\.git\**\*" />
56135
</ItemGroup>
57136

58-
<MakeDir Directories="$(EmSdkDir)" />
59-
<Copy SourceFiles="@(EmSdkFiles)" DestinationFolder="$(EmSdkDir)\%(RecursiveDir)" />
137+
<MakeDir Directories="$(EmSdkDirForHelixPayload)" />
138+
<Copy SourceFiles="@(EmSdkFiles)" DestinationFolder="$(EmSdkDirForHelixPayload)\%(RecursiveDir)" />
60139
</Target>
61140

62141
<Target Name="PrepareForWasmBuildApp">
@@ -74,17 +153,30 @@
74153

75154
<ItemGroup>
76155
<WasmSatelliteAssemblies Include="$(PublishDir)*\*.resources.dll" />
77-
<WasmSatelliteAssemblies>
78-
<CultureName>$([System.IO.Directory]::GetParent('%(Identity)').Name)</CultureName>
79-
</WasmSatelliteAssemblies>
156+
<WasmSatelliteAssemblies CultureName="$([System.IO.Directory]::GetParent('%(Identity)').Name)" />
80157

81158
<WasmAssembliesToBundle Include="$(PublishDir)\*.dll"/>
82159

83160
<WasmFilesToIncludeInFileSystem Include="@(ContentWithTargetPath)" />
84-
<WasmFilesToIncludeInFileSystem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.BuildReference)' == 'true' and !$([System.String]::new('%(ReferenceCopyLocalPaths.Identity)').EndsWith('.resources.dll'))" />
85-
<WasmFilesToIncludeInFileSystem Include="@(WasmSatelliteAssemblies)" TargetPath="%(WasmSatelliteAssemblies.CultureName)\%(WasmSatelliteAssemblies.Filename)%(WasmSatelliteAssemblies.Extension)" />
161+
<WasmFilesToIncludeInFileSystem
162+
Include="@(WasmSatelliteAssemblies)"
163+
TargetPath="%(WasmSatelliteAssemblies.CultureName)\%(WasmSatelliteAssemblies.FileName)%(WasmSatelliteAssemblies.Extension)"
164+
Condition="'$(IncludeSatelliteAssembliesInVFS)' == 'true'" />
165+
166+
<_CopyLocalPaths
167+
Include="@(PublishItemsOutputGroupOutputs)"
168+
Condition="'%(PublishItemsOutputGroupOutputs.BuildReference)' == 'true' and
169+
!$([System.String]::new('%(PublishItemsOutputGroupOutputs.Identity)').EndsWith('.resources.dll'))" />
170+
171+
<_CopyLocalPaths TargetPath="%(_CopyLocalPaths.RelativePath)" Condition="'%(_CopyLocalPaths.RelativePath)' != ''" />
172+
<_CopyLocalPaths TargetPath="%(FileName)%(Extension)" Condition="'%(_CopyLocalPaths.RelativePath)' == ''" />
173+
<WasmFilesToIncludeInFileSystem Include="@(_CopyLocalPaths)" />
174+
86175
<!-- Include files specified by test projects from publish dir -->
87-
<WasmFilesToIncludeInFileSystem Include="@(WasmFilesToIncludeFromPublishDir -> '$(PublishDir)%(Identity)')" />
176+
<WasmFilesToIncludeInFileSystem
177+
Include="$(PublishDir)%(WasmFilesToIncludeFromPublishDir.Identity)"
178+
TargetPath="%(WasmFilesToIncludeFromPublishDir.Identity)"
179+
Condition="'%(WasmFilesToIncludeFromPublishDir.Identity)' != ''" />
88180
</ItemGroup>
89181
</Target>
90182

src/libraries/Microsoft.CSharp/tests/Microsoft.CSharp.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
"Operator '-' cannot be applied to operands of type 'ushort' and 'EnumArithmeticTests.UInt16Enum'"
88
-->
99
<Features>$(Features.Replace('strict', '')</Features>
10+
11+
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(TargetOS)' == 'Browser'">true</DebuggerSupport>
1012
</PropertyGroup>
1113
<ItemGroup>
1214
<Compile Include="AccessTests.cs" />

src/libraries/System.Collections.Concurrent/tests/System.Collections.Concurrent.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<TestRuntime>true</TestRuntime>
44
<IncludeRemoteExecutor>true</IncludeRemoteExecutor>
55
<TargetFrameworks>$(NetCoreAppCurrent)</TargetFrameworks>
6+
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(TargetOS)' == 'Browser'">true</DebuggerSupport>
67
</PropertyGroup>
78
<ItemGroup>
89
<Compile Include="$(CoreLibSharedDir)System\Collections\Concurrent\IProducerConsumerCollectionDebugView.cs"
@@ -70,4 +71,4 @@
7071
<Compile Include="$(CommonTestPath)System\Collections\IEnumerable.Generic.Serialization.Tests.cs"
7172
Link="Common\System\Collections\IEnumerable.Generic.Serialization.Tests.cs" />
7273
</ItemGroup>
73-
</Project>
74+
</Project>

src/libraries/System.Collections.Immutable/tests/System.Collections.Immutable.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<PropertyGroup>
33
<NoWarn>0436</NoWarn>
44
<TargetFrameworks>$(NetCoreAppCurrent);net461</TargetFrameworks>
5+
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(TargetOS)' == 'Browser'">true</DebuggerSupport>
56
</PropertyGroup>
67
<ItemGroup>
78
<Compile Include="$(CommonTestPath)System\Collections\DictionaryExtensions.cs" Condition="'$(TargetFramework)' == 'net461'"

0 commit comments

Comments
 (0)