未验证 提交 d6a4f7ac 编写于 作者: L Larry Ewing 提交者: GitHub

[workloads] Add new workloads for net8.0 (#75200)

Backport the workload changes from net7 but and a versionless manifest that represents the netappcurrent so that version bumps will require fewer immediate changes in net9.0

- `Wasm.Build.Tests` installs `wasm-tools`, and `wasm-tools-net7`
- and uses a sdk with both `wasm-tools`, and `wasm-tools-net7` for running, with projects built for `net7.0`
- `net6.0` workload install is attempted, but fails because the `6.0.10` package isn't on public feeds yet

Also,
- Provision chromedriver also, alongwith chrome
- [host] Track change in forwardConsole parameter to forwardConsoleToWS
- Drop UnixFilePermissions.xml, as it is not needed anymore
Co-authored-by: NAnkit Jain <radical@gmail.com>
上级 b8c5de2e
......@@ -6,7 +6,9 @@
<MajorVersion>8</MajorVersion>
<MinorVersion>0</MinorVersion>
<PatchVersion>0</PatchVersion>
<SdkBandVersion>7.0.100</SdkBandVersion>
<SdkBandVersion>8.0.100</SdkBandVersion>
<PackageVersionNet6>6.0.10</PackageVersionNet6>
<PackageVersionNet7>7.0.0-rc.2.22458.4</PackageVersionNet7>
<PreReleaseVersionLabel>alpha</PreReleaseVersionLabel>
<PreReleaseVersionIteration>1</PreReleaseVersionIteration>
<!-- Set assembly version to align with major and minor version,
......@@ -196,7 +198,7 @@
<runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>11.1.0-alpha.1.22451.2</runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
<runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>11.1.0-alpha.1.22451.2</runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
<!-- emscripten / Node -->
<MicrosoftNETWorkloadEmscriptenManifest70100Version>8.0.0-alpha.1.22417.1</MicrosoftNETWorkloadEmscriptenManifest70100Version>
<MicrosoftNETWorkloadEmscriptenManifest70100Version>8.0.0-alpha.1.22457.2</MicrosoftNETWorkloadEmscriptenManifest70100Version>
<MicrosoftNETRuntimeEmscriptenVersion>$(MicrosoftNETWorkloadEmscriptenManifest70100Version)</MicrosoftNETRuntimeEmscriptenVersion>
<!-- workloads -->
<SwixPackageVersion>1.1.87-gba258badda</SwixPackageVersion>
......
......@@ -150,6 +150,8 @@ jobs:
- src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Sdk/*
- src/mono/nuget/Microsoft.NET.Runtime.wasm.Sample.Mono/*
- src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/*
- src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest/*
- src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/*
- src/mono/nuget/Microsoft.NETCore.BrowserDebugHost.Transport/*
- src/mono/wasm/build/*
- src/mono/wasm/emscripten-version.txt
......
......@@ -12,7 +12,7 @@ steps:
- script: >-
mkdir -p $(Build.SourcesDirectory)/artifacts/staging &&
cp -r $(Build.SourcesDirectory)/artifacts/bin/dotnet-workload $(Build.SourcesDirectory)/artifacts/staging &&
cp -r $(Build.SourcesDirectory)/artifacts/bin/dotnet-net7+latest $(Build.SourcesDirectory)/artifacts/staging &&
cp -r $(Build.SourcesDirectory)/artifacts/bin/microsoft.netcore.app.runtime.browser-wasm $(Build.SourcesDirectory)/artifacts/staging &&
cp -r $(Build.SourcesDirectory)/artifacts/bin/microsoft.netcore.app.ref $(Build.SourcesDirectory)/artifacts/staging
displayName: "Prepare artifacts staging directory"
......
......@@ -184,7 +184,7 @@ jobs:
- script: >-
mkdir -p $(librariesDownloadDir)/bin/wasm/wasm-data &&
mkdir -p $(librariesDownloadDir)/bin/wasm/dotnet &&
cp -r $(librariesDownloadDir)/BrowserWasm/staging/dotnet-workload/* $(librariesDownloadDir)/bin/wasm/dotnet &&
cp -r $(librariesDownloadDir)/BrowserWasm/staging/dotnet-net7+latest/* $(librariesDownloadDir)/bin/wasm/dotnet &&
cp src/mono/wasm/test-main.js $(librariesDownloadDir)/bin/wasm/wasm-data/test-main.js &&
find $(librariesDownloadDir)/bin/wasm -type d &&
find $(librariesDownloadDir)/bin/wasm -type f -exec chmod 664 {} \;
......
......@@ -144,7 +144,7 @@ jobs:
# copy wasm packs if running on wasm
- script: >-
mkdir -p $(librariesDownloadDir)/bin/wasm/data &&
cp -r $(librariesDownloadDir)/BrowserWasm/staging/dotnet-workload $(librariesDownloadDir)/bin/wasm &&
cp -r $(librariesDownloadDir)/BrowserWasm/staging/dotnet-net7+latest $(librariesDownloadDir)/bin/wasm &&
cp src/mono/wasm/test-main.js $(librariesDownloadDir)/bin/wasm/data/test-main.js &&
find $(librariesDownloadDir)/bin/wasm -type f -exec chmod 664 {} \;
displayName: "Create wasm directory (Linux)"
......
......@@ -64,6 +64,8 @@ jobs:
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.tvos-*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.tvossimulator-*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Workload.Mono.ToolChain.Manifest*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Workload.Mono.ToolChain.net6.Manifest*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Workload.Mono.ToolChain.net7.Manifest*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Runtime.MonoTargets.Sdk*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Runtime.MonoAOTCompiler.Task*.nupkg
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Runtime.WebAssembly.Sdk*.nupkg
......@@ -89,7 +91,7 @@ jobs:
- template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
parameters:
name: workloads
# Publish Logs
- task: PublishPipelineArtifact@1
displayName: Publish Logs
......
......@@ -178,14 +178,13 @@ jobs:
- ${{ if and(ne(parameters.isRollingBuild, true), ne(parameters.excludeNonLibTests, true)) }}:
# Wasm.Build.Tests
# Issue: https://github.com/dotnet/runtime/issues/75223
#- template: /eng/pipelines/common/templates/wasm-build-tests.yml
#parameters:
#platforms:
#- Browser_wasm
#- Browser_wasm_win
#isExtraPlatformsBuild: ${{ parameters.isExtraPlatformsBuild }}
#isWasmOnlyBuild: ${{ parameters.isWasmOnlyBuild }}
- template: /eng/pipelines/common/templates/wasm-build-tests.yml
parameters:
platforms:
- Browser_wasm
- Browser_wasm_win
isExtraPlatformsBuild: ${{ parameters.isExtraPlatformsBuild }}
isWasmOnlyBuild: ${{ parameters.isWasmOnlyBuild }}
# Debugger tests
- template: /eng/pipelines/common/templates/wasm-debugger-tests.yml
......
......@@ -418,13 +418,12 @@ jobs:
alwaysRun: ${{ variables.isRollingBuild }}
# Wasm.Build.Tests
# Issue: https://github.com/dotnet/runtime/issues/75223
#- template: /eng/pipelines/common/templates/wasm-build-tests.yml
#parameters:
#platforms:
#- Browser_wasm
#- Browser_wasm_win
#alwaysRun: ${{ variables.isRollingBuild }}
- template: /eng/pipelines/common/templates/wasm-build-tests.yml
parameters:
platforms:
- Browser_wasm
- Browser_wasm_win
alwaysRun: ${{ variables.isRollingBuild }}
# Wasm Debugger tests
- template: /eng/pipelines/common/templates/wasm-debugger-tests.yml
......
<Project>
<PropertyGroup>
<ChromeDir>$(ArtifactsBinDir)chrome\</ChromeDir>
<ChromeDriverDir>$(ArtifactsBinDir)chromedriver\</ChromeDriverDir>
<BrowserStampDir>$(ArtifactsBinDir)\</BrowserStampDir>
<ChromeStampFile>$(BrowserStampDir).install-chrome-$(ChromiumRevision).stamp</ChromeStampFile>
<ChromeDriverStampFile>$(BrowserStampDir).install-chromedriver-$(ChromiumRevision).stamp</ChromeDriverStampFile>
<FirefoxDir>$(ArtifactsBinDir)firefox\</FirefoxDir>
<FirefoxStampFile>$(BrowserStampDir).install-firefox-$(FirefoxRevision).stamp</FirefoxStampFile>
</PropertyGroup>
......@@ -37,6 +39,34 @@
<Touch Files="$(ChromeStampFile)" AlwaysCreate="true" />
</Target>
<Target Name="DownloadAndInstallChromeDriver"
AfterTargets="Build"
Condition="!Exists($(ChromeDriverStampFile)) and '$(InstallChromeForTests)' == 'true'">
<ItemGroup>
<_StampFile Include="$(BrowserStampDir).install-chromedriver*.stamp" />
</ItemGroup>
<Delete Files="@(_StampFile)" />
<RemoveDir Directories="$(ChromeDriverDir)" />
<DownloadFile SourceUrl="$(ChromeDriverUrl)" DestinationFolder="$(ChromeDriverDir)" SkipUnchangedFiles="true">
<Output TaskParameter="DownloadedFile" PropertyName="_DownloadedFile" />
</DownloadFile>
<Unzip SourceFiles="$(_DownloadedFile)" DestinationFolder="$(ChromeDriverDir)" />
<PropertyGroup>
<_ChromeDriverBinaryPath>$([MSBuild]::NormalizePath($(ChromeDriverDir), $(ChromeDriverDirName), 'chromedriver'))</_ChromeDriverBinaryPath>
</PropertyGroup>
<Error Text="Cannot find chromedriver at $(_ChromeDriverBinaryPath) in the downloaded copy"
Condition="!Exists($(_ChromeDriverBinaryPath))" />
<Exec Command="chmod +x $(_ChromeDriverBinaryPath)" Condition="!$([MSBuild]::IsOSPlatform('windows'))" />
<Touch Files="$(ChromeDriverStampFile)" AlwaysCreate="true" />
</Target>
<Target Name="DownloadAndInstallFirefox"
AfterTargets="Build"
Condition="!Exists($(FirefoxStampFile)) and '$(InstallFirefoxForTests)' == 'true' and !$([MSBuild]::IsOSPlatform('windows'))">
......
......@@ -20,4 +20,3 @@ Wasm.Build.Tests.WasmNativeDefaultsTests
Wasm.Build.Tests.WasmRunOutOfAppBundleTests
Wasm.Build.Tests.WasmSIMDTests
Wasm.Build.Tests.WasmTemplateTests
Wasm.Build.Tests.WorkloadTests
......@@ -27,6 +27,8 @@
<_WasmStrictVersionMatch Condition="'$(ContinuousIntegrationBuild)' == 'true'">true</_WasmStrictVersionMatch>
<XUnitUseRandomizedTestOrderer Condition="'$(XUnitUseRandomizedTestOrderer)' == '' and '$(IsTestProject)' == 'true'">true</XUnitUseRandomizedTestOrderer>
<_UseWasmSymbolicator Condition="'$(TestTrimming)' != 'true'">true</_UseWasmSymbolicator>
<WasmIgnoreNet6WorkloadInstallErrors Condition="'$(WasmIgnoreNet6WorkloadInstallErrors)' == ''">true</WasmIgnoreNet6WorkloadInstallErrors>
<WasmIgnoreNet6WorkloadInstallErrors Condition="'$(WasmIgnoreNet6WorkloadInstallErrors)' != 'true'">false</WasmIgnoreNet6WorkloadInstallErrors>
</PropertyGroup>
<PropertyGroup Condition="'$(EnableAggressiveTrimming)' == 'true'">
......@@ -138,15 +140,32 @@
</PropertyGroup>
<ItemGroup>
<WorkloadIdForTesting Include="wasm-tools"
<WorkloadIdForTesting Include="wasm-tools;wasm-experimental"
ManifestName="Microsoft.NET.Workload.Mono.ToolChain"
Variant="latest"
Version="$(PackageVersion)"
VersionBand="$(SdkBandVersion)" />
<WorkloadIdForTesting Include="wasm-experimental"
ManifestName="Microsoft.NET.Workload.Mono.ToolChain"
<WorkloadIdForTesting Include="wasm-tools-net7;wasm-experimental-net7"
ManifestName="Microsoft.NET.Workload.Mono.ToolChain.net7"
Variant="net7"
Version="$(PackageVersion)"
VersionBand="$(SdkBandVersion)" />
<WorkloadIdForTesting Include="wasm-tools-net6"
ManifestName="Microsoft.NET.Workload.Mono.ToolChain.net6"
Variant="net6"
Version="$(PackageVersion)"
VersionBand="$(SdkBandVersion)"
IgnoreErrors="$(WasmIgnoreNet6WorkloadInstallErrors)" />
<WorkloadCombinationsToInstall Include="latest" Variants="latest" />
<WorkloadCombinationsToInstall Include="net7" Variants="net7" />
<WorkloadCombinationsToInstall Include="net7+latest" Variants="net7;latest" />
<!--<WorkloadCombinationsToInstall Include="net6" Variants="net6" />-->
<!--<WorkloadCombinationsToInstall Include="net6+7" Variants="net6;net7" />-->
<!--<WorkloadCombinationsToInstall Include="none" />-->
<WasmExtraFilesToDeploy Condition="'$(_UseWasmSymbolicator)' == 'true'" Include="$(MonoProjectRoot)wasm\data\wasm-symbol-patterns.txt" />
<WasmExtraFilesToDeploy Condition="'$(_UseWasmSymbolicator)' == 'true'" Include="$(ArtifactsBinDir)WasmSymbolicator\$(Configuration)\$(NetCoreAppToolCurrent)\WasmSymbolicator.dll" />
</ItemGroup>
......
......@@ -5,6 +5,12 @@
<InstallWorkloadForTesting Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(ArchiveTests)' == 'true'">true</InstallWorkloadForTesting>
</PropertyGroup>
<PropertyGroup Condition="'$(InstallWorkloadForTesting)' == 'true'">
<_SdkForWorkloadTestingBasePath>$(ArtifactsBinDir)</_SdkForWorkloadTestingBasePath>
<_SdkWithNoWorkloadPath>$([MSBuild]::NormalizeDirectory($(_SdkForWorkloadTestingBasePath), 'dotnet-none'))</_SdkWithNoWorkloadPath>
<_SdkWithNoWorkloadStampPath>$([MSBuild]::NormalizePath($(_SdkWithNoWorkloadPath), '.version-$(SdkVersionForWorkloadTesting).stamp'))</_SdkWithNoWorkloadStampPath>
</PropertyGroup>
<ItemGroup>
<_DefaultPropsForNuGetBuild Include="Configuration=$(Configuration)" />
<_DefaultPropsForNuGetBuild Include="TargetOS=Browser" />
......@@ -12,43 +18,21 @@
<_DefaultPropsForNuGetBuild Include="ContinuousIntegrationBuild=$(ContinuousIntegrationBuild)" />
</ItemGroup>
<Target Name="ProvisionSdkForWorkloadTesting"
DependsOnTargets="_ProvisionSdkWithNoWorkload"
Condition="!Exists($(SdkWithNoWorkloadStampPath)) or !Exists($(SdkWithWorkloadStampPath))">
<Target Name="_ProvisionDotNetForWorkloadTesting" Condition="!Exists($(_SdkWithNoWorkloadStampPath))">
<Error Text="%24(_SdkWithNoWorkloadPath) is not set" Condition="'$(_SdkWithNoWorkloadPath)' == ''" />
<Error Text="%24(SdkWithWorkloadForTestingPath) is not set" Condition="'$(SdkWithWorkloadForTestingPath)' == ''" />
<Message Text="** Installing sdk $(SdkVersionForWorkloadTesting) for workload based tests into $(SdkWithWorkloadForTestingPath)"
<Message Text="** Installing sdk $(SdkVersionForWorkloadTesting) for workload based tests into $(_SdkWithNoWorkloadPath)"
Condition="'$(SdkVersionForWorkloadTesting)' != ''"
Importance="High" />
<Message Text="** Installing latest sdk for workload based tests into $(SdkWithWorkloadForTestingPath)"
<Message Text="** Installing latest sdk for workload based tests into $(_SdkWithNoWorkloadPath)"
Condition="'$(SdkVersionForWorkloadTesting)' == ''"
Importance="High" />
<RemoveDir Directories="$(SdkWithWorkloadForTestingPath)" />
<MakeDir Directories="$(SdkWithWorkloadForTestingPath)" />
<ItemGroup>
<_SourceFiles Include="$(SdkWithNoWorkloadForTestingPath)\**" />
<_SdkWithNoWorkloadTarget Include="none" InstallPath="$(_SdkWithNoWorkloadPath)" />
</ItemGroup>
<Copy SourceFiles="@(_SourceFiles)" DestinationFolder="$(SdkWithWorkloadForTestingPath)\%(_SourceFiles.RecursiveDir)" />
<WriteLinesToFile File="$(SdkWithWorkloadStampPath)" Lines="" Overwrite="true" />
</Target>
<Target Name="_ProvisionSdkWithNoWorkload" Condition="!Exists($(SdkWithNoWorkloadStampPath))">
<Error Text="%24(SdkWithNoWorkloadForTestingPath) is not set" Condition="'$(SdkWithNoWorkloadForTestingPath)' == ''" />
<Message Text="** Installing sdk $(SdkVersionForWorkloadTesting) for workload based tests into $(SdkWithNoWorkloadForTestingPath)"
Condition="'$(SdkVersionForWorkloadTesting)' != ''"
Importance="High" />
<Message Text="** Installing latest sdk for workload based tests into $(SdkWithNoWorkloadForTestingPath)"
Condition="'$(SdkVersionForWorkloadTesting)' == ''"
Importance="High" />
<RemoveDir Directories="$(SdkWithNoWorkloadForTestingPath)" />
<MakeDir Directories="$(SdkWithNoWorkloadForTestingPath)" />
<RemoveDir Directories="$(_SdkWithNoWorkloadPath)" />
<MakeDir Directories="$(_SdkWithNoWorkloadPath)" />
<PropertyGroup>
<_DotNetInstallScriptName Condition="!$([MSBuild]::IsOSPlatform('windows'))">dotnet-install.sh</_DotNetInstallScriptName>
......@@ -59,16 +43,16 @@
<PropertyGroup Condition="'$(SdkVersionForWorkloadTesting)' != ''">
<_DotNetInstallCommand Condition="!$([MSBuild]::IsOSPlatform('windows'))"
>$(_DotNetInstallScriptPath) -i $(SdkWithNoWorkloadForTestingPath) -v $(SdkVersionForWorkloadTesting)</_DotNetInstallCommand>
>$(_DotNetInstallScriptPath) -i $(_SdkWithNoWorkloadPath) -v $(SdkVersionForWorkloadTesting)</_DotNetInstallCommand>
<_DotNetInstallCommand Condition="$([MSBuild]::IsOSPlatform('windows'))"
>$(_DotNetInstallScriptPath) -InstallDir $(SdkWithNoWorkloadForTestingPath) -Version $(SdkVersionForWorkloadTesting)</_DotNetInstallCommand>
>$(_DotNetInstallScriptPath) -InstallDir $(_SdkWithNoWorkloadPath) -Version $(SdkVersionForWorkloadTesting)</_DotNetInstallCommand>
</PropertyGroup>
<PropertyGroup Condition="'$(SdkVersionForWorkloadTesting)' == ''">
<_DotNetInstallCommand Condition="!$([MSBuild]::IsOSPlatform('windows'))"
>$(_DotNetInstallScriptPath) -i $(SdkWithNoWorkloadForTestingPath) -v latest -q daily --channel 7.0</_DotNetInstallCommand>
>$(_DotNetInstallScriptPath) -i $(_SdkWithNoWorkloadPath) -v latest -q daily --channel 8.0</_DotNetInstallCommand>
<_DotNetInstallCommand Condition="$([MSBuild]::IsOSPlatform('windows'))"
>$(_DotNetInstallScriptPath) -InstallDir $(SdkWithNoWorkloadForTestingPath) -Quality daily -Channel 7.0</_DotNetInstallCommand>
>$(_DotNetInstallScriptPath) -InstallDir $(_SdkWithNoWorkloadPath) -Quality daily -Channel 8.0</_DotNetInstallCommand>
</PropertyGroup>
<DownloadFile SourceUrl="https://dot.net/v1/$(_DotNetInstallScriptName)"
......@@ -82,13 +66,17 @@
<Exec Condition="$([MSBuild]::IsOSPlatform('windows'))"
Command='powershell -ExecutionPolicy ByPass -NoProfile -command "&amp; $(_DotNetInstallCommand)"' />
<WriteLinesToFile File="$(SdkWithNoWorkloadStampPath)" Lines="" Overwrite="true" />
</Target>
<Target Name="GetWorkloadInputs">
<ItemGroup>
<AvailableNuGetsInArtifacts Include="$(LibrariesShippingPackagesDir)\*.nupkg" />
<!--<_SdkWithWorkloadToInstall Include="none" Version="none" />-->
<_SdkWithWorkloadToInstall Include="@(WorkloadCombinationsToInstall)" />
<_SdkWithWorkloadToInstall InstallPath="$(_SdkForWorkloadTestingBasePath)\dotnet-%(Identity)" />
<!--<_SdkWithWorkloadToInstall StampPath="%(InstallPath)\version-%(Version).stamp" Condition="'%(Version)' != ''" />-->
<_SdkWithWorkloadToInstall StampPath="%(InstallPath)\version.stamp" />
</ItemGroup>
<Error Text="Cannot find any nupkg files in $(LibrariesShippingPackagesDir), needed for workloads" Condition="@(AvailableNuGetsInArtifacts->Count()) == 0" />
......@@ -104,7 +92,7 @@
<Target Name="InstallWorkloadUsingArtifacts"
AfterTargets="ArchiveTests"
DependsOnTargets="_GetNuGetsToBuild;_PreparePackagesForWorkloadInstall;ProvisionSdkForWorkloadTesting;GetWorkloadInputs;_InstallWorkload;_UpdateManifestsForSdkWithNoWorkload"
DependsOnTargets="_GetNuGetsToBuild;_PreparePackagesForWorkloadInstall;GetWorkloadInputs;_ProvisionDotNetForWorkloadTesting;_InstallWorkloads"
Condition="'$(InstallWorkloadForTesting)' == 'true'" />
<Target Name="_GetNuGetsToBuild" Returns="@(_NuGetsToBuild)" DependsOnTargets="_GetRuntimePackNuGetsToBuild">
......@@ -168,7 +156,7 @@
</ItemGroup>
<Error Condition="@(_RuntimePackNugetAvailable -> Count()) != 3 and @(_RuntimePackNugetAvailable -> Count()) != 1"
Text="Multiple runtime pack nugets found. Expected to find either one or three in $(LibrariesShippingPackagesDir): @(_RuntimePackNugetAvailable->'%(FileName)%(Extension)')" />
Text="Expected to find either one or three in $(LibrariesShippingPackagesDir): @(_RuntimePackNugetAvailable->'%(FileName)%(Extension)')" />
<ItemGroup>
<_BuildVariants Include="multithread" Condition="'$(_DefaultBuildVariant)' != '.multithread.'" />
......@@ -202,42 +190,24 @@
*******************" />
</Target>
<Target Name="_InstallWorkload"
<Target Name="_InstallWorkloads"
Inputs="@(AvailableNuGetsInArtifacts)"
Outputs="$(SdkWithWorkload_WorkloadStampPath)">
Outputs="@(_SdkWithWorkloadToInstall->'%(StampPath)');$(_SdkWithNoWorkloadStampPath)">
<ItemGroup>
<_BuiltNuGets Include="$(LibrariesShippingPackagesDir)\*.nupkg" />
</ItemGroup>
<PropertyGroup>
</PropertyGroup>
<Error Text="Could not find cross compiler nupkg at $(_AOTCrossNuGetPath). Found packages: @(_BuiltNuGets)"
Condition="!Exists($(_AOTCrossNuGetPath))" />
<Message Text="Packages found in $(LibrariesShippingPackagesDir): @(_BuiltNuGets)" Importance="Low" />
<InstallWorkloadFromArtifacts
WorkloadIds="@(WorkloadIdForTesting)"
InstallTargets="@(_SdkWithWorkloadToInstall)"
VersionBand="$(SdkBandVersion)"
LocalNuGetsPath="$(LibrariesShippingPackagesDir)"
TemplateNuGetConfigPath="$(RepoRoot)NuGet.config"
SdkDir="$(SdkWithWorkloadForTestingPath)" />
<WriteLinesToFile File="$(SdkWithWorkload_WorkloadStampPath)" Lines="" Overwrite="true" />
</Target>
<Target Name="_UpdateManifestsForSdkWithNoWorkload"
Inputs="@(AvailableNuGetsInArtifacts)"
Outputs="$(SdkWithNoWorkload_WorkloadStampPath)">
<InstallWorkloadFromArtifacts
WorkloadIds="@(WorkloadIdForTesting)"
VersionBand="$(SdkBandVersion)"
LocalNuGetsPath="$(LibrariesShippingPackagesDir)"
TemplateNuGetConfigPath="$(RepoRoot)NuGet.config"
SdkDir="$(SdkWithNoWorkloadForTestingPath)"
OnlyUpdateManifests="true"/>
SdkWithNoWorkloadInstalledPath="$(_SdkWithNoWorkloadPath)"
/>
<WriteLinesToFile File="$(SdkWithNoWorkload_WorkloadStampPath)" Lines="" Overwrite="true" />
<WriteLinesToFile Lines="" File="$(_SdkWithNoWorkloadStampPath)" />
</Target>
</Project>
......@@ -19,7 +19,6 @@
<ItemGroup>
<NativeRuntimeAsset Include="$(IntermediateOutputPath)$(TargetCrossRid).Sdk.props" TargetPath="Sdk/Sdk.props" />
<NativeRuntimeAsset Condition="!$([MSBuild]::IsOsPlatform('Windows'))" Include="$(IntermediateOutputPath)Microsoft.NETCore.App.MonoCrossAOT.UnixFilePermissions.xml" TargetPath="data/UnixFilePermissions.xml" />
</ItemGroup>
<Target Name="WriteTemplateFiles" BeforeTargets="ValidateProperties">
......@@ -39,15 +38,7 @@
<PropertyGroup>
<_PermissionsFiles>@(_ToolFile -> '&lt;File Path=&quot;tools/%(RecursiveDir)%(FileName)%(Extension)&quot; Permission=&quot;755&quot; /&gt;', ' ')</_PermissionsFiles>
</PropertyGroup>
<ItemGroup>
<_PermissionsProperties Include="PermissionsProperties" Value="$(_PermissionsFiles)" />
</ItemGroup>
<GenerateFileFromTemplate
Condition="!$([MSBuild]::IsOsPlatform('Windows'))"
TemplateFile="Microsoft.NETCore.App.MonoCrossAOT.UnixFilePermissions.xml.in"
Properties="@(_PermissionsProperties)"
OutputPath="$(IntermediateOutputPath)Microsoft.NETCore.App.MonoCrossAOT.UnixFilePermissions.xml" />
<GenerateFileFromTemplate
TemplateFile="Microsoft.NETCore.App.MonoCrossAOT.Sdk.props.in"
Properties="@(_SdkPropsProperties)"
......
......@@ -12,7 +12,7 @@
<PackageReference Include="Microsoft.DotNet.Build.Tasks.Feed" Version="$(MicrosoftDotNetBuildTasksFeedVersion)" />
<PackageReference Include="Microsoft.DotNet.VersionTools.Tasks" Version="$(MicrosoftDotNetVersionToolsTasksVersion)" />
</ItemGroup>
<!-- When doing post build sign, pull in the arcade sign.props file, which will
create some initial sign groups and then pulls in the repo's custom Signing.props overrides.
Before importing the signing props. Set PrepareArtifactst=true. Depending on context (SDK project vs. not),
......@@ -83,7 +83,7 @@
<!-- Create temp dir to store generated asset manifest, per Arcade guidance. -->
<TempWorkingDir>$(ArtifactsObjDir)TempWorkingDir\$([System.Guid]::NewGuid())\</TempWorkingDir>
<ProductVersionTxtContents Condition="'$(StabilizePackageVersion)'=='true'">$(ProductionVersion)</ProductVersionTxtContents>
<ProductVersionTxtContents Condition="'$(StabilizePackageVersion)'!='true'">$(ProductVersion)</ProductVersionTxtContents>
</PropertyGroup>
......@@ -101,14 +101,14 @@
Lines="$(ProductVersionTxtContents)"
Overwrite="true"
Encoding="ASCII" />
<ItemGroup>
<ItemsToPush Remove="@(ItemsToPush)" />
<ItemsToPush Include="@(ShippingNupkgToPublishFile)" />
<ItemsToPush Include="@(NonShippingNupkgToPublishFile)" ManifestArtifactData="NonShipping=true" />
<ItemsToPush Include="@(SymbolNupkgToPublishFile)" />
<ItemsToPush
Include="@(UploadToBlobStorageFile)"
Exclude="@(NupkgToPublishFile);@(SymbolNupkgToPublishFile)">
......@@ -247,7 +247,7 @@
-->
<RidAgnosticNupkgToPublishFile
Include="
$(DownloadDirectory)**\Microsoft.NET.Workload.Mono.Toolchain.Manifest-*.nupkg;
$(DownloadDirectory)**\Microsoft.NET.Workload.Mono.Toolchain.*Manifest-*.nupkg;
$(DownloadDirectory)*\$(PublishRidAgnosticPackagesFromPlatform)\**\*.nupkg;
$(DownloadDirectory)*\*AllConfigurations\**\*.nupkg"
Exclude="@(RuntimeNupkgFile);@(DownloadedSymbolNupkgFile)" />
......@@ -278,7 +278,7 @@
<SymbolNupkgToPublishFile
Include="@(PotentialSymbolNupkgToPublishFile -> Distinct())"
Condition="Exists('%(Identity)')" />
<!-- Split nupkgs into shipping/nonshipping for BAR categorization. -->
<ShippingNupkgToPublishFile
Include="@(NupkgToPublishFile)"
......
......@@ -131,13 +131,15 @@
</PropertyGroup>
<PropertyGroup Condition="'$(TargetsMobile)' == 'true'">
<SdkWithNoWorkloadForTestingPath>$(ArtifactsBinDir)sdk-no-workload\</SdkWithNoWorkloadForTestingPath>
<SdkWithNoWorkloadForTestingPath>$(ArtifactsBinDir)dotnet-none\</SdkWithNoWorkloadForTestingPath>
<SdkWithNoWorkloadForTestingPath>$([MSBuild]::NormalizeDirectory($(SdkWithNoWorkloadForTestingPath)))</SdkWithNoWorkloadForTestingPath>
<SdkWithNoWorkloadStampPath>$(SdkWithNoWorkloadForTestingPath)version-$(SdkVersionForWorkloadTesting).stamp</SdkWithNoWorkloadStampPath>
<SdkWithNoWorkload_WorkloadStampPath>$(SdkWithNoWorkloadForTestingPath)workload.stamp</SdkWithNoWorkload_WorkloadStampPath>
<SdkWithWorkloadForTestingPath>$(ArtifactsBinDir)dotnet-workload\</SdkWithWorkloadForTestingPath>
<!-- FIXME: Using net7 workload here, since we are building the test projects with net7.0
right now. -->
<SdkWithWorkloadForTestingPath>$(ArtifactsBinDir)dotnet-net7+latest\</SdkWithWorkloadForTestingPath>
<SdkWithWorkloadForTestingPath>$([MSBuild]::NormalizeDirectory($(SdkWithWorkloadForTestingPath)))</SdkWithWorkloadForTestingPath>
<SdkWithWorkloadStampPath>$(SdkWithWorkloadForTestingPath)version-$(SdkVersionForWorkloadTesting).stamp</SdkWithWorkloadStampPath>
......
......@@ -26,6 +26,7 @@
<WasmBuildTargetsDir>$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'build'))</WasmBuildTargetsDir>
<TestEchoMiddleware>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'NetCoreServer', '$(Configuration)', '$(AspNetCoreAppCurrent)'))</TestEchoMiddleware>
<RemoteLoopMiddleware>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'RemoteLoopServer', '$(Configuration)', '$(AspNetCoreAppCurrent)'))</RemoteLoopMiddleware>
<_ShippingPackagesPath>$([MSBuild]::NormalizeDirectory($(ArtifactsDir), 'packages', $(Configuration), 'Shipping'))</_ShippingPackagesPath>
<WorkItemPrefix Condition="'$(IsWasmDebuggerTests)' == 'true'">$(DebuggerHost)-</WorkItemPrefix>
<WorkItemPrefix Condition="'$(WorkItemPrefix)' == '' and '$(Scenario)' != ''">$(Scenario)-</WorkItemPrefix>
......@@ -56,6 +57,7 @@
<NeedsEMSDKNode Condition="'$(Scenario)' == 'WasmTestOnNodeJS' or '$(Scenario)' == 'BuildWasmApps'">true</NeedsEMSDKNode>
<NeedsToRunOnBrowser Condition="'$(Scenario)' == 'WasmTestOnBrowser' or '$(Scenario)' == 'BuildWasmApps'">true</NeedsToRunOnBrowser>
<NeedsToRunOnBrowser Condition="'$(NeedsToRunOnBrowser)' == '' and '$(IsWasmDebuggerTests)' == 'true'">true</NeedsToRunOnBrowser>
<NeedsBuiltNugets Condition="'$(Scenario)' == 'BuildWasmApps'">true</NeedsBuiltNugets>
<IncludeXHarnessCli>true</IncludeXHarnessCli>
<EnableXHarnessTelemetry>false</EnableXHarnessTelemetry>
......@@ -118,9 +120,13 @@
<_XUnitTraitArg Condition="'$(TestUsingWorkloads)' == 'true'">-notrait category=no-workload</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(TestUsingWorkloads)' != 'true'">-trait category=no-workload</_XUnitTraitArg>
</PropertyGroup>
<ItemGroup Condition="'$(Scenario)' == 'BuildWasmApps'">
<HelixPreCommand Condition="'$(WindowsShell)' == 'true'" Include="set &quot;XUnitTraitArg=$(_XUnitTraitArg)&quot;" />
<HelixPreCommand Condition="'$(WindowsShell)' != 'true'" Include="export &quot;XUnitTraitArg=$(_XUnitTraitArg)&quot;" />
<HelixPreCommand Condition="'$(WindowsShell)' == 'true'" Include="set &quot;BUILT_NUGETS_PATH=%HELIX_CORRELATION_PAYLOAD%/built-nugets&quot;" />
<HelixPreCommand Condition="'$(WindowsShell)' != 'true'" Include="export &quot;BUILT_NUGETS_PATH=$HELIX_CORRELATION_PAYLOAD/built-nugets&quot;" />
</ItemGroup>
<PropertyGroup>
......@@ -187,6 +193,10 @@
<HelixCorrelationPayload Include="$(TestEchoMiddleware)" Destination="xharness/TestEchoMiddleware" Condition="Exists('$(TestEchoMiddleware)')" />
<HelixCorrelationPayload Include="$(RemoteLoopMiddleware)" Destination="xharness/RemoteLoopMiddleware" Condition="Exists('$(RemoteLoopMiddleware)')" />
</ItemGroup>
<ItemGroup Condition="'$(NeedsBuiltNugets)' == 'true'">
<HelixCorrelationPayload Include="$(_ShippingPackagesPath)" Destination="built-nugets" />
</ItemGroup>
</Target>
<Target Name="PrepareForBuildHelixWorkItems_Wasm"
......@@ -296,7 +306,9 @@
<_EmSdkFiles Include="$(EMSDK_PATH)\**\*" Exclude="$(EMSDK_PATH)\.git\**\*" />
</ItemGroup>
<Copy SourceFiles="@(_EmSdkFiles)" DestinationFolder="$(EmSdkDirForHelixPayload)\%(RecursiveDir)" />
<Copy SourceFiles="@(_EmSdkFiles)"
DestinationFiles="@(_EmSdkFiles -> '$(EmSdkDirForHelixPayload)\%(RecursiveDir)%(FileName)%(Extension)')"
SkipUnchangedFiles="true" />
</Target>
<Target Name="DownloadFirefoxToSendToHelix" Condition="!Exists($(FirefoxForHelixPayload)) and '$(DebuggerHost)' == 'firefox'">
......
......@@ -60,8 +60,8 @@
<FailOnTestFailure Condition="'$(FailOnTestFailure)' == '' and '$(WaitForWorkItemCompletion)' != ''">$(WaitForWorkItemCompletion)</FailOnTestFailure>
<SdkForWorkloadTestingDirName Condition="'$(SdkForWorkloadTestingDirName)' == '' and '$(NeedsWorkload)' == 'true' and '$(TestUsingWorkloads)' == 'true'">dotnet-workload</SdkForWorkloadTestingDirName>
<SdkForWorkloadTestingDirName Condition="'$(SdkForWorkloadTestingDirName)' == '' and '$(NeedsWorkload)' == 'true' and '$(TestUsingWorkloads)' != 'true'">sdk-no-workload</SdkForWorkloadTestingDirName>
<SdkForWorkloadTestingDirName Condition="'$(SdkForWorkloadTestingDirName)' == '' and '$(NeedsWorkload)' == 'true' and '$(TestUsingWorkloads)' == 'true'">dotnet-net7+latest</SdkForWorkloadTestingDirName>
<SdkForWorkloadTestingDirName Condition="'$(SdkForWorkloadTestingDirName)' == '' and '$(NeedsWorkload)' == 'true' and '$(TestUsingWorkloads)' != 'true'">dotnet-none</SdkForWorkloadTestingDirName>
</PropertyGroup>
<PropertyGroup Condition="'$(HelixType)' == ''">
......
<Project>
<PropertyGroup>
<WasmNativeWorkload>true</WasmNativeWorkload>
<WasmNativeWorkload Condition="'$(WasmNativeWorkload)' == ''">net8.0</WasmNativeWorkload>
<WasmNativeWorkload8>true</WasmNativeWorkload8>
<!--<WasmNativeWorkloadAvailableList>$(WasmNativeWorkloadAvailableList)+net8.0+</WasmNativeWorkloadAvailableList>-->
</PropertyGroup>
</Project>
......@@ -37,6 +37,8 @@
<ItemGroup>
<_WorkloadManifestValues Include="WorkloadVersion" Value="$(PackageVersion)" />
<_WorkloadManifestValues Include="PackageVersion" Value="$(PackageVersion)" />
<_WorkloadManifestValues Include="PackageVersionNet6" Value="$(PackageVersionNet6)" />
<_WorkloadManifestValues Include="PackageVersionNet7" Value="$(PackageVersionNet7)" />
<_WorkloadManifestValues Include="NetCoreAppCurrent" Value="$(NetCoreAppCurrent)" />
<_WorkloadManifestValues Include="EmscriptenVersion" Value="$(MicrosoftNETRuntimeEmscriptenVersion)" />
</ItemGroup>
......
{
"version": "${WorkloadVersion}",
"depends-on": {
"Microsoft.NET.Workload.Emscripten": "${EmscriptenVersion}"
"Microsoft.NET.Workload.Emscripten.net7": "${EmscriptenVersion}"
},
"workloads": {
"wasm-tools": {
......@@ -11,7 +11,7 @@
"Microsoft.NETCore.App.Runtime.Mono.browser-wasm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.browser-wasm"
],
"extends": [ "microsoft-net-runtime-mono-tooling", "microsoft-net-sdk-emscripten" ],
"extends": [ "microsoft-net-runtime-mono-tooling", "microsoft-net-sdk-emscripten-net7" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"wasm-experimental": {
......@@ -142,8 +142,8 @@
"description": "Shared native build tooling for Mono runtime",
"packs": [
"Microsoft.NET.Runtime.MonoAOTCompiler.Task",
"Microsoft.NET.Runtime.MonoTargets.Sdk",
],
"Microsoft.NET.Runtime.MonoTargets.Sdk"
]
}
},
"packs": {
......
<Project TreatAsLocalProperty="UsingBrowserRuntimeWorkload;WasmNativeWorkload">
<Project>
<PropertyGroup>
<RuntimePackInWorkloadVersion>${PackageVersion}</RuntimePackInWorkloadVersion>
<BrowserWorkloadDisabled Condition="'$(BrowserWorkloadDisabled)' == '' and
'$(RuntimeIdentifier)' == 'browser-wasm' and
'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and
!$([MSBuild]::VersionGreaterThanOrEquals('$(TargetFrameworkVersion)', '6.0'))">true</BrowserWorkloadDisabled>
<_RuntimePackInWorkloadVersionCurrent>${PackageVersion}</_RuntimePackInWorkloadVersionCurrent>
<_RuntimePackInWorkloadVersion7>${PackageVersionNet7}</_RuntimePackInWorkloadVersion7>
<_RuntimePackInWorkloadVersion6>${PackageVersionNet6}</_RuntimePackInWorkloadVersion6>
<TargetsNet8 Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionEquals('$(TargetFrameworkVersion)', '8.0'))">true</TargetsNet8>
<TargetsNet6 Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionEquals('$(TargetFrameworkVersion)', '6.0'))">true</TargetsNet6>
<TargetsNet7 Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionEquals('$(TargetFrameworkVersion)', '7.0'))">true</TargetsNet7>
<TargetsCurrent Condition="'$(TargetsNet8)' == 'true'">true</TargetsCurrent>
</PropertyGroup>
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
<_BrowserWorkloadNotSupportedForTFM Condition="$([MSBuild]::VersionLessThan($(TargetFrameworkVersion), '6.0'))">true</_BrowserWorkloadNotSupportedForTFM>
<_BrowserWorkloadDisabled>$(_BrowserWorkloadNotSupportedForTFM)</_BrowserWorkloadDisabled>
<!-- Is the workload for the target framework available -->
<!--<WasmNativeWorkloadAvailable />-->
<!--<WasmNativeWorkloadAvailable Condition="'$(TargetsNet8)' == 'true' and $(WasmNativeWorkloadAvailableList.Contains('+net8.0+'))">true</WasmNativeWorkloadAvailable>-->
<!--<WasmNativeWorkloadAvailable Condition="'$(TargetsNet7)' == 'true' and $(WasmNativeWorkloadAvailableList.Contains('+net7.0+'))">true</WasmNativeWorkloadAvailable>-->
<!--<WasmNativeWorkloadAvailable Condition="'$(TargetsNet6)' == 'true' and $(WasmNativeWorkloadAvailableList.Contains('+net6.0+'))">true</WasmNativeWorkloadAvailable>-->
</PropertyGroup>
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'browser-wasm' AND '$(UsingBrowserRuntimeWorkload)' == ''">
<!-- $(WasmBuildNative)==true is needed to enable workloads, when using native references, without AOT -->
<UsingBrowserRuntimeWorkload Condition="'$(RunAOTCompilation)' == 'true' or '$(WasmEnableSIMD)' == 'true' or '$(WasmBuildNative)' == 'true' or '$(WasmGenerateAppBundle)' == 'true' or '$(UsingMicrosoftNETSdkBlazorWebAssembly)' != 'true'" >true</UsingBrowserRuntimeWorkload>
<UsingBrowserRuntimeWorkload Condition="'$(UsingBrowserRuntimeWorkload)' == ''" >$(WasmNativeWorkload)</UsingBrowserRuntimeWorkload>
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'browser-wasm'">
<WasmNativeWorkloadAvailable Condition="'$(TargetsNet7)' == 'true' and '$(WasmNativeWorkload7)' == 'true' and '$(WasmNativeWorkload)' != 'false'">true</WasmNativeWorkloadAvailable>
<WasmNativeWorkloadAvailable Condition="'$(TargetsNet8)' == 'true' and '$(WasmNativeWorkload8)' == 'true' and '$(WasmNativeWorkload)' != 'false'">true</WasmNativeWorkloadAvailable>
<WasmNativeWorkloadAvailable Condition="'$(TargetsNet6)' == 'true' and '$(WasmNativeWorkload)' == 'true'">true</WasmNativeWorkloadAvailable>
</PropertyGroup>
<PropertyGroup Condition="'$(BrowserWorkloadDisabled)' == 'true'">
<UsingBrowserRuntimeWorkload>false</UsingBrowserRuntimeWorkload>
<WasmNativeWorkload>false</WasmNativeWorkload>
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
<!-- $(WasmBuildNative)==true is needed to enable workloads, when using native references, without AOT -->
<!-- FIXME: is the blazor condition here correct? -->
<_WasmNativeWorkloadNeeded Condition="'$(RunAOTCompilation)' == 'true' or '$(WasmEnableSIMD)' == 'true' or '$(WasmBuildNative)' == 'true' or
'$(WasmGenerateAppBundle)' == 'true' or '$(UsingMicrosoftNETSdkBlazorWebAssembly)' != 'true'" >true</_WasmNativeWorkloadNeeded>
<UsingBrowserRuntimeWorkload Condition="'$(_BrowserWorkloadNotSupportedForTFM)' == 'true'">false</UsingBrowserRuntimeWorkload>
<UsingBrowserRuntimeWorkload Condition="'$(UsingBrowserRuntimeWorkload)' == '' and '$(_WasmNativeWorkloadNeeded)' == 'true'">true</UsingBrowserRuntimeWorkload>
<UsingBrowserRuntimeWorkload Condition="'$(UsingBrowserRuntimeWorkload)' == ''">$(WasmNativeWorkloadAvailable)</UsingBrowserRuntimeWorkload>
</PropertyGroup>
<PropertyGroup Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true' and '$(UsingBrowserRuntimeWorkload)' == 'true'">
......@@ -23,29 +44,31 @@
<UsingBlazorAOTWorkloadManifest>true</UsingBlazorAOTWorkloadManifest>
</PropertyGroup>
<Import Condition="'$(RunAOTCompilation)' == 'true' and '$(BrowserWorkloadDisabled)' != 'true'" Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoAOTCompiler.Task" />
<!-- TFM specific -->
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'android'">
<Import Condition="'$(TargetsCurrent)' == 'true' and '$(RunAOTCompilation)' == 'true' and '$(_BrowserWorkloadNotSupportedForTFM)' != 'true'" Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoAOTCompiler.Task" />
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'android'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'android' and '$(RunAOTCompilation)' == 'true'">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'android' and '$(RunAOTCompilation)' == 'true'">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.android-x86" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.android-x64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.android-arm" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.android-arm64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'macOS'">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'macOS'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'ios'">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'ios'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'ios' and $([MSBuild]::IsOSPlatform('osx'))">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'ios' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.ios-arm" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.ios-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.iossimulator-arm64" />
......@@ -53,26 +76,26 @@
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.iossimulator-x86" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'maccatalyst'">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'maccatalyst'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'maccatalyst' and $([MSBuild]::IsOSPlatform('osx'))">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'maccatalyst' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.maccatalyst-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.maccatalyst-x64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'tvos'">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'tvos'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
<ImportGroup Condition="'$(TargetPlatformIdentifier)' == 'tvos' and $([MSBuild]::IsOSPlatform('osx'))">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(TargetPlatformIdentifier)' == 'tvos' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.tvos-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.tvossimulator-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.tvossimulator-x64" />
</ImportGroup>
<ImportGroup Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(UsingBrowserRuntimeWorkload)' == 'true'">
<ImportGroup Condition="'$(TargetsCurrent)' == 'true' and '$(RuntimeIdentifier)' == 'browser-wasm' and '$(UsingBrowserRuntimeWorkload)' == 'true'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk" />
......@@ -80,14 +103,14 @@
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
<PropertyGroup Condition="'$(TargetPlatformIdentifier)' == 'android' or '$(TargetPlatformIdentifier)' == 'macOS' or '$(TargetPlatformIdentifier)' == 'ios' or '$(TargetPlatformIdentifier)' == 'maccatalyst' or '$(TargetPlatformIdentifier)' == 'tvos' or ('$(RuntimeIdentifier)' == 'browser-wasm' and '$(UsingBrowserRuntimeWorkload)' == 'true')">
<PropertyGroup Condition="'$(TargetsCurrent)' == 'true' and ('$(TargetPlatformIdentifier)' == 'android' or '$(TargetPlatformIdentifier)' == 'macOS' or '$(TargetPlatformIdentifier)' == 'ios' or '$(TargetPlatformIdentifier)' == 'maccatalyst' or '$(TargetPlatformIdentifier)' == 'tvos' or '$(RuntimeIdentifier)' == 'browser-wasm')">
<_MonoWorkloadTargetsMobile>true</_MonoWorkloadTargetsMobile>
<_MonoWorkloadRuntimePackPackageVersion>$(RuntimePackInWorkloadVersion)</_MonoWorkloadRuntimePackPackageVersion>
<_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersionCurrent)</_MonoWorkloadRuntimePackPackageVersion>
</PropertyGroup>
<ItemGroup Condition="'$(_MonoWorkloadTargetsMobile)' == 'true'">
<ItemGroup Condition="'$(TargetsCurrent)' == 'true' and '$(_MonoWorkloadTargetsMobile)' == 'true'">
<KnownRuntimePack Update="@(KnownRuntimePack)">
<LatestRuntimeFrameworkVersion Condition="'%(KnownRuntimePack.TargetFramework)' == '${NetCoreAppCurrent}' and '%(KnownRuntimePack.RuntimePackLabels)' == 'Mono'">**FromWorkload**</LatestRuntimeFrameworkVersion>
<LatestRuntimeFrameworkVersion Condition="'%(KnownRuntimePack.TargetFramework)' == '${NetCoreAppCurrent}' and '%(KnownRuntimePack.RuntimePackLabels)' == 'Mono'">$(_MonoWorkloadRuntimePackPackageVersion)</LatestRuntimeFrameworkVersion>
<!-- Overrides for wasm threading support -->
<RuntimePackNamePatterns Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(WasmEnableThreads)' == 'true'">Microsoft.NETCore.App.Runtime.Mono.multithread.**RID**</RuntimePackNamePatterns>
<RuntimePackNamePatterns Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(WasmEnablePerfTracing)' == 'true'">Microsoft.NETCore.App.Runtime.Mono.perftrace.**RID**</RuntimePackNamePatterns>
......@@ -97,23 +120,27 @@
<!-- we can't condition sdk imports on the item @(NativeFileReference). Instead, explicitly check before the build
and emit a warning -->
<Target Name="_CheckBrowserWorkloadNeededButNotAvailable"
Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(BrowserWorkloadDisabled)' != 'true' and '$(WasmNativeWorkload)' != 'true'"
Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(_BrowserWorkloadDisabled)' != 'true' and '$(WasmNativeWorkloadAvailable)' != 'true'"
BeforeTargets="Build">
<Warning Condition="@(NativeFileReference->Count()) > 0"
Text="%40(NativeFileReference) is not empty, but the native references won't be linked in, because neither %24(WasmBuildNative), nor %24(RunAOTCompilation) are 'true'. NativeFileReference=@(NativeFileReference)" />
</Target>
<Target Name="_ErrorDisabledWorkload" Condition="'$(BrowserWorkloadDisabled)' == 'true'" BeforeTargets="Build">
<Target Name="_ErrorWorkloadDisabledForTFMLessThan6" Condition="'$(_BrowserWorkloadNotSupportedForTFM)' == 'true'" BeforeTargets="Build">
<Error Condition="'$(RunAOTCompilation)' == 'true'"
Text="WebAssembly workloads, required for AOT, are only supported for projects targeting net6.0+ . Set %24(RunAOTCompilation)=false to disable it." />
<Error Condition="@(NativeFileReference->Count()) > 0"
Text="WebAssembly workloads, required for linking native files (from %40(NativeFileReference)), are only supported for projects targeting net6.0+ ." />
<Error Condition="'$(WasmBuildNative)' == 'true'"
Text="WebAssembly workloads, required for native relinking, are only supported for projects targeting net6.0+ . Set %24(WasmBuildNative)=false to disable it." />
</Target>
<Target Name="_ErrorDualWasmThreadProps"
Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(BrowserWorkloadDisabled)' != 'true' and '$(WasmEnableThreads)' == 'true' and '$(WasmEnablePerfTracing)' == 'true'"
Condition="('$(TargetsCurrent)' == 'true' or '$(TargetsNet7)' == 'true') and '$(RuntimeIdentifier)' == 'browser-wasm' and
'$(BrowserWorkloadDisabled)' != 'true' and '$(WasmEnableThreads)' == 'true' and '$(WasmEnablePerfTrace)' == 'true'"
BeforeTargets="Build">
<Error Text="WebAssembly workloads can only support one active threading mode at a time. Either set WasmEnableThreads or WasmEnablePerfTracing to true, but not both." />
</Target>
......
<Project DefaultTargets="Build">
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.props))" />
<PropertyGroup>
<PackageDescription>Internal toolchain package not meant for direct consumption. Please do not reference directly.</PackageDescription>
</PropertyGroup>
<Target Name="_PrepareForPack" BeforeTargets="GetPackageFiles" Returns="@(PackageFile)">
<!-- Override the id to include the sdk band as per the workload installer spec -->
<PropertyGroup>
<Id>Microsoft.NET.Workload.Mono.ToolChain.net6.Manifest-$(SdkBandVersion)</Id>
</PropertyGroup>
<PropertyGroup>
<WorkloadManifestPath>$(IntermediateOutputPath)WorkloadManifest.json</WorkloadManifestPath>
<WorkloadManifestTargetsPath>$(IntermediateOutputPath)WorkloadManifest.targets</WorkloadManifestTargetsPath>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="$(WorkloadManifestPath)" TargetPath="data" />
<PackageFile Include="$(WorkloadManifestTargetsPath)" TargetPath="data" />
</ItemGroup>
<ItemGroup>
<File Include="localize/**/*">
<TargetPath>data/localize</TargetPath>
</File>
</ItemGroup>
</Target>
<!-- Running this target ensures we have the fully evaluated PackageVersion -->
<Target Name="_WriteManifestValues" AfterTargets="CalculatePackageVersion">
<PropertyGroup>
<PackagePathVersion>PackageVersion=$(PackageVersion);</PackagePathVersion>
</PropertyGroup>
<ItemGroup>
<_WorkloadManifestValues Include="WorkloadVersion" Value="$(PackageVersion)" />
<_WorkloadManifestValues Include="PackageVersionNet6" Value="$(PackageVersionNet6)" />
<_WorkloadManifestValues Include="EmscriptenVersion" Value="$(MicrosoftNETRuntimeEmscriptenVersion)" />
</ItemGroup>
<Error Condition="'%(_WorkloadManifestValues.Value)' == ''"
Text="No version specified for template variable '%(_WorkloadManifestValues.Identity)'" />
<GenerateFileFromTemplate
TemplateFile="WorkloadManifest.json.in"
Properties="@(_WorkloadManifestValues)"
OutputPath="$(WorkloadManifestPath)" />
<GenerateFileFromTemplate
TemplateFile="WorkloadManifest.targets.in"
Properties="@(_WorkloadManifestValues)"
OutputPath="$(WorkloadManifestTargetsPath)" />
</Target>
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.targets))" />
</Project>
{
"version": "${WorkloadVersion}",
"depends-on": {
"Microsoft.NET.Workload.Emscripten.net6": "${EmscriptenVersion}"
},
"workloads": {
"wasm-tools-net6": {
"description": ".NET WebAssembly build tools for net6.0",
"packs": [
"Microsoft.NET.Runtime.WebAssembly.Sdk.net6",
"Microsoft.NETCore.App.Runtime.Mono.net6.browser-wasm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.browser-wasm"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net6", "microsoft-net-sdk-emscripten-net6" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"microsoft-net-runtime-android-net6": {
"abstract": true,
"description": "Android Mono Runtime",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net6.android-arm",
"Microsoft.NETCore.App.Runtime.Mono.net6.android-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.android-x64",
"Microsoft.NETCore.App.Runtime.Mono.net6.android-x86"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net6" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"microsoft-net-runtime-android-aot-net6": {
"abstract": true,
"description": "Android Mono AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-x86",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-x64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-arm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-arm64"
],
"extends": [ "microsoft-net-runtime-android-net6" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"microsoft-net-runtime-ios-net6": {
"abstract": true,
"description": "iOS Mono Runtime and AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.ios-arm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.ios-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-x64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-x86"
],
"extends": [ "runtimes-ios-net6" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-ios-net6": {
"abstract": true,
"description": "iOS Mono Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net6.ios-arm",
"Microsoft.NETCore.App.Runtime.Mono.net6.ios-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.iossimulator-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.iossimulator-x64",
"Microsoft.NETCore.App.Runtime.Mono.net6.iossimulator-x86"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net6" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"microsoft-net-runtime-maccatalyst-net6": {
"abstract": true,
"description": "MacCatalyst Mono Runtime and AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.maccatalyst-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.maccatalyst-x64"
],
"extends": [ "runtimes-maccatalyst-net6" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-maccatalyst-net6": {
"abstract": true,
"description": "MacCatalyst Mono Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net6.maccatalyst-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.maccatalyst-x64"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net6" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"microsoft-net-runtime-macos-net6": {
"abstract": true,
"description": "MacOS CoreCLR and Mono Runtime Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net6.osx-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.osx-x64",
"Microsoft.NETCore.App.Runtime.net6.osx-arm64",
"Microsoft.NETCore.App.Runtime.net6.osx-x64"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net6" ],
"platforms": [ "osx-arm64", "osx-x64" ]
},
"microsoft-net-runtime-tvos-net6": {
"abstract": true,
"description": "tvOS Mono Runtime and AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvos-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvossimulator-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvossimulator-x64"
],
"extends": [ "runtimes-tvos-net6" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-tvos-net6": {
"abstract": true,
"description": "tvOS Mono Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net6.tvos-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.tvossimulator-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net6.tvossimulator-x64"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net6" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-windows-net6": {
"description": "Windows Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.net6.win-x64",
"Microsoft.NETCore.App.Runtime.net6.win-x86",
"Microsoft.NETCore.App.Runtime.net6.win-arm",
"Microsoft.NETCore.App.Runtime.net6.win-arm64"
]
},
"microsoft-net-runtime-mono-tooling-net6": {
"abstract": true,
"description": "Shared native build tooling for Mono runtime",
"packs": [
"Microsoft.NET.Runtime.MonoAOTCompiler.Task.net6",
"Microsoft.NET.Runtime.MonoTargets.Sdk.net6"
]
}
},
"packs": {
"Microsoft.NET.Runtime.MonoAOTCompiler.Task.net6": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NET.Runtime.MonoAOTCompiler.Task"
}
},
"Microsoft.NET.Runtime.MonoTargets.Sdk.net6": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NET.Runtime.MonoTargets.Sdk"
}
},
"Microsoft.NET.Runtime.WebAssembly.Sdk.net6": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NET.Runtime.WebAssembly.Sdk"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.android-arm": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-arm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.android-arm64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-arm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.android-x64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.android-x86": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-x86": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x86",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x86",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x86",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x64",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-arm": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm64",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.maccatalyst-arm64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.maccatalyst-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.maccatalyst-x64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.osx-arm64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.osx-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.osx-x64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.osx-x64"
}
},
"Microsoft.NETCore.App.Runtime.net6.osx-arm64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.osx-arm64"
}
},
"Microsoft.NETCore.App.Runtime.net6.osx-x64": {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.osx-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.ios-arm" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.ios-arm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.ios-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.ios-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.iossimulator-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.iossimulator-x64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.iossimulator-x86" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvos-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvos-arm64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvos-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.tvos-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.tvos-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.tvossimulator-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.tvossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.tvossimulator-x64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.tvossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.maccatalyst-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.maccatalyst-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvossimulator-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvossimulator-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.ios-arm": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.ios-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-x86": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x86",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net6.browser-wasm": {
"kind": "Sdk",
"version": "${PackageVersionNet6}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.browser-wasm",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.browser-wasm",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.browser-wasm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net6.browser-wasm" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
}
},
"Microsoft.NETCore.App.Runtime.net6.win-x64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-x64"
}
},
"Microsoft.NETCore.App.Runtime.net6.win-x86" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-x86"
}
},
"Microsoft.NETCore.App.Runtime.net6.win-arm" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-arm"
}
},
"Microsoft.NETCore.App.Runtime.net6.win-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet6}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-arm64"
}
}
}
}
<Project TreatAsLocalProperty="WasmNativeWorkload">
<Import Condition="'$(TargetsNet6)' == 'true' and '$(RunAOTCompilation)' == 'true' and '$(_BrowserWorkloadDisabled)' != 'true'" Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoAOTCompiler.Task.net6" />
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'android'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'android' and '$(RunAOTCompilation)' == 'true'">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-x86" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-x64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-arm" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.android-arm64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'macOS'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
</ImportGroup>
<!--
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'macOS' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.osx-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.osx-x64" />
</ImportGroup>
-->
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'ios'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'ios' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.ios-arm" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.ios-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-x64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.iossimulator-x86" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'maccatalyst'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'maccatalyst' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.maccatalyst-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.maccatalyst-x64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'tvos'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(TargetPlatformIdentifier)' == 'tvos' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvos-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvossimulator-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.tvossimulator-x64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet6)' == 'true' and '$(RuntimeIdentifier)' == 'browser-wasm' and '$(UsingBrowserRuntimeWorkload)' == 'true'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk.net6" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net6.browser-wasm" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net6" />
</ImportGroup>
<PropertyGroup Condition="'$(TargetsNet6)' == 'true' and ('$(TargetPlatformIdentifier)' == 'android' or '$(TargetPlatformIdentifier)' == 'macOS' or '$(TargetPlatformIdentifier)' == 'ios' or '$(TargetPlatformIdentifier)' == 'maccatalyst' or '$(TargetPlatformIdentifier)' == 'tvos' or '$(RuntimeIdentifier)' == 'browser-wasm')">
<_MonoWorkloadTargetsMobile>true</_MonoWorkloadTargetsMobile>
<_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion6)</_MonoWorkloadRuntimePackPackageVersion>
</PropertyGroup>
<ItemGroup Condition="'$(TargetsNet6)' == 'true' and '$(_MonoWorkloadTargetsMobile)' == 'true'">
<KnownRuntimePack Update="@(KnownRuntimePack)">
<LatestRuntimeFrameworkVersion Condition="'%(KnownRuntimePack.TargetFramework)' == 'net6.0' and '%(KnownRuntimePack.RuntimePackLabels)' == 'Mono'">$(_MonoWorkloadRuntimePackPackageVersion)</LatestRuntimeFrameworkVersion>
</KnownRuntimePack>
</ItemGroup>
</Project>
{
"workloads/wasm-tools-net6/description": "Nástroje pro sestavení .NET WebAssembly"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly-Buildtools"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly build tools"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": "Herramientas de compilación de WebAssembly de .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": "Outils de construction .NET WebAssembly"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": "Strumenti di compilazione WebAssembly .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly ビルド ツール"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly 빌드 도구"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": "Narzędzia kompilacji zestawu WebAssembly platformy .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": "Ferramentas de build do .NET WebAssembly"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": "Средства сборки WebAssembly .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly derleme araçları"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly 生成工具"
}
\ No newline at end of file
{
"workloads/wasm-tools-net6/description": ".NET WebAssembly 組建工具"
}
\ No newline at end of file
<Project DefaultTargets="Build">
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.props))" />
<PropertyGroup>
<PackageDescription>Internal toolchain package not meant for direct consumption. Please do not reference directly.</PackageDescription>
</PropertyGroup>
<Target Name="_PrepareForPack" BeforeTargets="GetPackageFiles" Returns="@(PackageFile)">
<!-- Override the id to include the sdk band as per the workload installer spec -->
<PropertyGroup>
<Id>Microsoft.NET.Workload.Mono.ToolChain.net7.Manifest-$(SdkBandVersion)</Id>
</PropertyGroup>
<PropertyGroup>
<WorkloadManifestPath>$(IntermediateOutputPath)WorkloadManifest.json</WorkloadManifestPath>
<WorkloadManifestTargetsPath>$(IntermediateOutputPath)WorkloadManifest.targets</WorkloadManifestTargetsPath>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="$(WorkloadManifestPath)" TargetPath="data" />
<PackageFile Include="$(WorkloadManifestTargetsPath)" TargetPath="data" />
</ItemGroup>
<ItemGroup>
<File Include="localize/**/*">
<TargetPath>data/localize</TargetPath>
</File>
</ItemGroup>
</Target>
<!-- Running this target ensures we have the fully evaluated PackageVersion -->
<Target Name="_WriteManifestValues" AfterTargets="CalculatePackageVersion">
<PropertyGroup>
<PackagePathVersion>PackageVersion=$(PackageVersion);</PackagePathVersion>
</PropertyGroup>
<ItemGroup>
<_WorkloadManifestValues Include="WorkloadVersion" Value="$(PackageVersion)" />
<_WorkloadManifestValues Include="PackageVersionNet7" Value="$(PackageVersionNet7)" />
<_WorkloadManifestValues Include="EmscriptenVersion" Value="$(MicrosoftNETRuntimeEmscriptenVersion)" />
<_WorkloadManifestValues Include="NetCoreAppCurrent" Value="$(NetCoreAppCurrent)" />
</ItemGroup>
<Error Condition="'%(_WorkloadManifestValues.Value)' == ''"
Text="No version specified for template variable '%(_WorkloadManifestValues.Identity)'" />
<GenerateFileFromTemplate
TemplateFile="WorkloadManifest.json.in"
Properties="@(_WorkloadManifestValues)"
OutputPath="$(WorkloadManifestPath)" />
<GenerateFileFromTemplate
TemplateFile="WorkloadManifest.targets.in"
Properties="@(_WorkloadManifestValues)"
OutputPath="$(WorkloadManifestTargetsPath)" />
</Target>
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.targets))" />
</Project>
{
"version": "${WorkloadVersion}",
"depends-on": {
"Microsoft.NET.Workload.Emscripten.net7": "${EmscriptenVersion}"
},
"workloads": {
"wasm-tools-net7": {
"description": ".NET WebAssembly build tools",
"packs": [
"Microsoft.NET.Runtime.WebAssembly.Sdk.net7",
"Microsoft.NETCore.App.Runtime.Mono.net7.browser-wasm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.browser-wasm"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net7", "microsoft-net-sdk-emscripten-net7" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"wasm-experimental-net7": {
"description": ".NET WebAssembly experimental tooling",
"packs": [
"Microsoft.NET.Runtime.WebAssembly.Templates.net7",
"Microsoft.NETCore.App.Runtime.Mono.multithread.net7.browser-wasm",
"Microsoft.NETCore.App.Runtime.Mono.perftrace.net7.browser-wasm"
],
"extends": [ "wasm-tools-net7" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"microsoft-net-runtime-android-net7": {
"abstract": true,
"description": "Android Mono Runtime",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net7.android-arm",
"Microsoft.NETCore.App.Runtime.Mono.net7.android-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.android-x64",
"Microsoft.NETCore.App.Runtime.Mono.net7.android-x86"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net7" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"microsoft-net-runtime-android-aot-net7": {
"abstract": true,
"description": "Android Mono AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-x86",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-x64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-arm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-arm64"
],
"extends": [ "microsoft-net-runtime-android-net7" ],
"platforms": [ "win-x64", "linux-x64", "osx-x64", "osx-arm64" ]
},
"microsoft-net-runtime-ios-net7": {
"abstract": true,
"description": "iOS Mono Runtime and AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.ios-arm",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.ios-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-x64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-x86"
],
"extends": [ "runtimes-ios-net7" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-ios-net7": {
"abstract": true,
"description": "iOS Mono Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net7.ios-arm",
"Microsoft.NETCore.App.Runtime.Mono.net7.ios-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.iossimulator-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.iossimulator-x64",
"Microsoft.NETCore.App.Runtime.Mono.net7.iossimulator-x86"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net7" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"microsoft-net-runtime-maccatalyst-net7": {
"abstract": true,
"description": "MacCatalyst Mono Runtime and AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.maccatalyst-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.maccatalyst-x64"
],
"extends": [ "runtimes-maccatalyst-net7" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-maccatalyst-net7": {
"abstract": true,
"description": "MacCatalyst Mono Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net7.maccatalyst-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.maccatalyst-x64"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net7" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"microsoft-net-runtime-macos-net7": {
"abstract": true,
"description": "MacOS CoreCLR and Mono Runtime Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net7.osx-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.osx-x64",
"Microsoft.NETCore.App.Runtime.osx-arm64",
"Microsoft.NETCore.App.Runtime.osx-x64"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net7" ],
"platforms": [ "osx-arm64", "osx-x64" ]
},
"microsoft-net-runtime-tvos-net7": {
"abstract": true,
"description": "tvOS Mono Runtime and AOT Workload",
"packs": [
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvos-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvossimulator-arm64",
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvossimulator-x64"
],
"extends": [ "runtimes-tvos-net7" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-tvos-net7": {
"abstract": true,
"description": "tvOS Mono Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.Mono.net7.tvos-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.tvossimulator-arm64",
"Microsoft.NETCore.App.Runtime.Mono.net7.tvossimulator-x64"
],
"extends": [ "microsoft-net-runtime-mono-tooling-net7" ],
"platforms": [ "win-x64", "osx-arm64", "osx-x64" ]
},
"runtimes-windows-net7": {
"description": "Windows Runtime Packs",
"packs": [
"Microsoft.NETCore.App.Runtime.net7.win-x64",
"Microsoft.NETCore.App.Runtime.net7.win-x86",
"Microsoft.NETCore.App.Runtime.net7.win-arm",
"Microsoft.NETCore.App.Runtime.net7.win-arm64"
]
},
"microsoft-net-runtime-mono-tooling-net7": {
"abstract": true,
"description": "Shared native build tooling for Mono runtime",
"packs": [
"Microsoft.NET.Runtime.MonoAOTCompiler.Task.net7",
"Microsoft.NET.Runtime.MonoTargets.Sdk.net7"
]
}
},
"packs": {
"Microsoft.NET.Runtime.MonoAOTCompiler.Task.net7": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NET.Runtime.MonoAOTCompiler.Task"
}
},
"Microsoft.NET.Runtime.MonoTargets.Sdk.net7": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NET.Runtime.MonoTargets.Sdk"
}
},
"Microsoft.NET.Runtime.WebAssembly.Sdk.net7": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NET.Runtime.WebAssembly.Sdk"
}
},
"Microsoft.NET.Runtime.WebAssembly.Templates.net7": {
"kind": "template",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NET.Runtime.WebAssembly.Templates"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.android-arm": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-arm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.android-arm64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.android-x64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.android-x86": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.android-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-x86": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x86",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x86",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x86",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x64",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-arm": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm64",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.maccatalyst-arm64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.maccatalyst-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.maccatalyst-x64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.osx-arm64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.osx-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.osx-x64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.osx-x64"
}
},
"Microsoft.NETCore.App.Runtime.net7.osx-arm64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.osx-arm64"
}
},
"Microsoft.NETCore.App.Runtime.net7.osx-x64": {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.osx-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.ios-arm" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.ios-arm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.ios-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.ios-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.iossimulator-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.iossimulator-x64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.iossimulator-x86" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvos-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvos-arm64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvos-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.tvos-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.tvos-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.tvossimulator-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.tvossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.tvossimulator-x64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.tvossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.maccatalyst-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.maccatalyst-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvossimulator-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvossimulator-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.ios-arm": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.ios-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm64",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-arm64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-arm64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-arm64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-x64": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x64",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x64"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-x86": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x86",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x86"
}
},
"Microsoft.NETCore.App.Runtime.AOT.Cross.net7.browser-wasm": {
"kind": "Sdk",
"version": "${PackageVersionNet7}",
"alias-to": {
"win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm",
"linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.browser-wasm",
"osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.browser-wasm",
"osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.browser-wasm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.net7.browser-wasm" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.multithread.net7.browser-wasm" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.multithread.browser-wasm"
}
},
"Microsoft.NETCore.App.Runtime.Mono.perftrace.net7.browser-wasm" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.Mono.perftrace.browser-wasm"
}
},
"Microsoft.NETCore.App.Runtime.net7.win-x64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-x64"
}
},
"Microsoft.NETCore.App.Runtime.net7.win-x86" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-x86"
}
},
"Microsoft.NETCore.App.Runtime.net7.win-arm" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-arm"
}
},
"Microsoft.NETCore.App.Runtime.net7.win-arm64" : {
"kind": "framework",
"version": "${PackageVersionNet7}",
"alias-to": {
"any": "Microsoft.NETCore.App.Runtime.win-arm64"
}
}
}
}
<Project>
<Import Condition="'$(TargetsNet7)' == 'true' and '$(RunAOTCompilation)' == 'true' and '$(UsingBrowserRuntimeWorkload)' == 'true'" Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoAOTCompiler.Task.net7" />
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'android'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'android' and '$(RunAOTCompilation)' == 'true'">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-x86" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-x64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-arm" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.android-arm64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'macOS'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'ios'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'ios' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.ios-arm" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.ios-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-x64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.iossimulator-x86" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'maccatalyst'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'maccatalyst' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.maccatalyst-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.maccatalyst-x64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'tvos'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(TargetPlatformIdentifier)' == 'tvos' and $([MSBuild]::IsOSPlatform('osx'))">
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvos-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvossimulator-arm64" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.tvossimulator-x64" />
</ImportGroup>
<ImportGroup Condition="'$(TargetsNet7)' == 'true' and '$(RuntimeIdentifier)' == 'browser-wasm' and '$(UsingBrowserRuntimeWorkload)' == 'true'">
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk.net7" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk.net7" />
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.net7.browser-wasm" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk.net7" />
</ImportGroup>
<PropertyGroup Condition="'$(TargetsNet7)' == 'true' and ('$(TargetPlatformIdentifier)' == 'android' or '$(TargetPlatformIdentifier)' == 'macOS' or '$(TargetPlatformIdentifier)' == 'ios' or '$(TargetPlatformIdentifier)' == 'maccatalyst' or '$(TargetPlatformIdentifier)' == 'tvos' or '$(RuntimeIdentifier)' == 'browser-wasm')">
<_MonoWorkloadTargetsMobile>true</_MonoWorkloadTargetsMobile>
<_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion7)</_MonoWorkloadRuntimePackPackageVersion>
</PropertyGroup>
<ItemGroup Condition="'$(TargetsNet7)' == 'true' and '$(_MonoWorkloadTargetsMobile)' == 'true'">
<KnownRuntimePack Update="@(KnownRuntimePack)">
<LatestRuntimeFrameworkVersion Condition="'%(KnownRuntimePack.TargetFramework)' == 'net7.0' and '%(KnownRuntimePack.RuntimePackLabels)' == 'Mono'">$(_MonoWorkloadRuntimePackPackageVersion)</LatestRuntimeFrameworkVersion>
<!-- Overrides for wasm threads support -->
<RuntimePackNamePatterns Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(WasmEnablethreads)' == 'true'">Microsoft.NETCore.App.Runtime.Mono.multithread.**RID**</RuntimePackNamePatterns>
<RuntimePackNamePatterns Condition="'$(RuntimeIdentifier)' == 'browser-wasm' and '$(WasmEnablePerfTracing)' == 'true'">Microsoft.NETCore.App.Runtime.Mono.perftrace.**RID**</RuntimePackNamePatterns>
</KnownRuntimePack>
</ItemGroup>
</Project>
{
"workloads/wasm-tools/description": "Nástroje pro sestavení .NET WebAssembly"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly-Buildtools"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly build tools"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": "Herramientas de compilación de WebAssembly de .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": "Outils de construction .NET WebAssembly"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": "Strumenti di compilazione WebAssembly .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly ビルド ツール"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly 빌드 도구"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": "Narzędzia kompilacji zestawu WebAssembly platformy .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": "Ferramentas de build do .NET WebAssembly"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": "Средства сборки WebAssembly .NET"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly derleme araçları"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly 生成工具"
}
\ No newline at end of file
{
"workloads/wasm-tools/description": ".NET WebAssembly 組建工具"
}
\ No newline at end of file
......@@ -16,6 +16,8 @@
<ItemGroup Condition="'$(TargetsMobile)' == 'true'">
<ProjectReference Include="Microsoft.NET.Workload.Mono.Toolchain.Manifest\Microsoft.NET.Workload.Mono.Toolchain.Manifest.pkgproj" />
<ProjectReference Include="Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest\Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest.pkgproj" />
<ProjectReference Include="Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest\Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest.pkgproj" />
<ProjectReference Include="Microsoft.NET.Runtime.MonoAOTCompiler.Task\Microsoft.NET.Runtime.MonoAOTCompiler.Task.pkgproj" />
</ItemGroup>
......
......@@ -80,6 +80,7 @@ public void Net50Projects_NativeReference(string config)
{ "Release", /*aot*/ false, /*expectError*/ false }
};
// FIXME: test for WasmBuildNative=true?
[Theory]
[MemberData(nameof(Net50TestData))]
public void Net50Projects_AOT(string config, bool aot, bool expectError)
......
......@@ -14,22 +14,22 @@ namespace Wasm.Build.Tests
public class BuildEnvironment
{
public string DotNet { get; init; }
public string RuntimePackDir { get; init; }
public string WorkloadPacksVersion { get; init; }
public bool IsWorkload { get; init; }
public string DefaultBuildArgs { get; init; }
public IDictionary<string, string> EnvVars { get; init; }
public string DirectoryBuildPropsContents { get; init; }
public string DirectoryBuildTargetsContents { get; init; }
public string RuntimeNativeDir { get; init; }
public string LogRootPath { get; init; }
public string WorkloadPacksDir { get; init; }
public string BuiltNuGetsPath { get; init; }
public static readonly string RelativeTestAssetsPath = @"..\testassets\";
public static readonly string TestAssetsPath = Path.Combine(AppContext.BaseDirectory, "testassets");
public static readonly string TestDataPath = Path.Combine(AppContext.BaseDirectory, "data");
private static readonly Dictionary<string, string> s_runtimePackVersions = new();
public BuildEnvironment()
{
DirectoryInfo? solutionRoot = new (AppContext.BaseDirectory);
......@@ -51,7 +51,7 @@ public BuildEnvironment()
"..",
"..",
"..",
"dotnet-workload");
"dotnet-net7+latest");
if (Directory.Exists(probePath))
sdkForWorkloadPath = Path.GetFullPath(probePath);
else
......@@ -60,21 +60,20 @@ public BuildEnvironment()
if (!Directory.Exists(sdkForWorkloadPath))
throw new Exception($"Could not find SDK_FOR_WORKLOAD_TESTING_PATH={sdkForWorkloadPath}");
if (!Path.IsPathRooted(sdkForWorkloadPath))
sdkForWorkloadPath = Path.GetFullPath(sdkForWorkloadPath);
sdkForWorkloadPath = Path.GetFullPath(sdkForWorkloadPath);
// FIXME:
foreach (string verStr in new[] { "8", "7", "6" })
{
string versionValue = Environment.GetEnvironmentVariable($"RUNTIME_PACK_VER{verStr}") ?? string.Empty;
s_runtimePackVersions[$"net{verStr}.0"] = versionValue;
}
WorkloadPacksDir = Path.Combine(sdkForWorkloadPath, "packs");
EnvVars = new Dictionary<string, string>();
bool workloadInstalled = EnvironmentVariables.SdkHasWorkloadInstalled != null && EnvironmentVariables.SdkHasWorkloadInstalled == "true";
if (workloadInstalled)
{
var workloadPacksVersion = EnvironmentVariables.WorkloadPacksVersion;
if (string.IsNullOrEmpty(workloadPacksVersion))
throw new Exception($"Cannot test with workloads without WORKLOAD_PACKS_VER environment variable being set");
WorkloadPacksDir = Path.Combine(sdkForWorkloadPath, "packs");
WorkloadPacksVersion = workloadPacksVersion;
RuntimePackDir = Path.Combine(WorkloadPacksDir, "Microsoft.NETCore.App.Runtime.Mono.browser-wasm", WorkloadPacksVersion);
DirectoryBuildPropsContents = s_directoryBuildPropsForWorkloads;
DirectoryBuildTargetsContents = s_directoryBuildTargetsForWorkloads;
......@@ -87,9 +86,6 @@ public BuildEnvironment()
}
else
{
WorkloadPacksDir = "/dont-use-this-no-workload-installed";
WorkloadPacksVersion = "dont-use-this-no-workload-installed";
RuntimePackDir = "/dont-check-runtime-pack-dir-for-no-workloads-case";
var appRefDir = EnvironmentVariables.AppRefDir;
if (string.IsNullOrEmpty(appRefDir))
throw new Exception($"Cannot test with workloads without AppRefDir environment variable being set");
......@@ -99,6 +95,11 @@ public BuildEnvironment()
DirectoryBuildTargetsContents = s_directoryBuildTargetsForLocal;
}
if (EnvironmentVariables.BuiltNuGetsPath is null || !Directory.Exists(EnvironmentVariables.BuiltNuGetsPath))
throw new Exception($"Cannot find 'BUILT_NUGETS_PATH={EnvironmentVariables.BuiltNuGetsPath}'");
BuiltNuGetsPath = EnvironmentVariables.BuiltNuGetsPath;
// `runtime` repo's build environment sets these, and they
// mess up the build for the test project, which is using a different
// dotnet
......@@ -112,20 +113,25 @@ public BuildEnvironment()
// helps with debugging
EnvVars["WasmNativeStrip"] = "false";
// Works around an issue in msbuild due to which
// second, and subsequent builds fail without any details
// in the logs
EnvVars["DOTNET_CLI_DO_NOT_USE_MSBUILD_SERVER"] = "1";
DefaultBuildArgs += " /nr:false";
if (OperatingSystem.IsWindows())
{
EnvVars["WasmCachePath"] = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
".emscripten-cache");
}
RuntimeNativeDir = Path.Combine(RuntimePackDir, "runtimes", "browser-wasm", "native");
DotNet = Path.Combine(sdkForWorkloadPath!, "dotnet");
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
DotNet += ".exe";
if (!string.IsNullOrEmpty(EnvironmentVariables.TestLogPath))
{
LogRootPath = EnvironmentVariables.TestLogPath;
LogRootPath = Path.GetFullPath(EnvironmentVariables.TestLogPath);
if (!Directory.Exists(LogRootPath))
{
Directory.CreateDirectory(LogRootPath);
......@@ -137,6 +143,13 @@ public BuildEnvironment()
}
}
// FIXME: error checks
public string GetRuntimePackVersion(string tfm = BuildTestBase.DefaultTargetFramework) => s_runtimePackVersions[tfm];
public string GetRuntimePackDir(string tfm = BuildTestBase.DefaultTargetFramework)
=> Path.Combine(WorkloadPacksDir, "Microsoft.NETCore.App.Runtime.Mono.browser-wasm", GetRuntimePackVersion(tfm));
public string GetRuntimeNativeDir(string tfm = BuildTestBase.DefaultTargetFramework)
=> Path.Combine(GetRuntimePackDir(tfm), "runtimes", "browser-wasm", "native");
protected static string s_directoryBuildPropsForWorkloads = File.ReadAllText(Path.Combine(TestDataPath, "Workloads.Directory.Build.props"));
protected static string s_directoryBuildTargetsForWorkloads = File.ReadAllText(Path.Combine(TestDataPath, "Workloads.Directory.Build.targets"));
......
......@@ -40,7 +40,8 @@ public abstract class BuildTestBase : IClassFixture<SharedBuildPerTestClassFixtu
// FIXME: use an envvar to override this
protected static int s_defaultPerTestTimeoutMs = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 30*60*1000 : 15*60*1000;
protected static BuildEnvironment s_buildEnv;
private const string s_runtimePackPathPattern = "\\*\\* MicrosoftNetCoreAppRuntimePackDir : ([^ ]*)";
private const string s_runtimePackPathPattern = "\\*\\* MicrosoftNetCoreAppRuntimePackDir : '([^ ']*)'";
private const string s_nugetInsertionTag = "<!-- TEST_RESTORE_SOURCES_INSERTION_LINE -->";
private static Regex s_runtimePackPathRegex;
private static int s_testCounter;
private readonly int _testIdx;
......@@ -354,7 +355,9 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp
options.InitProject?.Invoke();
File.WriteAllText(Path.Combine(_projectDir, $"{buildArgs.ProjectName}.csproj"), buildArgs.ProjectFileContents);
File.Copy(Path.Combine(AppContext.BaseDirectory, "test-main.js"), Path.Combine(_projectDir, "test-main.js"));
File.Copy(Path.Combine(AppContext.BaseDirectory,
options.TargetFramework == "net8.0" ? "test-main.js" : "data/test-main-7.0.js"),
Path.Combine(_projectDir, "test-main.js"));
}
else if (_projectDir is null)
{
......@@ -392,14 +395,14 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp
}
result = AssertBuild(sb.ToString(), id, expectSuccess: options.ExpectSuccess, envVars: envVars);
//AssertRuntimePackPath(result.buildOutput);
// check that we are using the correct runtime pack!
if (options.ExpectSuccess && options.AssertAppBundle)
{
AssertRuntimePackPath(result.buildOutput, options.TargetFramework ?? DefaultTargetFramework);
string bundleDir = Path.Combine(GetBinDir(config: buildArgs.Config, targetFramework: options.TargetFramework ?? DefaultTargetFramework), "AppBundle");
AssertBasicAppBundle(bundleDir, buildArgs.ProjectName, buildArgs.Config, options.MainJS ?? "test-main.js", options.HasV8Script, options.HasIcudt, options.DotnetWasmFromRuntimePack ?? !buildArgs.AOT);
AssertBasicAppBundle(bundleDir, buildArgs.ProjectName, buildArgs.Config, options.MainJS ?? "test-main.js", options.HasV8Script, options.HasIcudt, options.DotnetWasmFromRuntimePack ?? !buildArgs.AOT, options.TargetFramework ?? DefaultTargetFramework);
}
if (options.UseCache)
......@@ -423,11 +426,24 @@ public void InitBlazorWasmProjectDir(string id)
Directory.CreateDirectory(_projectDir);
Directory.CreateDirectory(Path.Combine(_projectDir, ".nuget"));
File.Copy(Path.Combine(BuildEnvironment.TestDataPath, NuGetConfigFileNameForDefaultFramework), Path.Combine(_projectDir, "nuget.config"));
File.WriteAllText(Path.Combine(_projectDir, "nuget.config"),
GetNuGetConfigWithLocalPackagesPath(
Path.Combine(BuildEnvironment.TestDataPath, NuGetConfigFileNameForDefaultFramework),
s_buildEnv.BuiltNuGetsPath));
File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.props"), Path.Combine(_projectDir, "Directory.Build.props"));
File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.targets"), Path.Combine(_projectDir, "Directory.Build.targets"));
}
private static string GetNuGetConfigWithLocalPackagesPath(string templatePath, string localNuGetsPath)
{
string contents = File.ReadAllText(templatePath);
if (contents.IndexOf(s_nugetInsertionTag, StringComparison.InvariantCultureIgnoreCase) < 0)
throw new Exception($"Could not find {s_nugetInsertionTag} in {templatePath}");
return contents.Replace(s_nugetInsertionTag, $@"<add key=""nuget-local"" value=""{localNuGetsPath}"" />");
}
public string CreateWasmTemplateProject(string id, string template = "wasmbrowser")
{
InitPaths(id);
......@@ -440,6 +456,9 @@ public string CreateWasmTemplateProject(string id, string template = "wasmbrowse
<ItemGroup>
<EmscriptenEnvVars Include="FROZEN_CACHE=" Condition="'$(OS)' == 'Windows_NT'" />
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Build">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : '@(ResolvedRuntimePack -> '%(PackageDirectory)')'" Importance="High" Condition="@(ResolvedRuntimePack->Count()) > 0" />
</Target>
</Project>
""");
......@@ -501,6 +520,7 @@ public string CreateBlazorWasmTemplateProject(string id)
$"-bl:{logPath}",
$"-p:Configuration={config}",
"-p:BlazorEnableCompression=false",
"-nr:false",
setWasmDevel ? "-p:_WasmDevel=true" : string.Empty
}.Concat(extraArgs).ToArray();
......@@ -520,7 +540,7 @@ protected void AssertDotNetNativeFiles(NativeFilesType type, string config, bool
string srcDir = type switch
{
NativeFilesType.FromRuntimePack => s_buildEnv.RuntimeNativeDir,
NativeFilesType.FromRuntimePack => s_buildEnv.GetRuntimeNativeDir(targetFramework),
NativeFilesType.Relinked => objBuildDir,
NativeFilesType.AOT => objBuildDir,
_ => throw new ArgumentOutOfRangeException(nameof(type))
......@@ -540,23 +560,24 @@ protected void AssertDotNetNativeFiles(NativeFilesType type, string config, bool
if (type != NativeFilesType.FromRuntimePack)
{
// check that the files are *not* from runtime pack
AssertNotSameFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.wasm"), Path.Combine(binFrameworkDir, "dotnet.wasm"), label);
AssertNotSameFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.js"), dotnetJsPath!, label);
AssertNotSameFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.wasm"), Path.Combine(binFrameworkDir, "dotnet.wasm"), label);
AssertNotSameFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.js"), dotnetJsPath!, label);
}
}
static void AssertRuntimePackPath(string buildOutput)
static void AssertRuntimePackPath(string buildOutput, string targetFramework)
{
var match = s_runtimePackPathRegex.Match(buildOutput);
if (!match.Success || match.Groups.Count != 2)
throw new XunitException($"Could not find the pattern in the build output: '{s_runtimePackPathPattern}'.{Environment.NewLine}Build output: {buildOutput}");
string expectedRuntimePackDir = s_buildEnv.GetRuntimePackDir(targetFramework);
string actualPath = match.Groups[1].Value;
if (string.Compare(actualPath, s_buildEnv.RuntimePackDir) != 0)
throw new XunitException($"Runtime pack path doesn't match.{Environment.NewLine}Expected: {s_buildEnv.RuntimePackDir}{Environment.NewLine}Actual: {actualPath}");
if (string.Compare(actualPath, expectedRuntimePackDir) != 0)
throw new XunitException($"Runtime pack path doesn't match.{Environment.NewLine}Expected: '{expectedRuntimePackDir}'{Environment.NewLine}Actual: '{actualPath}'");
}
protected static void AssertBasicAppBundle(string bundleDir, string projectName, string config, string mainJS, bool hasV8Script, bool hasIcudt=true, bool dotnetWasmFromRuntimePack=true)
protected static void AssertBasicAppBundle(string bundleDir, string projectName, string config, string mainJS, bool hasV8Script, bool hasIcudt=true, bool dotnetWasmFromRuntimePack=true, string targetFramework=DefaultTargetFramework)
{
AssertFilesExist(bundleDir, new []
{
......@@ -588,24 +609,24 @@ protected static void AssertBasicAppBundle(string bundleDir, string projectName,
//}
}
AssertDotNetWasmJs(bundleDir, fromRuntimePack: dotnetWasmFromRuntimePack);
AssertDotNetWasmJs(bundleDir, fromRuntimePack: dotnetWasmFromRuntimePack, targetFramework);
}
protected static void AssertDotNetWasmJs(string bundleDir, bool fromRuntimePack)
protected static void AssertDotNetWasmJs(string bundleDir, bool fromRuntimePack, string targetFramework)
{
AssertFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.wasm"),
AssertFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.wasm"),
Path.Combine(bundleDir, "dotnet.wasm"),
"Expected dotnet.wasm to be same as the runtime pack",
same: fromRuntimePack);
AssertFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.js"),
AssertFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.js"),
Path.Combine(bundleDir, "dotnet.js"),
"Expected dotnet.js to be same as the runtime pack",
same: fromRuntimePack);
}
protected static void AssertDotNetJsSymbols(string bundleDir, bool fromRuntimePack)
=> AssertFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.js.symbols"),
protected static void AssertDotNetJsSymbols(string bundleDir, bool fromRuntimePack, string targetFramework=DefaultTargetFramework)
=> AssertFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.js.symbols"),
Path.Combine(bundleDir, "dotnet.js.symbols"),
same: fromRuntimePack);
......@@ -656,12 +677,12 @@ protected static void AssertFile(string file0, string file1, string? label=null,
return result;
}
protected void AssertBlazorBundle(string config, bool isPublish, bool dotnetWasmFromRuntimePack, string? binFrameworkDir=null)
protected void AssertBlazorBundle(string config, bool isPublish, bool dotnetWasmFromRuntimePack, string? binFrameworkDir=null, string targetFramework=DefaultTargetFramework)
{
binFrameworkDir ??= FindBlazorBinFrameworkDir(config, isPublish);
AssertBlazorBootJson(config, isPublish, binFrameworkDir: binFrameworkDir);
AssertFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.wasm"),
AssertFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.wasm"),
Path.Combine(binFrameworkDir, "dotnet.wasm"),
"Expected dotnet.wasm to be same as the runtime pack",
same: dotnetWasmFromRuntimePack);
......@@ -669,7 +690,7 @@ protected void AssertBlazorBundle(string config, bool isPublish, bool dotnetWasm
string? dotnetJsPath = Directory.EnumerateFiles(binFrameworkDir, "dotnet.*.js").FirstOrDefault();
Assert.True(dotnetJsPath != null, $"Could not find blazor's dotnet*js in {binFrameworkDir}");
AssertFile(Path.Combine(s_buildEnv.RuntimeNativeDir, "dotnet.js"),
AssertFile(Path.Combine(s_buildEnv.GetRuntimeNativeDir(targetFramework), "dotnet.js"),
dotnetJsPath!,
"Expected dotnet.js to be same as the runtime pack",
same: dotnetWasmFromRuntimePack);
......@@ -854,6 +875,8 @@ void LogData(string label, string? message)
}
outputBuilder.AppendLine($"{label} {message}");
}
if (EnvironmentVariables.ShowBuildOutput)
Console.WriteLine($"{label} {message}");
}
}
......
......@@ -16,6 +16,8 @@ internal static class EnvironmentVariables
internal static readonly string? TestLogPath = Environment.GetEnvironmentVariable("TEST_LOG_PATH");
internal static readonly string? SkipProjectCleanup = Environment.GetEnvironmentVariable("SKIP_PROJECT_CLEANUP");
internal static readonly string? XHarnessCliPath = Environment.GetEnvironmentVariable("XHARNESS_CLI_PATH");
internal static readonly string? BuiltNuGetsPath = Environment.GetEnvironmentVariable("BUILT_NUGETS_PATH");
internal static readonly string? BrowserPathForTests = Environment.GetEnvironmentVariable("BROWSER_PATH_FOR_TESTS");
internal static readonly bool ShowBuildOutput = Environment.GetEnvironmentVariable("SHOW_BUILD_OUTPUT") is not null;
}
}
......@@ -463,7 +463,7 @@ public static void Main()
projectCode = projectCode
.Replace("###WasmPInvokeModule###", AddAssembly("System.Private.CoreLib") + AddAssembly("System.Runtime") + AddAssembly(libraryBuildArgs.ProjectName))
.Replace("###WasmAppBuilder###", Path.Combine(s_buildEnv.WorkloadPacksDir, "Microsoft.NET.Runtime.WebAssembly.Sdk", s_buildEnv.WorkloadPacksVersion, "tasks", DefaultTargetFramework, "WasmAppBuilder.dll"));
.Replace("###WasmAppBuilder###", Path.Combine(s_buildEnv.WorkloadPacksDir, "Microsoft.NET.Runtime.WebAssembly.Sdk", s_buildEnv.GetRuntimePackVersion(), "tasks", DefaultTargetFramework, "WasmAppBuilder.dll"));
buildArgs = buildArgs with { ProjectName = $"icall_enum_{buildArgs.Config}_{id}", ProjectFileContents = projectCode };
......
......@@ -38,7 +38,7 @@ For this, the builds get cached using `BuildArgs` as the key.
- when running locally, the default is to test with workloads. For this, sdk
with `$(SdkVersionForWorkloadTesting)` is installed in
`artifacts/bin/dotnet-workload`. And the workload packs are installed there
`artifacts/bin/dotnet-latest`. And the workload packs are installed there
using packages in `artifacts/packages/$(Configuration)/Shipping`.
- If the packages get updated, then the workload will get installed again.
......@@ -53,3 +53,7 @@ For this, the builds get cached using `BuildArgs` as the key.
- Each test gets a randomly generated "id". This `id` can be used to find the
binlogs, or the test directories.
## Useful environment variables
- `SHOW_BUILD_OUTPUT` - will show the build output to the console
......@@ -112,8 +112,11 @@ private async Task<CommandResult> ExecuteAsyncInternal(string executable, string
if (e.Data == null)
return;
output.Add($"[{_label}] {e.Data}");
_testOutput.WriteLine($"[{_label}] {e.Data}");
string msg = $"[{_label}] {e.Data}";
output.Add(msg);
_testOutput.WriteLine(msg);
if (EnvironmentVariables.ShowBuildOutput)
Console.WriteLine(msg);
ErrorDataReceived?.Invoke(s, e);
};
......@@ -122,8 +125,11 @@ private async Task<CommandResult> ExecuteAsyncInternal(string executable, string
if (e.Data == null)
return;
output.Add($"[{_label}] {e.Data}");
_testOutput.WriteLine($"[{_label}] {e.Data}");
string msg = $"[{_label}] {e.Data}";
output.Add(msg);
_testOutput.WriteLine(msg);
if (EnvironmentVariables.ShowBuildOutput)
Console.WriteLine(msg);
OutputDataReceived?.Invoke(s, e);
};
......
......@@ -60,6 +60,7 @@
<_XUnitTraitArg Condition="'$(TestUsingWorkloads)' == 'true'">-notrait category=no-workload</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(TestUsingWorkloads)' != 'true'">-trait category=no-workload</_XUnitTraitArg>
</PropertyGroup>
<ItemGroup Condition="'$(ContinuousIntegrationBuild)' != 'true'">
<RunScriptCommands Condition="'$(OS)' != 'Windows_NT'" Include="export TEST_USING_WORKLOADS=$(TestUsingWorkloads)" />
<RunScriptCommands Condition="'$(OS)' == 'Windows_NT'" Include="set TEST_USING_WORKLOADS=$(TestUsingWorkloads)" />
......@@ -69,9 +70,19 @@
<RunScriptCommands Condition="'$(OS)' != 'Windows_NT'" Include="export BASE_DIR=$(ArtifactsBinDir)" />
<RunScriptCommands Condition="'$(OS)' == 'Windows_NT'" Include="set BASE_DIR=$(ArtifactsBinDir)" />
<RunScriptCommands Condition="'$(OS)' != 'Windows_NT'" Include="export BUILT_NUGETS_PATH=$(LibrariesShippingPackagesDir)/" />
<RunScriptCommands Condition="'$(OS)' == 'Windows_NT'" Include="set BUILT_NUGETS_PATH=$(LibrariesShippingPackagesDir)" />
</ItemGroup>
<ItemGroup>
<_RuntimePackVersions Include="$(PackageVersion)" EnvVarName="RUNTIME_PACK_VER8" />
<_RuntimePackVersions Include="$(PackageVersionNet7)" EnvVarName="RUNTIME_PACK_VER7" />
<_RuntimePackVersions Include="$(PackageVersionNet6)" EnvVarName="RUNTIME_PACK_VER6" />
<RunScriptCommands Condition="'$(OS)' != 'Windows_NT'" Include="export %(_RuntimePackVersions.EnvVarName)=&quot;%(_RuntimePackVersions.Identity)&quot;" />
<RunScriptCommands Condition="'$(OS)' == 'Windows_NT'" Include="set &quot;%(_RuntimePackVersions.EnvVarName)=%(_RuntimePackVersions.Identity)&quot;" />
<RunScriptCommands Condition="'$(OS)' != 'Windows_NT'" Include="set_env_vars" />
<RunScriptCommands Condition="'$(OS)' == 'Windows_NT'" Include="CALL :SetEnvVars" />
</ItemGroup>
......
......@@ -36,12 +36,16 @@ private void updateProgramCS()
File.WriteAllText(path, text);
}
private void UpdateBrowserMainJs()
private void UpdateBrowserMainJs(string targetFramework)
{
string mainJsPath = Path.Combine(_projectDir!, "main.js");
string mainJsContent = File.ReadAllText(mainJsPath);
mainJsContent = mainJsContent.Replace(".create()", ".withConsoleForwarding().withElementOnExit().withExitCodeLogging().withExitOnUnhandledError().create()");
// .withExitOnUnhandledError() is available only only >net7.0
mainJsContent = mainJsContent.Replace(".create()",
targetFramework == "net8.0"
? ".withConsoleForwarding().withElementOnExit().withExitCodeLogging().withExitOnUnhandledError().create()"
: ".withConsoleForwarding().withElementOnExit().withExitCodeLogging().create()");
File.WriteAllText(mainJsPath, mainJsContent);
}
......@@ -83,7 +87,7 @@ public void BrowserBuildThenPublish(string config)
string projectFile = CreateWasmTemplateProject(id, "wasmbrowser");
string projectName = Path.GetFileNameWithoutExtension(projectFile);
UpdateBrowserMainJs();
UpdateBrowserMainJs(DefaultTargetFramework);
var buildArgs = new BuildArgs(projectName, config, false, id, null);
buildArgs = ExpandBuildArgs(buildArgs);
......@@ -96,7 +100,7 @@ public void BrowserBuildThenPublish(string config)
HasV8Script: false,
MainJS: "main.js",
Publish: false,
TargetFramework: "net7.0"
TargetFramework: BuildTestBase.DefaultTargetFramework
));
AssertDotNetJsSymbols(Path.Combine(GetBinDir(config), "AppBundle"), fromRuntimePack: true);
......@@ -106,7 +110,6 @@ public void BrowserBuildThenPublish(string config)
File.Move(product!.LogFile, Path.ChangeExtension(product.LogFile!, ".first.binlog"));
_testOutput.WriteLine($"{Environment.NewLine}Publishing with no changes ..{Environment.NewLine}");
_testOutput.WriteLine($"{Environment.NewLine}Publishing with no changes ..{Environment.NewLine}");
bool expectRelinking = config == "Release";
......@@ -118,7 +121,7 @@ public void BrowserBuildThenPublish(string config)
HasV8Script: false,
MainJS: "main.js",
Publish: true,
TargetFramework: "net7.0",
TargetFramework: BuildTestBase.DefaultTargetFramework,
UseCache: false));
AssertDotNetJsSymbols(Path.Combine(GetBinDir(config), "AppBundle"), fromRuntimePack: !expectRelinking);
......@@ -146,7 +149,7 @@ public void ConsoleBuildThenPublish(string config)
HasV8Script: false,
MainJS: "main.mjs",
Publish: false,
TargetFramework: "net7.0"
TargetFramework: BuildTestBase.DefaultTargetFramework
));
AssertDotNetJsSymbols(Path.Combine(GetBinDir(config), "AppBundle"), fromRuntimePack: true);
......@@ -171,7 +174,7 @@ public void ConsoleBuildThenPublish(string config)
HasV8Script: false,
MainJS: "main.mjs",
Publish: true,
TargetFramework: "net7.0",
TargetFramework: BuildTestBase.DefaultTargetFramework,
UseCache: false));
AssertDotNetJsSymbols(Path.Combine(GetBinDir(config), "AppBundle"), fromRuntimePack: !expectRelinking);
......@@ -204,7 +207,7 @@ public void ConsoleBuildAndRun(string config, bool relinking)
HasV8Script: false,
MainJS: "main.mjs",
Publish: false,
TargetFramework: "net7.0"
TargetFramework: BuildTestBase.DefaultTargetFramework
));
AssertDotNetJsSymbols(Path.Combine(GetBinDir(config), "AppBundle"), fromRuntimePack: !relinking);
......@@ -268,7 +271,7 @@ public void ConsolePublishAndRun(string config, bool aot, bool relinking)
HasV8Script: false,
MainJS: "main.mjs",
Publish: true,
TargetFramework: "net7.0",
TargetFramework: BuildTestBase.DefaultTargetFramework,
UseCache: false));
if (!aot)
......@@ -301,10 +304,6 @@ public async Task BlazorRunTest()
string config = "Debug";
string id = $"blazor_{config}_{Path.GetRandomFileName()}";
string projectFile = CreateWasmTemplateProject(id, "blazorwasm");
// string projectName = Path.GetFileNameWithoutExtension(projectFile);
// var buildArgs = new BuildArgs(projectName, config, false, id, null);
// buildArgs = ExpandBuildArgs(buildArgs);
new DotNetCommand(s_buildEnv, _testOutput)
.WithWorkingDirectory(_projectDir!)
......@@ -333,10 +332,7 @@ public async Task BrowserTest()
string id = $"browser_{config}_{Path.GetRandomFileName()}";
CreateWasmTemplateProject(id, "wasmbrowser");
// var buildArgs = new BuildArgs(projectName, config, false, id, null);
// buildArgs = ExpandBuildArgs(buildArgs);
UpdateBrowserMainJs();
UpdateBrowserMainJs(DefaultTargetFramework);
new DotNetCommand(s_buildEnv, _testOutput)
.WithWorkingDirectory(_projectDir!)
......
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Xml;
using System.Xml.Serialization;
using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;
#nullable enable
namespace Wasm.Build.Tests
{
public class WorkloadTests : BuildTestBase
{
public WorkloadTests(ITestOutputHelper output, SharedBuildPerTestClassFixture buildContext)
: base(output, buildContext)
{
}
[Fact]
[SkipOnPlatform(TestPlatforms.Windows, "Not applicable on windows")]
public void FilesInUnixFilesPermissionsXmlExist()
{
// not doing any project generation here
_enablePerTestCleanup = false;
// find all the UnixFilePermissions ..
string packsDir = Path.Combine(Path.GetDirectoryName(s_buildEnv.DotNet)!, "packs");
Assert.True(Directory.Exists(packsDir), $"Could not find packs directory {packsDir}");
var unixPermFiles = Directory.EnumerateFiles(packsDir, "UnixFilePermissions.xml", new EnumerationOptions { RecurseSubdirectories = true });
foreach (string unixPermFile in unixPermFiles)
{
Assert.True(File.Exists(unixPermFile), $"Could not find {unixPermFile}");
FileList? list = FileList.Deserialize(unixPermFile);
if (list == null)
throw new Exception($"Could not read unix permissions file {unixPermFile}");
// File is in <packs>/<packName>/<version>/data/UnixFilePermissions.xml
// and <FileList><File Path="tools/bin/2to3" Permission="755" />
string thisPackDir = Path.Combine(Path.GetDirectoryName(unixPermFile)!, "..");
foreach (FileListFile flf in list.File)
{
if (flf.Path == null)
throw new Exception($"Path for FileListFile should not be null. xml: {unixPermFile}");
var targetFile = Path.Combine(thisPackDir, flf.Path);
Assert.True(File.Exists(targetFile), $"Expected file {targetFile} to exist in the pack, as it is referenced in {unixPermFile}");
}
}
// We don't install the cross compiler pack from nupkg, so we don't
// have the unixFilePermissions for that
// Expect just the emscripten ones here for now
// linux doesn't have Emscripten.Python package, so only 2 there
int expectedPermFileCount = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? 3 : 4;
int permFileCount = unixPermFiles.Count();
if (permFileCount != expectedPermFileCount)
throw new XunitException($"Expected to find 3 UnixFilePermissions.xml files, but got {permFileCount}."
+ $"{Environment.NewLine}Files: {string.Join(", ", unixPermFiles)}");
}
}
[Serializable]
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class FileList
{
private FileListFile[]? fileField;
[XmlElement("File")]
public FileListFile[] File
{
get => fileField ?? Array.Empty<FileListFile>();
set => fileField = value;
}
public static FileList? Deserialize(string pathToXml)
{
var serializer = new XmlSerializer(typeof(FileList));
using var fs = new FileStream(pathToXml, FileMode.Open, FileAccess.Read);
var reader = XmlReader.Create(fs);
FileList? fileList = (FileList?)serializer.Deserialize(reader);
return fileList;
}
}
// From https://github.com/dotnet/sdk/blob/main/src/Cli/dotnet/NugetPackageDownloader/WorkloadUnixFilePermissionsFileList.cs
[Serializable]
[XmlType(AnonymousType = true)]
public class FileListFile
{
private string? pathField;
private string? permissionField;
[XmlAttribute]
public string? Path
{
get => pathField;
set => pathField = value;
}
[XmlAttribute]
public string? Permission
{
get => permissionField;
set => permissionField = value;
}
}
}
<Project>
<PropertyGroup>
<LocalFrameworkOverrideName>Microsoft.NETCore.App</LocalFrameworkOverrideName>
</PropertyGroup>
<ItemGroup>
<EmscriptenEnvVars Include="FROZEN_CACHE=" Condition="'$(OS)' == 'Windows_NT'" />
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Publish">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : %(ResolvedRuntimePack.PackageDirectory)" Importance="High" />
</Target>
<!-- SDK tries to download runtime packs when RuntimeIdentifier is set, remove them from PackageDownload item. -->
<Target Name="RemoveRuntimePackFromDownloadItem"
AfterTargets="ProcessFrameworkReferences"
Condition="'$(WasmNativeWorkload)' == 'true'">
<ItemGroup>
<PackageDownload Remove="@(PackageDownload)"
Condition="'$(UsePackageDownload)' == 'true' and $([System.String]::Copy('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime'))" />
<PackageReference Remove="@(PackageReference)"
Condition="'$(UsePackageDownload)' != 'true' and $([System.String]::Copy('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime'))" />
</ItemGroup>
</Target>
<!-- Use local targeting pack for NetCoreAppCurrent. -->
<Target Name="UpdateTargetingAndRuntimePack"
AfterTargets="ResolveFrameworkReferences"
Condition="'$(WasmNativeWorkload)' == 'true'">
<ItemGroup>
<ResolvedRuntimePack
Update="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
FrameworkName="Microsoft.NETCore.App"
NuGetPackageId="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
NuGetPackageVersion="$(RuntimePackInWorkloadVersion)"
PackageDirectory="$(NetCoreTargetingPackRoot)\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\$(RuntimePackInWorkloadVersion)"
RuntimeIdentifier="browser-wasm" />
<ResolvedFrameworkReference Update="Microsoft.NETCore.App"
RuntimePackName="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
RuntimePackVersion="$(RuntimePackInWorkloadVersion)"
RuntimePackPath="$(NetCoreTargetingPackRoot)\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\$(RuntimePackInWorkloadVersion)"
RuntimeIdentifier="browser-wasm" />
</ItemGroup>
</Target>
<!-- Update the local targeting pack's version as it's written into the runtimeconfig.json file to select the right framework. -->
<Target Name="UpdateRuntimeFrameworkVersion"
AfterTargets="ResolveTargetingPackAssets"
Condition="'$(WasmNativeWorkload)' == 'true'">
<ItemGroup>
<RuntimeFramework Version="$(RuntimePackInWorkloadVersion)"
Condition="'%(RuntimeFramework.FrameworkName)' == 'Microsoft.NETCore.App'" />
</ItemGroup>
</Target>
<!-- Filter out conflicting implicit assembly references. -->
<Target Name="FilterImplicitAssemblyReferences"
Condition="'$(WasmNativeWorkload)' == 'true'"
DependsOnTargets="ResolveProjectReferences"
AfterTargets="ResolveTargetingPackAssets">
<ItemGroup>
<_targetingPackReferenceExclusion Include="$(TargetName)" />
<_targetingPackReferenceExclusion Include="@(_ResolvedProjectReferencePaths->'%(Filename)')" />
<_targetingPackReferenceExclusion Include="@(DefaultReferenceExclusion)" />
</ItemGroup>
<ItemGroup>
<_targetingPackReferenceWithExclusion Include="@(Reference)">
<Exclusion>%(_targetingPackReferenceExclusion.Identity)</Exclusion>
</_targetingPackReferenceWithExclusion>
<Reference Remove="@(_targetingPackReferenceWithExclusion)"
Condition="'%(_targetingPackReferenceWithExclusion.ExternallyResolved)' == 'true' and '%(_targetingPackReferenceWithExclusion.Filename)' == '%(_targetingPackReferenceWithExclusion.Exclusion)'" />
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Build">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : '@(ResolvedRuntimePack -> '%(PackageDirectory)')'" Importance="High" Condition="@(ResolvedRuntimePack->Count()) > 0" />
</Target>
</Project>
<Project>
<Target Name="PrintRuntimePackPath" BeforeTargets="Publish">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : %(ResolvedRuntimePack.PackageDirectory)" Importance="High" />
</Target>
<!-- Use local targeting pack for NetCoreAppCurrent. -->
<Target Name="UpdateTargetingAndRuntimePack"
AfterTargets="ResolveFrameworkReferences">
<ItemGroup>
<ResolvedRuntimePack
Update="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
FrameworkName="Microsoft.NETCore.App"
NuGetPackageId="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
NuGetPackageVersion="$(RuntimePackInWorkloadVersion)"
PackageDirectory="$(MicrosoftNetCoreAppRuntimePackLocationToUse)"
RuntimeIdentifier="browser-wasm" />
<ResolvedFrameworkReference Update="Microsoft.NETCore.App"
RuntimePackName="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
RuntimePackVersion="$(RuntimePackInWorkloadVersion)"
RuntimePackPath="$(MicrosoftNetCoreAppRuntimePackLocationToUse)"
RuntimeIdentifier="browser-wasm" />
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Build">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : '@(ResolvedRuntimePack -> '%(PackageDirectory)')'" Importance="High" Condition="@(ResolvedRuntimePack->Count()) > 0" />
</Target>
</Project>
......@@ -4,6 +4,6 @@
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Build">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : %(ResolvedRuntimePack.PackageDirectory)" Importance="High" />
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : '@(ResolvedRuntimePack -> '%(PackageDirectory)')'" Importance="High" Condition="@(ResolvedRuntimePack->Count()) > 0" />
</Target>
</Project>
......@@ -94,10 +94,10 @@ exit /b %EXIT_CODE%
REM Functions
:SetEnvVars
if [%TEST_USING_WORKLOADS%] == [true] (
set _DIR_NAME=dotnet-workload
set _DIR_NAME=dotnet-net7+latest
set SDK_HAS_WORKLOAD_INSTALLED=true
) else (
set _DIR_NAME=sdk-no-workload
set _DIR_NAME=dotnet-none
set SDK_HAS_WORKLOAD_INSTALLED=false
)
......
......@@ -68,10 +68,10 @@ function set_env_vars()
{
local _DIR_NAME=
if [ "x$TEST_USING_WORKLOADS" = "xtrue" ]; then
_DIR_NAME=dotnet-workload
_DIR_NAME=dotnet-net7+latest
export SDK_HAS_WORKLOAD_INSTALLED=true
else
_DIR_NAME=sdk-no-workload
_DIR_NAME=dotnet-none
export SDK_HAS_WORKLOAD_INSTALLED=false
fi
......
......@@ -3,77 +3,7 @@
<EmscriptenEnvVars Include="FROZEN_CACHE=" Condition="'$(OS)' == 'Windows_NT'" />
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Publish">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : %(ResolvedRuntimePack.PackageDirectory)" Importance="High" />
</Target>
<!-- Add the resolved targeting pack to the assembly search path. -->
<!-- <Target Name="UseTargetingPackForAssemblySearchPaths"
BeforeTargets="ResolveAssemblyReferences;
DesignTimeResolveAssemblyReferences"
Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
<PropertyGroup>
<AssemblySearchPaths>$(AssemblySearchPaths);$(MicrosoftNetCoreAppRefPackRefDir.TrimEnd('/\'))</AssemblySearchPaths>
<DesignTimeAssemblySearchPaths>$(DesignTimeAssemblySearchPaths);$(MicrosoftNetCoreAppRefPackRefDir.TrimEnd('/\'))</DesignTimeAssemblySearchPaths>
</PropertyGroup>
</Target> -->
<!-- SDK tries to download runtime packs when RuntimeIdentifier is set, remove them from PackageDownload item. -->
<Target Name="RemoveRuntimePackFromDownloadItem"
AfterTargets="ProcessFrameworkReferences">
<ItemGroup>
<PackageDownload Remove="@(PackageDownload)"
Condition="'$(UsePackageDownload)' == 'true' and $([System.String]::Copy('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime'))" />
<PackageReference Remove="@(PackageReference)"
Condition="'$(UsePackageDownload)' != 'true' and $([System.String]::Copy('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime'))" />
</ItemGroup>
</Target>
<!-- Use local targeting pack for NetCoreAppCurrent. -->
<Target Name="UpdateTargetingAndRuntimePack"
AfterTargets="ResolveFrameworkReferences">
<ItemGroup>
<ResolvedRuntimePack
Update="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
FrameworkName="Microsoft.NETCore.App"
NuGetPackageId="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
NuGetPackageVersion="$(RuntimePackInWorkloadVersion)"
PackageDirectory="$(NetCoreTargetingPackRoot)\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\$(RuntimePackInWorkloadVersion)"
RuntimeIdentifier="browser-wasm" />
<ResolvedFrameworkReference Update="Microsoft.NETCore.App"
RuntimePackName="Microsoft.NETCore.App.Runtime.Mono.browser-wasm"
RuntimePackVersion="$(RuntimePackInWorkloadVersion)"
RuntimePackPath="$(NetCoreTargetingPackRoot)\Microsoft.NETCore.App.Runtime.Mono.browser-wasm\$(RuntimePackInWorkloadVersion)"
RuntimeIdentifier="browser-wasm" />
</ItemGroup>
</Target>
<!-- Update the local targeting pack's version as it's written into the runtimeconfig.json file to select the right framework. -->
<Target Name="UpdateRuntimeFrameworkVersion"
AfterTargets="ResolveTargetingPackAssets">
<ItemGroup>
<RuntimeFramework Version="$(RuntimePackInWorkloadVersion)"
Condition="'%(RuntimeFramework.FrameworkName)' == 'Microsoft.NETCore.App'" />
</ItemGroup>
</Target>
<!-- Filter out conflicting implicit assembly references. -->
<Target Name="FilterImplicitAssemblyReferences"
DependsOnTargets="ResolveProjectReferences"
AfterTargets="ResolveTargetingPackAssets">
<ItemGroup>
<_targetingPackReferenceExclusion Include="$(TargetName)" />
<_targetingPackReferenceExclusion Include="@(_ResolvedProjectReferencePaths->'%(Filename)')" />
<_targetingPackReferenceExclusion Include="@(DefaultReferenceExclusion)" />
</ItemGroup>
<ItemGroup>
<_targetingPackReferenceWithExclusion Include="@(Reference)">
<Exclusion>%(_targetingPackReferenceExclusion.Identity)</Exclusion>
</_targetingPackReferenceWithExclusion>
<Reference Remove="@(_targetingPackReferenceWithExclusion)"
Condition="'%(_targetingPackReferenceWithExclusion.ExternallyResolved)' == 'true' and '%(_targetingPackReferenceWithExclusion.Filename)' == '%(_targetingPackReferenceWithExclusion.Exclusion)'" />
</ItemGroup>
<Target Name="PrintRuntimePackPath" BeforeTargets="Build">
<Message Text="** MicrosoftNetCoreAppRuntimePackDir : '@(ResolvedRuntimePack -> '%(PackageDirectory)')'" Importance="High" Condition="@(ResolvedRuntimePack->Count()) > 0" />
</Target>
</Project>
......@@ -7,6 +7,7 @@
</fallbackPackageFolders>
<packageSources>
<clear />
<!-- TEST_RESTORE_SOURCES_INSERTION_LINE -->
<add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
......
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// -*- mode: js; js-indent-level: 4; -*-
//
// Run runtime tests under a JS shell or a browser
//
"use strict";
/*****************************************************************************
* Please don't use this as template for startup code.
* There are simpler and better samples like src\mono\sample\wasm\browser\main.js
* This one is not ES6 nor CJS, doesn't use top level await and has edge case polyfills.
* It handles strange things which happen with XHarness.
****************************************************************************/
//glue code to deal with the differences between chrome, ch, d8, jsc and sm.
const is_browser = typeof window != "undefined";
const is_node = !is_browser && typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';
if (is_node && process.versions.node.split(".")[0] < 14) {
throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}'`);
}
if (typeof globalThis.crypto === 'undefined') {
// **NOTE** this is a simple insecure polyfill for testing purposes only
// /dev/random doesn't work on js shells, so define our own
// See library_fs.js:createDefaultDevices ()
globalThis.crypto = {
getRandomValues: function (buffer) {
for (let i = 0; i < buffer.length; i++)
buffer[i] = (Math.random() * 256) | 0;
}
}
}
let v8args;
if (typeof arguments !== "undefined") {
// this must be captured in top level scope in V8
v8args = arguments;
}
async function getArgs() {
let queryArguments = [];
if (is_node) {
queryArguments = process.argv.slice(2);
} else if (is_browser) {
// We expect to be run by tests/runtime/run.js which passes in the arguments using http parameters
const url = new URL(decodeURI(window.location));
let urlArguments = []
for (let param of url.searchParams) {
if (param[0] == "arg") {
urlArguments.push(param[1]);
}
}
queryArguments = urlArguments;
} else if (v8args !== undefined) {
queryArguments = Array.from(v8args);
} else if (typeof scriptArgs !== "undefined") {
queryArguments = Array.from(scriptArgs);
} else if (typeof WScript !== "undefined" && WScript.Arguments) {
queryArguments = Array.from(WScript.Arguments);
}
let runArgs;
if (queryArguments.length > 0) {
runArgs = processArguments(queryArguments);
} else {
const response = fetch('/runArgs.json')
if (!response.ok) {
console.debug(`could not load /args.json: ${response.status}. Ignoring`);
}
runArgs = await response.json();
}
runArgs = initRunArgs(runArgs);
return runArgs;
}
function initRunArgs(runArgs) {
// set defaults
runArgs.applicationArguments = runArgs.applicationArguments === undefined ? [] : runArgs.applicationArguments;
runArgs.profilers = runArgs.profilers === undefined ? [] : runArgs.profilers;
runArgs.workingDirectory = runArgs.workingDirectory === undefined ? '/' : runArgs.workingDirectory;
runArgs.environmentVariables = runArgs.environmentVariables === undefined ? {} : runArgs.environmentVariables;
runArgs.runtimeArgs = runArgs.runtimeArgs === undefined ? [] : runArgs.runtimeArgs;
runArgs.enableGC = runArgs.enableGC === undefined ? true : runArgs.enableGC;
runArgs.diagnosticTracing = runArgs.diagnosticTracing === undefined ? false : runArgs.diagnosticTracing;
runArgs.debugging = runArgs.debugging === undefined ? false : runArgs.debugging;
runArgs.configSrc = runArgs.configSrc === undefined ? './mono-config.json' : runArgs.configSrc;
// default'ing to true for tests, unless debugging
runArgs.forwardConsole = runArgs.forwardConsole === undefined ? !runArgs.debugging : runArgs.forwardConsole;
return runArgs;
}
function processArguments(incomingArguments) {
const runArgs = initRunArgs({});
console.log("Incoming arguments: " + incomingArguments.join(' '));
while (incomingArguments && incomingArguments.length > 0) {
const currentArg = incomingArguments[0];
if (currentArg.startsWith("--profile=")) {
const arg = currentArg.substring("--profile=".length);
runArgs.profilers.push(arg);
} else if (currentArg.startsWith("--setenv=")) {
const arg = currentArg.substring("--setenv=".length);
const parts = arg.split('=');
if (parts.length != 2)
set_exit_code(1, "Error: malformed argument: '" + currentArg);
runArgs.environmentVariables[parts[0]] = parts[1];
} else if (currentArg.startsWith("--runtime-arg=")) {
const arg = currentArg.substring("--runtime-arg=".length);
runArgs.runtimeArgs.push(arg);
} else if (currentArg == "--disable-on-demand-gc") {
runArgs.enableGC = false;
} else if (currentArg == "--diagnostic-tracing") {
runArgs.diagnosticTracing = true;
} else if (currentArg.startsWith("--working-dir=")) {
const arg = currentArg.substring("--working-dir=".length);
runArgs.workingDirectory = arg;
} else if (currentArg == "--debug") {
runArgs.debugging = true;
} else if (currentArg == "--no-forward-console") {
runArgs.forwardConsole = false;
} else if (currentArg.startsWith("--fetch-random-delay=")) {
const arg = currentArg.substring("--fetch-random-delay=".length);
if (is_browser) {
const delayms = Number.parseInt(arg) || 100;
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url, options) => {
// random sleep
const ms = delayms + (Math.random() * delayms);
console.log(`fetch ${url} started ${ms}`)
await new Promise(resolve => setTimeout(resolve, ms));
console.log(`fetch ${url} delayed ${ms}`)
const res = await originalFetch(url, options);
console.log(`fetch ${url} done ${ms}`)
return res;
}
} else {
console.warn("--fetch-random-delay only works on browser")
}
} else if (currentArg.startsWith("--config-src=")) {
const arg = currentArg.substring("--config-src=".length);
runArgs.configSrc = arg;
} else {
break;
}
incomingArguments = incomingArguments.slice(1);
}
runArgs.applicationArguments = incomingArguments;
// cheap way to let the testing infrastructure know we're running in a browser context (or not)
runArgs.environmentVariables["IsBrowserDomSupported"] = is_browser.toString().toLowerCase();
runArgs.environmentVariables["IsNodeJS"] = is_node.toString().toLowerCase();
return runArgs;
}
// we may have dependencies on NPM packages, depending on the test case
// some of them polyfill for browser built-in stuff
function loadNodeModules(config, require, modulesToLoad) {
modulesToLoad.split(',').forEach(module => {
const { 0: moduleName, 1: globalAlias } = module.split(':');
let message = `Loading npm '${moduleName}'`;
let moduleExport = require(moduleName);
if (globalAlias) {
message += ` and attaching to global as '${globalAlias}'`;
globalThis[globalAlias] = moduleExport;
} else if (moduleName == "node-fetch") {
message += ' and attaching to global';
globalThis.fetch = moduleExport.default;
globalThis.Headers = moduleExport.Headers;
globalThis.Request = moduleExport.Request;
globalThis.Response = moduleExport.Response;
} else if (moduleName == "node-abort-controller") {
message += ' and attaching to global';
globalThis.AbortController = moduleExport.AbortController;
}
console.log(message);
});
// Must be after loading npm modules.
config.environmentVariables["IsWebSocketSupported"] = ("WebSocket" in globalThis).toString().toLowerCase();
}
let mono_exit = (code, reason) => {
console.log(`test-main failed early ${code} ${reason}`);
};
async function loadDotnet(file) {
return await import(file);
}
const App = {
/** Runs a particular test in legacy interop tests
* @type {(method_name: string, args: any[]=, signature: any=) => return number}
*/
call_test_method: function (method_name, args, signature) {
// note: arguments here is the array of arguments passsed to this function
if ((arguments.length > 2) && (typeof (signature) !== "string"))
throw new Error("Invalid number of arguments for call_test_method");
const fqn = "[System.Private.Runtime.InteropServices.JavaScript.Tests]System.Runtime.InteropServices.JavaScript.Tests.HelperMarshal:" + method_name;
try {
const method = App.runtime.BINDING.bind_static_method(fqn, signature);
return method.apply(null, args || []);
} catch (exc) {
console.error("exception thrown in", fqn);
throw exc;
}
},
create_function(...args) {
const code = args.pop();
const arg_count = args.length;
args.push("MONO");
args.push("BINDING");
args.push("INTERNAL");
const userFunction = new Function(...args, code);
return function (...args) {
args[arg_count + 0] = globalThis.App.runtime.MONO;
args[arg_count + 1] = globalThis.App.runtime.BINDING;
args[arg_count + 2] = globalThis.App.runtime.INTERNAL;
return userFunction(...args);
};
},
invoke_js(js_code) {
const closedEval = function (Module, MONO, BINDING, INTERNAL, code) {
return eval(code);
};
const res = closedEval(globalThis.App.runtime.Module, globalThis.App.runtime.MONO, globalThis.App.runtime.BINDING, globalThis.App.runtime.INTERNAL, js_code);
return (res === undefined || res === null || typeof res === "string")
? null
: res.toString();
}
};
globalThis.App = App; // Necessary as System.Runtime.InteropServices.JavaScript.Tests.MarshalTests (among others) call the App.call_test_method directly
async function run() {
try {
const { dotnet, exit, INTERNAL } = await loadDotnet('./dotnet.js');
mono_exit = exit;
const runArgs = await getArgs();
if (runArgs.applicationArguments.length == 0) {
mono_exit(1, "Missing required --run argument");
return;
}
console.log("Application arguments: " + runArgs.applicationArguments.join(' '));
dotnet
.withVirtualWorkingDirectory(runArgs.workingDirectory)
.withEnvironmentVariables(runArgs.environmentVariables)
.withDiagnosticTracing(runArgs.diagnosticTracing)
.withExitCodeLogging()
.withElementOnExit();
if (is_node) {
dotnet
.withEnvironmentVariable("NodeJSPlatform", process.platform)
.withAsyncFlushOnExit();
const modulesToLoad = runArgs.environmentVariables["NPM_MODULES"];
if (modulesToLoad) {
dotnet.withModuleConfig({
onConfigLoaded: (config) => {
loadNodeModules(config, INTERNAL.require, modulesToLoad)
}
})
}
}
if (is_browser) {
dotnet.withEnvironmentVariable("IsWebSocketSupported", "true");
}
if (runArgs.runtimeArgs.length > 0) {
dotnet.withRuntimeOptions(runArgs.runtimeArgs);
}
if (runArgs.debugging) {
dotnet.withDebugging(-1);
dotnet.withWaitingForDebugger(-1);
}
if (runArgs.forwardConsole) {
dotnet.withConsoleForwarding();
}
App.runtime = await dotnet.create();
App.runArgs = runArgs
console.info("Initializing.....");
for (let i = 0; i < runArgs.profilers.length; ++i) {
const init = App.runtime.Module.cwrap('mono_wasm_load_profiler_' + runArgs.profilers[i], 'void', ['string']);
init("");
}
if (runArgs.applicationArguments[0] == "--regression") {
const exec_regression = App.runtime.Module.cwrap('mono_wasm_exec_regression', 'number', ['number', 'string']);
let res = 0;
try {
res = exec_regression(10, runArgs.applicationArguments[1]);
console.log("REGRESSION RESULT: " + res);
} catch (e) {
console.error("ABORT: " + e);
console.error(e.stack);
res = 1;
}
if (res) mono_exit(1, "REGRESSION TEST FAILED");
return;
}
if (runArgs.applicationArguments[0] == "--run") {
// Run an exe
if (runArgs.applicationArguments.length == 1) {
mono_exit(1, "Error: Missing main executable argument.");
return;
}
try {
const main_assembly_name = runArgs.applicationArguments[1];
const app_args = runArgs.applicationArguments.slice(2);
const result = await App.runtime.runMain(main_assembly_name, app_args);
mono_exit(result);
} catch (error) {
if (error.name != "ExitStatus") {
mono_exit(1, error);
}
}
} else {
mono_exit(1, "Unhandled argument: " + runArgs.applicationArguments[0]);
}
} catch (err) {
mono_exit(1, err)
}
}
run();
\ No newline at end of file
......@@ -67,7 +67,7 @@ private async Task RunAsync(ILoggerFactory loggerFactory, CancellationToken toke
var runArgsJson = new RunArgumentsJson(applicationArguments: _args.AppArgs,
runtimeArguments: _args.CommonConfig.RuntimeArguments,
environmentVariables: envVars,
forwardConsole: _args.ForwardConsoleOutput ?? false,
forwardConsoleToWS: _args.ForwardConsoleOutput ?? false,
debugging: _args.CommonConfig.Debugging);
runArgsJson.Save(Path.Combine(_args.CommonConfig.AppPath, "runArgs.json"));
......
......@@ -14,7 +14,7 @@ namespace Microsoft.WebAssembly.AppHost;
string[] applicationArguments,
string[]? runtimeArguments = null,
IDictionary<string, string>? environmentVariables = null,
bool forwardConsole = false,
bool forwardConsoleToWS = false,
bool debugging = false
)
{
......
......@@ -488,15 +488,11 @@ private static bool CheckAllUpToDate(IList<PrecompileArguments> argsList)
{
// compare original assembly vs it's outputs.. all it's outputs!
string assemblyPath = args.AOTAssembly.GetMetadata("FullPath");
if (args.ProxyFiles.Any(pf => IsNewerThanOutput(assemblyPath, pf.TargetFile)))
if (args.ProxyFiles.Any(pf => Utils.IsNewerThan(assemblyPath, pf.TargetFile)))
return false;
}
return true;
static bool IsNewerThanOutput(string inFile, string outFile)
=> !File.Exists(inFile) || !File.Exists(outFile) ||
(File.GetLastWriteTimeUtc(inFile) > File.GetLastWriteTimeUtc(outFile));
}
private IEnumerable<ITaskItem> FilterOutUnmanagedAssemblies(IEnumerable<ITaskItem> assemblies)
......
......@@ -23,6 +23,10 @@ public static string GetEmbeddedResource(string file)
return reader.ReadToEnd();
}
public static bool IsNewerThan(string inFile, string outFile)
=> !File.Exists(inFile) || !File.Exists(outFile) ||
(File.GetLastWriteTimeUtc(inFile) > File.GetLastWriteTimeUtc(outFile));
public static (int exitCode, string output) RunShellCommand(
TaskLoggingHelper logger,
string command,
......@@ -233,6 +237,9 @@ public static string ComputeHash(string filepath)
#if NETCOREAPP
public static void DirectoryCopy(string sourceDir, string destDir, Func<string, bool>? predicate=null)
{
if (!Directory.Exists(destDir))
Directory.CreateDirectory(destDir);
string[] files = Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories);
foreach (string file in files)
{
......
......@@ -37,38 +37,80 @@
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" />
<ItemDefinitionGroup>
<!-- Visual Studio components must be versioned. Build tasks will fall back to cobbling a version number from
the manifest information unless it's overridden. -->
<ComponentResources Version="$(FileVersion)" />
</ItemDefinitionGroup>
<Target Name="Build" DependsOnTargets="GetAssemblyVersion;_GetVersionProps;_GenerateMsiVersionString">
<ItemGroup>
<!-- Overrides for Visual Studio setup generation. If the workload definition IDs change,
these must be updated. -->
<ComponentResources Include="microsoft-net-runtime-mono-tooling" Title=".NET Shared Mobile Build Tools"
<_ComponentResources Include="microsoft-net-runtime-mono-tooling" Title=".NET Shared Mobile Build Tools"
Description="Shared build tasks for mobile platform development."/>
<ComponentResources Include="wasm-tools" Title=".NET WebAssembly Build Tools"
<_ComponentResources Include="wasm-tools" Title=".NET WebAssembly Build Tools"
Description="Build tools for WebAssembly ahead-of-time (AoT) compilation and native linking."/>
<ComponentResources Include="microsoft-net-runtime-android" Title=".NET Android Build Tools"
<_ComponentResources Include="microsoft-net-runtime-android" Title=".NET Android Build Tools"
Description="Build tools for Android compilation and native linking."/>
<ComponentResources Include="microsoft-net-runtime-android-aot" Title=".NET Android Build Tools (AoT)"
<_ComponentResources Include="microsoft-net-runtime-android-aot" Title=".NET Android Build Tools (AoT)"
Description="Build tools for Android ahead-of-time (AoT) compilation and native linking."/>
<ComponentResources Include="microsoft-net-runtime-ios" Title=".NET iOS Build Tools"
<_ComponentResources Include="microsoft-net-runtime-ios" Title=".NET iOS Build Tools"
Description="Build tools for iOS compilation and native linking."/>
<ComponentResources Include="microsoft-net-runtime-tvos" Title=".NET tvOS Build Tools"
<_ComponentResources Include="microsoft-net-runtime-tvos" Title=".NET tvOS Build Tools"
Description="Build tools for tvOS compilation and native linking."/>
<ComponentResources Include="microsoft-net-runtime-maccatalyst" Title=".NET Mac Catalyst Build Tools"
<_ComponentResources Include="microsoft-net-runtime-maccatalyst" Title=".NET Mac Catalyst Build Tools"
Description="Build tools for Mac Catalyst compilation and native linking."/>
<ComponentResources Include="runtimes-ios" Title=".NET iOS Runtimes"
<_ComponentResources Include="runtimes-ios" Title=".NET iOS Runtimes"
Description=".NET runtime components for iOS execution."/>
<ComponentResources Include="runtimes-tvos" Title=".NET tvOS Build Tools"
<_ComponentResources Include="runtimes-tvos" Title=".NET tvOS Build Tools"
Description=".NET runtime components for tvOS execution."/>
<ComponentResources Include="runtimes-maccatalyst" Title=".NET Mac Catalyst Build Tools"
<_ComponentResources Include="runtimes-maccatalyst" Title=".NET Mac Catalyst Build Tools"
Description=".NET runtime components for Mac Catalyst execution."/>
<ComponentResources Include="runtimes-windows" Title=".NET Windows Runtimes"
<_ComponentResources Include="runtimes-windows" Title=".NET Windows Runtimes"
Description=".NET runtime components for Windows execution."/>
<_ComponentResources Include="microsoft-net-runtime-mono-tooling-net7" Title=".NET 7.0 Shared Mobile Build Tools"
Description="Shared build tasks for mobile platform development."/>
<_ComponentResources Include="wasm-tools-net7" Title=".NET 7.0 WebAssembly Build Tools"
Description="Build tools for net6.0 WebAssembly ahead-of-time (AoT) compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-android-net7" Title=".NET 7.0 Android Build Tools"
Description="Build tools for net6.0 Android compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-android-aot-net7" Title=".NET 7.0 Android Build Tools (AoT)"
Description="Build tools for net6.0 Android ahead-of-time (AoT) compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-ios-net7" Title=".NET 7.0 iOS Build Tools"
Description="Build tools for net7.0 iOS compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-tvos-net7" Title=".NET 7.0 tvOS Build Tools"
Description="Build tools for net7.0 tvOS compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-maccatalyst-net7" Title=".NET 7.0 Mac Catalyst Build Tools"
Description="Build tools for net7.0 Mac Catalyst compilation and native linking."/>
<_ComponentResources Include="runtimes-ios-net7" Title=".NET 7.0 iOS Runtimes"
Description=".NET 7.0 runtime components for iOS execution."/>
<_ComponentResources Include="runtimes-tvos-net7" Title=".NET 7.0 tvOS Build Tools"
Description=".NET 7.0 runtime components for tvOS execution."/>
<_ComponentResources Include="runtimes-maccatalyst-net7" Title=".NET 7.0 Mac Catalyst Build Tools"
Description=".NET 7.0 runtime components for Mac Catalyst execution."/>
<_ComponentResources Include="runtimes-windows-net7" Title=".NET 7.0 Windows Runtimes"
Description=".NET 7.0 runtime components for Windows execution."/>
<_ComponentResources Include="microsoft-net-runtime-mono-tooling-net6" Title=".NET 6.0 Shared Mobile Build Tools"
Description="Shared build tasks for mobile platform development."/>
<_ComponentResources Include="wasm-tools-net6" Title=".NET 6.0 WebAssembly Build Tools"
Description="Build tools for net6.0 WebAssembly ahead-of-time (AoT) compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-android-net6" Title=".NET 6.0 Android Build Tools"
Description="Build tools for net6.0 Android compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-android-aot-net6" Title=".NET 6.0 Android Build Tools (AoT)"
Description="Build tools for net6.0 Android ahead-of-time (AoT) compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-ios-net6" Title=".NET 6.0 iOS Build Tools"
Description="Build tools for net6.0 iOS compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-tvos-net" Title=".NET 6.0 tvOS Build Tools"
Description="Build tools for net6.0 tvOS compilation and native linking."/>
<_ComponentResources Include="microsoft-net-runtime-maccatalyst-net6" Title=".NET 6.0 Mac Catalyst Build Tools"
Description="Build tools for net6.0 Mac Catalyst compilation and native linking."/>
<_ComponentResources Include="runtimes-ios-net6" Title=".NET 6.0 iOS Runtimes"
Description=".NET 6.0 runtime components for iOS execution."/>
<_ComponentResources Include="runtimes-tvos-net6" Title=".NET 6.0 tvOS Build Tools"
Description=".NET 6.0 runtime components for tvOS execution."/>
<_ComponentResources Include="runtimes-maccatalyst-net6" Title=".NET 6.0 Mac Catalyst Build Tools"
Description=".NET 6.0 runtime components for Mac Catalyst execution."/>
<_ComponentResources Include="runtimes-windows-net6" Title=".NET 6.0 Windows Runtimes"
Description=".NET 6.0 runtime components for Windows execution."/>
<ComponentResources Include="@(_ComponentResources)" Version="$(FileVersion)"/>
</ItemGroup>
<!-- BAR requires having version information in blobs -->
......@@ -79,8 +121,11 @@
<!-- Shorten package names to avoid long path issues in Visual Studio -->
<ItemGroup>
<!-- These need to be in order - matching rules will try in order. -->
<ShortNames Include="Microsoft.NET.Workload.Mono.ToolChain.net">
<Replacement>Mono.</Replacement>
</ShortNames>
<ShortNames Include="Microsoft.NET.Workload.Mono.ToolChain.">
<Replacement>Mono</Replacement>
<Replacement>Mono.</Replacement>
</ShortNames>
<ShortNames Include="microsoft.netcore.app.runtime;Microsoft.NETCore.App.Runtime;microsoft.net.runtime;Microsoft.NET.Runtime">
<Replacement>Microsoft</Replacement>
......@@ -91,10 +136,11 @@
</ItemGroup>
<ItemGroup>
<ManifestPackages Include="$(PackageSource)Microsoft.NET.Workload.Mono.ToolChain.Manifest-*.nupkg" MsiVersion="$(MsiVersion)"/>
<ManifestPackages Include="$(PackageSource)Microsoft.NET.Workload.Mono.ToolChain.*Manifest-*.nupkg" MsiVersion="$(MsiVersion)"/>
</ItemGroup>
<CreateVisualStudioWorkload BaseIntermediateOutputPath="$(WorkloadIntermediateOutputPath)"
AllowMissingPacks="True"
BaseOutputPath="$(WorkloadOutputPath)"
ComponentResources="$(ComponentResources)"
PackageSource="$(PackageSource)"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册