|
| area-Setup | @dleeapho | @NikolaMilosavljevic @dleeapho | Distro-specific (Linux, Mac and Windows) setup packages and msi files |
-| area-Single-File | @agocke | @vitek-karas | |
+| area-Single-File | @agocke | @vitek-karas @vsadov | |
| area-Snap | @dleeapho | @dleeapho @leecow @MichaelSimons | |
| area-System.Buffers | @jeffhandley | @pgovind @tannergooding | Consultants: @GrabYourPitchforks |
| area-System.CodeDom | @jeffhandley | @buyaa-n @joperezr @krwq | |
diff --git a/docs/coding-guidelines/coding-style.md b/docs/coding-guidelines/coding-style.md
index 38cc58c620aa7..856ce8f5bb4ea 100644
--- a/docs/coding-guidelines/coding-style.md
+++ b/docs/coding-guidelines/coding-style.md
@@ -23,7 +23,7 @@ The general rule we follow is "use Visual Studio defaults".
Consider enabling "View White Space (Ctrl+R, Ctrl+W)" or "Edit -> Advanced -> View White Space" if using Visual Studio to aid detection.
9. If a file happens to differ in style from these guidelines (e.g. private members are named `m_member`
rather than `_member`), the existing style in that file takes precedence.
-10. We only use `var` when it's obvious what the variable type is (e.g. `var stream = new FileStream(...)` not `var stream = OpenStandardInput()`).
+10. We only use `var` when the type is explicitly named on the right-hand side, typically due to either `new` or an explicit cast, e.g. `var stream = new FileStream(...)` not `var stream = OpenStandardInput()`.
11. We use language keywords instead of BCL types (e.g. `int, string, float` instead of `Int32, String, Single`, etc) for both type references as well as method calls (e.g. `int.Parse` instead of `Int32.Parse`). See issue [#13976](https://github.com/dotnet/runtime/issues/13976) for examples.
12. We use PascalCasing to name all our constant local variables and fields. The only exception is for interop code where the constant value should exactly match the name and value of the code you are calling via interop.
13. We use PascalCasing for all method names, including local functions.
@@ -35,6 +35,7 @@ The general rule we follow is "use Visual Studio defaults".
- Never use single-line form (for example: `if (source == null) throw new ArgumentNullException("source");`)
- Using braces is always accepted, and required if any block of an `if`/`else if`/.../`else` compound statement uses braces or if a single statement body spans multiple lines.
- Braces may be omitted only if the body of *every* block associated with an `if`/`else if`/.../`else` compound statement is placed on a single line.
+19. Make all internal and private types static or sealed unless derivation from them is required. As with any implementation detail, they can be changed if/when derivation is required in the future.
An [EditorConfig](https://editorconfig.org "EditorConfig homepage") file (`.editorconfig`) has been provided at the root of the runtime repository, enabling C# auto-formatting conforming to the above guidelines.
diff --git a/docs/coding-guidelines/project-guidelines.md b/docs/coding-guidelines/project-guidelines.md
index 556c9ac6d9ae7..c0a79248d01c5 100644
--- a/docs/coding-guidelines/project-guidelines.md
+++ b/docs/coding-guidelines/project-guidelines.md
@@ -142,6 +142,9 @@ All libraries should use `` for all their references
Other target frameworks than .NETCoreApp latest (i.e. `netstandard2.0`, `net461`, `netcoreapp3.0`) should use ProjectReference items to reference dependencies.
+### src\ILLink
+Contains the files used to direct the trimming tool. See [ILLink files](../workflow/trimming/ILLink-files.md).
+
### src output
All src outputs are under
diff --git a/docs/design/coreclr/botr/readytorun-format.md b/docs/design/coreclr/botr/readytorun-format.md
index 665e532c6d216..f8774aa2cb9c0 100644
--- a/docs/design/coreclr/botr/readytorun-format.md
+++ b/docs/design/coreclr/botr/readytorun-format.md
@@ -5,6 +5,7 @@ Revisions:
* 1.1 - [Jan Kotas](https://github.com/jkotas) - 2015
* 3.1 - [Tomas Rylek](https://github.com/trylek) - 2019
* 4.1 - [Tomas Rylek](https://github.com/trylek) - 2020
+* 5.3 - [Tomas Rylek](https://github.com/trylek) - 2021
# Introduction
@@ -161,6 +162,8 @@ The following section types are defined and described later in this document:
| InliningInfo2 | 114 | Image (added in V4.1)
| ComponentAssemblies | 115 | Image (added in V4.1)
| OwnerCompositeExecutable | 116 | Image (added in V4.1)
+| PgoInstrumentationData | 117 | Image (added in V5.2)
+| ManifestAssemblyMvids | 118 | Image (added in V5.3)
## ReadyToRunSectionType.CompilerIdentifier
@@ -540,6 +543,17 @@ the `OwnerCompositeExecutable` section that contains a UTF-8 string encoding the
composite R2R executable this MSIL belongs to with extension (without path). Runtime uses this
information to locate the composite R2R executable with the compiled native code when loading the MSIL.
+## ReadyToRunSectionType.PgoInstrumentationData (v5.2+)
+
+**TODO**: document PGO instrumentation data
+
+## ReadyToRunSectionType.ManifestAssemblyMvids (v5.3+)
+
+This section is a binary array of 16-byte MVID records, one for each assembly in the manifest metadata.
+Number of assemblies stored in the manifest metadata is equal to the number of MVID records in the array.
+MVID records are used at runtime to verify that the assemblies loaded match those referenced by the
+manifest metadata representing the versioning bubble.
+
# Native Format
Native format is set of encoding patterns that allow persisting type system data in a binary format that is
diff --git a/docs/design/features/default-interface-methods.md b/docs/design/features/default-interface-methods.md
index 0e9e761ef1095..f5e2de0dfcd14 100644
--- a/docs/design/features/default-interface-methods.md
+++ b/docs/design/features/default-interface-methods.md
@@ -1,53 +1 @@
-# Default interface methods
-
-Default interface methods is a runtime feature designed to support the [default interface methods](https://github.com/dotnet/csharplang/blob/21dc9561aeffc87a31da44588ce7ed6930ee3333/proposals/default-interface-methods.md) C# language feature posed for C# 8.0.
-
-The major changes are:
-
-* Interfaces are now allowed to have instance methods (both virtual and non-virtual). Previously we only allowed abstract virtual methods.
- * Interfaces obviously still can't have instance fields.
-* Interface methods are allowed to MethodImpl other interface methods the interface _requires_ (but we require the `MethodImpl`s to be final to keep things simple) - i.e. an interface is allowed to provide (or override) an implementation of another interface's method
-
-This speclet attempts to formalize the major places within the [ECMA-335 specification](https://www.ecma-international.org/publications/standards/Ecma-335.htm) that would need updating, should we rev the spec in the future.
-
-It doesn't attempt to be an exhaustive list - there are many places within the spec that mention interfaces being just contracts that don't define implementation. This list should be complete enough to list places where interesting _implementation differences_ happen.
-
-## Changes to the ECMA-335 specification
-
-**Section** "I.8.5.3.2 Accessibility of members and nested types" is extended so that the definition of "referents that support the same type" includes "an exact type and all of the types that inherit from it, or implement it as an interface (either explicitly or implicitly)".
-
-Examples:
-`class Base : IFoo {}` / `class Derived : Base {}`: `Base` can access protected members of `IFoo`. `Derived` can also access protected members of `IFoo` because it inherits the interface.
-`class Outer : IFoo { class Nested { } }`: `Nested` can access protected members of `IFoo`.
-`interface IBar : IFoo { }`: `IBar` can access protected members of `IFoo` (same rules as for classes)
-
-TODO: since we now allow protected/internal members on interfaces, do we need to adjust the existing interface method resolution algorithm to do accessibility checks (can a method in a class that can't access the interface method implement the method)? CoreCLR seems to let us do things like override internal methods from a different assembly so this doesn't seem to be enforced for classes either.
-
-**Section** "I.8.9.5 Class type definition" [Note: the section on type initializers within the spec only seems to apply to object types and value types, not to interfaces, but the CLR has historically supported running .cctors when accessing static members of interfaces and the spec does mention interface type initializers as well. We might want to move the part about type initializers out of the section. End note.] The semantics of when and what triggers the execution of type initialization methods will be updated so that we support the strict semantic of type initializers when executing instance methods on interfaces (strict semantic currently only covers accessing static methods on interfaces):
-Bullet 4 "If not marked BeforeFieldInit", item "c" is amended to include instance methods on interfaces, in addition to the existing value types.
-
-**Section** "II.12 Semantics of interfaces" is extended to allow instance methods on interfaces.
-
-**Section** "II.12.1 Implementing interfaces" is extended to say all virtual instance methods defined on an interface must be abstract, be marked with newslot and not have an associated MethodImpl which uses the method as its Impl, or final without newslot and with a MethodImpl that uses the method as its Impl entry.
-
-**Section** "II.12.2 Implementing virtual methods on interfaces" is extended by an additional mechanism to provide interface method implementation - through inheritance of an existing implementation from an implemented interface.
-
-[The general gist of the implementation is that default interface methods (either the slot defining method, or a MethodImpl for the interface method on another interface type) is always used as a fallback - only if the "old rules" didn't find an implementation, we apply the new rules and try to find an implementation on one of the interfaces.]
-The algorithm is amended as follows:
-* The existing algorithm to build interface table on the open type is left intact up to the last step "If the current class is not abstract and there are any interface methods that still have empty slots (i.e. slots with empty lists) for this class and all classes in its inheritance chain, then the program is invalid.". This is amended to become "If the current class is not abstract and there are any interface methods that still have empty slots (i.e. slots with empty lists) and the slot defining method is not abstract and there is no MethodImpl for the slot within the interfaces of the type's implicit or explicit interfaces, then the program is invalid." [Note: the default interface method resolution is disconnected from the interface table on the open type, as defined by the spec. The purpose of this change is not to fail loading at this stage.]
-* The runtime resolution algorithm "When an interface method is invoked" is amended:
- * The original step 4 is moved after the following steps:
- * Create an empty list of candidate implementations of the interface method.
- * If the interface method itself is not abstract, add it to the list.
- * Apply all MethodImpls specified in the list of interfaces implicitly implemented by the runtime class of the instance through which the interface method is invoked and add the methods to the list.
- * Go over the owning types of each of the candidate methods in the list. If the owning type is less concrete than some other type in the list (there is another method in the list whose owning type requires the less concrete type), remove it from the list.
- * If there's more than one method in the list, throw AmbiguousImplementationException
- * If there's exactly one method in the list and the method is not abstract, call that method
- * If there's exactly one method in the list but the method is abstract, throw `EntryPointNotFoundException`.
- * If there's no method in the list and the interface is variant, repeat the above algorithm, looking for a variant match. Return the first variant match provided by a most specific interface.
-
-**Section** "III.2.1 constrained. prefix" the paragraph starting with "This last case can only occur when method was defined on `System.Object`, `System.ValueType`, or `System.Enum`" is extended to also cover default interface method implementation. In the case the interface method implementation is provided by an interface, the implicit boxing becomes _observable_ to the program.
-
-**Section** "III.4.2 callvirt" is extended to allow throwing `AmbiguousImplementationException` if the implementation of the interface method resolves at runtime to more than one default interface method. It's also extended to specify throwing `EntryPointNotFoundException` if the default interface implementation is abstract.
-
-**Section** "III.4.18 ldvirtftn" is extended to allow throwing `AmbiguousImplementationException` if the implementation of the interface method resolves at runtime to more than one default interface method. It's also extended to specify throwing `EntryPointNotFoundException` if the default interface implementation is abstract.
+The details previously held in this document have been moved to [Ecma-335-Augments](../specs/Ecma-335-Augments.md)
diff --git a/docs/design/features/dotnet-pgo.md b/docs/design/features/dotnet-pgo.md
index 04774cd58cde5..6eac92a7c3283 100644
--- a/docs/design/features/dotnet-pgo.md
+++ b/docs/design/features/dotnet-pgo.md
@@ -44,7 +44,7 @@ set COMPLUS_TC_QuickJitForLoops=
set COMPLUS_TC_CallCountThreshold=
set COMPLUS_ReadyToRun=
-dotnet-pgo --trace trace.nettrace --output trace.mibc
+dotnet-pgo create-mibc --trace trace.nettrace --output trace.mibc
dotnet publish --runtime win-x64 -p:PublishReadyToRun=true -p:ReadyToRunOptimizationData=trace.mibc
```
diff --git a/docs/design/specs/Ecma-335-Augments.md b/docs/design/specs/Ecma-335-Augments.md
index df4e429912a11..3ba4d98e7fe38 100644
--- a/docs/design/specs/Ecma-335-Augments.md
+++ b/docs/design/specs/Ecma-335-Augments.md
@@ -366,3 +366,57 @@ In addition to the guarantees that apply to all type initializers, the CLI shall
2. A module initializer shall run exactly once for any given module unless explicitly called by user code.
3. No method other than those called directly or indirectly from the module initializer will be able to access the types, methods, or data in a module before its initializer completes execution.
+
+## Default Interface Methods
+
+We propose to allow default implementations of interface methods.
+
+Default interface methods is a runtime feature designed to support the [default interface methods](https://github.com/dotnet/csharplang/blob/main/proposals/csharp-8.0/default-interface-methods.md) C# 8.0 language feature.
+
+The major changes are:
+
+* Interfaces are now allowed to have instance methods (both virtual and non-virtual). Previously we only allowed abstract virtual methods.
+ * Interfaces obviously still can't have instance fields.
+* Interface methods are allowed to MethodImpl other interface methods the interface _requires_ (but we require the `MethodImpl`s to be final to keep things simple) - i.e. an interface is allowed to provide (or override) an implementation of another interface's method
+
+This list of changes to the specification doesn't attempt to be an exhaustive list - there are many places within the spec that mention interfaces being just contracts that don't define implementation. This list should be complete enough to list places where interesting _implementation differences_ happen.
+
+#### Proposed specification change
+
+**Section** "I.8.5.3.2 Accessibility of members and nested types" is extended so that the definition of "referents that support the same type" includes "an exact type and all of the types that inherit from it, or implement it as an interface (either explicitly or implicitly)".
+
+Examples:
+`class Base : IFoo {}` / `class Derived : Base {}`: `Base` can access protected members of `IFoo`. `Derived` can also access protected members of `IFoo` because it inherits the interface.
+`class Outer : IFoo { class Nested { } }`: `Nested` can access protected members of `IFoo`.
+`interface IBar : IFoo { }`: `IBar` can access protected members of `IFoo` (same rules as for classes)
+
+TODO: since we now allow protected/internal members on interfaces, do we need to adjust the existing interface method resolution algorithm to do accessibility checks (can a method in a class that can't access the interface method implement the method)? CoreCLR seems to let us do things like override internal methods from a different assembly so this doesn't seem to be enforced for classes either.
+
+**Section** "I.8.9.5 Class type definition" [Note: the section on type initializers within the spec only seems to apply to object types and value types, not to interfaces, but the CLR has historically supported running .cctors when accessing static members of interfaces and the spec does mention interface type initializers as well. We might want to move the part about type initializers out of the section. End note.] The semantics of when and what triggers the execution of type initialization methods will be updated so that we support the strict semantic of type initializers when executing instance methods on interfaces (strict semantic currently only covers accessing static methods on interfaces):
+Bullet 4 "If not marked BeforeFieldInit", item "c" is amended to include instance methods on interfaces, in addition to the existing value types.
+
+**Section** "II.12 Semantics of interfaces" is extended to allow instance methods on interfaces.
+
+**Section** "II.12.1 Implementing interfaces" is extended to say all virtual instance methods defined on an interface must be abstract, be marked with newslot and not have an associated MethodImpl which uses the method as its Impl, or final without newslot and with a MethodImpl that uses the method as its Impl entry.
+
+**Section** "II.12.2 Implementing virtual methods on interfaces" is extended by an additional mechanism to provide interface method implementation - through inheritance of an existing implementation from an implemented interface.
+
+[The general gist of the implementation is that default interface methods (either the slot defining method, or a MethodImpl for the interface method on another interface type) is always used as a fallback - only if the "old rules" didn't find an implementation, we apply the new rules and try to find an implementation on one of the interfaces.]
+The algorithm is amended as follows:
+* The existing algorithm to build interface table on the open type is left intact up to the last step "If the current class is not abstract and there are any interface methods that still have empty slots (i.e. slots with empty lists) for this class and all classes in its inheritance chain, then the program is invalid.". This is amended to become "If the current class is not abstract and there are any interface methods that still have empty slots (i.e. slots with empty lists) and the slot defining method is not abstract and there is no MethodImpl for the slot within the interfaces of the type's implicit or explicit interfaces, then the program is invalid." [Note: the default interface method resolution is disconnected from the interface table on the open type, as defined by the spec. The purpose of this change is not to fail loading at this stage.]
+* The runtime resolution algorithm "When an interface method is invoked" is amended:
+ * The original step 4 is moved after the following steps:
+ * Create an empty list of candidate implementations of the interface method.
+ * If the interface method itself is not abstract, add it to the list.
+ * Apply all MethodImpls specified in the list of interfaces implicitly implemented by the runtime class of the instance through which the interface method is invoked and add the methods to the list.
+ * Go over the owning types of each of the candidate methods in the list. If the owning type is less concrete than some other type in the list (there is another method in the list whose owning type requires the less concrete type), remove it from the list.
+ * If there's more than one method in the list, throw AmbiguousImplementationException
+ * If there's exactly one method in the list and the method is not abstract, call that method
+ * If there's exactly one method in the list but the method is abstract, throw `EntryPointNotFoundException`.
+ * If there's no method in the list and the interface is variant, repeat the above algorithm, looking for a variant match. Return the first variant match provided by a most specific interface.
+
+**Section** "III.2.1 constrained. prefix" the paragraph starting with "This last case can only occur when method was defined on `System.Object`, `System.ValueType`, or `System.Enum`" is extended to also cover default interface method implementation. In the case the interface method implementation is provided by an interface, the implicit boxing becomes _observable_ to the program.
+
+**Section** "III.4.2 callvirt" is extended to allow throwing `AmbiguousImplementationException` if the implementation of the interface method resolves at runtime to more than one default interface method. It's also extended to specify throwing `EntryPointNotFoundException` if the default interface implementation is abstract.
+
+**Section** "III.4.18 ldvirtftn" is extended to allow throwing `AmbiguousImplementationException` if the implementation of the interface method resolves at runtime to more than one default interface method. It's also extended to specify throwing `EntryPointNotFoundException` if the default interface implementation is abstract.
diff --git a/docs/infra/buildtriage.md b/docs/infra/buildtriage.md
index 53b51bb8affba..6ae47e20f953b 100644
--- a/docs/infra/buildtriage.md
+++ b/docs/infra/buildtriage.md
@@ -16,31 +16,13 @@ Please make sure that you are part of the following groups before you start the
Unfortunately, the teams channel's members need to be listed individually. Ping @ViktorHofer if you need access.
-## Tracking Build Failures
-All the CI failures can be tracked through the CI Council dashboards i.e. [Public](https://dev.azure.com/dnceng/public/_dashboards/dashboard/40ac4990-3498-4b3a-85dd-2ffde961d672), [Internal](https://dev.azure.com/dnceng/internal/_dashboards/dashboard/e1bb572d-a2b0-488f-a58a-54c73a547f0d).
-We have different dashboards for public (Rolling & PR Builds) and internal builds.
-
-In addition to the dashboards, official build failure notifications are sent to the internal runtime infrastructure email alias.
-
-For each of these mail notifications, a matching issue should exist (either in the dotnet/runtime repository or in dotnet/core-eng or dotnet/arcade). The person triaging build failures should reply to the email with a link to the issue to let everyone know it is triaged. This guarantees that we are following-up on infrastructure issues immediately. If a build failure's cause isn't trivial to identify, consider looping in dnceng.
-
-Tests are not run during the internal builds. Publishing and signing steps are run only during internal builds. Rolling builds run tests for the full matrix.
-
-Any consistently failing test where the fix is not in pipeline should be promptly disabled on the CI. Don't leave tests failing in CI while you investigate; it's too disruptive for the rest of the team.
-
-For new issues, try to provide a [runfo](https://runfo.azurewebsites.net/) search which will make it easy to isolate repeated instances of that failure.
-
-Contact @chcosta if you are having any trouble accessing the dashboards.
-Contact @Chrisboh if you don't have the calendar invite for the CI Council meeting.
-Contact @jaredpar if you are having any trouble with runfo, site or utility.
-
-## Ongoing Issues
-
-All the issues causing the builds to fail should be marked with [`blocking-clean-ci`](https://github.com/dotnet/runtime/issues?q=is%3Aissue+is%3Aopen+label%3Ablocking-clean-ci) label.
-Any issues causing build breaks in the official build should be marked with [`blocking-clean-official`](https://github.com/dotnet/runtime/issues?q=is%3Aissue+is%3Aopen+label%3Ablocking-clean-official).
-It helps in tracking issues effectively.
-
-The main meta-bug linking to currently tracked issues is [here](https://github.com/dotnet/runtime/issues/702).
+## Responsibilities
+- Official build failure notifications are sent to the runtime infrastructure mail alias. For each of these notifications, a matching issue should exist (either in the dotnet/runtime repository or in dotnet/core-eng or dotnet/arcade). The person triaging build failures should reply to the email with a link to the issue to let everyone know it is triaged. This guarantees that we are following-up on infrastructure issues immediately. If a build failure's cause isn't trivial to identify, consider looping in dnceng.
+- The CI Council dashboards should be used as well to track CI failures, i.e. [Public](https://dev.azure.com/dnceng/public/_dashboards/dashboard/40ac4990-3498-4b3a-85dd-2ffde961d672), [Internal](https://dev.azure.com/dnceng/internal/_dashboards/dashboard/e1bb572d-a2b0-488f-a58a-54c73a547f0d). There are different dashboards for public (batched rolling) and internal builds. Tests are not run as part of internal builds whereas publishing and signing steps are exclusively run as part of internal builds. Public rolling builds run tests for the full matrix of supported configurations.
+- Any consistently failing test where the fix is not in pipeline should be promptly disabled on the CI. Don't leave tests failing in CI while you investigate; it's too disruptive for the rest of the team!
+- All the issues causing the builds to fail should be marked with [`blocking-clean-ci`](https://github.com/dotnet/runtime/issues?q=is%3Aissue+is%3Aopen+label%3Ablocking-clean-ci) label. Any issues causing build breaks in the official build should be marked with [`blocking-clean-official`](https://github.com/dotnet/runtime/issues?q=is%3Aissue+is%3Aopen+label%3Ablocking-clean-official). For new issues, try to provide a [runfo](https://runfo.azurewebsites.net/) search which will make it easy to isolate repeated instances of that failure. It helps in tracking issues effectively.
+- Issues listed in the [Infrastructure - Status/Health](https://github.com/dotnet/runtime/issues/702) meta-issue (which is automatically updated based on the blocking-clean-* labels) should be triaged at least once per week to make sure that it only lists issues which are currently affecting CI. Triaging refers to either closing the issue if it doesn't apply anymore or removing the blocking-clean-* label in case tests are disabled.
+- Attend the weekly CI Council meeting and represent the dotnet/runtime repository.
## Some helpful resources
- [runfo Website](https://runfo.azurewebsites.net/)
@@ -50,14 +32,6 @@ The main meta-bug linking to currently tracked issues is [here](https://github.c
- [Public Build Definition](https://dev.azure.com/dnceng/public/_build?definitionId=686)
- [Runtime dependency status](https://maestro-prod.westus2.cloudapp.azure.com/1296/https:%2F%2Fgithub.com%2Fdotnet%2Fruntime/latest/graph)
-## Build Rotation for upcoming months
-
-| Month | Alias |
-|-------|-----------|
-| September 2020 | @directhex |
-| October 2020 | @jkoritzinsky |
-| November 2020 | @aik-jahoda |
-| December 2020 | @akoeplinger |
-| January 2021 | @hoyosjs |
-| February 2021 | @anipik |
-| March 2021 | @directhex |
+Contact @chcosta if you are having any trouble accessing the dashboards.
+Contact @Chrisboh if you don't have the calendar invite for the CI Council meeting.
+Contact @jaredpar if you are having any trouble with runfo, site or utility.
diff --git a/docs/project/dogfooding.md b/docs/project/dogfooding.md
index ed3e2f741cb0a..c01466b2f42ec 100644
--- a/docs/project/dogfooding.md
+++ b/docs/project/dogfooding.md
@@ -27,7 +27,7 @@ To use nightly builds of the entire runtime, follow the steps given in the rest
## Install prerequisites
-1. Acquire the latest nightly .NET SDK by downloading and extracting a zip/tarball or using an installer from the [installers and binaries table in dotnet/installer](https://github.com/dotnet/installer#installers-and-binaries) (for example, https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x64.zip).
+1. Acquire the latest nightly .NET SDK by downloading and extracting a zip/tarball or using an installer from the [installers and binaries table in dotnet/installer](https://github.com/dotnet/installer#installers-and-binaries) (for example, https://aka.ms/dotnet/6.0/daily/dotnet-sdk-win-x64.zip).
2. By default, the dotnet CLI will use the globally installed SDK if it matches the major/minor version you request and has a higher revision. To force it to use a locally installed SDK, you must set an environment variable `DOTNET_MULTILEVEL_LOOKUP=0` in your shell. You can use `dotnet --info` to verify what version of the Shared Framework it is using.
@@ -161,23 +161,23 @@ $ bin\Debug\net6.0\win-x64\publish\App.exe
| Platform | Main |
| --- | :---: |
-| **Windows (x64)** | [![][win-x64-badge-6.0.X]][win-x64-version-6.0.X] [Installer][win-x64-installer-6.0.X] ([Checksum][win-x64-installer-checksum-6.0.X]) [zip][win-x64-zip-6.0.X] ([Checksum][win-x64-zip-checksum-6.0.X]) [NetHost (zip)][win-x64-nethost-zip-6.0.X] [Symbols (zip)][win-x64-symbols-zip-6.0.X] |
-| **Windows (x86)** | [![][win-x86-badge-6.0.X]][win-x86-version-6.0.X] [Installer][win-x86-installer-6.0.X] ([Checksum][win-x86-installer-checksum-6.0.X]) [zip][win-x86-zip-6.0.X] ([Checksum][win-x86-zip-checksum-6.0.X]) [NetHost (zip)][win-x86-nethost-zip-6.0.X] [Symbols (zip)][win-x86-symbols-zip-6.0.X] |
-| **Windows (arm64)** | [![][win-arm64-badge-6.0.X]][win-arm64-version-6.0.X] [Installer][win-arm64-installer-6.0.X] ([Checksum][win-arm64-installer-checksum-6.0.X]) [zip][win-arm64-zip-6.0.X] ([Checksum][win-arm64-zip-checksum-6.0.X]) [NetHost (zip)][win-arm64-nethost-zip-6.0.X] [Symbols (zip)][win-arm64-symbols-zip-6.0.X] |
-| **macOS (x64)** | [![][osx-x64-badge-6.0.X]][osx-x64-version-6.0.X] [Installer][osx-x64-installer-6.0.X] ([Checksum][osx-x64-installer-checksum-6.0.X]) [tar.gz][osx-x64-targz-6.0.X] ([Checksum][osx-x64-targz-checksum-6.0.X]) [NetHost (tar.gz)][osx-x64-nethost-targz-6.0.X] [Symbols (tar.gz)][osx-x64-symbols-targz-6.0.X] |
-| **macOS (arm64)** | [![][osx-arm64-badge-6.0.X]][osx-arm64-version-6.0.X] [Installer][osx-arm64-installer-6.0.X] ([Checksum][osx-arm64-installer-checksum-6.0.X]) [tar.gz][osx-arm64-targz-6.0.X] ([Checksum][osx-arm64-targz-checksum-6.0.X]) [NetHost (tar.gz)][osx-arm64-nethost-targz-6.0.X] [Symbols (tar.gz)][osx-arm64-symbols-targz-6.0.X] |
-| **Linux (x64)** (for glibc based OS) | [![][linux-x64-badge-6.0.X]][linux-x64-version-6.0.X] [tar.gz][linux-x64-targz-6.0.X] ([Checksum][linux-x64-targz-checksum-6.0.X]) [NetHost (tar.gz)][linux-x64-nethost-targz-6.0.X] [Symbols (tar.gz)][linux-x64-symbols-targz-6.0.X] |
-| **Linux (armhf)** (for glibc based OS) | [![][linux-arm-badge-6.0.X]][linux-arm-version-6.0.X] [tar.gz][linux-arm-targz-6.0.X] ([Checksum][linux-arm-targz-checksum-6.0.X]) [NetHost (tar.gz)][linux-arm-nethost-targz-6.0.X] [Symbols (tar.gz)][linux-arm-symbols-targz-6.0.X] |
-| **Linux (arm64)** (for glibc based OS) | [![][linux-arm64-badge-6.0.X]][linux-arm64-version-6.0.X] [tar.gz][linux-arm64-targz-6.0.X] ([Checksum][linux-arm64-targz-checksum-6.0.X]) [NetHost (tar.gz)][linux-arm64-nethost-targz-6.0.X] [Symbols (tar.gz)][linux-arm64-symbols-targz-6.0.X] |
-| **Linux-musl (x64)** | [![][linux-musl-x64-badge-6.0.X]][linux-musl-x64-version-6.0.X] [tar.gz][linux-musl-x64-targz-6.0.X] ([Checksum][linux-musl-x64-targz-checksum-6.0.X]) [NetHost (tar.gz)][linux-musl-x64-nethost-targz-6.0.X] [Symbols (tar.gz)][linux-musl-x64-symbols-targz-6.0.X] |
-| **Linux-musl (arm)** | [![][linux-musl-arm-badge-6.0.X]][linux-musl-arm-version-6.0.X] [tar.gz][linux-musl-arm-targz-6.0.X] ([Checksum][linux-musl-arm-targz-checksum-6.0.X]) [NetHost (tar.gz)][linux-musl-arm-nethost-targz-6.0.X] [Symbols (tar.gz)][linux-musl-arm-symbols-targz-6.0.X] |
-| **Linux-musl (arm64)** | [![][linux-musl-arm64-badge-6.0.X]][linux-musl-arm64-version-6.0.X] [tar.gz][linux-musl-arm64-targz-6.0.X] ([Checksum][linux-musl-arm64-targz-checksum-6.0.X]) [NetHost (tar.gz)][linux-musl-arm64-nethost-targz-6.0.X] [Symbols (tar.gz)][linux-musl-arm64-symbols-targz-6.0.X] |
-| **Dpkg Based Systems (x64)** | [![][deb-badge-6.0.X]][deb-version-6.0.X] [Runtime-Deps][deb-runtime-deps-6.0.X] ([Checksum][deb-runtime-deps-checksum-6.0.X]) [Host][deb-host-6.0.X] ([Checksum][deb-host-checksum-6.0.X]) [App Hosts][deb-apphost-pack-6.0.X] ([Checksum][deb-apphost-pack-checksum-6.0.X]) [Host FX Resolver][deb-hostfxr-6.0.X] ([Checksum][deb-hostfxr-checksum-6.0.X]) [Targeting Pack][deb-targeting-pack-6.0.X] ([Checksum][deb-targeting-pack-checksum-6.0.X]) [Shared Framework][deb-sharedfx-6.0.X] ([Checksum][deb-sharedfx-checksum-6.0.X]) |
-| **CentOS 7 (x64)** | [![][centos-7-badge-6.0.X]][centos-7-version-6.0.X] [Runtime-Deps][centos-7-runtime-deps-6.0.X] ([Checksum][centos-7-runtime-deps-checksum-6.0.X]) [Host][centos-7-host-6.0.X] ([Checksum][centos-7-host-checksum-6.0.X]) [App Hosts][centos-7-apphost-pack-6.0.X] ([Checksum][centos-7-apphost-pack-checksum-6.0.X]) [Host FX Resolver][centos-7-hostfxr-6.0.X] ([Checksum][centos-7-hostfxr-checksum-6.0.X]) [Targeting Pack][centos-7-targeting-pack-6.0.X] ([Checksum][centos-7-targeting-pack-checksum-6.0.X]) [Shared Framework][centos-7-sharedfx-6.0.X] ([Checksum][centos-7-sharedfx-checksum-6.0.X]) |
-| **RHEL 7.2 (x64)** | [![][rhel7-badge-6.0.X]][rhel7-version-6.0.X] [Host][rhel7-host-6.0.X] ([Checksum][rhel7-host-checksum-6.0.X]) [App Hosts][rhel7-apphost-pack-6.0.X] ([Checksum][rhel7-apphost-pack-checksum-6.0.X]) [Host FX Resolver][rhel7-hostfxr-6.0.X] ([Checksum][rhel7-hostfxr-checksum-6.0.X]) [Targeting Pack][rhel7-targeting-pack-6.0.X] ([Checksum][rhel7-targeting-pack-checksum-6.0.X]) [Shared Framework][rhel7-sharedfx-6.0.X] ([Checksum][rhel7-sharedfx-checksum-6.0.X]) |
-| **Fedora 27 (x64)** | [![][fedora-27-badge-6.0.X]][fedora-27-version-6.0.X] [Runtime-Deps][fedora-27-runtime-deps-6.0.X] ([Checksum][fedora-27-runtime-deps-checksum-6.0.X]) [Host][fedora-27-host-6.0.X] ([Checksum][fedora-27-host-checksum-6.0.X]) [App Hosts][fedora-27-apphost-pack-6.0.X] ([Checksum][fedora-27-apphost-pack-checksum-6.0.X]) [Host FX Resolver][fedora-27-hostfxr-6.0.X] ([Checksum][fedora-27-hostfxr-checksum-6.0.X]) [Targeting Pack][fedora-27-targeting-pack-6.0.X] ([Checksum][fedora-27-targeting-pack-checksum-6.0.X]) [Shared Framework][fedora-27-sharedfx-6.0.X] ([Checksum][fedora-27-sharedfx-checksum-6.0.X]) |
-| **SLES 12 (x64)** | [![][sles-12-badge-6.0.X]][sles-12-version-6.0.X] [Runtime-Deps][sles-12-runtime-deps-6.0.X] ([Checksum][sles-12-runtime-deps-checksum-6.0.X]) [Host][sles-12-host-6.0.X] ([Checksum][sles-12-host-checksum-6.0.X]) [App Hosts][sles-12-apphost-pack-6.0.X] ([Checksum][sles-12-apphost-pack-checksum-6.0.X]) [Host FX Resolver][sles-12-hostfxr-6.0.X] ([Checksum][sles-12-hostfxr-checksum-6.0.X]) [Targeting Pack][sles-12-targeting-pack-6.0.X] ([Checksum][sles-12-targeting-pack-checksum-6.0.X]) [Shared Framework][sles-12-sharedfx-6.0.X] ([Checksum][sles-12-sharedfx-checksum-6.0.X]) |
-| **OpenSUSE 42 (x64)** | [![][OpenSUSE-42-badge-6.0.X]][OpenSUSE-42-version-6.0.X] [Runtime-Deps][OpenSUSE-42-runtime-deps-6.0.X] ([Checksum][OpenSUSE-42-runtime-deps-checksum-6.0.X]) [Host][OpenSUSE-42-host-6.0.X] ([Checksum][OpenSUSE-42-host-checksum-6.0.X]) [App Hosts][OpenSUSE-42-apphost-pack-6.0.X] ([Checksum][OpenSUSE-42-apphost-pack-checksum-6.0.X]) [Host FX Resolver][OpenSUSE-42-hostfxr-6.0.X] ([Checksum][OpenSUSE-42-hostfxr-checksum-6.0.X]) [Targeting Pack][OpenSUSE-42-targeting-pack-6.0.X] ([Checksum][OpenSUSE-42-targeting-pack-checksum-6.0.X]) [Shared Framework][OpenSUSE-42-sharedfx-6.0.X] ([Checksum][OpenSUSE-42-sharedfx-checksum-6.0.X]) |
+| **Windows (x64)** | [Installer][win-x64-installer-6.0.X] ([Checksum][win-x64-installer-checksum-6.0.X]) [zip][win-x64-zip-6.0.X] ([Checksum][win-x64-zip-checksum-6.0.X]) |
+| **Windows (x86)** | [Installer][win-x86-installer-6.0.X] ([Checksum][win-x86-installer-checksum-6.0.X]) [zip][win-x86-zip-6.0.X] ([Checksum][win-x86-zip-checksum-6.0.X]) |
+| **Windows (arm64)** | [Installer][win-arm64-installer-6.0.X] ([Checksum][win-arm64-installer-checksum-6.0.X]) [zip][win-arm64-zip-6.0.X] ([Checksum][win-arm64-zip-checksum-6.0.X]) |
+| **macOS (x64)** | [Installer][osx-x64-installer-6.0.X] ([Checksum][osx-x64-installer-checksum-6.0.X]) [tar.gz][osx-x64-targz-6.0.X] ([Checksum][osx-x64-targz-checksum-6.0.X]) |
+| **macOS (arm64)** | [Installer][osx-arm64-installer-6.0.X] ([Checksum][osx-arm64-installer-checksum-6.0.X]) [tar.gz][osx-arm64-targz-6.0.X] ([Checksum][osx-arm64-targz-checksum-6.0.X]) |
+| **Linux (x64)** (for glibc based OS) | [tar.gz][linux-x64-targz-6.0.X] ([Checksum][linux-x64-targz-checksum-6.0.X]) |
+| **Linux (armhf)** (for glibc based OS) | [tar.gz][linux-arm-targz-6.0.X] ([Checksum][linux-arm-targz-checksum-6.0.X]) |
+| **Linux (arm64)** (for glibc based OS) | [tar.gz][linux-arm64-targz-6.0.X] ([Checksum][linux-arm64-targz-checksum-6.0.X]) |
+| **Linux-musl (x64)** | [tar.gz][linux-musl-x64-targz-6.0.X] ([Checksum][linux-musl-x64-targz-checksum-6.0.X]) |
+| **Linux-musl (arm)** | [tar.gz][linux-musl-arm-targz-6.0.X] ([Checksum][linux-musl-arm-targz-checksum-6.0.X]) |
+| **Linux-musl (arm64)** | [tar.gz][linux-musl-arm64-targz-6.0.X] ([Checksum][linux-musl-arm64-targz-checksum-6.0.X]) |
+| **Dpkg Based Systems (x64)** | [Runtime-Deps][deb-runtime-deps-6.0.X] ([Checksum][deb-runtime-deps-checksum-6.0.X]) [Host][deb-host-6.0.X] ([Checksum][deb-host-checksum-6.0.X]) [App Hosts][deb-apphost-pack-6.0.X] ([Checksum][deb-apphost-pack-checksum-6.0.X]) [Host FX Resolver][deb-hostfxr-6.0.X] ([Checksum][deb-hostfxr-checksum-6.0.X]) [Targeting Pack][deb-targeting-pack-6.0.X] ([Checksum][deb-targeting-pack-checksum-6.0.X]) [Shared Framework][deb-sharedfx-6.0.X] ([Checksum][deb-sharedfx-checksum-6.0.X]) |
+| **CentOS 7 (x64)** | [Runtime-Deps][centos-7-runtime-deps-6.0.X] ([Checksum][centos-7-runtime-deps-checksum-6.0.X]) [Host][centos-7-host-6.0.X] ([Checksum][centos-7-host-checksum-6.0.X]) [App Hosts][centos-7-apphost-pack-6.0.X] ([Checksum][centos-7-apphost-pack-checksum-6.0.X]) [Host FX Resolver][centos-7-hostfxr-6.0.X] ([Checksum][centos-7-hostfxr-checksum-6.0.X]) [Targeting Pack][centos-7-targeting-pack-6.0.X] ([Checksum][centos-7-targeting-pack-checksum-6.0.X]) [Shared Framework][centos-7-sharedfx-6.0.X] ([Checksum][centos-7-sharedfx-checksum-6.0.X]) |
+| **RHEL 7.2 (x64)** | [Host][rhel7-host-6.0.X] ([Checksum][rhel7-host-checksum-6.0.X]) [App Hosts][rhel7-apphost-pack-6.0.X] ([Checksum][rhel7-apphost-pack-checksum-6.0.X]) [Host FX Resolver][rhel7-hostfxr-6.0.X] ([Checksum][rhel7-hostfxr-checksum-6.0.X]) [Targeting Pack][rhel7-targeting-pack-6.0.X] ([Checksum][rhel7-targeting-pack-checksum-6.0.X]) [Shared Framework][rhel7-sharedfx-6.0.X] ([Checksum][rhel7-sharedfx-checksum-6.0.X]) |
+| **Fedora 27 (x64)** | [Runtime-Deps][fedora-27-runtime-deps-6.0.X] ([Checksum][fedora-27-runtime-deps-checksum-6.0.X]) [Host][fedora-27-host-6.0.X] ([Checksum][fedora-27-host-checksum-6.0.X]) [App Hosts][fedora-27-apphost-pack-6.0.X] ([Checksum][fedora-27-apphost-pack-checksum-6.0.X]) [Host FX Resolver][fedora-27-hostfxr-6.0.X] ([Checksum][fedora-27-hostfxr-checksum-6.0.X]) [Targeting Pack][fedora-27-targeting-pack-6.0.X] ([Checksum][fedora-27-targeting-pack-checksum-6.0.X]) [Shared Framework][fedora-27-sharedfx-6.0.X] ([Checksum][fedora-27-sharedfx-checksum-6.0.X]) |
+| **SLES 12 (x64)** | [Runtime-Deps][sles-12-runtime-deps-6.0.X] ([Checksum][sles-12-runtime-deps-checksum-6.0.X]) [Host][sles-12-host-6.0.X] ([Checksum][sles-12-host-checksum-6.0.X]) [App Hosts][sles-12-apphost-pack-6.0.X] ([Checksum][sles-12-apphost-pack-checksum-6.0.X]) [Host FX Resolver][sles-12-hostfxr-6.0.X] ([Checksum][sles-12-hostfxr-checksum-6.0.X]) [Targeting Pack][sles-12-targeting-pack-6.0.X] ([Checksum][sles-12-targeting-pack-checksum-6.0.X]) [Shared Framework][sles-12-sharedfx-6.0.X] ([Checksum][sles-12-sharedfx-checksum-6.0.X]) |
+| **OpenSUSE 42 (x64)** | [Runtime-Deps][OpenSUSE-42-runtime-deps-6.0.X] ([Checksum][OpenSUSE-42-runtime-deps-checksum-6.0.X]) [Host][OpenSUSE-42-host-6.0.X] ([Checksum][OpenSUSE-42-host-checksum-6.0.X]) [App Hosts][OpenSUSE-42-apphost-pack-6.0.X] ([Checksum][OpenSUSE-42-apphost-pack-checksum-6.0.X]) [Host FX Resolver][OpenSUSE-42-hostfxr-6.0.X] ([Checksum][OpenSUSE-42-hostfxr-checksum-6.0.X]) [Targeting Pack][OpenSUSE-42-targeting-pack-6.0.X] ([Checksum][OpenSUSE-42-targeting-pack-checksum-6.0.X]) [Shared Framework][OpenSUSE-42-sharedfx-6.0.X] ([Checksum][OpenSUSE-42-sharedfx-checksum-6.0.X]) |
@@ -185,181 +185,181 @@ $ bin\Debug\net6.0\win-x64\publish\App.exe
-[win-x64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_win-x64_Release_version_badge.svg?no-cache
-[win-x64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[win-x64-installer-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x64.exe
-[win-x64-installer-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x64.exe.sha512
-[win-x64-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x64.zip
-[win-x64-zip-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x64.zip.sha512
-[win-x64-nethost-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-win-x64.zip
-[win-x64-symbols-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-win-x64.zip
-
-[win-x86-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_win-x86_Release_version_badge.svg?no-cache
-[win-x86-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[win-x86-installer-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x86.exe
-[win-x86-installer-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x86.exe.sha512
-[win-x86-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x86.zip
-[win-x86-zip-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-x86.zip.sha512
-[win-x86-nethost-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-win-x86.zip
-[win-x86-symbols-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-win-x86.zip
-
-[win-arm64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_win-arm64_Release_version_badge.svg?no-cache
-[win-arm64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[win-arm64-installer-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-arm64.exe
-[win-arm64-installer-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-arm64.exe.sha512
-[win-arm64-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-arm64.zip
-[win-arm64-zip-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-win-arm64.zip.sha512
-[win-arm64-nethost-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-win-arm64.zip
-[win-arm64-symbols-zip-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-win-arm64.zip
-
-[osx-x64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_osx-x64_Release_version_badge.svg?no-cache
-[osx-x64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[osx-x64-installer-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-x64.pkg
-[osx-x64-installer-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-x64.pkg.sha512
-[osx-x64-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-x64.tar.gz
-[osx-x64-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-x64.tar.gz.sha512
-[osx-x64-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-osx-x64.tar.gz
-[osx-x64-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-osx-x64.tar.gz
-
-[osx-arm64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_osx-arm64_Release_version_badge.svg?no-cache
-[osx-arm64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[osx-arm64-installer-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-arm64.pkg
-[osx-arm64-installer-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-arm64.pkg.sha512
-[osx-arm64-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-arm64.tar.gz
-[osx-arm64-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-osx-arm64.tar.gz.sha512
-[osx-arm64-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-osx-arm64.tar.gz
-[osx-arm64-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-osx-arm64.tar.gz
-
-[linux-x64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_linux-x64_Release_version_badge.svg?no-cache
-[linux-x64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[linux-x64-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-x64.tar.gz
-[linux-x64-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-x64.tar.gz.sha512
-[linux-x64-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-linux-x64.tar.gz
-[linux-x64-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-linux-x64.tar.gz
-
-[linux-arm-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_linux-arm_Release_version_badge.svg?no-cache
-[linux-arm-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[linux-arm-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-arm.tar.gz
-[linux-arm-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-arm.tar.gz.sha512
-[linux-arm-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-linux-arm.tar.gz
-[linux-arm-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-linux-arm.tar.gz
-
-[linux-arm64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_linux-arm64_Release_version_badge.svg?no-cache
-[linux-arm64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[linux-arm64-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-arm64.tar.gz
-[linux-arm64-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-arm64.tar.gz.sha512
-[linux-arm64-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-linux-arm64.tar.gz
-[linux-arm64-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-linux-arm64.tar.gz
-
-[deb-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_ubuntu.14.04-x64_Release_version_badge.svg?no-cache
-[deb-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[deb-apphost-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.deb
-[deb-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.deb.sha512
-[deb-host-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.deb
-[deb-runtime-deps-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-x64.deb
-[deb-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-x64.deb.sha512
-[deb-host-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.deb.sha512
-[deb-hostfxr-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.deb
-[deb-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.deb.sha512
-[deb-sharedfx-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.deb
-[deb-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.deb.sha512
-[deb-targeting-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.deb
-[deb-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.deb.sha512
-
-[rhel7-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_rhel.7-x64_Release_version_badge.svg?no-cache
-[rhel7-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[rhel7-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-centos.7-x64.rpm
-[rhel7-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-centos.7-x64.rpm.sha512
-[rhel7-apphost-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm
-[rhel7-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm.sha512
-[rhel7-host-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm
-[rhel7-host-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm.sha512
-[rhel7-hostfxr-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm
-[rhel7-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm.sha512
-[rhel7-sharedfx-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm
-[rhel7-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm.sha512
-[rhel7-targeting-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm
-[rhel7-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm.sha512
-
-[centos-7-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_centos.7-x64_Release_version_badge.svg?no-cache
-[centos-7-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[centos-7-runtime-deps-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-centos.7-x64.rpm
-[centos-7-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-centos.7-x64.rpm.sha512
-[centos-7-apphost-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm
-[centos-7-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm.sha512
-[centos-7-host-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm
-[centos-7-host-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm.sha512
-[centos-7-hostfxr-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm
-[centos-7-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm.sha512
-[centos-7-sharedfx-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm
-[centos-7-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm.sha512
-[centos-7-targeting-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm
-[centos-7-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm.sha512
-
-[fedora-27-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_fedora.27-x64_Release_version_badge.svg?no-cache
-[fedora-27-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[fedora-27-runtime-deps-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-fedora.27-x64.rpm
-[fedora-27-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-fedora.27-x64.rpm.sha512
-[fedora-27-apphost-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm
-[fedora-27-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm.sha512
-[fedora-27-host-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm
-[fedora-27-host-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm.sha512
-[fedora-27-hostfxr-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm
-[fedora-27-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm.sha512
-[fedora-27-sharedfx-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm
-[fedora-27-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm.sha512
-[fedora-27-targeting-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm
-[fedora-27-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm.sha512
-
-[sles-12-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_sles.12-x64_Release_version_badge.svg?no-cache
-[sles-12-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[sles-12-runtime-deps-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-sles.12-x64.rpm
-[sles-12-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-sles.12-x64.rpm.sha512
-[sles-12-apphost-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm
-[sles-12-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm.sha512
-[sles-12-host-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm
-[sles-12-host-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm.sha512
-[sles-12-hostfxr-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm
-[sles-12-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm.sha512
-[sles-12-sharedfx-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm
-[sles-12-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm.sha512
-[sles-12-targeting-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm
-[sles-12-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm.sha512
-
-[OpenSUSE-42-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_opensuse.42-x64_Release_version_badge.svg?no-cache
-[OpenSUSE-42-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[OpenSUSE-42-runtime-deps-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-opensuse.42-x64.rpm
-[OpenSUSE-42-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-deps-opensuse.42-x64.rpm.sha512
-[OpenSUSE-42-apphost-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm
-[OpenSUSE-42-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-apphost-pack-x64.rpm.sha512
-[OpenSUSE-42-host-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm
-[OpenSUSE-42-host-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-host-x64.rpm.sha512
-[OpenSUSE-42-hostfxr-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm
-[OpenSUSE-42-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-hostfxr-x64.rpm.sha512
-[OpenSUSE-42-sharedfx-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm
-[OpenSUSE-42-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-x64.rpm.sha512
-[OpenSUSE-42-targeting-pack-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm
-[OpenSUSE-42-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-targeting-pack-x64.rpm.sha512
-
-[linux-musl-x64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_linux-musl-x64_Release_version_badge.svg?no-cache
-[linux-musl-x64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[linux-musl-x64-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-musl-x64.tar.gz
-[linux-musl-x64-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-musl-x64.tar.gz.sha512
-[linux-musl-x64-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-linux-musl-x64.tar.gz
-[linux-musl-x64-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-linux-musl-x64.tar.gz
-
-[linux-musl-arm-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_linux-musl-arm_Release_version_badge.svg?no-cache
-[linux-musl-arm-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[linux-musl-arm-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-musl-arm.tar.gz
-[linux-musl-arm-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-musl-arm.tar.gz.sha512
-[linux-musl-arm-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-linux-musl-arm.tar.gz
-[linux-musl-arm-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-linux-musl-arm.tar.gz
-
-[linux-musl-arm64-badge-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/sharedfx_linux-musl-arm64_Release_version_badge.svg?no-cache
-[linux-musl-arm64-version-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/productVersion.txt
-[linux-musl-arm64-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-musl-arm64.tar.gz
-[linux-musl-arm64-targz-checksum-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-linux-musl-arm64.tar.gz.sha512
-[linux-musl-arm64-nethost-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-nethost-linux-musl-arm64.tar.gz
-[linux-musl-arm64-symbols-targz-6.0.X]: https://aka.ms/dotnet/net6/dev/Runtime/dotnet-runtime-symbols-linux-musl-arm64.tar.gz
+[win-x64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_win-x64_Release_version_badge.svg?no-cache
+[win-x64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[win-x64-installer-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x64.exe
+[win-x64-installer-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x64.exe.sha512
+[win-x64-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x64.zip
+[win-x64-zip-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x64.zip.sha512
+[win-x64-nethost-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-win-x64.zip
+[win-x64-symbols-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-win-x64.zip
+
+[win-x86-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_win-x86_Release_version_badge.svg?no-cache
+[win-x86-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[win-x86-installer-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x86.exe
+[win-x86-installer-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x86.exe.sha512
+[win-x86-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x86.zip
+[win-x86-zip-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-x86.zip.sha512
+[win-x86-nethost-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-win-x86.zip
+[win-x86-symbols-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-win-x86.zip
+
+[win-arm64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_win-arm64_Release_version_badge.svg?no-cache
+[win-arm64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[win-arm64-installer-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-arm64.exe
+[win-arm64-installer-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-arm64.exe.sha512
+[win-arm64-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-arm64.zip
+[win-arm64-zip-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-win-arm64.zip.sha512
+[win-arm64-nethost-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-win-arm64.zip
+[win-arm64-symbols-zip-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-win-arm64.zip
+
+[osx-x64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_osx-x64_Release_version_badge.svg?no-cache
+[osx-x64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[osx-x64-installer-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-x64.pkg
+[osx-x64-installer-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-x64.pkg.sha512
+[osx-x64-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-x64.tar.gz
+[osx-x64-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-x64.tar.gz.sha512
+[osx-x64-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-osx-x64.tar.gz
+[osx-x64-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-osx-x64.tar.gz
+
+[osx-arm64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_osx-arm64_Release_version_badge.svg?no-cache
+[osx-arm64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[osx-arm64-installer-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-arm64.pkg
+[osx-arm64-installer-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-arm64.pkg.sha512
+[osx-arm64-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-arm64.tar.gz
+[osx-arm64-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-osx-arm64.tar.gz.sha512
+[osx-arm64-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-osx-arm64.tar.gz
+[osx-arm64-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-osx-arm64.tar.gz
+
+[linux-x64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_linux-x64_Release_version_badge.svg?no-cache
+[linux-x64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[linux-x64-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-x64.tar.gz
+[linux-x64-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-x64.tar.gz.sha512
+[linux-x64-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-linux-x64.tar.gz
+[linux-x64-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-linux-x64.tar.gz
+
+[linux-arm-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_linux-arm_Release_version_badge.svg?no-cache
+[linux-arm-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[linux-arm-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-arm.tar.gz
+[linux-arm-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-arm.tar.gz.sha512
+[linux-arm-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-linux-arm.tar.gz
+[linux-arm-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-linux-arm.tar.gz
+
+[linux-arm64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_linux-arm64_Release_version_badge.svg?no-cache
+[linux-arm64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[linux-arm64-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-arm64.tar.gz.sha512
+[linux-arm64-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-linux-arm64.tar.gz
+[linux-arm64-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-linux-arm64.tar.gz
+
+[deb-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_ubuntu.14.04-x64_Release_version_badge.svg?no-cache
+[deb-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[deb-apphost-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.deb
+[deb-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.deb.sha512
+[deb-host-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.deb
+[deb-runtime-deps-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-x64.deb
+[deb-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-x64.deb.sha512
+[deb-host-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.deb.sha512
+[deb-hostfxr-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.deb
+[deb-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.deb.sha512
+[deb-sharedfx-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.deb
+[deb-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.deb.sha512
+[deb-targeting-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.deb
+[deb-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.deb.sha512
+
+[rhel7-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_rhel.7-x64_Release_version_badge.svg?no-cache
+[rhel7-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[rhel7-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-centos.7-x64.rpm
+[rhel7-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-centos.7-x64.rpm.sha512
+[rhel7-apphost-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm
+[rhel7-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm.sha512
+[rhel7-host-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm
+[rhel7-host-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm.sha512
+[rhel7-hostfxr-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm
+[rhel7-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm.sha512
+[rhel7-sharedfx-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm
+[rhel7-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm.sha512
+[rhel7-targeting-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm
+[rhel7-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm.sha512
+
+[centos-7-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_centos.7-x64_Release_version_badge.svg?no-cache
+[centos-7-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[centos-7-runtime-deps-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-centos.7-x64.rpm
+[centos-7-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-centos.7-x64.rpm.sha512
+[centos-7-apphost-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm
+[centos-7-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm.sha512
+[centos-7-host-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm
+[centos-7-host-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm.sha512
+[centos-7-hostfxr-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm
+[centos-7-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm.sha512
+[centos-7-sharedfx-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm
+[centos-7-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm.sha512
+[centos-7-targeting-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm
+[centos-7-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm.sha512
+
+[fedora-27-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_fedora.27-x64_Release_version_badge.svg?no-cache
+[fedora-27-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[fedora-27-runtime-deps-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-fedora.27-x64.rpm
+[fedora-27-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-fedora.27-x64.rpm.sha512
+[fedora-27-apphost-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm
+[fedora-27-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm.sha512
+[fedora-27-host-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm
+[fedora-27-host-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm.sha512
+[fedora-27-hostfxr-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm
+[fedora-27-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm.sha512
+[fedora-27-sharedfx-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm
+[fedora-27-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm.sha512
+[fedora-27-targeting-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm
+[fedora-27-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm.sha512
+
+[sles-12-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_sles.12-x64_Release_version_badge.svg?no-cache
+[sles-12-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[sles-12-runtime-deps-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-sles.12-x64.rpm
+[sles-12-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-sles.12-x64.rpm.sha512
+[sles-12-apphost-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm
+[sles-12-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm.sha512
+[sles-12-host-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm
+[sles-12-host-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm.sha512
+[sles-12-hostfxr-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm
+[sles-12-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm.sha512
+[sles-12-sharedfx-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm
+[sles-12-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm.sha512
+[sles-12-targeting-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm
+[sles-12-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm.sha512
+
+[OpenSUSE-42-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_opensuse.42-x64_Release_version_badge.svg?no-cache
+[OpenSUSE-42-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[OpenSUSE-42-runtime-deps-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-opensuse.42-x64.rpm
+[OpenSUSE-42-runtime-deps-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-deps-opensuse.42-x64.rpm.sha512
+[OpenSUSE-42-apphost-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm
+[OpenSUSE-42-apphost-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-apphost-pack-x64.rpm.sha512
+[OpenSUSE-42-host-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm
+[OpenSUSE-42-host-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-host-x64.rpm.sha512
+[OpenSUSE-42-hostfxr-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm
+[OpenSUSE-42-hostfxr-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-hostfxr-x64.rpm.sha512
+[OpenSUSE-42-sharedfx-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm
+[OpenSUSE-42-sharedfx-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-x64.rpm.sha512
+[OpenSUSE-42-targeting-pack-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm
+[OpenSUSE-42-targeting-pack-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-targeting-pack-x64.rpm.sha512
+
+[linux-musl-x64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_linux-musl-x64_Release_version_badge.svg?no-cache
+[linux-musl-x64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[linux-musl-x64-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-musl-x64.tar.gz.sha512
+[linux-musl-x64-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-linux-musl-x64.tar.gz
+[linux-musl-x64-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-linux-musl-x64.tar.gz
+
+[linux-musl-arm-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_linux-musl-arm_Release_version_badge.svg?no-cache
+[linux-musl-arm-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[linux-musl-arm-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-musl-arm.tar.gz
+[linux-musl-arm-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-musl-arm.tar.gz.sha512
+[linux-musl-arm-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-linux-musl-arm.tar.gz
+[linux-musl-arm-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-linux-musl-arm.tar.gz
+
+[linux-musl-arm64-badge-6.0.X]: https://aka.ms/dotnet/6.0/daily/sharedfx_linux-musl-arm64_Release_version_badge.svg?no-cache
+[linux-musl-arm64-version-6.0.X]: https://aka.ms/dotnet/6.0/daily/runtime-productVersion.txt
+[linux-musl-arm64-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-musl-arm64.tar.gz
+[linux-musl-arm64-targz-checksum-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-linux-musl-arm64.tar.gz.sha512
+[linux-musl-arm64-nethost-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-nethost-linux-musl-arm64.tar.gz
+[linux-musl-arm64-symbols-targz-6.0.X]: https://aka.ms/dotnet/6.0/daily/dotnet-runtime-symbols-linux-musl-arm64.tar.gz
diff --git a/docs/project/list-of-obsoletions.md b/docs/project/list-of-obsoletions.md
index 7a6c5b1d2b97f..cb094673111ec 100644
--- a/docs/project/list-of-obsoletions.md
+++ b/docs/project/list-of-obsoletions.md
@@ -26,3 +26,4 @@ Currently the identifiers `SYSLIB0001` through `SYSLIB0999` are carved out for o
| __`SYSLIB0011`__ | `BinaryFormatter` serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for recommended alternatives. |
| __`SYSLIB0012`__ | Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. Use Assembly.Location instead. |
| __`SYSLIB0013`__ | Uri.EscapeUriString can corrupt the Uri string in some cases. Consider using Uri.EscapeDataString for query string components instead. |
+| __`SYSLIB0015`__ | DisablePrivateReflectionAttribute has no effect in .NET 6.0+ applications. |
\ No newline at end of file
diff --git a/docs/workflow/building/coreclr/README.md b/docs/workflow/building/coreclr/README.md
index 06e7eba0fba75..bed097f5a010f 100644
--- a/docs/workflow/building/coreclr/README.md
+++ b/docs/workflow/building/coreclr/README.md
@@ -23,11 +23,13 @@ CoreCLR also supports a 'checked' build type which has asserts enabled like 'deb
./build.sh -subset clr -configuration checked
```
-If you want to use Ninja to drive the native build instead of Visual Studio MSBuild (on Windows) or Make (on non-Windows), you can pass the `-ninja` flag to the build script as follows:
+If you want to use Ninja to drive the native build instead of Make on non-Windows platforms, you can pass the `-ninja` flag to the build script as follows:
```
./build.cmd -subset clr -ninja
```
+If you want to use Visual Studio's MSBuild to drive the native build on Windows, you can pass the `-msbuild` flag to the build script similarly to the `-ninja` flag.
+
We recommend using Ninja for building the project on Windows since it more efficiently uses the build machine's resources for the native runtime build in comparison to Visual Studio's MSBuild.
To pass extra compiler/linker flags to the coreclr build, set the environment variables `EXTRA_CFLAGS`, `EXTRA_CXXFLAGS` and `EXTRA_LDFLAGS` as needed. Don't set `CFLAGS`/`CXXFLAGS`/`LDFLAGS` directly as that might lead to configure-time tests failing.
diff --git a/docs/workflow/debugging/coreclr/debugging.md b/docs/workflow/debugging/coreclr/debugging.md
index 0eda9dc372738..4e8d8c00b95db 100644
--- a/docs/workflow/debugging/coreclr/debugging.md
+++ b/docs/workflow/debugging/coreclr/debugging.md
@@ -8,28 +8,32 @@ SOS has moved to the diagnostics repo. For more information on SOS, installation
Debugging CoreCLR on Windows
============================
-1. Perform a build of the repo.
-2. Open solution \\artifacts\obj\coreclr\windows.\.\\CoreCLR.sln in Visual Studio. \ and \ are based
+1. Open the CoreCLR solution in Visual Studio.
+ - Method 1: Use the build scripts to open the solution.
+ 1. Run `./build.cmd -vs coreclr.sln -a -c `. This will create and launch the CoreCLR solution in VS for the specified architecture and configuration.
+ - Method 2: Manually build and open the solution.
+ 1. Perform a build of the repo with the `-msbuild` flag.
+ 2. Open solution `\\artifacts\obj\coreclr\windows.\.\\ide\CoreCLR.sln` in Visual Studio. `` and `` are based
on type of build you did. By default they are 'x64' and 'Debug'.
-3. Right-click the INSTALL project and choose ‘Set as StartUp Project’
-4. Bring up the properties page for the INSTALL project
-5. Select Configuration Properties->Debugging from the left side tree control
-6. Set Command=`$(SolutionDir)\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)\corerun.exe`
+2. Right-click the INSTALL project and choose ‘Set as StartUp Project’
+3. Bring up the properties page for the INSTALL project
+4. Select Configuration Properties->Debugging from the left side tree control
+5. Set Command=`$(SolutionDir)\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)\corerun.exe`
1. This points to the folder where the built runtime binaries are present.
-7. Set Command Arguments=`` (e.g. HelloWorld.dll)
-8. Set Working Directory=`$(SolutionDir)\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)`
+6. Set Command Arguments=`` (e.g. HelloWorld.dll)
+7. Set Working Directory=`$(SolutionDir)\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)`
1. This points to the folder containing CoreCLR binaries.
-9. Set Environment=`CORE_LIBRARIES=$(SolutionDir)\..\..\..\bin\runtime\-windows-$(Configuration)-$(Platform)`,
+8. Set Environment=`CORE_LIBRARIES=$(SolutionDir)\..\..\..\bin\runtime\-windows-$(Configuration)-$(Platform)`,
where '\' is the target framework of current branch, for example `netcoreapp3.1` `net5.0`.
1. This points to the folder containing core libraries except `System.Private.CoreLib`.
2. This step can be skipped if you are debugging CLR tests that references only `System.Private.CoreLib`.
Otherwise, it's required to debug a realworld application that references anything else, including `System.Runtime`.
-10. Right-click the INSTALL project and choose 'Build'
+9. Right-click the INSTALL project and choose 'Build'
1. This will load necessary information from cmake to Visual Studio.
-11. Press F11 to start debugging at wmain in corerun (or set a breakpoint in source and press F5 to run to it)
+10. Press F11 to start debugging at wmain in corerun (or set a breakpoint in source and press F5 to run to it)
1. As an example, set a breakpoint for the EEStartup function in ceemain.cpp to break into CoreCLR startup.
-Steps 1-10 only need to be done once, and then (11) can be repeated whenever you want to start debugging. The above can be done with Visual Studio 2019 as writing.
+Steps 1-9 only need to be done once as long as there's been no changes to the CMake files in the repository. Afterwards, step 10 can be repeated whenever you want to start debugging. The above can be done with Visual Studio 2019 as writing.
Keeping with latest version of Visual Studio is recommended.
### Using SOS with windbg or cdb on Windows ###
diff --git a/docs/workflow/editing-and-debugging.md b/docs/workflow/editing-and-debugging.md
index 50213150e4b9d..46e3d0b5e58fb 100644
--- a/docs/workflow/editing-and-debugging.md
+++ b/docs/workflow/editing-and-debugging.md
@@ -19,19 +19,20 @@ The repository has a number of Visual Studio Solutions files (`*.sln`) that are
* `src\coreclr\System.Private.CoreLib\System.Private.CorLib.sln` - This solution is for all managed (C#) code that is defined
in the runtime itself. This is all class library support of one form or another.
- * `artifacts\obj\coreclr\windows..\CoreCLR.sln` - this solution contains most native (C++) projects
+ * `artifacts\obj\coreclr\windows..\ide\CoreCLR.sln` - this solution contains most native (C++) projects
associated with the repository, including
* `coreclr` - This is the main runtime DLL (the GC, class loader, interop are all here)
* `corjit` - This is the Just In Time (JIT) compiler that compiles .NET Intermediate language to native code.
* `corerun` - This is the simple host program that can run a .NET application
* `crossgen` - This is the host program that runs the JIT compiler and produces .NET Native images (`*.ni.dll`)
for C# code.
+ * This project can be automatically generated and opened in Visual Studio by running `./build.cmd -vs CoreCLR.sln -a -c ` from the root of the repository.
Thus opening one of these two solution files (double clicking on them in Explorer) is typically all you need
to do most editing.
Notice that the CoreCLR solution is under the `artifacts` directory. This is because it is created as part of the build.
-Thus you can only launch this solution after you have built at least once.
+Thus you can only launch this solution after you have built at least once with the `-msbuild` flag or run the `./build.cmd -vs CoreCLR.sln` command line with the specified architecture and configuration.
* See [Debugging CoreCLR](debugging/coreclr/debugging.md)
diff --git a/docs/workflow/requirements/windows-requirements.md b/docs/workflow/requirements/windows-requirements.md
index 6b11f07a6fc84..56f662f6f2199 100644
--- a/docs/workflow/requirements/windows-requirements.md
+++ b/docs/workflow/requirements/windows-requirements.md
@@ -42,9 +42,9 @@ The dotnet/runtime repository requires at least Visual Studio 2019 16.6.
- Add its location (e.g. C:\Program Files (x86)\CMake\bin) to the PATH environment variable.
The installation script has a check box to do this, but you can do it yourself after the fact following the instructions at [Adding to the Default PATH variable](#adding-to-the-default-path-variable).
-The dotnet/runtime repository recommends using CMake 3.16.0 or newer, but works with CMake 3.15.5.
+The dotnet/runtime repository recommends using CMake 3.16.4 or newer, but it may work with CMake 3.15.5.
-## Ninja (optional)
+## Ninja
- Install Ninja in one of the two following ways
- [Download the executable](https://github.com/ninja-build/ninja/releases) and add its location to [the Default PATH variable](#adding-to-the-default-path-variable).
diff --git a/docs/workflow/testing/coreclr/unix-test-instructions.md b/docs/workflow/testing/coreclr/unix-test-instructions.md
index c11a694396584..18842af2100bc 100644
--- a/docs/workflow/testing/coreclr/unix-test-instructions.md
+++ b/docs/workflow/testing/coreclr/unix-test-instructions.md
@@ -18,6 +18,12 @@ To build the tests on Unix:
./src/tests/build.sh
```
+By default, the test build uses Release as the libraries configuration. To use a different configuration, set the `LibrariesConfiguration` property to the desired configuration. For example:
+
+```
+./src/tests/build.sh /p:LibrariesConfiguration=Debug
+```
+
Please note that this builds the Priority 0 tests. To build priority 1:
```sh
diff --git a/docs/workflow/testing/coreclr/windows-test-instructions.md b/docs/workflow/testing/coreclr/windows-test-instructions.md
index 5b7457a291c9e..3819907618b4b 100644
--- a/docs/workflow/testing/coreclr/windows-test-instructions.md
+++ b/docs/workflow/testing/coreclr/windows-test-instructions.md
@@ -9,6 +9,12 @@ Building coreclr tests must be done using a specific script as follows:
src\tests\build.cmd
```
+By default, the test build uses Release as the libraries configuration. To use a different configuration, set the `LibrariesConfiguration` property to the desired configuration. For example:
+
+```
+src\tests\build.cmd /p:LibrariesConfiguration=Debug
+```
+
## Building Precompiled Tests
```
@@ -106,4 +112,4 @@ If you wish to run the test under a debugger (e.g. [WinDbg](http://msdn.microsof
## Modifying a test
-If test changes are needed, make the change, and re-build the test project. This will binplace the binaries in the test binaries folder (e.g. `\artifacts\tests\coreclr\windows.x64.Checked\Exceptions\Finalization`). Then re-run the test following the instructions above.
\ No newline at end of file
+If test changes are needed, make the change, and re-build the test project. This will binplace the binaries in the test binaries folder (e.g. `\artifacts\tests\coreclr\windows.x64.Checked\Exceptions\Finalization`). Then re-run the test following the instructions above.
diff --git a/docs/workflow/testing/host/testing.md b/docs/workflow/testing/host/testing.md
index bd8be8d409909..5d990c42080fa 100644
--- a/docs/workflow/testing/host/testing.md
+++ b/docs/workflow/testing/host/testing.md
@@ -6,10 +6,12 @@ The [host tests](/src/installer/tests) use [xunit](http://xunit.github.io/) for
To build the host tests, first build the product:
-1. Build CoreCLR and libraries:
-
- * [CoreCLR](../../building/coreclr/README.md)
- * [Libraries](../../building/libraries/README.md)
+1. Build CoreCLR and libraries (`clr` and `libs` subsets):
+ ```
+ build.cmd/sh -subset clr+libs -c Release
+ ```
+ * [CoreCLR](../../building/coreclr/README.md) build instructions
+ * [Libraries](../../building/libraries/README.md) build instructions
2. Build the host and packs:
```
@@ -58,6 +60,8 @@ By default, the above command will also build the tests before running them. To
### Running specific tests
+If all tests have not been previously run, make sure the [test context](#test-context) is set up for the test library.
+
Tests from a specific test project can be run using [`dotnet test`](https://docs.microsoft.com/dotnet/core/tools/dotnet-test) targeting the built test binary. For example:
```
dotnet test artifacts/bin/HostActivation.Tests/Debug/net5.0/HostActivation.Tests.dll
@@ -68,12 +72,10 @@ To filter to specific tests within the test library, use the [filter options](ht
dotnet test artifacts/bin/HostActivation.Tests/Debug/net5.0/HostActivation.Tests.dll --filter DependencyResolution
```
-If all tests have not been previously run, make sure the [test context](#test-context) is set up for the test library.
-
### Visual Studio
The [Microsoft.DotNet.CoreSetup.sln](/src/installer/Microsoft.DotNet.CoreSetup.sln) can be used to run and debug host tests through Visual Studio. When using the solution, the product should have already been [built](#building-tests) and the [test context](#test-context) set up.
### Preserving test artifacts
-In order to test the hosting components, the tests launch a separate process (e.g. `dotnet`, apphost, native host) and validate the expected output (standard output and error) of the launched process. This usually involves copying or creating test artifacts in the form of an application to run or a .NET install to run against. The tests will delete these artifacts after the test finishes. To allow inspection or usage after the test finishes, set the environment variable `PRESERVE_TEST_RUNS=1` to avoid deleting the test artifacts.
\ No newline at end of file
+In order to test the hosting components, the tests launch a separate process (e.g. `dotnet`, apphost, native host) and validate the expected output (standard output and error) of the launched process. This usually involves copying or creating test artifacts in the form of an application to run or a .NET install to run against. The tests will delete these artifacts after the test finishes. To allow inspection or usage after the test finishes, set the environment variable `PRESERVE_TEST_RUNS=1` to avoid deleting the test artifacts.
diff --git a/docs/workflow/testing/libraries/testing-android.md b/docs/workflow/testing/libraries/testing-android.md
index 4c753f6832ce5..08ad7316814b5 100644
--- a/docs/workflow/testing/libraries/testing-android.md
+++ b/docs/workflow/testing/libraries/testing-android.md
@@ -45,15 +45,7 @@ curl https://dl.google.com/android/repository/commandlinetools-${HOST_OS_SHORT}-
mkdir ${ANDROID_SDK_ROOT} && unzip ~/asdk.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && rm -rf ~/asdk.zip
yes | ${ANDROID_SDK_ROOT}/cmdline-tools/tools/bin/sdkmanager --sdk_root=${ANDROID_SDK_ROOT} --licenses
${ANDROID_SDK_ROOT}/cmdline-tools/tools/bin/sdkmanager --sdk_root=${ANDROID_SDK_ROOT} "platform-tools" "platforms;android-${SDK_API_LEVEL}" "build-tools;${SDK_BUILD_TOOLS}"
-
-# We also need to download precompiled binaries and headers for OpenSSL from maven, this step is a temporary hack
-# and will be removed once we figure out how to integrate OpenSSL properly as a dependency
-export ANDROID_OPENSSL_AAR=~/openssl-android
-curl https://maven.google.com/com/android/ndk/thirdparty/openssl/${OPENSSL_VER}/openssl-${OPENSSL_VER}.aar -L --output ~/openssl.zip
-unzip ~/openssl.zip -d ${ANDROID_OPENSSL_AAR} && rm -rf ~/openssl.zip
-printf "\n\nexport ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}\nexport ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}\nexport ANDROID_OPENSSL_AAR=${ANDROID_OPENSSL_AAR}\n" >> ${BASHRC}
```
-Save it to a file (e.g. `deps.sh`) and execute using `source` (e.g. `chmod +x deps.sh && source ./deps.sh`) in order to propogate the `ANDROID_NDK_ROOT`, `ANDROID_SDK_ROOT` and `ANDROID_OPENSSL_AAR` environment variables to the current process.
## Building Libs and Tests for Android
diff --git a/docs/workflow/testing/libraries/testing-apple.md b/docs/workflow/testing/libraries/testing-apple.md
index 3e9be3c600c51..99adf6a87176b 100644
--- a/docs/workflow/testing/libraries/testing-apple.md
+++ b/docs/workflow/testing/libraries/testing-apple.md
@@ -2,15 +2,17 @@
In order to build libraries and tests for iOS or tvOS you need recent version of XCode installed (e.g. 11.3 or higher).
-Build Libraries for iOS:
+Build Libraries for iOS Simulator:
```
-./build.sh mono+libs -os iOS -arch x64
+./build.sh mono+libs -os iOSSimulator -arch x64
```
Run tests one by one for each test suite on a simulator:
```
-./build.sh libs.tests -os iOS -arch x64 -test
+./build.sh libs.tests -os iOSSimulator -arch x64 -test
```
-In order to run the tests on a device you need to specify `DevTeamProvisioning` (see [developer.apple.com/account/#/membership](https://developer.apple.com/account/#/membership), scroll down to `Team ID`):
+In order to run the tests on a device:
+- Set the os to `iOS` instead of `iOSSimulator`
+- Specify `DevTeamProvisioning` (see [developer.apple.com/account/#/membership](https://developer.apple.com/account/#/membership), scroll down to `Team ID`):
```
./build.sh libs.tests -os iOS -arch x64 -test /p:DevTeamProvisioning=H1A2B3C4D5
```
diff --git a/docs/workflow/testing/libraries/testing-wasm.md b/docs/workflow/testing/libraries/testing-wasm.md
index 3979f9033a09b..242e6c9cee4a9 100644
--- a/docs/workflow/testing/libraries/testing-wasm.md
+++ b/docs/workflow/testing/libraries/testing-wasm.md
@@ -96,6 +96,18 @@ The following shows how to run tests for a specific library
make -C src/mono/wasm/ run-browser-tests-System.AppContext
```
+### Passing arguments to xharness
+
+- `$(WasmXHarnessArgs)` - xharness command arguments
+
+ Example: `WasmXHarnessArgs="--xyz"` -> becomes `dotnet xharness wasm test --xyz`
+
+- `$(WasmXHarnessMonoArgs)` - arguments to mono
+
+ Example: `WasmXHarnessMonoArgs="--runtime-arg=--trace=E"`
+
+- `$(WasmTestAppArgs)` - arguments for the test app itself
+
### Running outer loop tests using Browser instance
To run all tests, including "outer loop" tests (which are typically slower and in some test suites less reliable, but which are more comprehensive):
diff --git a/docs/workflow/testing/mono/testing.md b/docs/workflow/testing/mono/testing.md
index f05bd5c5ea050..d0d4f6c745ade 100644
--- a/docs/workflow/testing/mono/testing.md
+++ b/docs/workflow/testing/mono/testing.md
@@ -12,13 +12,13 @@ To build the runtime tests for Mono JIT or interpreter, build CoreCLR and execut
Run individual test:
```
-cd ../mono/netcore
+cd src/mono
make run-tests-coreclr CoreClrTest="bash ../../artifacts/tests/coreclr/OSX.x64.Release/JIT/opt/InstructionCombining/DivToMul/DivToMul.sh"
```
Run all tests:
```
-cd ../mono/netcore
+cd src/mono
make run-tests-coreclr-all
```
diff --git a/docs/workflow/trimming/ILLink-files.md b/docs/workflow/trimming/ILLink-files.md
new file mode 100644
index 0000000000000..bbce56daa43a4
--- /dev/null
+++ b/docs/workflow/trimming/ILLink-files.md
@@ -0,0 +1,45 @@
+# ILLink Files
+
+There are a few `ILLink.*.xml` files under `src` folders in `dotnet/runtime`. These files are used by the trimming tool for various reasons.
+
+See https://github.com/mono/linker/blob/main/docs/data-formats.md for full documentation on these files.
+
+## ILLink.Descriptors.xml
+
+Descriptors are used to direct the trimming tool to always keep some items in the assembly, regardless of if the trimming tool can find any references to them.
+
+We try to limit the usage of descriptor files as much as possible. Since using a descriptor means the code will always be preserved, even in the final application. Typically the main scenario they are used is when non-IL code (e.g. C/C++, JavaScript, etc.) is calling into IL code. The trimming tool isn't able to see the non-IL code, so it doesn't know which IL methods are necessary.
+
+In some cases it is only necessary to preserve items only during `dotnet/runtime`'s build, but we don't want to unconditionally preserve them in an the final application. Examples of these cases are non-public methods only used by tests, or non-public methods that are called through Reflection by another assembly. To only preserve items during `dotnet/runtime`'s build, use a `ILLink.Descriptors.LibraryBuild.xml` file.
+
+In almost all cases, when using a descriptors file, add a comment justifying why it is necessary.
+
+## ILLink.Substitutions.xml
+
+Substitutions direct the trimming tool to replace specific method's body with either a throw or return constant statements.
+
+These files are mainly used to implement [feature switches](feature-switches.md).
+
+They can also be used to hard-code constants depending on the platform we are building for, typically in `System.Private.CoreLib.dll` since, at this time, that is the only assembly we build specifically for each target architecture. In those cases, there are multiple `ILLink.Substitutions.{arch}.xml` files, which get included depending on the architecture. This is possible through an MSBuild Item `@(ILLinkSubstitutionsXmls)` which can conditionally get added to, and all the .xml files are combined into a final `ILLink.Substitutions.xml`, which is embedded into the assembly.
+
+## ILLink.Suppressions.xml
+
+When we build `dotnet/runtime`, we run the trimming tool to analyze our assemblies for code that is using patterns (like Reflection) that may be broken once the application is trimmed. When the trimming tool encounters code that isn't trim compatible, it issues a warning. Because we haven't addressed all these warnings in the code, we suppress the existing warnings in `ILLink.Suppressions.xml` files, and fail the build when an unsuppressed warning is encountered. This ensures that no new code can introduce new warnings while we are addressing the existing warnings.
+
+If your new feature or bug fix is introducing new ILLink warnings, the warnings need to be addressed before your PR can be merged. No new suppressions should be added to an `ILLink.Suppressions.xml` file. To address the warnings, see [Linking the .NET Libraries](https://github.com/dotnet/designs/blob/main/accepted/2020/linking-libraries.md). Typically, either adding `[DynamicallyAccessedMembers]` or `[RequiresUnreferencedCode]` attributes are acceptable ways of addressing the warnings. If the warning is a false-positive (meaning it is trim compatible, but the trimming tool wasn't able to tell), it can be suppressed in code using an `[UnconditionalSuppressMessage]`.
+
+ILLink warnings that are suppressed by the `ILLink.Suppressions.xml` file will still be emitted when the final application is published. This allows developers to see where their application might be broken when it is trimmed. Warnings that are suppressed by `[UnconditionalSuppressMessage]` attributes in `dotnet/runtime` code will never be emitted, during the `dotnet/runtime` build nor in the final application.
+
+Sometimes it is beneficial to leave an ILLink warning as unsuppressed so the final application's developer sees the warning. An examples of this is using the [`Startup Hooks`](../../design/features/host-startup-hook.md) feature in .NET. By default this feature is disabled when trimming a .NET application. However, the application can re-enable the feature. When they do, an ILLInk warning is emitted when the application is trimmed telling them the feature may not work after trimming.
+
+To suppress a warning only in the `dotnet/runtime` build, but keep emitting it in the final application, add the warning to a `ILLink.Suppressions.LibraryBuild.xml` file, and include a justification why this approach was taken.
+
+## ILLink.LinkAttributes.xml
+
+Attribute annotations direct the trimming tool to behave as if the specified item has the specified attribute.
+
+This is mainly used to tell the trimming tool which attributes to remove from the trimmed application. This is useful because some attributes are only needed at development time. They aren't necessary at runtime. Trimming unnecessary attributes can make the application smaller.
+
+Under the covers, the way this works is that the `ILLink.LinkAttributes.xml` tells the trimming tool to act like a `[RemoveAttributeInstances]` attribute is applied to the attribute type we want to remove. The trimming tool removes any instantiations of the attribute in all the assemblies of the application. However, if the trimming tool encounters code that is trying to read the attribute at runtime, it doesn't trim the attribute instances. For example, if runtime code is reading the `ObsoleteAttribute`, `ObsoleteAttribute` instances won't be trimmed even if it was asked to be removed through this file.
+
+This is also how the above `ILLink.Suppressions.xml` file works under the covers. It injects `[UnconditionalSuppressMessage]` attributes to tell the trimming tool to act as if there was a suppress attribute in code.
\ No newline at end of file
diff --git a/docs/workflow/trimming/feature-switches.md b/docs/workflow/trimming/feature-switches.md
index 40971d1fdb9df..36ac156f4f86b 100644
--- a/docs/workflow/trimming/feature-switches.md
+++ b/docs/workflow/trimming/feature-switches.md
@@ -19,6 +19,7 @@ configurations but their defaults might vary as any SDK can set the defaults dif
| StartupHookSupport | System.StartupHookProvider.IsSupported | Startup hooks are disabled when set to false. Startup hook related functionality can be trimmed. |
| TBD | System.Threading.ThreadPool.EnableDispatchAutoreleasePool | When set to true, creates an NSAutoreleasePool around each thread pool work item on applicable platforms. |
| CustomResourceTypesSupport | System.Resources.ResourceManager.AllowCustomResourceTypes | Use of custom resource types is disabled when set to false. ResourceManager code paths that use reflection for custom types can be trimmed. |
+| EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization | System.ComponentModel.TypeConverter.EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization | BinaryFormatter serialization support is trimmed when set to false. |
Any feature-switch which defines property can be set in csproj file or
on the command line as any other MSBuild property. Those without predefined property name
diff --git a/eng/CodeAnalysis.ruleset b/eng/CodeAnalysis.ruleset
index cde7125c5eafb..16f5ecb87d2f8 100644
--- a/eng/CodeAnalysis.ruleset
+++ b/eng/CodeAnalysis.ruleset
@@ -40,7 +40,7 @@
-
+
diff --git a/eng/Subsets.props b/eng/Subsets.props
index f8e2005ff3b70..5d1b8740cadef 100644
--- a/eng/Subsets.props
+++ b/eng/Subsets.props
@@ -25,6 +25,8 @@
clr+mono+libs+host+packsmono+libs+packs
+
+ clr+libs+host+packs
@@ -40,7 +42,7 @@
- clr.runtime+clr.jit+clr.alljits+linuxdac+clr.corelib+clr.tools+clr.nativecorelib+clr.packages
+ clr.native+linuxdac+clr.corelib+clr.tools+clr.nativecorelib+clr.packagesmono.llvm+mono.llvm+
@@ -70,16 +72,18 @@
<_subset>+$(_subset.Trim('+'))+
- ClrRuntimeSubset=true;ClrJitSubset=true
+ ClrRuntimeSubset=true;ClrJitSubset=true;ClrILToolsSubset=true
+
-
-
+
+
+
@@ -98,6 +102,7 @@
+
@@ -142,14 +147,18 @@
-
+
- $(ClrRuntimeBuildSubsets);ClrRuntimeSubset=true;ClrJitSubset=true
+ $(ClrRuntimeBuildSubsets);ClrRuntimeSubset=true
+
+
+
+ $(ClrRuntimeBuildSubsets);ClrFullNativeBuild=true
@@ -161,7 +170,11 @@
- $(ClrRuntimeBuildSubsets);ClrAllJitsSubset=true;ClrJitSubset=true
+ $(ClrRuntimeBuildSubsets);ClrAllJitsSubset=true
+
+
+
+ $(ClrRuntimeBuildSubsets);ClrILToolsSubset=true
@@ -200,13 +213,13 @@
$(CoreClrProjectRoot)crossgen-corelib.proj" Category="clr" />
-
+
-
+
@@ -215,7 +228,7 @@
-
+
@@ -266,11 +279,11 @@
-
+
-
+
@@ -282,25 +295,31 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/eng/Tools.props b/eng/Tools.props
index 1a9804dbaf692..a9a9fb714be97 100644
--- a/eng/Tools.props
+++ b/eng/Tools.props
@@ -7,6 +7,7 @@
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 3db4c219dfb24..33d6d5e04e612 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -1,74 +1,74 @@
-
+ https://github.com/dotnet/icu
- 3dc14146be2c110eedc947afa62894f9b53b4f04
+ 29647ace51f6bb8085326ff137525f7a6d89d726
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 7f13798e5f567b72ffe63205bf49839245f0f8c1
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
-
+ https://github.com/dotnet/arcade
- 287fba3cbedce004fbd9823c268327960a69ca88
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cdhttps://dev.azure.com/dnceng/internal/_git/dotnet-optimization
@@ -94,117 +94,121 @@
https://github.com/microsoft/vstest140434f7109d357d0158ade9e5164a4861513965
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/runtime-assets
- c7c14818023404ed900360565f8289b8e14d9aa4
+ 055ed026132a7070e41629cfb5e410f0fcbdf948
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85
-
+ https://github.com/dotnet/llvm-project
- 121a29ab0b411db38efa6659307d86fe04aefcb8
+ a2bf9755287bdd3dcf998e41042e79dfd0136c85https://github.com/dotnet/runtime38017c3935de95d0335bac04f4901ddfc2718656
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/dotnet/runtime
- acbbb505492244b4c07a4a368257ba86a1fc02e1
+ 102d1e856c7e0e553abeec937783da5debed73ad
-
+ https://github.com/mono/linker
- 0c4902a114192fce1e7570d998e70d24669e9cc3
+ 388fef00320370785b08bbc42dda4a87f3fa38ab
-
+ https://github.com/dotnet/xharness
- 645910141e0ef98efee3c5bf9128b8fefb1a3c01
+ c2c34bf7fdeb5a89e83817ced9a1a2c3c4cfc15c
-
+ https://github.com/dotnet/xharness
- 645910141e0ef98efee3c5bf9128b8fefb1a3c01
+ c2c34bf7fdeb5a89e83817ced9a1a2c3c4cfc15c
+
+
+ https://github.com/dotnet/arcade
+ 1bfe91238cb39b9620b878b8f1bf0c789324b4cd
diff --git a/eng/Versions.props b/eng/Versions.props
index 261c39bba7ca4..16f6260879c6e 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -7,7 +7,7 @@
00preview
- 3
+ 4$(MajorVersion).$(MinorVersion).0.0
@@ -17,7 +17,7 @@
truetrue
- true
+ falsefalse
- 6.0.0-beta.21160.7
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 2.5.1-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
- 6.0.0-beta.21155.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 2.5.1-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.1
+ 6.0.0-beta.21203.15.9.0-preview.26.0.0-alpha.1.20612.4
- 6.0.0-preview.3.21157.6
- 6.0.0-preview.3.21157.6
+ 6.0.0-preview.4.21178.6
+ 6.0.0-preview.4.21178.63.1.0
- 6.0.0-preview.3.21157.6
+ 6.0.0-preview.4.21178.61.2.0-beta.3044.5.1
@@ -97,32 +98,35 @@
4.7.04.7.04.7.0
- 6.0.0-preview.3.21157.6
- 6.0.0-preview.3.21157.6
+ 6.0.0-preview.4.21178.6
+ 6.0.0-preview.4.21178.64.3.04.5.44.5.01.1.14.3.0
- 6.0.0-preview.3.21157.6
+ 6.0.0-preview.4.21178.6
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
- 5.0.0-beta.21159.1
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 6.0.0-beta.21174.2
+ 99.99.99-master-20210317.2
+ 99.99.99-master-20210317.2
+ 99.99.99-master-20210317.299.99.99-master-20200806.699.99.99-master-20200806.699.99.99-master-20200806.699.99.99-master-20200806.699.99.99-master-20200806.6
- 1.7.0
+ 16.9.0-beta1.21055.52.0.0-beta1.20253.12.0.652.2.0
@@ -135,17 +139,17 @@
These are used as reference assemblies only, so they must not take a ProdCon/source-build
version. Insert "RefOnly" to avoid assignment via PVP.
-->
- 15.7.179
+ 16.8.0$(RefOnlyMicrosoftBuildVersion)$(RefOnlyMicrosoftBuildVersion)$(RefOnlyMicrosoftBuildVersion)
- 4.9.4
- 4.9.4
+ 5.8.0
+ 5.8.01.0.1-prerelease-0000616.9.0-preview-20201201-01
- 1.0.0-prerelease.21154.2
- 1.0.0-prerelease.21154.2
+ 1.0.0-prerelease.21201.1
+ 1.0.0-prerelease.21201.12.4.12.4.21.3.0
@@ -155,18 +159,18 @@
5.0.0-preview-20201009.2
- 6.0.100-preview.2.21126.1
+ 6.0.100-preview.2.21205.2
- 6.0.0-preview.3.21151.1
+ 6.0.0-preview.4.21179.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
- 9.0.1-alpha.1.21158.1
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
+ 9.0.1-alpha.1.21179.2
diff --git a/eng/build.ps1 b/eng/build.ps1
index 4d6c6fe5b2d4e..f93182c5bd89e 100644
--- a/eng/build.ps1
+++ b/eng/build.ps1
@@ -17,6 +17,7 @@ Param(
[ValidateSet("Debug","Release")][string][Alias('lc')]$librariesConfiguration,
[ValidateSet("CoreCLR","Mono")][string][Alias('rf')]$runtimeFlavor,
[switch]$ninja,
+ [switch]$msbuild,
[string]$cmakeargs,
[switch]$pgoinstrument,
[Parameter(ValueFromRemainingArguments=$true)][String[]]$properties
@@ -51,7 +52,7 @@ function Get-Help() {
Write-Host " [Default: Minimal]"
Write-Host " -vs Open the solution with Visual Studio using the locally acquired SDK."
Write-Host " Path or any project or solution name is accepted."
- Write-Host " (Example: -vs Microsoft.CSharp)"
+ Write-Host " (Example: -vs Microsoft.CSharp or -vs CoreCLR.sln)"
Write-Host ""
Write-Host "Actions (defaults to -restore -build):"
@@ -79,7 +80,8 @@ function Get-Help() {
Write-Host "Native build settings:"
Write-Host " -cmakeargs User-settable additional arguments passed to CMake."
- Write-Host " -ninja Use Ninja instead of MSBuild to run the native build."
+ Write-Host " -ninja Use Ninja to drive the native build. (default)"
+ Write-Host " -msbuild Use MSBuild to drive the native build. This is a no-op for Mono."
Write-Host " -pgoinstrument Build the CLR with PGO instrumentation."
Write-Host "Command-line arguments not listed above are passed through to MSBuild."
@@ -133,10 +135,10 @@ if ($vs) {
if ($runtimeConfiguration) {
$configToOpen = $runtimeConfiguration
}
- $vs = Split-Path $PSScriptRoot -Parent | Join-Path -ChildPath "artifacts\obj\coreclr" | Join-Path -ChildPath "windows.$archToOpen.$((Get-Culture).TextInfo.ToTitleCase($configToOpen))" | Join-Path -ChildPath "CoreCLR.sln"
+ $vs = Split-Path $PSScriptRoot -Parent | Join-Path -ChildPath "artifacts\obj\coreclr" | Join-Path -ChildPath "windows.$archToOpen.$((Get-Culture).TextInfo.ToTitleCase($configToOpen))" | Join-Path -ChildPath "ide" | Join-Path -ChildPath "CoreCLR.sln"
if (-Not (Test-Path $vs)) {
$repoRoot = Split-Path $PSScriptRoot -Parent
- Invoke-Expression "& `"$repoRoot/src/coreclr/build-runtime.cmd`" -configureonly -$archToOpen -$configToOpen"
+ Invoke-Expression "& `"$repoRoot/src/coreclr/build-runtime.cmd`" -configureonly -$archToOpen -$configToOpen -msbuild"
if ($lastExitCode -ne 0) {
Write-Error "Failed to generate the CoreCLR solution file."
exit 1
@@ -234,7 +236,9 @@ foreach ($argument in $PSBoundParameters.Keys)
"properties" { $arguments += " " + $properties }
"verbosity" { $arguments += " -$argument " + $($PSBoundParameters[$argument]) }
"cmakeargs" { $arguments += " /p:CMakeArgs=`"$($PSBoundParameters[$argument])`"" }
- "ninja" { $arguments += " /p:Ninja=$($PSBoundParameters[$argument])" }
+ # The -ninja switch is a no-op since Ninja is the default generator on Windows.
+ "ninja" { }
+ "msbuild" { $arguments += " /p:Ninja=false" }
"pgoinstrument" { $arguments += " /p:PgoInstrument=$($PSBoundParameters[$argument])"}
# configuration and arch can be specified multiple times, so they should be no-ops here
"configuration" {}
@@ -245,11 +249,25 @@ foreach ($argument in $PSBoundParameters.Keys)
$failedBuilds = @()
+if ($os -eq "Browser") {
+ # override default arch for Browser, we only support wasm
+ $arch = "wasm"
+
+ if ($msbuild -eq $True) {
+ Write-Error "Using the -msbuild option isn't supported when building for Browser on Windows, we need need ninja for Emscripten."
+ exit 1
+ }
+}
+
foreach ($config in $configuration) {
$argumentsWithConfig = $arguments + " -configuration $((Get-Culture).TextInfo.ToTitleCase($config))";
foreach ($singleArch in $arch) {
$argumentsWithArch = "/p:TargetArchitecture=$singleArch " + $argumentsWithConfig
- $env:__DistroRid="win-$singleArch"
+ if ($os -eq "Browser") {
+ $env:__DistroRid="browser-$singleArch"
+ } else {
+ $env:__DistroRid="win-$singleArch"
+ }
Invoke-Expression "& `"$PSScriptRoot/common/build.ps1`" $argumentsWithArch"
if ($lastExitCode -ne 0) {
$failedBuilds += "Configuration: $config, Architecture: $singleArch"
@@ -265,4 +283,8 @@ if ($failedBuilds.Count -ne 0) {
exit 1
}
+if ($ninja) {
+ Write-Host "The -ninja option has no effect on Windows builds since the Ninja generator is the default generator."
+}
+
exit 0
diff --git a/eng/build.sh b/eng/build.sh
index dc72e26d50092..50b91f7187634 100755
--- a/eng/build.sh
+++ b/eng/build.sh
@@ -28,8 +28,8 @@ usage()
echo " --help (-h) Print help and exit."
echo " --librariesConfiguration (-lc) Libraries build configuration: Debug or Release."
echo " [Default: Debug]"
- echo " --os Target operating system: windows, Linux, FreeBSD, OSX, MacCatalyst, tvOS, iOS, Android,"
- echo " Browser, NetBSD, illumos or Solaris."
+ echo " --os Target operating system: windows, Linux, FreeBSD, OSX, MacCatalyst, tvOS,"
+ echo " tvOSSimulator, iOS, iOSSimulator, Android, Browser, NetBSD, illumos or Solaris."
echo " [Default: Your machine's OS.]"
echo " --projects Project or solution file(s) to build."
echo " --runtimeConfiguration (-rc) Runtime build configuration: Debug, Release or Checked."
@@ -266,8 +266,12 @@ while [[ $# > 0 ]]; do
os="MacCatalyst" ;;
tvos)
os="tvOS" ;;
+ tvossimulator)
+ os="tvOSSimulator" ;;
ios)
os="iOS" ;;
+ iossimulator)
+ os="iOSSimulator" ;;
android)
os="Android" ;;
browser)
@@ -278,7 +282,7 @@ while [[ $# > 0 ]]; do
os="Solaris" ;;
*)
echo "Unsupported target OS '$2'."
- echo "The allowed values are windows, Linux, FreeBSD, OSX, MacCatalyst, tvOS, iOS, Android, Browser, illumos and Solaris."
+ echo "The allowed values are windows, Linux, FreeBSD, OSX, MacCatalyst, tvOS, tvOSSimulator, iOS, iOSSimulator, Android, Browser, illumos and Solaris."
exit 1
;;
esac
diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1
new file mode 100644
index 0000000000000..7225ddc666906
--- /dev/null
+++ b/eng/common/generate-locproject.ps1
@@ -0,0 +1,101 @@
+Param(
+ [Parameter(Mandatory=$true)][string] $SourcesDirectory, # Directory where source files live; if using a Localize directory it should live in here
+ [string] $LanguageSet = 'VS_Main_Languages', # Language set to be used in the LocProject.json
+ [switch] $UseCheckedInLocProjectJson, # When set, generates a LocProject.json and compares it to one that already exists in the repo; otherwise just generates one
+ [switch] $CreateNeutralXlfs # Creates neutral xlf files. Only set to false when running locally
+)
+
+# Generates LocProject.json files for the OneLocBuild task. OneLocBuildTask is described here:
+# https://ceapex.visualstudio.com/CEINTL/_wiki/wikis/CEINTL.wiki/107/Localization-with-OneLocBuild-Task
+
+Set-StrictMode -Version 2.0
+$ErrorActionPreference = "Stop"
+. $PSScriptRoot\tools.ps1
+
+Import-Module -Name (Join-Path $PSScriptRoot 'native\CommonLibrary.psm1')
+
+$exclusionsFilePath = "$SourcesDirectory\Localize\LocExclusions.json"
+$exclusions = @{ Exclusions = @() }
+if (Test-Path -Path $exclusionsFilePath)
+{
+ $exclusions = Get-Content "$exclusionsFilePath" | ConvertFrom-Json
+}
+
+Push-Location "$SourcesDirectory" # push location for Resolve-Path -Relative to work
+
+# Template files
+$jsonFiles = @()
+$jsonFiles += Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\.template\.config\\localize\\en\..+\.json" } # .NET templating pattern
+$jsonFiles += Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern
+
+$xlfFiles = @()
+
+$allXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.xlf"
+$langXlfFiles = @()
+if ($allXlfFiles) {
+ $null = $allXlfFiles[0].FullName -Match "\.([\w-]+)\.xlf" # matches '[langcode].xlf'
+ $firstLangCode = $Matches.1
+ $langXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.$firstLangCode.xlf"
+}
+$langXlfFiles | ForEach-Object {
+ $null = $_.Name -Match "(.+)\.[\w-]+\.xlf" # matches '[filename].[langcode].xlf
+
+ $destinationFile = "$($_.Directory.FullName)\$($Matches.1).xlf"
+ $xlfFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru
+}
+
+$locFiles = $jsonFiles + $xlfFiles
+
+$locJson = @{
+ Projects = @(
+ @{
+ LanguageSet = $LanguageSet
+ LocItems = @(
+ $locFiles | ForEach-Object {
+ $outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")"
+ $continue = $true
+ foreach ($exclusion in $exclusions.Exclusions) {
+ if ($outputPath.Contains($exclusion))
+ {
+ $continue = $false
+ }
+ }
+ $sourceFile = ($_.FullName | Resolve-Path -Relative)
+ if (!$CreateNeutralXlfs -and $_.Extension -eq '.xlf') {
+ Remove-Item -Path $sourceFile
+ }
+ if ($continue)
+ {
+ return @{
+ SourceFile = $sourceFile
+ CopyOption = "LangIDOnName"
+ OutputPath = $outputPath
+ }
+ }
+ }
+ )
+ }
+ )
+}
+
+$json = ConvertTo-Json $locJson -Depth 5
+Write-Host "LocProject.json generated:`n`n$json`n`n"
+Pop-Location
+
+if (!$UseCheckedInLocProjectJson) {
+ New-Item "$SourcesDirectory\Localize\LocProject.json" -Force # Need this to make sure the Localize directory is created
+ Set-Content "$SourcesDirectory\Localize\LocProject.json" $json
+}
+else {
+ New-Item "$SourcesDirectory\Localize\LocProject-generated.json" -Force # Need this to make sure the Localize directory is created
+ Set-Content "$SourcesDirectory\Localize\LocProject-generated.json" $json
+
+ if ((Get-FileHash "$SourcesDirectory\Localize\LocProject-generated.json").Hash -ne (Get-FileHash "$SourcesDirectory\Localize\LocProject.json").Hash) {
+ Write-PipelineTelemetryError -Category "OneLocBuild" -Message "Existing LocProject.json differs from generated LocProject.json. Download LocProject-generated.json and compare them."
+
+ exit 1
+ }
+ else {
+ Write-Host "Generated LocProject.json and current LocProject.json are identical."
+ }
+}
\ No newline at end of file
diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml
index 53c100222b217..4a32181fd8f93 100644
--- a/eng/common/templates/job/execute-sdl.yml
+++ b/eng/common/templates/job/execute-sdl.yml
@@ -45,6 +45,7 @@ jobs:
buildId: $(AzDOBuildId)
artifactName: ${{ artifactName }}
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
+ checkDownloadedFiles: true
- ${{ if eq(parameters.artifactNames, '') }}:
- task: DownloadBuildArtifacts@0
displayName: Download Build Artifacts
@@ -57,6 +58,7 @@ jobs:
downloadType: specific files
itemPattern: "**"
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
+ checkDownloadedFiles: true
- powershell: eng/common/sdl/extract-artifact-packages.ps1
-InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
-ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
diff --git a/eng/common/templates/job/onelocbuild.yml b/eng/common/templates/job/onelocbuild.yml
new file mode 100644
index 0000000000000..928a70cda2c5a
--- /dev/null
+++ b/eng/common/templates/job/onelocbuild.yml
@@ -0,0 +1,78 @@
+parameters:
+ # Optional: dependencies of the job
+ dependsOn: ''
+
+ # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool
+ pool:
+ vmImage: vs2017-win2016
+
+ CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex
+ GithubPat: $(BotAccount-dotnet-bot-repo-PAT)
+
+ SourcesDirectory: $(Build.SourcesDirectory)
+ CreatePr: true
+ UseCheckedInLocProjectJson: false
+ LanguageSet: VS_Main_Languages
+ LclSource: lclFilesInRepo
+ LclPackageId: ''
+ RepoType: gitHub
+
+jobs:
+- job: OneLocBuild
+
+ dependsOn: ${{ parameters.dependsOn }}
+
+ displayName: OneLocBuild
+
+ pool: ${{ parameters.pool }}
+
+ variables:
+ - group: OneLocBuildVariables # Contains the CeapexPat and GithubPat
+ - name: _GenerateLocProjectArguments
+ value: -SourcesDirectory ${{ parameters.SourcesDirectory }}
+ -LanguageSet "${{ parameters.LanguageSet }}"
+ -CreateNeutralXlfs
+ - ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}:
+ - name: _GenerateLocProjectArguments
+ value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson
+
+
+ steps:
+ - task: Powershell@2
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1
+ arguments: $(_GenerateLocProjectArguments)
+ displayName: Generate LocProject.json
+
+ - task: OneLocBuild@2
+ displayName: OneLocBuild
+ env:
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+ inputs:
+ locProj: Localize/LocProject.json
+ outDir: $(Build.ArtifactStagingDirectory)
+ lclSource: ${{ parameters.LclSource }}
+ lclPackageId: ${{ parameters.LclPackageId }}
+ isCreatePrSelected: ${{ parameters.CreatePr }}
+ packageSourceAuth: patAuth
+ patVariable: ${{ parameters.CeapexPat }}
+ ${{ if eq(parameters.RepoType, 'gitHub') }}:
+ repoType: ${{ parameters.RepoType }}
+ gitHubPatVariable: "${{ parameters.GithubPat }}"
+ condition: always()
+
+ - task: PublishBuildArtifacts@1
+ displayName: Publish Localization Files
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc'
+ PublishLocation: Container
+ ArtifactName: Loc
+ condition: always()
+
+ - task: PublishBuildArtifacts@1
+ displayName: Publish LocProject.json
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/Localize/'
+ PublishLocation: Container
+ ArtifactName: Loc
+ condition: always()
\ No newline at end of file
diff --git a/eng/common/templates/job/performance.yml b/eng/common/templates/job/performance.yml
index f877fd7a89800..e6755df223429 100644
--- a/eng/common/templates/job/performance.yml
+++ b/eng/common/templates/job/performance.yml
@@ -71,11 +71,11 @@ jobs:
# Run all of the steps to setup repo
- ${{ each step in parameters.steps }}:
- ${{ step }}
- - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal) -Framework $(_Framework) ${{ parameters.extraSetupParameters }}
+ - powershell: $(Build.SourcesDirectory)\eng\testing\performance\performance-setup.ps1 $(IsInternal) -Framework $(_Framework) ${{ parameters.extraSetupParameters }}
displayName: Performance Setup (Windows)
condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal) --framework $(_Framework) ${{ parameters.extraSetupParameters }}
+ - script: $(Build.SourcesDirectory)/eng/testing/performance/performance-setup.sh $(IsInternal) --framework $(_Framework) ${{ parameters.extraSetupParameters }}
displayName: Performance Setup (Unix)
condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml
index 66ef736417f69..3b9e2524ff37c 100644
--- a/eng/common/templates/job/publish-build-assets.yml
+++ b/eng/common/templates/job/publish-build-assets.yml
@@ -52,6 +52,7 @@ jobs:
inputs:
artifactName: AssetManifests
downloadPath: '$(Build.StagingDirectory)/Download'
+ checkDownloadedFiles: true
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
diff --git a/eng/common/templates/phases/publish-build-assets.yml b/eng/common/templates/phases/publish-build-assets.yml
index a0a8074282aa8..4e51e472e2bba 100644
--- a/eng/common/templates/phases/publish-build-assets.yml
+++ b/eng/common/templates/phases/publish-build-assets.yml
@@ -20,6 +20,7 @@ phases:
inputs:
artifactName: AssetManifests
downloadPath: '$(Build.StagingDirectory)/Download'
+ checkDownloadedFiles: true
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
- task: AzureKeyVault@1
diff --git a/eng/common/templates/post-build/channels/generic-internal-channel.yml b/eng/common/templates/post-build/channels/generic-internal-channel.yml
index 7ae5255921aa8..58fa9a35b8ca9 100644
--- a/eng/common/templates/post-build/channels/generic-internal-channel.yml
+++ b/eng/common/templates/post-build/channels/generic-internal-channel.yml
@@ -58,6 +58,7 @@ stages:
PdbArtifacts/**
BlobArtifacts/**
downloadPath: '$(Build.ArtifactStagingDirectory)'
+ checkDownloadedFiles: true
# This is necessary whenever we want to publish/restore to an AzDO private feed
# Since sdk-task.ps1 tries to restore packages we need to do this authentication here
@@ -124,6 +125,7 @@ stages:
BlobArtifacts/**
AssetManifests/**
downloadPath: '$(Build.ArtifactStagingDirectory)'
+ checkDownloadedFiles: true
- task: NuGetToolInstaller@1
displayName: 'Install NuGet.exe'
diff --git a/eng/common/templates/post-build/channels/generic-public-channel.yml b/eng/common/templates/post-build/channels/generic-public-channel.yml
index 6cf39dbb2907c..b50c0b3bdb8e6 100644
--- a/eng/common/templates/post-build/channels/generic-public-channel.yml
+++ b/eng/common/templates/post-build/channels/generic-public-channel.yml
@@ -56,6 +56,7 @@ stages:
PdbArtifacts/**
BlobArtifacts/**
downloadPath: '$(Build.ArtifactStagingDirectory)'
+ checkDownloadedFiles: true
# This is necessary whenever we want to publish/restore to an AzDO private feed
# Since sdk-task.ps1 tries to restore packages we need to do this authentication here
@@ -123,6 +124,7 @@ stages:
BlobArtifacts/**
AssetManifests/**
downloadPath: '$(Build.ArtifactStagingDirectory)'
+ checkDownloadedFiles: true
- task: NuGetToolInstaller@1
displayName: 'Install NuGet.exe'
diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml
index c84ac55ebf8e4..4f79cf0f33703 100644
--- a/eng/common/templates/post-build/post-build.yml
+++ b/eng/common/templates/post-build/post-build.yml
@@ -117,6 +117,7 @@ stages:
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: PackageArtifacts
+ checkDownloadedFiles: true
- task: PowerShell@2
displayName: Validate
@@ -149,6 +150,7 @@ stages:
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: PackageArtifacts
+ checkDownloadedFiles: true
itemPattern: |
**
!**/Microsoft.SourceBuild.Intermediate.*.nupkg
@@ -205,6 +207,7 @@ stages:
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: BlobArtifacts
+ checkDownloadedFiles: true
- task: PowerShell@2
displayName: Validate
diff --git a/eng/common/templates/post-build/setup-maestro-vars.yml b/eng/common/templates/post-build/setup-maestro-vars.yml
index d0cbfb6c6ffdd..4a22b2e6f6de7 100644
--- a/eng/common/templates/post-build/setup-maestro-vars.yml
+++ b/eng/common/templates/post-build/setup-maestro-vars.yml
@@ -18,6 +18,7 @@ jobs:
inputs:
buildType: current
artifactName: ReleaseConfigs
+ checkDownloadedFiles: true
- task: PowerShell@2
name: setReleaseVars
diff --git a/eng/common/templates/steps/source-build.yml b/eng/common/templates/steps/source-build.yml
index 8e336b7d16b34..65ee5992bf460 100644
--- a/eng/common/templates/steps/source-build.yml
+++ b/eng/common/templates/steps/source-build.yml
@@ -36,7 +36,7 @@ steps:
${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \
--configuration $buildConfig \
- --restore --build --pack --publish \
+ --restore --build --pack --publish -bl \
$officialBuildArgs \
$targetRidArgs \
/p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \
diff --git a/eng/illink.targets b/eng/illink.targets
index c7a97df0c4d36..52acb8716e004 100644
--- a/eng/illink.targets
+++ b/eng/illink.targets
@@ -24,9 +24,9 @@
$(ILLinkTrimInputPath)$(TargetName).pdb$(IntermediateOutputPath)
- $(ILLinkDirectory)ILLinkTrim.xml
-
- $(ILLinkDirectory)ILLinkTrim_LibraryBuild.xml
+ $(ILLinkDirectory)ILLink.Descriptors.xml
+
+ $(ILLinkDirectory)ILLink.Descriptors.LibraryBuild.xml$(IntermediateOutputPath)ILLink.Descriptors.xml$(IntermediateOutputPath)ILLink.Substitutions.xml
@@ -35,13 +35,14 @@
$(ILLinkDirectory)ILLink.Suppressions$(ILLinkSuppressionsXmlFilePrefix).xml$(ILLinkSuppressionsXmlFilePrefix).$(Configuration).xml
+ $(ILLinkSuppressionsXmlFilePrefix).LibraryBuild.xmltrue
-
+
@@ -73,6 +74,8 @@
Include="$(ILLinkSuppressionsXmlFile)" />
+
@@ -90,8 +93,8 @@
-
-
+
+ ILLink.Descriptors.xml
@@ -112,18 +115,18 @@
- $(ILLinkDescriptorsXmlIntermediatePath)
+ $(ILLinkDescriptorsXmlIntermediatePath)
+ CombinedLinkerXmlFile="$(ILLinkDescriptorsXml)" />
-
+
@@ -227,8 +230,8 @@
$(ILLinkArgs) --action link $(TargetName)$(ILLinkArgs) -b true
-
- $(ILLinkArgs) -x "$(ILLinkTrimXmlLibraryBuild)"
+
+ $(ILLinkArgs) -x "$(ILLinkDescriptorsLibraryBuildXml)"
-
-
-
+
+
+ >>:TARGET_64BIT>)
elseif (CLR_CMAKE_TARGET_ARCH_ARM)
set(ARCH_SOURCES_DIR arm)
- if (ARM_SOFTFP)
- set(ARCH_TARGET_NAME armel)
- else ()
- set(ARCH_TARGET_NAME arm)
- endif ()
+ set(ARCH_TARGET_NAME arm)
add_compile_definitions($<$>>:TARGET_ARM>)
elseif (CLR_CMAKE_TARGET_ARCH_I386)
set(ARCH_TARGET_NAME x86)
@@ -479,7 +463,11 @@ if (MSVC)
# Compile options for targeting windows
add_compile_options($<$:/nologo>) # Suppress Startup Banner
- add_compile_options($<$:/W3>) # set warning level to 3
+ # /W3 is added by default by CMake, so remove it
+ string(REPLACE "/W3" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ string(REPLACE "/W3" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ # set default warning level to 3 but allow targets to override it.
+ add_compile_options($<$:/W$>,$,3>>>)
add_compile_options($<$:/WX>) # treat warnings as errors
add_compile_options($<$:/Oi>) # enable intrinsics
add_compile_options($<$:/Oy->) # disable suppressing of the creation of frame pointers on the call stack for quicker function calls
@@ -502,59 +490,45 @@ if (MSVC)
add_compile_options($<$:/Zc:inline>) # All inline functions must have their definition available in the current translation unit.
add_compile_options($<$:/Zc:forScope>) # Enforce standards-compliant for scope.
- add_compile_options($<$:/wd4960>)
- add_compile_options($<$:/wd4961>)
- add_compile_options($<$:/wd4603>)
- add_compile_options($<$:/wd4627>)
- add_compile_options($<$:/wd4838>)
- add_compile_options($<$:/wd4456>)
- add_compile_options($<$:/wd4457>)
- add_compile_options($<$:/wd4458>)
- add_compile_options($<$:/wd4459>)
- add_compile_options($<$:/wd4091>)
- add_compile_options($<$:/we4640>)
-
# Disable Warnings:
- # 4291: Delete not defined for new, c++ exception may cause leak.
- # 5105: Windows SDK headers use 'defined' operator in some macros
- add_compile_options($<$:/wd4291>)
- add_compile_options($<$:/wd5105>)
+ add_compile_options($<$:/wd4065>) # switch statement contains 'default' but no 'case' labels
+ add_compile_options($<$:/wd4100>) # 'identifier' : unreferenced formal parameter
+ add_compile_options($<$:/wd4127>) # conditional expression is constant
+ add_compile_options($<$:/wd4189>) # local variable is initialized but not referenced
+ add_compile_options($<$:/wd4200>) # nonstandard extension used : zero-sized array in struct/union
+ add_compile_options($<$:/wd4201>) # nonstandard extension used : nameless struct/union
+ add_compile_options($<$:/wd4245>) # conversion from 'type1' to 'type2', signed/unsigned mismatch
+ add_compile_options($<$:/wd4291>) # no matching operator delete found; memory will not be freed if initialization throws an exception
+ add_compile_options($<$:/wd4456>) # declaration of 'identifier' hides previous local declaration
+ add_compile_options($<$:/wd4457>) # declaration of 'identifier' hides function parameter
+ add_compile_options($<$:/wd4458>) # declaration of 'identifier' hides class member
+ add_compile_options($<$:/wd4733>) # Inline asm assigning to 'FS:0' : handler not registered as safe handler
+ add_compile_options($<$:/wd4838>) # conversion from 'type_1' to 'type_2' requires a narrowing conversion
+ add_compile_options($<$:/wd4960>) # 'function' is too big to be profiled
+ add_compile_options($<$:/wd4961>) # No profile data was merged into '.pgd file', profile-guided optimizations disabled
+ add_compile_options($<$:/wd5105>) # macro expansion producing 'defined' has undefined behavior
# Treat Warnings as Errors:
- # 4007: 'main' : must be __cdecl.
- # 4013: 'function' undefined - assuming extern returning int.
- # 4102: "'%$S' : unreferenced label".
- # 4551: Function call missing argument list.
- # 4700: Local used w/o being initialized.
- # 4806: Unsafe operation involving type 'bool'.
- add_compile_options($<$:/we4007>)
- add_compile_options($<$:/we4013>)
- add_compile_options($<$:/we4102>)
- add_compile_options($<$:/we4551>)
- add_compile_options($<$:/we4700>)
- add_compile_options($<$:/we4806>)
+ add_compile_options($<$:/we4007>) # 'main' : must be __cdecl.
+ add_compile_options($<$:/we4013>) # 'function' undefined - assuming extern returning int.
+ add_compile_options($<$:/we4102>) # "'%$S' : unreferenced label".
+ add_compile_options($<$:/we4551>) # Function call missing argument list.
+ add_compile_options($<$:/we4700>) # Local used w/o being initialized.
+ add_compile_options($<$:/we4640>) # 'instance' : construction of local static object is not thread-safe
+ add_compile_options($<$:/we4806>) # Unsafe operation involving type 'bool'.
# Set Warning Level 3:
- # 4092: Sizeof returns 'unsigned long'.
- # 4121: Structure is sensitive to alignment.
- # 4125: Decimal digit in octal sequence.
- # 4130: Logical operation on address of string constant.
- # 4132: Const object should be initialized.
- # 4212: Function declaration used ellipsis.
- # 4530: C++ exception handler used, but unwind semantics are not enabled. Specify -GX.
- # 35038: data member 'member1' will be initialized after data member 'member2'.
- add_compile_options($<$:/w34092>)
- add_compile_options($<$:/w34121>)
- add_compile_options($<$:/w34125>)
- add_compile_options($<$:/w34130>)
- add_compile_options($<$:/w34132>)
- add_compile_options($<$:/w34212>)
- add_compile_options($<$:/w34530>)
- add_compile_options($<$:/w35038>)
+ add_compile_options($<$:/w34092>) # Sizeof returns 'unsigned long'.
+ add_compile_options($<$:/w34121>) # Structure is sensitive to alignment.
+ add_compile_options($<$:/w34125>) # Decimal digit in octal sequence.
+ add_compile_options($<$:/w34130>) # Logical operation on address of string constant.
+ add_compile_options($<$:/w34132>) # Const object should be initialized.
+ add_compile_options($<$:/w34212>) # Function declaration used ellipsis.
+ add_compile_options($<$:/w34530>) # C++ exception handler used, but unwind semantics are not enabled. Specify -GX.
+ add_compile_options($<$:/w35038>) # data member 'member1' will be initialized after data member 'member2'.
# Set Warning Level 4:
- # 4177: Pragma data_seg s/b at global scope.
- add_compile_options($<$:/w44177>)
+ add_compile_options($<$:/w44177>) # Pragma data_seg s/b at global scope.
add_compile_options($<$:/Zi>) # enable debugging information
add_compile_options($<$:/ZH:SHA_256>) # use SHA256 for generating hashes of compiler processed source files.
diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake
index 9e7e7743c0f9e..aa141437e190c 100644
--- a/eng/native/configureplatform.cmake
+++ b/eng/native/configureplatform.cmake
@@ -41,9 +41,9 @@ if(CLR_CMAKE_HOST_OS STREQUAL Linux)
set(CLR_CMAKE_HOST_UNIX_ARMV7L 1)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a)
set(CLR_CMAKE_HOST_UNIX_ARM 1)
- elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)
set(CLR_CMAKE_HOST_UNIX_ARM64 1)
- elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686 OR CMAKE_SYSTEM_PROCESSOR STREQUAL x86)
set(CLR_CMAKE_HOST_UNIX_X86 1)
else()
clr_unknown_arch()
@@ -88,7 +88,7 @@ if(CLR_CMAKE_HOST_OS STREQUAL Darwin)
set(CMAKE_ASM_COMPILE_OBJECT "${CMAKE_C_COMPILER} -o
+
+
+
+
+ @(NETCoreApp30RIDs)
+
+
diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml
index 3baff96b8df14..126cecfacaf05 100644
--- a/eng/pipelines/common/global-build-job.yml
+++ b/eng/pipelines/common/global-build-job.yml
@@ -86,10 +86,6 @@ jobs:
${{ if ne(parameters.enableRichCodeNavigation, true) }}:
value: ''
- - ${{ if eq(parameters.osGroup, 'Android') }}:
- - name: ANDROID_OPENSSL_AAR
- value: /tmp/openssl-android
-
- ${{ each variable in parameters.variables }}:
- ${{ variable }}
@@ -108,7 +104,7 @@ jobs:
artifact: Mono_Offsets_${{monoCrossAOTTargetOS}}
path: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles'
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS', 'Android') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }} ${{ parameters.archType }} azDO
displayName: Install Build Dependencies
@@ -117,6 +113,16 @@ jobs:
df -h
displayName: Disk Usage before Build
+ - ${{ if eq(parameters.nameSuffix, 'Browser_wasm_Windows') }}:
+ # Update machine certs
+ - task: PowerShell@2
+ displayName: Update machine certs
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/pipelines/mono/update-machine-certs.ps1
+
+ - script: $(Build.SourcesDirectory)\eng\common\init-tools-native.cmd -InstallDirectory $(Build.SourcesDirectory)\native-tools -Force
+ displayName: Install native dependencies
+
# Build
- script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci -arch ${{ parameters.archType }} $(_osParameter) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_crossBuildPropertyArg) $(_cxx11Parameter) $(_richCodeNavigationParam)
displayName: Build product
diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml
index cbf5370a09300..000d1dcecdfda 100644
--- a/eng/pipelines/common/platform-matrix.yml
+++ b/eng/pipelines/common/platform-matrix.yml
@@ -188,6 +188,7 @@ jobs:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
+ hostedOs: Linux
osGroup: Browser
archType: wasm
targetRid: browser-wasm
@@ -203,6 +204,25 @@ jobs:
platforms: ${{ parameters.platforms }}
${{ insert }}: ${{ parameters.jobParameters }}
+- ${{ if containsValue(parameters.platforms, 'Browser_wasm_win') }}:
+ - template: xplat-setup.yml
+ parameters:
+ jobTemplate: ${{ parameters.jobTemplate }}
+ helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
+ variables: ${{ parameters.variables }}
+ hostedOs: windows
+ osGroup: Browser
+ archType: wasm
+ targetRid: browser-wasm
+ platform: Browser_wasm
+ jobParameters:
+ runtimeFlavor: ${{ parameters.runtimeFlavor }}
+ stagedBuild: ${{ parameters.stagedBuild }}
+ buildConfig: ${{ parameters.buildConfig }}
+ ${{ if eq(parameters.passPlatforms, true) }}:
+ platforms: ${{ parameters.platforms }}
+ ${{ insert }}: ${{ parameters.jobParameters }}
+
# FreeBSD
- ${{ if containsValue(parameters.platforms, 'FreeBSD_x64') }}:
- template: xplat-setup.yml
@@ -365,18 +385,39 @@ jobs:
helixQueueGroup: ${{ parameters.helixQueueGroup }}
${{ insert }}: ${{ parameters.jobParameters }}
-# tvOS x64
+# tvOS arm64
-- ${{ if containsValue(parameters.platforms, 'tvOS_x64') }}:
+- ${{ if containsValue(parameters.platforms, 'tvOS_arm64') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
osGroup: tvOS
+ archType: arm64
+ targetRid: tvos-arm64
+ platform: tvOS_arm64
+ jobParameters:
+ runtimeFlavor: mono
+ stagedBuild: ${{ parameters.stagedBuild }}
+ buildConfig: ${{ parameters.buildConfig }}
+ ${{ if eq(parameters.passPlatforms, true) }}:
+ platforms: ${{ parameters.platforms }}
+ helixQueueGroup: ${{ parameters.helixQueueGroup }}
+ ${{ insert }}: ${{ parameters.jobParameters }}
+
+# tvOS Simulator x64
+
+- ${{ if containsValue(parameters.platforms, 'tvOSSimulator_x64') }}:
+ - template: xplat-setup.yml
+ parameters:
+ jobTemplate: ${{ parameters.jobTemplate }}
+ helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
+ variables: ${{ parameters.variables }}
+ osGroup: tvOSSimulator
archType: x64
- targetRid: tvos-x64
- platform: tvOS_x64
+ targetRid: tvossimulator-x64
+ platform: tvOSSimulator_x64
jobParameters:
runtimeFlavor: mono
stagedBuild: ${{ parameters.stagedBuild }}
@@ -386,18 +427,18 @@ jobs:
helixQueueGroup: ${{ parameters.helixQueueGroup }}
${{ insert }}: ${{ parameters.jobParameters }}
-# tvOS arm64
+# tvOS Simulator arm64
-- ${{ if containsValue(parameters.platforms, 'tvOS_arm64') }}:
+- ${{ if containsValue(parameters.platforms, 'tvOSSimulator_arm64') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
- osGroup: tvOS
+ osGroup: tvOSSimulator
archType: arm64
- targetRid: tvos-arm64
- platform: tvOS_arm64
+ targetRid: tvossimulator-arm64
+ platform: tvOSSimulator_arm64
jobParameters:
runtimeFlavor: mono
stagedBuild: ${{ parameters.stagedBuild }}
@@ -407,18 +448,18 @@ jobs:
helixQueueGroup: ${{ parameters.helixQueueGroup }}
${{ insert }}: ${{ parameters.jobParameters }}
-# iOS x64
+# iOS arm
-- ${{ if containsValue(parameters.platforms, 'iOS_x64') }}:
+- ${{ if containsValue(parameters.platforms, 'iOS_arm') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
osGroup: iOS
- archType: x64
- targetRid: ios-x64
- platform: iOS_x64
+ archType: arm
+ targetRid: ios-arm
+ platform: iOS_arm
jobParameters:
runtimeFlavor: mono
stagedBuild: ${{ parameters.stagedBuild }}
@@ -428,18 +469,18 @@ jobs:
helixQueueGroup: ${{ parameters.helixQueueGroup }}
${{ insert }}: ${{ parameters.jobParameters }}
-# iOS x86
+# iOS arm64
-- ${{ if containsValue(parameters.platforms, 'iOS_x86') }}:
+- ${{ if containsValue(parameters.platforms, 'iOS_arm64') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
osGroup: iOS
- archType: x86
- targetRid: ios-x86
- platform: iOS_x86
+ archType: arm64
+ targetRid: ios-arm64
+ platform: iOS_arm64
jobParameters:
runtimeFlavor: mono
stagedBuild: ${{ parameters.stagedBuild }}
@@ -447,21 +488,20 @@ jobs:
${{ if eq(parameters.passPlatforms, true) }}:
platforms: ${{ parameters.platforms }}
helixQueueGroup: ${{ parameters.helixQueueGroup }}
- managedTestBuildOsGroup: OSX
${{ insert }}: ${{ parameters.jobParameters }}
-# iOS arm
+# iOS Simulator x64
-- ${{ if containsValue(parameters.platforms, 'iOS_arm') }}:
+- ${{ if containsValue(parameters.platforms, 'iOSSimulator_x64') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
- osGroup: iOS
- archType: arm
- targetRid: ios-arm
- platform: iOS_arm
+ osGroup: iOSSimulator
+ archType: x64
+ targetRid: iossimulator-x64
+ platform: iOSSimulator_x64
jobParameters:
runtimeFlavor: mono
stagedBuild: ${{ parameters.stagedBuild }}
@@ -471,18 +511,40 @@ jobs:
helixQueueGroup: ${{ parameters.helixQueueGroup }}
${{ insert }}: ${{ parameters.jobParameters }}
-# iOS arm64
+# iOS Simulator x86
-- ${{ if containsValue(parameters.platforms, 'iOS_arm64') }}:
+- ${{ if containsValue(parameters.platforms, 'iOSSimulator_x86') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
- osGroup: iOS
+ osGroup: iOSSimulator
+ archType: x86
+ targetRid: iossimulator-x86
+ platform: iOSsimulator_x86
+ jobParameters:
+ runtimeFlavor: mono
+ stagedBuild: ${{ parameters.stagedBuild }}
+ buildConfig: ${{ parameters.buildConfig }}
+ ${{ if eq(parameters.passPlatforms, true) }}:
+ platforms: ${{ parameters.platforms }}
+ helixQueueGroup: ${{ parameters.helixQueueGroup }}
+ managedTestBuildOsGroup: OSX
+ ${{ insert }}: ${{ parameters.jobParameters }}
+
+# iOS Simulator arm64
+
+- ${{ if containsValue(parameters.platforms, 'iOSSimulator_arm64') }}:
+ - template: xplat-setup.yml
+ parameters:
+ jobTemplate: ${{ parameters.jobTemplate }}
+ helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
+ variables: ${{ parameters.variables }}
+ osGroup: iOSSimulator
archType: arm64
- targetRid: ios-arm64
- platform: iOS_arm64
+ targetRid: iossimulator-arm64
+ platform: iOSSimulator_arm64
jobParameters:
runtimeFlavor: mono
stagedBuild: ${{ parameters.stagedBuild }}
diff --git a/eng/pipelines/common/templates/runtimes/build-test-job.yml b/eng/pipelines/common/templates/runtimes/build-test-job.yml
index 14d17b0849b5b..50de94ee79c7d 100644
--- a/eng/pipelines/common/templates/runtimes/build-test-job.yml
+++ b/eng/pipelines/common/templates/runtimes/build-test-job.yml
@@ -116,7 +116,7 @@ jobs:
artifactName: '$(coreClrProductArtifactName)'
displayName: 'CoreCLR product build'
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
@@ -126,7 +126,7 @@ jobs:
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) allTargets skipnative skipgeneratelayout skiptestwrappers $(buildConfig) $(archType) $(crossArg) $(priorityArg) ci $(librariesOverrideArg)
displayName: Build managed test components
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
diff --git a/eng/pipelines/common/templates/runtimes/run-test-job.yml b/eng/pipelines/common/templates/runtimes/run-test-job.yml
index 54436b52f7a52..1c3554510aed9 100644
--- a/eng/pipelines/common/templates/runtimes/run-test-job.yml
+++ b/eng/pipelines/common/templates/runtimes/run-test-job.yml
@@ -454,7 +454,7 @@ jobs:
- jitstressregs0x1000
- jitminopts
- forcerelocs
- - gcstress15
+ - gcstress0xf
${{ if in(parameters.testGroup, 'gc-longrunning') }}:
longRunningGcTests: true
scenarios:
diff --git a/eng/pipelines/common/xplat-setup.yml b/eng/pipelines/common/xplat-setup.yml
index 5245e0314a82b..6fc1b7b746a2e 100644
--- a/eng/pipelines/common/xplat-setup.yml
+++ b/eng/pipelines/common/xplat-setup.yml
@@ -1,5 +1,6 @@
parameters:
jobTemplate: ''
+ hostedOs: ''
osGroup: ''
osSubgroup: ''
archType: ''
@@ -47,7 +48,7 @@ jobs:
- name: _BuildConfig
value: $(buildConfigUpper)
- - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - ${{ if or(eq(parameters.osGroup, 'windows'), eq(parameters.hostedOs, 'windows')) }}:
- name: archiveExtension
value: '.zip'
- name: archiveType
@@ -63,7 +64,7 @@ jobs:
- name: setScriptToEchoAndFailOnNonZero
value: ''
- - ${{ if ne(parameters.osGroup, 'windows') }}:
+ - ${{ if and(ne(parameters.osGroup, 'windows'), ne(parameters.hostedOs, 'windows')) }}:
- name: archiveExtension
value: '.tar.gz'
- name: archiveType
@@ -109,17 +110,17 @@ jobs:
${{ if eq(parameters.jobParameters.pool, '') }}:
pool:
# Public Linux Build Pool
- ${{ if and(in(parameters.osGroup, 'Linux', 'FreeBSD', 'Browser', 'Android'), eq(variables['System.TeamProject'], 'public')) }}:
+ ${{ if and(or(in(parameters.osGroup, 'Linux', 'FreeBSD', 'Android'), eq(parameters.hostedOs, 'Linux')), eq(variables['System.TeamProject'], 'public')) }}:
name: NetCorePublic-Pool
queue: BuildPool.Ubuntu.1604.Amd64.Open
# Official Build Linux Pool
- ${{ if and(in(parameters.osGroup, 'Linux', 'FreeBSD', 'Browser', 'Android'), ne(variables['System.TeamProject'], 'public')) }}:
+ ${{ if and(or(in(parameters.osGroup, 'Linux', 'FreeBSD', 'Browser', 'Android'), eq(parameters.hostedOs, 'Linux')), ne(variables['System.TeamProject'], 'public')) }}:
name: NetCoreInternal-Pool
queue: BuildPool.Ubuntu.1604.Amd64
# OSX Build Pool (we don't have on-prem OSX BuildPool
- ${{ if in(parameters.osGroup, 'OSX', 'MacCatalyst', 'iOS', 'tvOS') }}:
+ ${{ if in(parameters.osGroup, 'OSX', 'MacCatalyst', 'iOS', 'iOSSimulator', 'tvOS', 'tvOSSimulator') }}:
vmImage: 'macOS-10.15'
# Official Build Windows Pool
@@ -128,7 +129,7 @@ jobs:
queue: BuildPool.Windows.10.Amd64.VS2019
# Public Windows Build Pool
- ${{ if and(eq(parameters.osGroup, 'windows'), eq(variables['System.TeamProject'], 'public')) }}:
+ ${{ if and(or(eq(parameters.osGroup, 'windows'), eq(parameters.hostedOs, 'windows')), eq(variables['System.TeamProject'], 'public')) }}:
name: NetCorePublic-Pool
queue: BuildPool.Windows.10.Amd64.VS2019.Open
diff --git a/eng/pipelines/coreclr/gcstress-extra.yml b/eng/pipelines/coreclr/gcstress-extra.yml
index 4bd0adcbba92a..ab867202f80a7 100644
--- a/eng/pipelines/coreclr/gcstress-extra.yml
+++ b/eng/pipelines/coreclr/gcstress-extra.yml
@@ -16,6 +16,9 @@ jobs:
buildConfig: checked
platformGroup: gcstress
platforms:
+ # It is too early to include OSX_arm64 in platform group gcstress
+ # Adding it here will enable it also
+ - OSX_arm64
- CoreClrTestBuildHost # Either OSX_x64 or Linux_x64
jobParameters:
testGroup: gcstress-extra
@@ -35,6 +38,10 @@ jobs:
jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
buildConfig: checked
platformGroup: gcstress
+ platforms:
+ # It is too early to include OSX_arm64 in platform group gcstress
+ # Adding it here will enable it also
+ - OSX_arm64
helixQueueGroup: ci
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
jobParameters:
diff --git a/eng/pipelines/coreclr/gcstress0x3-gcstress0xc.yml b/eng/pipelines/coreclr/gcstress0x3-gcstress0xc.yml
index c2f8a86448b22..436deaca79677 100644
--- a/eng/pipelines/coreclr/gcstress0x3-gcstress0xc.yml
+++ b/eng/pipelines/coreclr/gcstress0x3-gcstress0xc.yml
@@ -16,6 +16,9 @@ jobs:
buildConfig: checked
platformGroup: gcstress
platforms:
+ # It is too early to include OSX_arm64 in platform group gcstress
+ # Adding it here will enable it also
+ - OSX_arm64
- CoreClrTestBuildHost # Either OSX_x64 or Linux_x64
jobParameters:
testGroup: gcstress0x3-gcstress0xc
@@ -35,6 +38,10 @@ jobs:
jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
buildConfig: checked
platformGroup: gcstress
+ platforms:
+ # It is too early to include OSX_arm64 in platform group gcstress
+ # Adding it here will enable it also
+ - OSX_arm64
helixQueueGroup: ci
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
jobParameters:
diff --git a/eng/pipelines/coreclr/perf.yml b/eng/pipelines/coreclr/perf.yml
index 879ff40c57d73..2f71e622cfcfa 100644
--- a/eng/pipelines/coreclr/perf.yml
+++ b/eng/pipelines/coreclr/perf.yml
@@ -109,6 +109,72 @@ jobs:
archiveType: zip
archiveExtension: .zip
+ # build mono for AOT
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - Linux_x64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ nameSuffix: AOT
+ isOfficialBuild: false
+ extraStepsTemplate: /eng/pipelines/common/upload-artifact-step.yml
+ extraStepsParameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: AOT Mono Artifacts
+ artifactName: LinuxMonoAOTx64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - Linux_arm64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ nameSuffix: AOT
+ isOfficialBuild: false
+ extraStepsTemplate: /eng/pipelines/common/upload-artifact-step.yml
+ extraStepsParameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: AOT Mono Artifacts
+ artifactName: LinuxMonoAOTarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
+ # build mono Android scenarios
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - Android_arm64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ nameSuffix: AndroidMono
+ isOfficialBuild: false
+ extraStepsTemplate: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
+ extraStepsParameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: Android Mono Artifacts
+ artifactName: AndroidMonoarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
+
# build mono
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -118,6 +184,22 @@ jobs:
platforms:
- Linux_x64
+ # run mono android scenarios
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - Windows_x64
+ jobParameters:
+ testGroup: perf
+ runtimeType: AndroidMono
+ projectFile: android_scenarios.proj
+ runKind: android_scenarios
+ runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
+ logicalmachine: 'perfpixel4a'
+
# run mono microbenchmarks perf job
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -153,7 +235,7 @@ jobs:
runJobTemplate: /eng/pipelines/coreclr/templates/run-performance-job.yml
logicalmachine: 'perftiger'
- # run mono wasm microbenchmarks perf job
+ #run mono wasm microbenchmarks perf job
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml # NOTE: should we move this file out of coreclr tempelates because it contains mono jobs?
@@ -171,6 +253,24 @@ jobs:
runJobTemplate: /eng/pipelines/coreclr/templates/run-performance-job.yml
logicalmachine: 'perftiger'
+ # run mono aot microbenchmarks perf job
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml # NOTE: should we move this file out of coreclr tempelates because it contains mono jobs?
+ buildConfig: release
+ runtimeFlavor: aot
+ platforms:
+ - Linux_x64
+ - Linux_arm64
+ jobParameters:
+ testGroup: perf
+ liveLibrariesBuildConfig: Release
+ runtimeType: mono
+ codeGenType: 'AOT'
+ projectFile: microbenchmarks.proj
+ runKind: micro_mono
+ runJobTemplate: /eng/pipelines/coreclr/templates/run-performance-job.yml
+ logicalmachine: 'perftiger'
# run coreclr perftiger microbenchmarks perf job
- template: /eng/pipelines/common/platform-matrix.yml
diff --git a/eng/pipelines/coreclr/r2r-extra.yml b/eng/pipelines/coreclr/r2r-extra.yml
index eee93c9af341c..236fc090dddc0 100644
--- a/eng/pipelines/coreclr/r2r-extra.yml
+++ b/eng/pipelines/coreclr/r2r-extra.yml
@@ -34,7 +34,7 @@ jobs:
parameters:
jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
buildConfig: checked
- platformGroup: gcstress # r2r-extra testGroup runs gcstress15 scenario
+ platformGroup: gcstress # r2r-extra testGroup runs gcstress0xf scenario
helixQueueGroup: ci
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
jobParameters:
diff --git a/eng/pipelines/coreclr/superpmi.yml b/eng/pipelines/coreclr/superpmi.yml
index f581f69bbf649..cf670f3d17b9d 100644
--- a/eng/pipelines/coreclr/superpmi.yml
+++ b/eng/pipelines/coreclr/superpmi.yml
@@ -123,10 +123,9 @@ jobs:
platforms:
# Linux tests are built on the OSX machines.
# - OSX_x64
- # TODO: Linux crossgen2 jobs crash during collection, and need to be investigated.
- # - Linux_arm
- # - Linux_arm64
- # - Linux_x64
+ - Linux_arm
+ - Linux_arm64
+ - Linux_x64
- windows_x64
- windows_x86
- windows_arm64
diff --git a/eng/pipelines/coreclr/templates/build-job.yml b/eng/pipelines/coreclr/templates/build-job.yml
index 349cdfd0bb215..3727b277dcd85 100644
--- a/eng/pipelines/coreclr/templates/build-job.yml
+++ b/eng/pipelines/coreclr/templates/build-job.yml
@@ -130,13 +130,7 @@ jobs:
value: ''
- ${{ if ne(parameters.testGroup, 'innerloop') }}:
- name: clrBuildPALTestsBuildArg
- value: '-paltests '
-
- - name: ninjaArg
- value: ''
- - ${{ if eq(parameters.osGroup, 'windows') }}:
- - name: ninjaArg
- value: '-ninja'
+ value: '-component runtime -component alljits -component paltests '
- name: pgoInstrumentArg
value: ''
@@ -181,7 +175,7 @@ jobs:
continueOnError: false
condition: and(succeeded(), in(variables['SignType'], 'real', 'test'))
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
@@ -194,13 +188,13 @@ jobs:
# Build CoreCLR Runtime
- ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) $(crossArg) $(osArg) -ci $(compilerArg) $(clrBuildPALTestsBuildArg) $(ninjaArg) $(officialBuildIdArg) $(clrInterpreterBuildArg)
+ - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) $(crossArg) $(osArg) -ci $(compilerArg) $(clrBuildPALTestsBuildArg) $(officialBuildIdArg) $(clrInterpreterBuildArg)
displayName: Build CoreCLR Runtime
- ${{ if eq(parameters.osGroup, 'windows') }}:
- - script: set __TestIntermediateDir=int&&$(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) -ci $(ninjaArg) $(enforcePgoArg) $(pgoInstrumentArg) $(officialBuildIdArg) $(clrInterpreterBuildArg)
+ - script: set __TestIntermediateDir=int&&$(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) -ci $(enforcePgoArg) $(pgoInstrumentArg) $(officialBuildIdArg) $(clrInterpreterBuildArg)
displayName: Build CoreCLR Runtime
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
diff --git a/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml b/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
new file mode 100644
index 0000000000000..2b556af6d911b
--- /dev/null
+++ b/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
@@ -0,0 +1,45 @@
+parameters:
+ osGroup: ''
+ osSubgroup: ''
+ archType: ''
+ buildConfig: ''
+ runtimeFlavor: ''
+ helixQueues: ''
+ targetRid: ''
+ nameSuffix: ''
+ platform: ''
+ shouldContinueOnError: ''
+ rootFolder: ''
+ includeRootFolder: ''
+ displayName: ''
+ artifactName: ''
+ archiveExtension: ''
+ archiveType: ''
+ tarCompression: ''
+
+steps:
+# Build Android sample app
+ - ${{ if eq(parameters.osGroup, 'Android') }}:
+ - script: make run MONO_ARCH=arm64 DEPLOY_AND_RUN=false
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/Android
+ displayName: Build HelloAndroid sample app
+
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ osGroup: ${{ parameters.osGroup }}
+ osSubgroup: ${{ parameters.osSubgroup }}
+ archType: ${{ parameters.archType }}
+ buildConfig: ${{ parameters.buildConfig }}
+ runtimeFlavor: ${{ parameters.runtimeFlavor }}
+ helixQueues: ${{ parameters.helixQueues }}
+ targetRid: ${{ parameters.targetRid }}
+ nameSuffix: ${{ parameters.nameSuffix }}
+ platform: ${{ parameters.platform }}
+ shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
+ rootFolder: ${{ parameters.rootFolder }}
+ includeRootFolder: ${{ parameters.includeRootFolder }}
+ displayName: ${{ parameters.displayName }}
+ artifactName: ${{ parameters.artifactName }}
+ archiveExtension: ${{ parameters.archiveExtension }}
+ archiveType: ${{ parameters.archiveType }}
+ tarCompression: ${{ parameters.tarCompression }}
\ No newline at end of file
diff --git a/eng/pipelines/coreclr/templates/perf-job.yml b/eng/pipelines/coreclr/templates/perf-job.yml
index ef7bf235269f0..d208f362fac02 100644
--- a/eng/pipelines/coreclr/templates/perf-job.yml
+++ b/eng/pipelines/coreclr/templates/perf-job.yml
@@ -11,7 +11,7 @@ parameters:
runtimeType: 'coreclr'
pool: ''
codeGenType: 'JIT'
- projetFile: ''
+ projectFile: ''
runKind: ''
runJobTemplate: '/eng/pipelines/coreclr/templates/run-performance-job.yml'
additionalSetupParameters: ''
@@ -44,29 +44,38 @@ jobs:
logicalmachine: ${{ parameters.logicalmachine }}
# Test job depends on the corresponding build job
dependsOn:
- - ${{ format('coreclr_{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
+ - ${{ if ne(parameters.runtimeType, 'AndroidMono')}}:
+ - ${{ format('coreclr_{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
- ${{ if ne(parameters.liveLibrariesBuildConfig, '') }}:
- ${{ format('libraries_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveLibrariesBuildConfig) }}
- - ${{ if eq(parameters.runtimeType, 'mono') }}:
+ - ${{ if and(eq(parameters.runtimeType, 'mono'), ne(parameters.codeGenType, 'AOT')) }}:
- ${{ format('mono_{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
- ${{ if eq(parameters.runtimeType, 'wasm') }}:
- ${{ format('build_{0}{1}_{2}_{3}_{4}', 'Browser', '', 'wasm', parameters.buildConfig, parameters.runtimeType) }}
+ - ${{ if eq(parameters.codeGenType, 'AOT')}}:
+ - ${{ format('build_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.codeGenType) }}
+ - ${{ if eq(parameters.runtimeType, 'AndroidMono')}}:
+ - ${{ 'build_Android_arm64_release_AndroidMono' }}
- ${{ if eq(parameters.osGroup, 'windows') }}:
+ ${{ if and(eq(parameters.osGroup, 'windows'), ne(parameters.runtimeType, 'AndroidMono')) }}:
${{ if eq(parameters.runtimeType, 'mono') }}:
extraSetupParameters: -Architecture ${{ parameters.archType }} -MonoDotnet $(Build.SourcesDirectory)\.dotnet-mono
${{ if eq(parameters.runtimeType, 'coreclr') }}:
extraSetupParameters: -CoreRootDirectory $(Build.SourcesDirectory)\artifacts\tests\coreclr\${{ parameters.osGroup }}.${{ parameters.archType }}.Release\Tests\Core_Root -Architecture ${{ parameters.archType }}
- ${{ if ne(parameters.osGroup, 'windows') }}:
- ${{ if eq(parameters.runtimeType, 'mono') }}:
+ ${{ if and(ne(parameters.osGroup, 'windows'), ne(parameters.runtimeType, 'AndroidMono')) }}:
+ ${{ if and(eq(parameters.runtimeType, 'mono'), ne(parameters.codeGenType, 'AOT')) }}:
extraSetupParameters: --architecture ${{ parameters.archType }} --monodotnet $(Build.SourcesDirectory)/.dotnet-mono
${{ if eq(parameters.runtimeType, 'wasm') }}:
extraSetupParameters: --architecture ${{ parameters.archType }} --wasm $(librariesDownloadDir)/bin/wasm
+ ${{ if eq(parameters.codeGenType, 'AOT') }}:
+ extraSetupParameters: --architecture ${{ parameters.archType }} --monoaot $(librariesDownloadDir)/bin/aot
${{ if and(eq(parameters.runtimeType, 'coreclr'), ne(parameters.osSubGroup, '_musl')) }}:
extraSetupParameters: --corerootdirectory $(Build.SourcesDirectory)/artifacts/tests/coreclr/${{ parameters.osGroup }}.${{ parameters.archType }}.Release/Tests/Core_Root --architecture ${{ parameters.archType }}
${{ if and(eq(parameters.runtimeType, 'coreclr'), eq(parameters.osSubGroup, '_musl')) }}:
extraSetupParameters: --corerootdirectory $(Build.SourcesDirectory)/artifacts/tests/coreclr/${{ parameters.osGroup }}.${{ parameters.archType }}.Release/Tests/Core_Root --architecture ${{ parameters.archType }} --alpine
-
+ ${{ if eq(parameters.runtimeType, 'AndroidMono') }}:
+ extraSetupParameters: -Architecture ${{ parameters.archType }} -AndroidMono
+
variables: ${{ parameters.variables }}
frameworks:
@@ -85,15 +94,16 @@ jobs:
displayName: 'live-built libraries'
# Download coreclr
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(buildProductRootFolderPath)
- artifactFileName: '$(buildProductArtifactName)$(archiveExtension)'
- artifactName: '$(buildProductArtifactName)'
- displayName: 'Coreclr product build'
+ - ${{ if ne(parameters.runtimeType, 'AndroidMono') }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(buildProductRootFolderPath)
+ artifactFileName: '$(buildProductArtifactName)$(archiveExtension)'
+ artifactName: '$(buildProductArtifactName)'
+ displayName: 'Coreclr product build'
# Download mono
- - ${{ if eq(parameters.runtimeType, 'mono') }}:
+ - ${{ if and(eq(parameters.runtimeType, 'mono'), ne(parameters.codeGenType, 'AOT')) }}:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
unpackFolder: $(librariesDownloadDir)/bin/mono/$(osGroup).$(archType).$(buildConfigUpper)
@@ -114,6 +124,29 @@ jobs:
- script: "mkdir $(librariesDownloadDir)/bin/wasm;unzip -o $(librariesDownloadDir)/BrowserWasm/artifacts/packages/Release/Shipping/Microsoft.NETCore.App.Runtime.browser-wasm.6.0.0-ci.nupkg data/* runtimes/* -d $(librariesDownloadDir)/bin/wasm;cp src/mono/wasm/runtime-test.js $(librariesDownloadDir)/bin/wasm/runtime-test.js;find $(librariesDownloadDir)/bin/wasm -type f -exec chmod 664 {} \\;"
displayName: "Create wasm directory (Linux)"
+ # Download AOT
+ - ${{ if eq(parameters.codeGenType, 'AOT') }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(librariesDownloadDir)/LinuxMonoAOT
+ artifactFileName: LinuxMonoAOT${{ parameters.archType }}.tar.gz
+ artifactName: LinuxMonoAOT${{ parameters.archType }}
+ displayName: AOT Mono Artifacts
+
+ - script: "mkdir -p $(librariesDownloadDir)/bin/aot/sgen;mkdir -p $(librariesDownloadDir)/bin/aot/pack;cp -r $(librariesDownloadDir)/LinuxMonoAOT/artifacts/obj/mono/Linux.${{ parameters.archType }}.Release/mono/* $(librariesDownloadDir)/bin/aot/sgen;cp -r $(librariesDownloadDir)/LinuxMonoAOT/artifacts/bin/microsoft.netcore.app.runtime.linux-${{ parameters.archType }}/Release/* $(librariesDownloadDir)/bin/aot/pack"
+ displayName: "Create aot directory (Linux)"
+
+ # Download AndroidMono
+ - ${{ if eq(parameters.runtimeType, 'AndroidMono')}}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)
+ cleanUnpackFolder: false
+ artifactFileName: 'AndroidMonoarm64.tar.gz'
+ artifactName: 'AndroidMonoarm64'
+ displayName: 'Mono Android runtime'
+
+
# Create Core_Root
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) $(buildConfig) $(archType) generatelayoutonly $(librariesOverrideArg)
displayName: Create Core_Root
@@ -122,8 +155,8 @@ jobs:
# Copy the runtime directory into the testhost folder to include OOBs.
- script: "build.cmd -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)\\bin\\mono\\$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\runtime\\$(_Framework)-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\$(_Framework)-$(osGroup)-$(buildConfigUpper)-$(archType)\\shared\\Microsoft.NETCore.App\\6.0.0 /E /I /Y;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\$(_Framework)-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\.dotnet-mono /E /I /Y;copy $(Build.SourcesDirectory)\\artifacts\\bin\\coreclr\\$(osGroup).$(archType).$(buildConfigUpper)\\corerun.exe $(Build.SourcesDirectory)\\.dotnet-mono\\shared\\Microsoft.NETCore.App\\6.0.0\\corerun.exe"
displayName: "Create mono dotnet (Windows)"
- condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), eq(variables.osGroup, 'windows'))
+ condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), eq(variables.osGroup, 'windows'), ne('${{ parameters.runtimeType }}', 'AndroidMono'))
- script: "mkdir $(Build.SourcesDirectory)/.dotnet-mono;./build.sh -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)/bin/mono/$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;cp $(Build.SourcesDirectory)/artifacts/bin/runtime/$(_Framework)-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/artifacts/bin/testhost/$(_Framework)-$(osGroup)-$(buildConfigUpper)-$(archType)/shared/Microsoft.NETCore.App/6.0.0 -rf;cp $(Build.SourcesDirectory)/artifacts/bin/testhost/$(_Framework)-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/.dotnet-mono -r;cp $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)/corerun $(Build.SourcesDirectory)/.dotnet-mono/shared/Microsoft.NETCore.App/6.0.0/corerun"
displayName: "Create mono dotnet (Linux)"
- condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), ne(variables.osGroup, 'windows'))
+ condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), ne(variables.osGroup, 'windows'), ne('${{ parameters.runtimeType }}', 'AndroidMono'))
diff --git a/eng/common/templates/steps/perf-send-to-helix.yml b/eng/pipelines/coreclr/templates/perf-send-to-helix.yml
similarity index 94%
rename from eng/common/templates/steps/perf-send-to-helix.yml
rename to eng/pipelines/coreclr/templates/perf-send-to-helix.yml
index 3427b311a7283..a6f4636ce03df 100644
--- a/eng/common/templates/steps/perf-send-to-helix.yml
+++ b/eng/pipelines/coreclr/templates/perf-send-to-helix.yml
@@ -26,10 +26,10 @@ steps:
- template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml
parameters:
osGroup: ${{ parameters.osGroup }}
- sendParams: $(Build.SourcesDirectory)/eng/common/performance/${{ parameters.ProjectFile }} /restore /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog
+ sendParams: $(Build.SourcesDirectory)/eng/testing/performance/${{ parameters.ProjectFile }} /restore /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog
displayName: ${{ parameters.DisplayNamePrefix }}
condition: ${{ parameters.condition }}
- continueOnError: ${{ parameters.continueOnError }}
+ shouldContinueOnError: ${{ parameters.continueOnError }}
environment:
BuildConfig: $(_BuildConfig)
HelixSource: ${{ parameters.HelixSource }}
diff --git a/eng/pipelines/coreclr/templates/run-performance-job.yml b/eng/pipelines/coreclr/templates/run-performance-job.yml
index 4a8c44e6a6f3c..1de4d300920ec 100644
--- a/eng/pipelines/coreclr/templates/run-performance-job.yml
+++ b/eng/pipelines/coreclr/templates/run-performance-job.yml
@@ -111,18 +111,18 @@ jobs:
_Framework: ${{ framework }}
steps:
- ${{ parameters.steps }}
- - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal)$(Interpreter) -Framework $(_Framework) -Kind ${{ parameters.runKind }} -LogicalMachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }}
+ - powershell: $(Build.SourcesDirectory)\eng\testing\performance\performance-setup.ps1 $(IsInternal)$(Interpreter) -Framework $(_Framework) -Kind ${{ parameters.runKind }} -LogicalMachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }}
displayName: Performance Setup (Windows)
condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal)$(Interpreter) --framework $(_Framework) --kind ${{ parameters.runKind }} --logicalmachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }}
+ - script: $(Build.SourcesDirectory)/eng/testing/performance/performance-setup.sh $(IsInternal)$(Interpreter) --framework $(_Framework) --kind ${{ parameters.runKind }} --logicalmachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }}
displayName: Performance Setup (Unix)
condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- script: $(Python) $(PerformanceDirectory)/scripts/ci_setup.py $(SetupArguments)
displayName: Run ci setup script
# Run perf testing in helix
- - template: /eng/common/templates/steps/perf-send-to-helix.yml
+ - template: /eng/pipelines/coreclr/templates/perf-send-to-helix.yml
parameters:
HelixSource: '$(HelixSourcePrefix)/$(Build.Repository.Name)/$(Build.SourceBranch)' # sources must start with pr/, official/, prodcon/, or agent/
HelixType: 'test/performance/$(Kind)/$(_Framework)/$(Architecture)'
diff --git a/eng/pipelines/coreclr/templates/run-scenarios-job.yml b/eng/pipelines/coreclr/templates/run-scenarios-job.yml
index 9b5cb92043fb7..075807453ec3d 100644
--- a/eng/pipelines/coreclr/templates/run-scenarios-job.yml
+++ b/eng/pipelines/coreclr/templates/run-scenarios-job.yml
@@ -88,11 +88,11 @@ jobs:
steps:
- ${{ parameters.steps }}
# run performance-setup
- - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal) -Framework $(_Framework) -Kind ${{ parameters.runKind }} -LogicalMachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }} ${{ parameters.additionalSetupParameters }}
+ - powershell: $(Build.SourcesDirectory)\eng\testing\performance\performance-setup.ps1 $(IsInternal) -Framework $(_Framework) -Kind ${{ parameters.runKind }} -LogicalMachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }} ${{ parameters.additionalSetupParameters }}
displayName: Performance Setup (Windows)
condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal) --framework $(_Framework) --kind ${{ parameters.runKind }} --logicalmachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }} ${{ parameters.additionalSetupParameters }}
+ - script: $(Build.SourcesDirectory)/eng/testing/performance/performance-setup.sh $(IsInternal) --framework $(_Framework) --kind ${{ parameters.runKind }} --logicalmachine ${{ parameters.logicalMachine }} ${{ parameters.extraSetupParameters }} ${{ parameters.additionalSetupParameters }}
displayName: Performance Setup (Linux)
condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
@@ -138,7 +138,7 @@ jobs:
condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'))
# run perf testing in helix
- - template: /eng/common/templates/steps/perf-send-to-helix.yml
+ - template: /eng/pipelines/coreclr/templates/perf-send-to-helix.yml
parameters:
HelixSource: '$(HelixSourcePrefix)/$(Build.Repository.Name)/$(Build.SourceBranch)' # sources must start with pr/, official/, prodcon/, or agent/
HelixType: 'test/performance/$(Kind)/$(_Framework)/$(Architecture)'
diff --git a/eng/pipelines/global-build.yml b/eng/pipelines/global-build.yml
index c7dd786be0bcf..3a737e69c5213 100644
--- a/eng/pipelines/global-build.yml
+++ b/eng/pipelines/global-build.yml
@@ -36,7 +36,6 @@ jobs:
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: release
- timeoutInMinutes: 90
platforms:
- windows_x86
- OSX_x64
@@ -44,6 +43,22 @@ jobs:
testGroup: innerloop
nameSuffix: Runtime_Debug
buildArgs: -c release -runtimeConfiguration debug
+ timeoutInMinutes: 90
+
+#
+# Build with Release config and runtimeConfiguration with MSBuild generator
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ platforms:
+ - windows_x86
+ jobParameters:
+ testGroup: innerloop
+ nameSuffix: MSBuild_CMake
+ buildArgs: -c Release -msbuild
+ timeoutInMinutes: 90
#
# Build with Debug config and Release runtimeConfiguration
@@ -52,29 +67,29 @@ jobs:
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: debug
- timeoutInMinutes: 90
platforms:
- Linux_x64
jobParameters:
testGroup: innerloop
nameSuffix: Runtime_Release
buildArgs: -c debug -runtimeConfiguration release
+ timeoutInMinutes: 90
#
-# Build with RuntimeFlavor only. This excercise code paths where only Configuration is
+# Build with RuntimeFlavor only. This excercise code paths where only RuntimeFlavor is
# specified. Catches cases where we depend on Configuration also being specified
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: debug
- timeoutInMinutes: 90
platforms:
- Linux_x64
jobParameters:
testGroup: innerloop
nameSuffix: RuntimeFlavor_Mono
buildArgs: /p:RuntimeFlavor=Mono
+ timeoutInMinutes: 90
#
# Build Mono + Libraries. This excercises the code path where we build libraries without
@@ -84,13 +99,28 @@ jobs:
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: debug
- timeoutInMinutes: 90
platforms:
- windows_x64
jobParameters:
testGroup: innerloop
nameSuffix: Mono_Libraries
buildArgs: -subset mono+libs /p:RuntimeFlavor=Mono
+ timeoutInMinutes: 90
+
+#
+# Build Libraries AllConfigurations. This exercises the code path where we build libraries for all
+# configurations on a non Windows operating system.
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: debug
+ platforms:
+ - Linux_x64
+ jobParameters:
+ nameSuffix: Libraries_AllConfigurations
+ buildArgs: -subset libs -allconfigurations
+ timeoutInMinutes: 90
#
# SourceBuild Build
@@ -99,9 +129,9 @@ jobs:
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: release
- timeoutInMinutes: 90
platforms:
- Linux_x64
jobParameters:
nameSuffix: SourceBuild
buildArgs: /p:DotNetBuildFromSource=true
+ timeoutInMinutes: 90
diff --git a/eng/pipelines/installer/jobs/base-job.yml b/eng/pipelines/installer/jobs/base-job.yml
index 5941160fbdb32..706774485917b 100644
--- a/eng/pipelines/installer/jobs/base-job.yml
+++ b/eng/pipelines/installer/jobs/base-job.yml
@@ -415,7 +415,7 @@ jobs:
displayName: Build and Package
continueOnError: ${{ and(eq(variables.SkipTests, false), eq(parameters.shouldContinueOnError, true)) }}
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
diff --git a/eng/pipelines/libraries/build-job.yml b/eng/pipelines/libraries/build-job.yml
index 9d26ad7a4af06..ee0c0fc938f69 100644
--- a/eng/pipelines/libraries/build-job.yml
+++ b/eng/pipelines/libraries/build-job.yml
@@ -96,7 +96,7 @@ jobs:
$(_additionalBuildArguments)
displayName: Restore and Build Product
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
diff --git a/eng/pipelines/libraries/execute-trimming-tests-steps.yml b/eng/pipelines/libraries/execute-trimming-tests-steps.yml
index 183cebbcf83bd..a0172e2363428 100644
--- a/eng/pipelines/libraries/execute-trimming-tests-steps.yml
+++ b/eng/pipelines/libraries/execute-trimming-tests-steps.yml
@@ -1,7 +1,8 @@
parameters:
archType: ''
+ extraTestArgs: ''
steps:
# Execute tests
- - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci -arch ${{ parameters.archType }} $(_osParameter) -s libs.tests -c $(_BuildConfig) /p:TestAssemblies=false /p:TestTrimming=true $(_officialBuildParameter) $(_crossBuildPropertyArg) /bl:$(Build.SourcesDirectory)/artifacts/log/$(buildConfigUpper)/TrimmingTests.binlog
+ - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci -arch ${{ parameters.archType }} $(_osParameter) -s libs.tests -c $(_BuildConfig) /p:TestAssemblies=false /p:TestTrimming=true $(_officialBuildParameter) $(_crossBuildPropertyArg) /bl:$(Build.SourcesDirectory)/artifacts/log/$(buildConfigUpper)/TrimmingTests.binlog ${{ parameters.extraTestArgs }}
displayName: Run Trimming Tests
diff --git a/eng/pipelines/libraries/helix-queues-setup.yml b/eng/pipelines/libraries/helix-queues-setup.yml
index 7f66f5b0b6171..a54f7ff17da50 100644
--- a/eng/pipelines/libraries/helix-queues-setup.yml
+++ b/eng/pipelines/libraries/helix-queues-setup.yml
@@ -52,7 +52,7 @@ jobs:
# Linux x64
- ${{ if eq(parameters.platform, 'Linux_x64') }}:
- - ${{ if eq(parameters.jobParameters.interpreter, '') }}:
+ - ${{ if and(eq(parameters.jobParameters.interpreter, ''), ne(parameters.jobParameters.isSingleFile, true)) }}:
- ${{ if and(eq(parameters.jobParameters.testScope, 'outerloop'), eq(parameters.jobParameters.runtimeFlavor, 'mono')) }}:
- (Centos.8.Amd64.Open)Ubuntu.1604.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-8-helix-20201229003624-c1bf759
- RedHat.7.Amd64.Open
@@ -81,7 +81,7 @@ jobs:
- Ubuntu.1804.Amd64.Open
- SLES.15.Amd64.Open
- (Fedora.30.Amd64.Open)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-30-helix-20200512010621-4f8cef7
- - ${{ if eq(parameters.jobParameters.interpreter, 'true') }}:
+ - ${{ if or(eq(parameters.jobParameters.interpreter, 'true'), eq(parameters.jobParameters.isSingleFile, true)) }}:
# Limiting interp runs as we don't need as much coverage.
- Debian.9.Amd64.Open
@@ -105,10 +105,18 @@ jobs:
- ${{ if in(parameters.platform, 'Android_arm', 'Android_arm64') }}:
- Windows.10.Amd64.Android.Open
- # iOS x64/x86
- - ${{ if in(parameters.platform, 'iOS_x64', 'iOS_x86') }}:
+ # iOS/tvOS simulator x64/x86
+ - ${{ if in(parameters.platform, 'iOSSimulator_x64', 'iOSSimulator_x86', 'tvOSSimulator_x64') }}:
- OSX.1015.Amd64.Open
+ # iOS devices
+ - ${{ if in(parameters.platform, 'iOS_arm64') }}:
+ - OSX.1015.Amd64.Iphone.Open
+
+ # tvOS devices
+ - ${{ if in(parameters.platform, 'tvOS_arm64') }}:
+ - OSX.1015.Amd64.AppleTV.Open
+
# windows x64
- ${{ if eq(parameters.platform, 'windows_x64') }}:
# netcoreapp
@@ -124,7 +132,7 @@ jobs:
- ${{ if ne(parameters.jobParameters.runtimeFlavor, 'mono') }}:
- (Windows.Nano.1809.Amd64.Open)windows.10.amd64.serverrs5.open@mcr.microsoft.com/dotnet-buildtools/prereqs:nanoserver-1809-helix-amd64-08e8e40-20200107182504
- (Windows.Server.Core.1909.Amd64.Open)windows.10.amd64.server20h1.open@mcr.microsoft.com/dotnet-buildtools/prereqs:windowsservercore-2004-helix-amd64-20200904200251-272704c
- - ${{ if eq(parameters.jobParameters.isFullMatrix, false) }}:
+ - ${{ if ne(parameters.jobParameters.isFullMatrix, true) }}:
- Windows.81.Amd64.Open
- Windows.10.Amd64.Server19H1.ES.Open
- ${{ if eq(parameters.jobParameters.testScope, 'outerloop') }}:
@@ -135,7 +143,7 @@ jobs:
# .NETFramework
- ${{ if eq(parameters.jobParameters.framework, 'net48') }}:
- Windows.10.Amd64.Client19H1.Open
-
+
# AllConfigurations
- ${{ if eq(parameters.jobParameters.framework, 'allConfigurations') }}:
- Windows.10.Amd64.Server19H1.Open
@@ -152,7 +160,7 @@ jobs:
- Windows.7.Amd64.Open
- Windows.10.Amd64.ServerRS5.Open
- Windows.10.Amd64.Server19H1.Open
- - ${{ if eq(parameters.jobParameters.isFullMatrix, false) }}:
+ - ${{ if ne(parameters.jobParameters.isFullMatrix, true) }}:
- ${{ if eq(parameters.jobParameters.buildConfig, 'Release') }}:
- Windows.10.Amd64.Server19H1.ES.Open
- ${{ if eq(parameters.jobParameters.buildConfig, 'Debug') }}:
diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml
index 07af7f490ebbf..ef9af237168b7 100644
--- a/eng/pipelines/mono/templates/build-job.yml
+++ b/eng/pipelines/mono/templates/build-job.yml
@@ -61,6 +61,8 @@ jobs:
value: ''
- name: llvmParameter
value: ''
+ - name: msCorDbi
+ value: '+mono.mscordbi'
- ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
- name: officialBuildIdArg
value: '/p:officialBuildId=$(Build.BuildNumber)'
@@ -74,9 +76,15 @@ jobs:
- ${{ if eq(parameters.osGroup, 'tvOS') }}:
- name: osOverride
value: -os tvOS
+ - ${{ if eq(parameters.osGroup, 'tvOSSimulator') }}:
+ - name: osOverride
+ value: -os tvOSSimulator
- ${{ if eq(parameters.osGroup, 'iOS') }}:
- name: osOverride
value: -os iOS
+ - ${{ if eq(parameters.osGroup, 'iOSSimulator') }}:
+ - name: osOverride
+ value: -os iOSSimulator
- ${{ if eq(parameters.osGroup, 'Android') }}:
- name: osOverride
value: -os Android
@@ -97,11 +105,6 @@ jobs:
- ${{ if gt(length(parameters.monoCrossAOTTargetOS),0) }}:
- name: aotCrossParameter
value: /p:MonoCrossAOTTargetOS=${{join('+',parameters.monoCrossAOTTargetOS)}} /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true
- - name: ninjaArg
- value: ''
- - ${{ if eq(parameters.osGroup, 'windows') }}:
- - name: ninjaArg
- value: '-ninja'
- ${{ parameters.variables }}
steps:
@@ -125,7 +128,7 @@ jobs:
artifact: Mono_Offsets_${{monoCrossAOTTargetOS}}
path: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles'
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
@@ -133,13 +136,13 @@ jobs:
# Build
- ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: ./build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) $(ninjaArg)
+ - script: ./build$(scriptExt) -subset mono$(msCorDbi) -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter)
displayName: Build product
- ${{ if eq(parameters.osGroup, 'windows') }}:
- - script: build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) $(ninjaArg)
+ - script: build$(scriptExt) -subset mono$(msCorDbi) -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter)
displayName: Build product
- - ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
df -h
@@ -158,10 +161,10 @@ jobs:
# Build packages
- ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: ./build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) $(ninjaArg) -pack $(OutputRidArg)
+ - script: ./build$(scriptExt) -subset mono$(msCorDbi) -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) -pack $(OutputRidArg)
displayName: Build nupkg
- ${{ if eq(parameters.osGroup, 'windows') }}:
- - script: build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) $(ninjaArg) -pack $(OutputRidArg)
+ - script: build$(scriptExt) -subset mono$(msCorDbi) -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) -pack $(OutputRidArg)
displayName: Build nupkg
# Publish official build
diff --git a/eng/pipelines/mono/templates/generate-offsets.yml b/eng/pipelines/mono/templates/generate-offsets.yml
index ff3b3e9d70ca7..cbb05aaafff99 100644
--- a/eng/pipelines/mono/templates/generate-offsets.yml
+++ b/eng/pipelines/mono/templates/generate-offsets.yml
@@ -1,6 +1,7 @@
parameters:
buildConfig: 'Debug'
osGroup: ''
+ osSubGroup: ''
platform: ''
container: ''
timeoutInMinutes: ''
@@ -15,6 +16,7 @@ jobs:
parameters:
buildConfig: ${{ parameters.buildConfig }}
osGroup: ${{ parameters.osGroup }}
+ osSubGroup: ${{ parameters.osSubGroup }}
helixType: 'build/product/'
enableMicrobuild: true
pool: ${{ parameters.pool }}
@@ -22,8 +24,8 @@ jobs:
dependOnEvaluatePaths: ${{ parameters.dependOnEvaluatePaths }}
# Compute job name from template parameters
- name: ${{ format('mono_{0}_offsets', parameters.osGroup) }}
- displayName: ${{ format('Mono {0} AOT offsets', parameters.osGroup) }}
+ name: ${{ format('mono_{0}{1}_offsets', parameters.osGroup, parameters.osSubGroup) }}
+ displayName: ${{ format('Mono {0}{1} AOT offsets', parameters.osGroup, parameters.osSubGroup) }}
# Run all steps in the container.
# Note that the containers are defined in platform-matrix.yml
@@ -35,6 +37,8 @@ jobs:
variables:
- name: osGroup
value: ${{ parameters.osGroup }}
+ - name: osSubGroup
+ value: ${{ parameters.osSubGroup }}
- name: officialBuildIdArg
value: ''
- ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
@@ -80,13 +84,13 @@ jobs:
displayName: Upload offset files
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles'
- artifactName: 'Mono_Offsets_$(osGroup)'
+ artifactName: 'Mono_Offsets_$(osGroup)$(osSubGroup)'
# Publish Logs
- task: PublishPipelineArtifact@1
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'BuildLogs_Mono_Offsets_$(osGroup)'
+ artifactName: 'BuildLogs_Mono_Offsets_$(osGroup)$(osSubGroup)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/mono/update-machine-certs.ps1 b/eng/pipelines/mono/update-machine-certs.ps1
new file mode 100644
index 0000000000000..1a6be78b19947
--- /dev/null
+++ b/eng/pipelines/mono/update-machine-certs.ps1
@@ -0,0 +1,25 @@
+# This seems to update the machine cert store so that python can download the files as required by emscripten's install
+$WebsiteURL="storage.googleapis.com"
+Try {
+ $Conn = New-Object System.Net.Sockets.TcpClient($WebsiteURL,443)
+
+ Try {
+ $Stream = New-Object System.Net.Security.SslStream($Conn.GetStream())
+ $Stream.AuthenticateAsClient($WebsiteURL)
+
+ $Cert = $Stream.Get_RemoteCertificate()
+
+ $ValidTo = [datetime]::Parse($Cert.GetExpirationDatestring())
+
+ Write-Host "`nConnection Successfull" -ForegroundColor DarkGreen
+ Write-Host "Website: $WebsiteURL"
+ }
+ Catch { Throw $_ }
+ Finally { $Conn.close() }
+ }
+ Catch {
+ Write-Host "`nError occurred connecting to $($WebsiteURL)" -ForegroundColor Yellow
+ Write-Host "Website: $WebsiteURL"
+ Write-Host "Status:" $_.exception.innerexception.message -ForegroundColor Yellow
+ Write-Host ""
+}
diff --git a/eng/pipelines/runtime-linker-tests.yml b/eng/pipelines/runtime-linker-tests.yml
index 64c4a55c772fd..836b54c849ab5 100644
--- a/eng/pipelines/runtime-linker-tests.yml
+++ b/eng/pipelines/runtime-linker-tests.yml
@@ -75,5 +75,7 @@ jobs:
testGroup: innerloop
timeoutInMinutes: 120
nameSuffix: Runtime_Release
- buildArgs: -s mono+libs -c $(_BuildConfig)
+ buildArgs: -s mono+libs -c $(_BuildConfig) -p:WasmBuildNative=false
extraStepsTemplate: /eng/pipelines/libraries/execute-trimming-tests-steps.yml
+ extraStepsParameters:
+ extraTestArgs: '/p:WasmBuildNative=false'
diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml
index a6ba21f154ab0..db754fa7bba76 100644
--- a/eng/pipelines/runtime-official.yml
+++ b/eng/pipelines/runtime-official.yml
@@ -105,10 +105,12 @@ stages:
- Android_arm64
- MacCatalyst_x64
- MacCatalyst_arm64
- - tvOS_x64
+ - tvOSSimulator_x64
+ - tvOSSimulator_arm64
- tvOS_arm64
- - iOS_x64
- - iOS_x86
+ - iOSSimulator_x64
+ - iOSSimulator_x86
+ - iOSSimulator_arm64
- iOS_arm
- iOS_arm64
- OSX_x64
@@ -125,7 +127,7 @@ stages:
# - windows_arm
# - windows_arm64
jobParameters:
- buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ buildArgs: -s mono+libs+host+packs+mono.mscordbi -c $(_BuildConfig)
nameSuffix: AllSubsets_Mono
isOfficialBuild: ${{ variables.isOfficialBuild }}
extraStepsTemplate: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
@@ -141,8 +143,8 @@ stages:
platforms:
- Android_x64
- Browser_wasm
- - tvOS_x64
- - iOS_x64
+ - tvOS_arm64
+ - iOS_arm64
#
# Build Mono release AOT cross-compilers
@@ -180,7 +182,6 @@ stages:
jobParameters:
buildArgs: -s mono+packs -c $(_BuildConfig)
/p:MonoCrossAOTTargetOS=Android+Browser /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true
- -ninja
nameSuffix: CrossAOT_Mono
runtimeVariant: crossaot
dependsOn:
diff --git a/eng/pipelines/runtime-staging.yml b/eng/pipelines/runtime-staging.yml
index 2a2afabf81398..0197670b07218 100644
--- a/eng/pipelines/runtime-staging.yml
+++ b/eng/pipelines/runtime-staging.yml
@@ -64,9 +64,46 @@ jobs:
buildConfig: Release
runtimeFlavor: mono
platforms:
+ - Android_x86
- Android_x64
+ - iOSSimulator_x64
+ - tvOSSimulator_x64
+ variables:
+ # map dependencies variables to local variables
+ - name: librariesContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
+ - name: monoContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'] ]
+ jobParameters:
+ testGroup: innerloop
+ nameSuffix: AllSubsets_Mono
+ buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true
+ timeoutInMinutes: 180
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isFullMatrix'], true))
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ condition: >-
+ or(
+ eq(variables['librariesContainsChange'], true),
+ eq(variables['monoContainsChange'], true),
+ eq(variables['isFullMatrix'], true))
+
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ runtimeFlavor: mono
+ platforms:
- Android_arm64
- - iOS_x64
variables:
# map dependencies variables to local variables
- name: librariesContainsChange
@@ -78,6 +115,59 @@ jobs:
nameSuffix: AllSubsets_Mono
buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true
timeoutInMinutes: 180
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isFullMatrix'], true))
+
+ # don't run tests on PRs until we get more Android devices: https://github.com/dotnet/core-eng/issues/11781
+ ${{ if eq(variables['isFullMatrix'], true) }}:
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ condition: >-
+ or(
+ eq(variables['librariesContainsChange'], true),
+ eq(variables['monoContainsChange'], true),
+ eq(variables['isFullMatrix'], true))
+
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: Release
+ platforms:
+ - Android_arm
+ jobParameters:
+ testGroup: innerloop
+ nameSuffix: Build_Subset_Mono
+ buildArgs: -subset mono+libs
+
+#
+# Build the whole product using Mono and run libraries tests
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ runtimeFlavor: mono
+ platforms:
+ - Windows_x64
+ variables:
+ # map dependencies variables to local variables
+ - name: librariesContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
+ - name: monoContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'] ]
+ jobParameters:
+ testScope: innerloop
+ nameSuffix: AllSubsets_Mono
+ buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true
+ timeoutInMinutes: 120
condition: >-
or(
eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
@@ -175,34 +265,6 @@ jobs:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
-#
-# Build Mono and Libraries for Android using Android native crypto instead of OpenSSL
-#
-- template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- buildConfig: Release
- runtimeFlavor: mono
- platforms:
- - Android_x64
- - Android_x86
- - Android_arm64
- variables:
- # disable using OpenSSL
- - name: ANDROID_OPENSSL_AAR
- value: ''
- # map dependencies variables to local variables
- - name: librariesContainsChange
- value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
- jobParameters:
- nameSuffix: Libraries_Mono_AndroidCrypto
- buildArgs: -s mono+libs -c $(_BuildConfig)
- timeoutInMinutes: 180
- condition: >-
- or(
- eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
- eq(variables['isFullMatrix'], true))
-
# Run disabled installer tests on Linux x64
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -217,3 +279,44 @@ jobs:
useContinueOnErrorDuringBuild: true
enablePublisTestResults: true
testResultsFormat: xunit
+
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ platforms:
+ - Browser_wasm_win
+ jobParameters:
+ testGroup: innerloop
+ nameSuffix: Browser_wasm_Windows
+ buildArgs: -subset mono+libs /p:RuntimeFlavor=Mono -c $(_BuildConfig)
+
+#
+# CoreCLR Build for running Apple Silicon libraries-innerloop
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/build-job.yml
+ buildConfig: release
+ platforms:
+ - ${{ if eq(variables['isFullMatrix'], true) }}:
+ - OSX_arm64
+ jobParameters:
+ testGroup: innerloop
+#
+# Libraries Build for running Apple Silicon libraries-innerloop
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/libraries/build-job.yml
+ buildConfig: Release
+ platforms:
+ - ${{ if eq(variables['isFullMatrix'], true) }}:
+ - OSX_arm64
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ jobParameters:
+ isOfficialBuild: ${{ variables['isOfficialBuild'] }}
+ isFullMatrix: ${{ variables['isFullMatrix'] }}
+ runTests: true
+ testScope: innerloop
+ liveRuntimeBuildConfig: release
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 2f600b5929e1b..476150aad686a 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -204,8 +204,8 @@ jobs:
platforms:
- Android_x64
- Browser_wasm
- - tvOS_x64
- - iOS_x64
+ - tvOS_arm64
+ - iOS_arm64
jobParameters:
condition: >-
or(
@@ -222,12 +222,11 @@ jobs:
buildConfig: ${{ variables.debugOnPrReleaseOnRolling }}
runtimeFlavor: mono
platforms:
- - Android_x86
- MacCatalyst_x64
- MacCatalyst_arm64
- - tvOS_x64
+ - tvOSSimulator_x64
+ - iOSSimulator_x86
- iOS_arm64
- - iOS_x86
- Linux_arm
jobParameters:
testGroup: innerloop
@@ -246,7 +245,6 @@ jobs:
buildConfig: Release
runtimeFlavor: mono
platforms:
- - Android_arm
- tvOS_arm64
- iOS_arm
- Linux_musl_x64
@@ -295,6 +293,7 @@ jobs:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
scenarios:
+ - buildwasmapps
- normal
- wasmtestonbrowser
condition: >-
@@ -303,6 +302,28 @@ jobs:
eq(variables['monoContainsChange'], true),
eq(variables['isFullMatrix'], true))
+# Build and test libraries under single-file publishing
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ platforms:
+ - windows_x64
+ - Linux_x64
+ jobParameters:
+ testGroup: innerloop
+ isFullMatrix: ${{ variables.isFullMatrix }}
+ isSingleFile: true
+ nameSuffix: SingleFile
+ buildArgs: -s clr+libs+libs.tests -c $(_BuildConfig) /p:TestSingleFile=true /p:ArchiveTests=true
+ timeoutInMinutes: 120
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: SingleFile_$(_BuildConfig)
+
#
# Build the whole product using Mono and run runtime tests
#
@@ -884,7 +905,7 @@ jobs:
runtimeFlavor: mono
buildConfig: ${{ variables.debugOnPrReleaseOnRolling }}
platforms:
- - windows_x64
+ # - windows_x64
- OSX_x64
- Linux_arm64
- Linux_x64
diff --git a/eng/restore/optimizationData.targets b/eng/restore/optimizationData.targets
index 9b431aa953af2..c7ce30fadd249 100644
--- a/eng/restore/optimizationData.targets
+++ b/eng/restore/optimizationData.targets
@@ -34,4 +34,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(NuGetPackageRoot)%(MIBCPackage.Identity)/%(MIBCPackage.Version)
+
+ <_optimizationMibcFile Include="%(MIBCPackage.PackagePath)/**/*.mibc" SubdirectoryName="$(TargetOS)/$(TargetArchitecture)" />
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/run-test.sh b/eng/run-test.sh
index 94ac893132376..e5cf6a3b21d1e 100644
--- a/eng/run-test.sh
+++ b/eng/run-test.sh
@@ -287,8 +287,7 @@ then
else
platform="$(uname)"
if [ "$platform" = "FreeBSD" ]; then
- output=("$(sysctl hw.ncpu)")
- maxProcesses="$((output[1] + 1))"
+ maxProcesses=$(($(sysctl -n hw.ncpu)+1))
if [ "$platform" = "NetBSD" ] || [ "$platform" = "SunOS" ] ; then
maxProcesses=$(($(getconf NPROCESSORS_ONLN)+1))
else
diff --git a/eng/slngen.targets b/eng/slngen.targets
index 754a506cb48f8..f8066c75c736d 100644
--- a/eng/slngen.targets
+++ b/eng/slngen.targets
@@ -11,6 +11,6 @@
true
-
+
diff --git a/eng/targetframeworksuffix.props b/eng/targetframeworksuffix.props
index 5926e5266de02..00d2acfd4607c 100644
--- a/eng/targetframeworksuffix.props
+++ b/eng/targetframeworksuffix.props
@@ -9,6 +9,8 @@
$(TargetFrameworkSuffix)1.0$(TargetFrameworkSuffix),Version=$(TargetPlatformVersion)
+
+ 0.0
diff --git a/eng/targetingpacks.targets b/eng/targetingpacks.targets
index 22435626d3cd4..793f1954524fd 100644
--- a/eng/targetingpacks.targets
+++ b/eng/targetingpacks.targets
@@ -19,7 +19,7 @@
LatestRuntimeFrameworkVersion="$(ProductVersion)"
RuntimeFrameworkName="$(LocalFrameworkOverrideName)"
RuntimePackNamePatterns="$(LocalFrameworkOverrideName).Runtime.**RID**"
- RuntimePackRuntimeIdentifiers="linux-arm;linux-arm64;linux-musl-arm64;linux-musl-x64;linux-x64;osx-x64;rhel.6-x64;tizen.4.0.0-armel;tizen.5.0.0-armel;win-arm;win-arm64;win-x64;win-x86;linux-musl-arm;ios-arm64;ios-arm;ios-x64;ios-x86;tvos-arm64;tvos-x64;maccatalyst-x64;maccatalyst-arm64;android-arm64;android-arm;android-x64;android-x86;browser-wasm;osx-arm64"
+ RuntimePackRuntimeIdentifiers="linux-arm;linux-arm64;linux-musl-arm64;linux-musl-x64;linux-x64;osx-x64;rhel.6-x64;tizen.4.0.0-armel;tizen.5.0.0-armel;win-arm;win-arm64;win-x64;win-x86;linux-musl-arm;ios-arm64;iossimulator-arm64;ios-arm;iossimulator-x64;iossimulator-x86;tvos-arm64;tvossimulator-arm64;tvossimulator-x64;maccatalyst-x64;maccatalyst-arm64;android-arm64;android-arm;android-x64;android-x86;browser-wasm;osx-arm64"
TargetFramework="$(NetCoreAppCurrent)"
TargetingPackName="$(LocalFrameworkOverrideName).Ref"
TargetingPackVersion="$(ProductVersion)"
diff --git a/eng/testing/AndroidRunnerTemplate.sh b/eng/testing/AndroidRunnerTemplate.sh
index 0fd3a4a77c55a..3dab96f0bf3c4 100644
--- a/eng/testing/AndroidRunnerTemplate.sh
+++ b/eng/testing/AndroidRunnerTemplate.sh
@@ -10,7 +10,7 @@ TEST_NAME=$4
XHARNESS_OUT="$EXECUTION_DIR/xharness-output"
if [ -n "$5" ]; then
- EXPECTED_EXIT_CODE="--expected-exit-code $5"
+ ADDITIONAL_ARGS=${@:5}
fi
cd $EXECUTION_DIR
@@ -40,7 +40,8 @@ $HARNESS_RUNNER android test \
--package-name="net.dot.$ASSEMBLY_NAME" \
--app="$EXECUTION_DIR/bin/$TEST_NAME.apk" \
--output-directory="$XHARNESS_OUT" \
- $EXPECTED_EXIT_CODE
+ --timeout=1800 \
+ $ADDITIONAL_ARGS
_exitCode=$?
diff --git a/eng/testing/AppleRunnerTemplate.sh b/eng/testing/AppleRunnerTemplate.sh
index e02a9a1569717..0f2eb7f2abed8 100644
--- a/eng/testing/AppleRunnerTemplate.sh
+++ b/eng/testing/AppleRunnerTemplate.sh
@@ -13,17 +13,19 @@ XCODE_PATH=$(xcode-select -p)/../..
if [ -n "$5" ]; then
XHARNESS_CMD="run"
- EXPECTED_EXIT_CODE="--expected-exit-code $5"
+ ADDITIONAL_ARGS=${@:5}
fi
if [[ "$TARGET_OS" == "MacCatalyst" ]]; then TARGET=maccatalyst; fi
-if [[ "$TARGET_OS" == "iOS" && "$TARGET_ARCH" == "x86" ]]; then TARGET=ios-simulator-32; fi
-if [[ "$TARGET_OS" == "iOS" && "$TARGET_ARCH" == "x64" ]]; then TARGET=ios-simulator-64; fi
+if [[ "$TARGET_OS" == "iOSSimulator" && "$TARGET_ARCH" == "x86" ]]; then TARGET=ios-simulator-32; fi
+if [[ "$TARGET_OS" == "iOSSimulator" && "$TARGET_ARCH" == "x64" ]]; then TARGET=ios-simulator-64; fi
+if [[ "$TARGET_OS" == "iOSSimulator" && "$TARGET_ARCH" == "arm64" ]]; then TARGET=ios-simulator-64; fi
if [[ "$TARGET_OS" == "iOS" && "$TARGET_ARCH" == "arm" ]]; then TARGET=ios-device; fi
if [[ "$TARGET_OS" == "iOS" && "$TARGET_ARCH" == "arm64" ]]; then TARGET=ios-device; fi
-if [[ "$TARGET_OS" == "tvOS" && "$TARGET_ARCH" == "x64" ]]; then TARGET=tvos-simulator; fi
+if [[ "$TARGET_OS" == "tvOSSimulator" && "$TARGET_ARCH" == "x64" ]]; then TARGET=tvos-simulator; fi
+if [[ "$TARGET_OS" == "tvOSSimulator" && "$TARGET_ARCH" == "arm64" ]]; then TARGET=tvos-simulator; fi
if [[ "$TARGET_OS" == "tvOS" && "$TARGET_ARCH" == "arm64" ]]; then TARGET=tvos-device; fi
# "Release" in SCHEME_SDK is what xcode produces (see "bool Optimized" property in AppleAppBuilderTask)
@@ -60,7 +62,7 @@ $HARNESS_RUNNER apple $XHARNESS_CMD \
--targets="$TARGET" \
--xcode="$XCODE_PATH" \
--output-directory="$XHARNESS_OUT" \
- $EXPECTED_EXIT_CODE
+ $ADDITIONAL_ARGS
_exitCode=$?
diff --git a/eng/testing/linker/SupportFiles/Directory.Build.props b/eng/testing/linker/SupportFiles/Directory.Build.props
index b5c4dfe732fb2..ad6c9dbb6916d 100644
--- a/eng/testing/linker/SupportFiles/Directory.Build.props
+++ b/eng/testing/linker/SupportFiles/Directory.Build.props
@@ -3,6 +3,7 @@
truefalsefalse
+ falsetruetruelink
diff --git a/eng/testing/linker/project.csproj.template b/eng/testing/linker/project.csproj.template
index 7ac21cbcb5b5f..53576a8cc2163 100644
--- a/eng/testing/linker/project.csproj.template
+++ b/eng/testing/linker/project.csproj.template
@@ -29,6 +29,7 @@
{AdditionalProjectReferences}
+ {TrimmerRootAssemblies}
$([MSBuild]::NormalizeDirectory('$(OutDir)', 'AppBundle'))$([MSBuild]::NormalizePath('$(BundleDir)', '$(RunScriptOutputName)'))
- true
- V8
- $(JSEngineArgs) --engine-arg=--stack-trace-limit=1000
+ truetrue
+ true
+ true
+ true
+ BundleTestAppleApp;BundleTestAndroidApp
-
-
- $HARNESS_RUNNER wasm $XHARNESS_COMMAND --app=. --engine=$(JSEngine) $(JSEngineArgs) --js-file=runtime.js --output-directory=$XHARNESS_OUT -- $(RunTestsJSArguments) --run WasmTestRunner.dll $(AssemblyName).dll
- $HARNESS_RUNNER wasm $XHARNESS_COMMAND --app=. --engine=$(JSEngine) $(JSEngineArgs) --js-file=runtime.js --output-directory=$XHARNESS_OUT --expected-exit-code=$(ExpectedExitCode) -- $(RunTestsJSArguments) --run $(AssemblyName).dll --testing
+
+ false
+ false
+ falsefalse
+ falsetrue
- falsefalse
- false
+ false
+ true
-
- false
- false
+ false
+ falsefalse
- false
- truefalsefalse
+ truetrue
@@ -37,6 +38,16 @@
true
+
+ --expected-exit-code $(ExpectedExitCode)
+
+
+
+
+ $(AdditionalXHarnessArguments) --arg=-m=$(XUnitMethodName)
+ $(AdditionalXHarnessArguments) --arg=-c=$(XUnitClassName)
+
+
@@ -44,15 +55,19 @@
<_MobileIntermediateOutputPath>$(IntermediateOutputPath)mobile
+
+
+
-
arm64-v8aarmeabi-v7a
@@ -60,27 +75,31 @@
x86AndroidTestRunner.dll
+ $(PublishDir)$(AssemblyName).runtimeconfig.json
+ $(PublishDir)runtimeconfig.bin@(MonoAOTCompilerDefaultAotArguments, ';')@(MonoAOTCompilerDefaultProcessArguments, ';')
+
+
-
-
+
-
-
-
+
+
+
+
-
@@ -127,13 +146,13 @@
-
-
+
-
+ true
@@ -228,60 +247,11 @@
-
-
-
-
- PrepareForWasmBuildApp;$(WasmBuildAppDependsOn)
- $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(BundleDir)
- WasmTestRunner.dll
- $(MonoProjectRoot)\wasm\runtime-test.js
- $(InvariantGlobalization)
- true
-
-
-
-
-
- $([System.IO.Directory]::GetParent('%(Identity)').Name)
-
-
-
-
-
-
-
-
-
-
-
-
<_runnerFilesToPublish Include="$(AndroidTestRunnerDir)*" Condition="'$(TargetOS)' == 'Android'" />
- <_runnerFilesToPublish Include="$(AppleTestRunnerDir)*" Condition="'$(TargetOS)' == 'MacCatalyst' or '$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'tvOS'" />
+ <_runnerFilesToPublish Include="$(AppleTestRunnerDir)*" Condition="'$(TargetOS)' == 'MacCatalyst' or '$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'iOSSimulator' or '$(TargetOS)' == 'tvOS' or '$(TargetOS)' == 'tvOSSimulator'" />
<_runnerFilesToPublish Include="$(WasmTestRunnerDir)*" Condition="'$(TargetOS)' == 'Browser'" />
@@ -299,7 +269,7 @@
+ DependsOnTargets="Publish;$(BundleTestAppTargets);ArchiveTests" />
diff --git a/eng/testing/tests.singlefile.targets b/eng/testing/tests.singlefile.targets
new file mode 100644
index 0000000000000..86cbc7ee5109a
--- /dev/null
+++ b/eng/testing/tests.singlefile.targets
@@ -0,0 +1,62 @@
+
+
+ Exe
+
+ $([MSBuild]::NormalizeDirectory('$(OutDir)', 'publish'))
+ $([MSBuild]::NormalizePath('$(BundleDir)', '$(RunScriptOutputName)'))
+ $(PackageRID)
+
+ $(AssemblyName).exe
+ chmod +rwx $(AssemblyName) && ./$(AssemblyName)
+
+
+
+ true
+ true
+ true
+ $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'coreclr', '$(TargetOS).$(TargetArchitecture).$(Configuration)', 'corehost'))/singlefilehost
+ $(SingleFileHostSourcePath).exe
+
+
+
+
+
+
+
+
+
+
+
+
+ <__Identity>%(ResolvedFileToPublish.Identity)
+ <__FileName>%(ResolvedFileToPublish.Filename)%(ResolvedFileToPublish.Extension)
+
+
+
+ <__NewResolvedFiles Include="@(ResolvedFileToPublish)">
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/testing/tests.targets b/eng/testing/tests.targets
index d5ab901145464..9fc08ddd6bcc7 100644
--- a/eng/testing/tests.targets
+++ b/eng/testing/tests.targets
@@ -2,7 +2,7 @@
RunnerTemplate.cmdRunnerTemplate.sh
- AppleRunnerTemplate.sh
+ AppleRunnerTemplate.shAndroidRunnerTemplate.shWasmRunnerTemplate.sh
@@ -25,7 +25,7 @@
-
+
@@ -37,7 +37,7 @@
<_ZipSourceDirectory>$(OutDir)
- <_ZipSourceDirectory Condition="'$(TargetOS)' == 'Browser'">$(BundleDir)
+ <_ZipSourceDirectory Condition="'$(TargetOS)' == 'Browser' or '$(TestSingleFile)' == 'true'">$(BundleDir)
@@ -96,7 +96,7 @@
$(RunTestsCommand) --runtime-path "$(TestHostRootPath.TrimEnd('\/'))"$(RunTestsCommand) --rsp-file "$(TestRspFile)"
- "$(RunScriptOutputPath)" $(AssemblyName) $(TargetArchitecture) $(TargetOS) $(TestProjectName) $(ExpectedExitCode)
+ "$(RunScriptOutputPath)" $(AssemblyName) $(TargetArchitecture) $(TargetOS) $(TestProjectName) $(AdditionalXHarnessArguments)"$(RunScriptOutputPath)" $(JSEngine) $(AssemblyName).dll $(Scenario)
@@ -118,10 +118,11 @@
+
-
+
diff --git a/eng/testing/tests.wasm.targets b/eng/testing/tests.wasm.targets
new file mode 100644
index 0000000000000..505b3a8bde603
--- /dev/null
+++ b/eng/testing/tests.wasm.targets
@@ -0,0 +1,82 @@
+
+
+
+ $(BundleTestAppTargets);BundleTestWasmApp
+
+
+
+ V8
+ $(JSEngineArgs) --engine-arg=--stack-trace-limit=1000
+
+ <_XHarnessArgs>wasm $XHARNESS_COMMAND --app=. --output-directory=$XHARNESS_OUT
+
+ <_XHarnessArgs Condition="'$(Scenario)' != 'WasmTestOnBrowser'">$(_XHarnessArgs) --engine=$(JSEngine) $(JSEngineArgs) --js-file=runtime.js
+ <_XHarnessArgs Condition="'$(IsFunctionalTest)' == 'true'" >$(_XHarnessArgs) --expected-exit-code=$(ExpectedExitCode)
+ <_XHarnessArgs Condition="'$(WasmXHarnessArgs)' != ''" >$(_XHarnessArgs) $(WasmXHarnessArgs) %24WasmXHarnessArgs
+
+ <_AppArgs Condition="'$(IsFunctionalTest)' != 'true' and '$(Scenario)' != 'BuildWasmApps'">--run WasmTestRunner.dll $(AssemblyName).dll
+ <_AppArgs Condition="'$(IsFunctionalTest)' == 'true'">--run $(AssemblyName).dll --testing
+
+ <_AppArgs Condition="'$(WasmTestAppArgs)' != ''">$(_AppArgs) $(WasmTestAppArgs) %24WasmTestAppArgs
+
+ $HARNESS_RUNNER $(_XHarnessArgs) -- $(WasmXHarnessMonoArgs) %24WasmXHarnessMonoArgs $(_AppArgs)
+
+
+
+ false
+ true
+ false
+ false
+ false
+
+
+
+
+
+
+ PrepareForWasmBuildApp;$(WasmBuildAppDependsOn)
+ $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(BundleDir)
+ WasmTestRunner.dll
+ $(MonoProjectRoot)\wasm\runtime-test.js
+ $(InvariantGlobalization)
+ true
+ false
+
+
+
+
+
+ $([System.IO.Directory]::GetParent('%(Identity)').Name)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/testing/xunit/xunit.console.targets b/eng/testing/xunit/xunit.console.targets
index a3e7d2614a4f5..7710a05b5a37d 100644
--- a/eng/testing/xunit/xunit.console.targets
+++ b/eng/testing/xunit/xunit.console.targets
@@ -2,10 +2,10 @@
truetestResults.xml
- true
+ true
-
+
<_depsFileArgument Condition="'$(GenerateDependencyFile)' == 'true'">--depsfile $(AssemblyName).deps.json
"$(RunScriptHost)" exec --runtimeconfig $(AssemblyName).runtimeconfig.json $(_depsFileArgument) xunit.console.dllxunit.console.exe
@@ -36,7 +36,7 @@
$(_withoutCategories.Replace(';', '%0dcategory='))
-
+
diff --git a/eng/testing/xunit/xunit.props b/eng/testing/xunit/xunit.props
index f63b3906fccb6..3f9c4b67141a2 100644
--- a/eng/testing/xunit/xunit.props
+++ b/eng/testing/xunit/xunit.props
@@ -13,7 +13,7 @@
-
+
diff --git a/eng/versioning.targets b/eng/versioning.targets
index 9e6d9de071847..02a10237e412b 100644
--- a/eng/versioning.targets
+++ b/eng/versioning.targets
@@ -35,17 +35,40 @@
true
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<_unsupportedOSPlatforms Include="$(UnsupportedOSPlatforms)" />
-
+
+
<_Parameter1>%(_unsupportedOSPlatforms.Identity)
diff --git a/global.json b/global.json
index 3e24a5950e665..f2672dc65e4f2 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "6.0.100-preview.1.21103.13",
+ "version": "6.0.100-preview.2.21155.3",
"allowPrerelease": true,
"rollForward": "major"
},
@@ -12,12 +12,12 @@
"python3": "3.7.1"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk": "6.0.0-beta.21155.1",
- "Microsoft.DotNet.Arcade.Sdk": "6.0.0-beta.21155.1",
- "Microsoft.DotNet.Helix.Sdk": "6.0.0-beta.21155.1",
- "Microsoft.DotNet.SharedFramework.Sdk": "6.0.0-beta.21155.1",
+ "Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk": "6.0.0-beta.21203.1",
+ "Microsoft.DotNet.Arcade.Sdk": "6.0.0-beta.21203.1",
+ "Microsoft.DotNet.Helix.Sdk": "6.0.0-beta.21203.1",
+ "Microsoft.DotNet.SharedFramework.Sdk": "6.0.0-beta.21203.1",
"Microsoft.Build.NoTargets": "2.0.17",
"Microsoft.Build.Traversal": "2.1.1",
- "Microsoft.NET.Sdk.IL": "6.0.0-preview.3.21157.6"
+ "Microsoft.NET.Sdk.IL": "6.0.0-preview.4.21178.6"
}
}
diff --git a/src/coreclr/.nuget/Microsoft.NET.Sdk.IL/targets/Microsoft.NET.Sdk.IL.targets b/src/coreclr/.nuget/Microsoft.NET.Sdk.IL/targets/Microsoft.NET.Sdk.IL.targets
index 14821456c99b1..8ca2c087e39a6 100644
--- a/src/coreclr/.nuget/Microsoft.NET.Sdk.IL/targets/Microsoft.NET.Sdk.IL.targets
+++ b/src/coreclr/.nuget/Microsoft.NET.Sdk.IL/targets/Microsoft.NET.Sdk.IL.targets
@@ -16,7 +16,7 @@ Copyright (c) .NET Foundation. All rights reserved.
.ilILManaged
- {F571AB99-FB84-49F4-A0DF-F27AA55F3F3F}
+ {9A19103F-16F7-4668-BE54-9A1E7A4F7556}Propertiestrue
diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt
index 28ecbf7f16296..8f82d83fa4b73 100644
--- a/src/coreclr/CMakeLists.txt
+++ b/src/coreclr/CMakeLists.txt
@@ -12,8 +12,6 @@ include(../../eng/native/configurepaths.cmake)
include(${CLR_ENG_NATIVE_DIR}/configurecompiler.cmake)
if(MSVC)
- string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- add_compile_options($<$:/EHa>) # enable C++ EH (w/ SEH exceptions)
set(CMAKE_CXX_STANDARD_LIBRARIES "") # do not link against standard win32 libs i.e. kernel32, uuid, user32, etc.
endif (MSVC)
@@ -40,7 +38,11 @@ OPTION(CLR_CMAKE_ENABLE_CODE_COVERAGE "Enable code coverage" OFF)
# Cross target Component build specific configuration
#----------------------------------------------------
if(CLR_CROSS_COMPONENTS_BUILD)
- include(crosscomponents.cmake)
+ add_definitions(-DCROSS_COMPILE)
+
+ if(CLR_CMAKE_HOST_ARCH_AMD64 AND (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_I386))
+ set(FEATURE_CROSSBITNESS 1)
+ endif(CLR_CMAKE_HOST_ARCH_AMD64 AND (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_I386))
endif(CLR_CROSS_COMPONENTS_BUILD)
#-------------------
@@ -48,10 +50,31 @@ endif(CLR_CROSS_COMPONENTS_BUILD)
#-------------------
include(pgosupport.cmake)
+#---------------------------------------------------
+# Define sub-component targets for the build
+#---------------------------------------------------
+include(components.cmake)
+
+#---------------------------
+# Build the single file host
+#---------------------------
+if(NOT CLR_CROSS_COMPONENTS_BUILD)
+ set(CLR_SINGLE_FILE_HOST_ONLY 1)
+ add_subdirectory(${CLR_SRC_NATIVE_DIR}/corehost/apphost/static Corehost.Static)
+ add_dependencies(runtime singlefilehost)
+endif()
+#-------------------------
+# Enable C++ EH with SEH
+#-------------------------
+if (MSVC)
+ string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ add_compile_options($<$:/EHa>) # enable C++ EH (w/ SEH exceptions)
+endif()
+
#-------------------------------
# Include libraries native shims
#-------------------------------
-if(NOT CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_BUILD_SUBSET_RUNTIME)
+if(NOT CLR_CROSS_COMPONENTS_BUILD)
set(STATIC_LIBS_ONLY 1)
if(CLR_CMAKE_TARGET_WIN32)
@@ -59,7 +82,7 @@ if(NOT CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_BUILD_SUBSET_RUNTIME)
else()
add_subdirectory(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix Native.Unix)
endif()
-endif(NOT CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_BUILD_SUBSET_RUNTIME)
+endif(NOT CLR_CROSS_COMPONENTS_BUILD)
#-----------------------------------------
# Add Projects
@@ -92,7 +115,7 @@ add_subdirectory(pal/prebuilt/inc)
add_subdirectory(debug/debug-pal)
-if(CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_BUILD_SUBSET_RUNTIME)
+if(CLR_CMAKE_TARGET_WIN32)
add_subdirectory(gc/sample)
endif()
@@ -105,6 +128,7 @@ include_directories("../../artifacts/obj/coreclr")
add_subdirectory(tools/aot/jitinterface)
+
# Above projects do not build with these compile options
# All of the compiler options are specified in file compileoptions.cmake
# Do not add any new options here. They should be added in compileoptions.cmake
@@ -121,15 +145,9 @@ include(clrdefinitions.cmake)
if(FEATURE_STANDALONE_GC)
add_definitions(-DFEATURE_STANDALONE_GC)
- if (CLR_CMAKE_BUILD_SUBSET_RUNTIME)
- add_subdirectory(gc)
- endif (CLR_CMAKE_BUILD_SUBSET_RUNTIME)
+ add_subdirectory(gc)
endif(FEATURE_STANDALONE_GC)
-if(CLR_CMAKE_BUILD_SUBSET_RUNTIME AND NOT CLR_CROSS_COMPONENTS_BUILD)
- add_subdirectory(${CLR_SRC_NATIVE_DIR}/corehost/apphost/static Corehost.Static)
-endif()
-
if (CLR_CMAKE_HOST_UNIX)
include_directories("pal/inc")
include_directories("pal/inc/rt")
@@ -157,11 +175,9 @@ endif(CLR_CMAKE_TARGET_WIN32 AND FEATURE_EVENT_TRACE)
add_subdirectory(debug/dbgutil)
if(CLR_CMAKE_HOST_UNIX)
- if(CLR_CMAKE_BUILD_SUBSET_RUNTIME)
- if(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_UNIX_X86 AND NOT CLR_CMAKE_HOST_ANDROID))
- add_subdirectory(debug/createdump)
- endif(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_UNIX_X86 AND NOT CLR_CMAKE_HOST_ANDROID))
- endif(CLR_CMAKE_BUILD_SUBSET_RUNTIME)
+ if(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_UNIX_X86 AND NOT CLR_CMAKE_HOST_ANDROID))
+ add_subdirectory(debug/createdump)
+ endif(CLR_CMAKE_HOST_OSX OR (CLR_CMAKE_HOST_LINUX AND NOT CLR_CMAKE_HOST_UNIX_X86 AND NOT CLR_CMAKE_HOST_ANDROID))
# Include the dummy c++ include files
include_directories("pal/inc/rt/cpp")
@@ -206,36 +222,34 @@ if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSI
endif()
add_subdirectory(utilcode)
-add_subdirectory(gcinfo)
-add_subdirectory(jit)
add_subdirectory(inc)
if(CLR_CMAKE_HOST_UNIX)
add_subdirectory(palrt)
endif(CLR_CMAKE_HOST_UNIX)
+add_subdirectory(ilasm)
+add_subdirectory(ildasm)
+add_subdirectory(gcinfo)
+add_subdirectory(jit)
add_subdirectory(vm)
-if (CLR_CMAKE_BUILD_SUBSET_RUNTIME)
- add_subdirectory(md)
- add_subdirectory(debug)
- add_subdirectory(binder)
- add_subdirectory(classlibnative)
- add_subdirectory(dlls)
- add_subdirectory(ToolBox)
- add_subdirectory(tools)
- add_subdirectory(unwinder)
- add_subdirectory(ildasm)
- add_subdirectory(ilasm)
- add_subdirectory(interop)
-
- if(CLR_CMAKE_HOST_WIN32)
- add_subdirectory(hosts)
- endif(CLR_CMAKE_HOST_WIN32)
-else()
- if(CLR_CMAKE_HOST_UNIX)
- # this is needed to compile the jit on unix platforms.
- # When the runtime subset is compiled, the add_subdirectory(dlls) above
- # brings the mscorrc library into the build graph
- add_subdirectory(dlls/mscorrc)
- endif(CLR_CMAKE_HOST_UNIX)
-endif(CLR_CMAKE_BUILD_SUBSET_RUNTIME)
+add_subdirectory(md)
+add_subdirectory(debug)
+add_subdirectory(binder)
+add_subdirectory(classlibnative)
+add_subdirectory(dlls)
+add_subdirectory(ToolBox)
+add_subdirectory(tools)
+add_subdirectory(unwinder)
+add_subdirectory(interop)
+
+if(CLR_CMAKE_HOST_WIN32)
+ add_subdirectory(hosts)
+endif(CLR_CMAKE_HOST_WIN32)
+
+#----------------------------------------------------
+# Cross target Component install configuration
+#----------------------------------------------------
+if(CLR_CROSS_COMPONENTS_BUILD)
+ include(crosscomponents.cmake)
+endif(CLR_CROSS_COMPONENTS_BUILD)
diff --git a/src/coreclr/System.Private.CoreLib/CreateRuntimeRootILLinkDescriptorFile.targets b/src/coreclr/System.Private.CoreLib/CreateRuntimeRootILLinkDescriptorFile.targets
index c36b1c57ab82f..aa50f44411c9f 100644
--- a/src/coreclr/System.Private.CoreLib/CreateRuntimeRootILLinkDescriptorFile.targets
+++ b/src/coreclr/System.Private.CoreLib/CreateRuntimeRootILLinkDescriptorFile.targets
@@ -5,7 +5,7 @@
- <_ILLinkRuntimeRootDescriptorFilePath>$(ILLinkTrimXml)
+ <_ILLinkRuntimeRootDescriptorFilePath>$(ILLinkDescriptorsXml)
<_NamespaceFilePath Condition=" '$(_NamespaceFilePath)' == '' ">$(MSBuildThisFileDirectory)..\vm\namespace.h
<_MscorlibFilePath Condition=" '$(_MscorlibFilePath)' == '' ">$(MSBuildThisFileDirectory)..\vm\corelib.h
<_CortypeFilePath Condition=" '$(_CortypeFilePath)' == '' ">$(MSBuildThisFileDirectory)..\inc\cortypeinfo.h
@@ -14,7 +14,7 @@
- <_ILLinkDescriptorsFilePaths Include="$(ILLinkDirectory)ILLinkTrim.xml" />
+ <_ILLinkDescriptorsFilePaths Include="$(ILLinkDirectory)ILLink.Descriptors.xml" />
<_ILLinkDescriptorsFilePaths Include="$(CoreLibSharedDir)ILLink\ILLink.Descriptors.Shared.xml" />
@@ -49,7 +49,7 @@
CombinedLinkerXmlFile="$(_ILLinkDescriptorsIntermediatePath)" />
-
+
diff --git a/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj
index 25176927fd999..5f0d5c2c940f8 100644
--- a/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj
+++ b/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj
@@ -1,4 +1,4 @@
-
+false
@@ -16,12 +16,16 @@
truetrue
- $(IntermediateOutputPath)System.Private.CoreLib.xml
+ $(IntermediateOutputPath)ILLink.Descriptors.xml$(MSBuildThisFileDirectory)src\ILLink\true
+
+
+
+
@@ -119,7 +123,6 @@
-
@@ -297,7 +300,11 @@
-
+
+
diff --git a/src/coreclr/System.Private.CoreLib/Tools/GenUnicodeProp/TableLevels.cs b/src/coreclr/System.Private.CoreLib/Tools/GenUnicodeProp/TableLevels.cs
index 3740447693275..1435c9c771782 100644
--- a/src/coreclr/System.Private.CoreLib/Tools/GenUnicodeProp/TableLevels.cs
+++ b/src/coreclr/System.Private.CoreLib/Tools/GenUnicodeProp/TableLevels.cs
@@ -5,7 +5,7 @@
namespace GenUnicodeProp
{
- internal class TableLevels
+ internal sealed class TableLevels
{
public readonly int Level1Bits;
public readonly int Level2Bits;
diff --git a/src/coreclr/System.Private.CoreLib/src/ILLink/ILLinkTrim.xml b/src/coreclr/System.Private.CoreLib/src/ILLink/ILLink.Descriptors.xml
similarity index 100%
rename from src/coreclr/System.Private.CoreLib/src/ILLink/ILLinkTrim.xml
rename to src/coreclr/System.Private.CoreLib/src/ILLink/ILLink.Descriptors.xml
diff --git a/src/coreclr/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.xml b/src/coreclr/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.xml
new file mode 100644
index 0000000000000..7953cca3a6c10
--- /dev/null
+++ b/src/coreclr/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs b/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
index 6caaede63b1f6..9f2c011efac31 100644
--- a/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
+++ b/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
@@ -446,7 +446,7 @@ private static AssemblyLoadContext GetALC(string assemblyPath)
}
[ComVisible(true)]
- private class BasicClassFactory : IClassFactory
+ private sealed class BasicClassFactory : IClassFactory
{
#if FEATURE_COMINTEROP_UNMANAGED_ACTIVATION
private readonly Guid _classId;
@@ -578,7 +578,7 @@ public void LockServer([MarshalAs(UnmanagedType.Bool)] bool fLock)
}
[ComVisible(true)]
- private class LicenseClassFactory : IClassFactory2
+ private sealed class LicenseClassFactory : IClassFactory2
{
#if FEATURE_COMINTEROP_UNMANAGED_ACTIVATION
private readonly LicenseInteropProxy _licenseProxy = new LicenseInteropProxy();
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Collections/Generic/ArraySortHelper.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Collections/Generic/ArraySortHelper.CoreCLR.cs
index da6adab43e2f2..0959bc67f47f8 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Collections/Generic/ArraySortHelper.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Collections/Generic/ArraySortHelper.CoreCLR.cs
@@ -13,7 +13,7 @@ internal interface IArraySortHelper
}
[TypeDependency("System.Collections.Generic.GenericArraySortHelper`1")]
- internal partial class ArraySortHelper
+ internal sealed partial class ArraySortHelper
: IArraySortHelper
{
private static readonly IArraySortHelper s_defaultArraySortHelper = CreateArraySortHelper();
@@ -37,7 +37,7 @@ private static IArraySortHelper CreateArraySortHelper()
}
}
- internal partial class GenericArraySortHelper
+ internal sealed partial class GenericArraySortHelper
: IArraySortHelper
{
}
@@ -48,7 +48,7 @@ internal interface IArraySortHelper
}
[TypeDependency("System.Collections.Generic.GenericArraySortHelper`2")]
- internal partial class ArraySortHelper
+ internal sealed partial class ArraySortHelper
: IArraySortHelper
{
private static readonly IArraySortHelper s_defaultArraySortHelper = CreateArraySortHelper();
@@ -72,7 +72,7 @@ private static IArraySortHelper CreateArraySortHelper()
}
}
- internal partial class GenericArraySortHelper
+ internal sealed partial class GenericArraySortHelper
: IArraySortHelper
{
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Collections/ObjectModel/ReadOnlyDictionary.cs b/src/coreclr/System.Private.CoreLib/src/System/Collections/ObjectModel/ReadOnlyDictionary.cs
deleted file mode 100644
index 287c18661d7f3..0000000000000
--- a/src/coreclr/System.Private.CoreLib/src/System/Collections/ObjectModel/ReadOnlyDictionary.cs
+++ /dev/null
@@ -1,526 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-/*============================================================
-**
-**
-**
-**
-** Purpose: Read-only wrapper for another generic dictionary.
-**
-===========================================================*/
-
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Threading;
-
-namespace System.Collections.ObjectModel
-{
- [DebuggerTypeProxy(typeof(IDictionaryDebugView<,>))]
- [DebuggerDisplay("Count = {Count}")]
- internal class ReadOnlyDictionary : IDictionary, IDictionary, IReadOnlyDictionary where TKey : notnull
- {
- private readonly IDictionary m_dictionary;
- private object? m_syncRoot;
- private KeyCollection? m_keys;
- private ValueCollection? m_values;
-
- public ReadOnlyDictionary(IDictionary dictionary)
- {
- if (dictionary == null)
- {
- throw new ArgumentNullException(nameof(dictionary));
- }
- m_dictionary = dictionary;
- }
-
- protected IDictionary Dictionary => m_dictionary;
-
- public KeyCollection Keys => m_keys ??= new KeyCollection(m_dictionary.Keys);
-
- public ValueCollection Values => m_values ??= new ValueCollection(m_dictionary.Values);
-
- #region IDictionary Members
-
- public bool ContainsKey(TKey key) => m_dictionary.ContainsKey(key);
-
- ICollection IDictionary.Keys => Keys;
-
- public bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value) =>
- m_dictionary.TryGetValue(key, out value);
-
- ICollection IDictionary.Values => Values;
-
- public TValue this[TKey key] => m_dictionary[key];
-
- void IDictionary.Add(TKey key, TValue value) =>
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
-
- bool IDictionary.Remove(TKey key)
- {
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
- return false;
- }
-
- TValue IDictionary.this[TKey key]
- {
- get => m_dictionary[key];
- set => ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
- }
-
- #endregion
-
- #region ICollection> Members
-
- public int Count => m_dictionary.Count;
-
- bool ICollection>.Contains(KeyValuePair item) =>
- m_dictionary.Contains(item);
-
- void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) =>
- m_dictionary.CopyTo(array, arrayIndex);
-
- bool ICollection>.IsReadOnly => true;
-
- void ICollection>.Add(KeyValuePair item) =>
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
-
- void ICollection>.Clear() =>
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
-
- bool ICollection>.Remove(KeyValuePair item)
- {
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
- return false;
- }
-
- #endregion
-
- #region IEnumerable> Members
-
- public IEnumerator> GetEnumerator() =>
- m_dictionary.GetEnumerator();
-
- #endregion
-
- #region IEnumerable Members
-
- System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() =>
- ((IEnumerable)m_dictionary).GetEnumerator();
-
- #endregion
-
- #region IDictionary Members
-
- private static bool IsCompatibleKey(object key)
- {
- if (key == null)
- {
- ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
- }
- return key is TKey;
- }
-
- void IDictionary.Add(object key, object? value) =>
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
-
- void IDictionary.Clear() =>
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
-
- bool IDictionary.Contains(object key) => IsCompatibleKey(key) && ContainsKey((TKey)key);
-
- IDictionaryEnumerator IDictionary.GetEnumerator()
- {
- if (m_dictionary is IDictionary d)
- {
- return d.GetEnumerator();
- }
- return new DictionaryEnumerator(m_dictionary);
- }
-
- bool IDictionary.IsFixedSize => true;
-
- bool IDictionary.IsReadOnly => true;
-
- ICollection IDictionary.Keys => Keys;
-
- void IDictionary.Remove(object key) =>
- ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
-
- ICollection IDictionary.Values => Values;
-
- object? IDictionary.this[object key]
- {
- get
- {
- if (IsCompatibleKey(key))
- {
- return this[(TKey)key];
- }
- return null;
- }
- set => ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection);
- }
-
- void ICollection.CopyTo(Array array, int index)
- {
- if (array == null)
- {
- ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
- }
-
- if (array.Rank != 1)
- {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported);
- }
-
- if (array.GetLowerBound(0) != 0)
- {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound);
- }
-
- if (index < 0 || index > array.Length)
- {
- ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException();
- }
-
- if (array.Length - index < Count)
- {
- ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
- }
-
- if (array is KeyValuePair[] pairs)
- {
- m_dictionary.CopyTo(pairs, index);
- }
- else
- {
- if (array is DictionaryEntry[] dictEntryArray)
- {
- foreach (KeyValuePair item in m_dictionary)
- {
- dictEntryArray[index++] = new DictionaryEntry(item.Key, item.Value);
- }
- }
- else
- {
- object[]? objects = array as object[];
- if (objects == null)
- {
- ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
- }
-
- try
- {
- foreach (KeyValuePair item in m_dictionary)
- {
- objects[index++] = new KeyValuePair(item.Key, item.Value);
- }
- }
- catch (ArrayTypeMismatchException)
- {
- ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType();
- }
- }
- }
- }
-
- bool ICollection.IsSynchronized => false;
-
- object ICollection.SyncRoot
- {
- get
- {
- if (m_syncRoot == null)
- {
- if (m_dictionary is ICollection c)
- {
- m_syncRoot = c.SyncRoot;
- }
- else
- {
- Interlocked.CompareExchange