PostSharp.Engineering.BuildTools 1.0.97-alpha.2

Prefix Reserved
This is a prerelease version of PostSharp.Engineering.BuildTools.
There is a newer version of this package available.
See the version list below for details.
dotnet add package PostSharp.Engineering.BuildTools --version 1.0.97-alpha.2                
NuGet\Install-Package PostSharp.Engineering.BuildTools -Version 1.0.97-alpha.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PostSharp.Engineering.BuildTools" Version="1.0.97-alpha.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PostSharp.Engineering.BuildTools --version 1.0.97-alpha.2                
#r "nuget: PostSharp.Engineering.BuildTools, 1.0.97-alpha.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install PostSharp.Engineering.BuildTools as a Cake Addin
#addin nuget:?package=PostSharp.Engineering.BuildTools&version=1.0.97-alpha.2&prerelease

// Install PostSharp.Engineering.BuildTools as a Cake Tool
#tool nuget:?package=PostSharp.Engineering.BuildTools&version=1.0.97-alpha.2&prerelease                

PostSharp Engineering

Table of contents

Content

This repository contains common development, build and publishing scripts. It produces two NuGet packages:

  • PostSharp.Engineering.BuildTools is meant to be added as a package reference from the facade C# build program.

  • PostSharp.Engineering.Sdk is meant to be used as an SDK project.

    • AssemblyMetadata.targets: Adds package versions to assembly metadata.
    • BuildOptions.props: Sets the compiler options like language version, nullability and other build options like output path.
    • TeamCity.targets: Enables build and tests reporting to TeamCity.
    • SourceLink.props: Enables SourceLink support.
    • Coverage.props: Enabled code coverage. This script should be imported in test projects only (not in projects being tested). This script adds a package to coverlet so there is no need to have in in test projects (and these references should be removed).
    • MetalamaBranding.props and PostSharpBranding.props: Configure the proper icon for the nuget package.
    • PackagesConfig.targets: Makes the Restore and Pack targets work for projects referencing NuGet using packages.config.
    • WebPublish.targets: Configures the release build of web projects to be published as a zipped artifact.
    • TestsPublish.targets: Configures the release build of test projects to be published as a zipped artifact.

Both packages must be used at the same time.

Concepts

Terminology

A product is almost synonym for repository. There is a single product per repository, and the product name must be the same as the repository name. A product can contain several C# solutions.

Build and testing locally

For details, do Build.ps1 in PowerShell and read the help.

Versioning

Objectives

A major goal of this SDK is to allow to build and test repositories that have references to other repositories without having to publish the nuget package. That is, it is possible and quite easy, with this SDK, to perform builds that reference local clones of repositories. All solutions or projects in the same product share have the same version.

Configuring the version of the current product

The product package version and package version suffix configuration is centralized in the eng\MainVersion.props script via the MainVersion and PackageVersionSuffix properties, respectively. For RTM products, leave the PackageVersionSuffix property value empty.

Configuring the version of dependent products or packages.

Package dependencies versions configuration is centralized in the eng\Versions.props script. Each dependency version is configured in a property named <[DependencyName]Version>, eg. <SystemCollectionsImmutableVersion>.

This property value is then available in all MSBuild project files in the repository and can be used in the PackageReference items. For example:

<ItemGroup>
    <PackageReference Include="System.Collections.Immutable" Version="$(SystemCollectionsImmutableVersion)" />
</ItemGroup>

Using a local build of a referenced product

Dependencies must be checked out under the same root directory (typically c:\src) under their canonic name.

Then, use Build.ps1 dependencies set local <DEPENDENCY> to specify which dependencies should be run locally.

This will generate eng/Versions.g.props, which you should have imported in eng/Versions.props.

Installation

The easiest way to get started is from this repo template: https://github.com/postsharp/PostSharp.Engineering.ProductTemplate.

Step 1. Edit global.json

Add or update the reference to PostSharp.Engineering.Sdk in global.json.

{
  "sdk": {
    "version": "5.0.206",
    "rollForward": "disable"
  },
  "msbuild-sdks": {
    "PostSharp.Engineering.Sdk": "1.0.0"
  }
}

Step 2. Packaging.props

Create eng\Packaging.props file. The content should look like this:

<Project>

    
    <PropertyGroup>
        <Authors>PostSharp Technologies</Authors>
        <PackageProjectUrl>https://github.com/postsharp/Caravela</PackageProjectUrl>
        <PackageTags>PostSharp Caravela AOP</PackageTags>
        <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
        <PackageIcon>PostSharpIcon.png</PackageIcon>
        <PackageLicenseFile>LICENSE.md</PackageLicenseFile>
    </PropertyGroup>

    
    <ItemGroup>
        <None Include="$(MSBuildThisFileDirectory)..\PostSharpIcon.png" Visible="false" Pack="true" PackagePath="" />
        <None Include="$(MSBuildThisFileDirectory)..\LICENSE.md" Visible="false" Pack="true" PackagePath="" />
        <None Include="$(MSBuildThisFileDirectory)..\THIRD-PARTY-NOTICES.TXT" Visible="false" Pack="true" PackagePath="" />
    </ItemGroup>

</Project>

Make sure that all the files referenced in the previous step exist, or modify the file.

Step 3. MainVersion.props

Create eng\MainVersion.props file. The content should look like:

<Project>
    <PropertyGroup>
        <MainVersion>0.3.6</MainVersion>
        <PackageVersionSuffix>-preview</PackageVersionSuffix>
    </PropertyGroup>
</Project>

Additionally, there may be a property named PatchVersion, which may contain a version number with 4 components. The PatchVersion property value MUST start with the value of the MainVersion property. The use case for this property is when a repo A has a version dependency on another repo B but we want to release a patch of repo B without releasing a new build of repo A.

Step 4. Versions.props

Create eng\Versions.props file. The content should look like this (replace My by the name of the repo without dot):

<Project>

    
    <Import Project="MainVersion.props" Condition="!Exists('MyVersion.props')" />
    
    <PropertyGroup>
        <MyVersion>$(MainVersion)$(PackageVersionSuffix)</MyVersion>
        <MyAssemblyVersion>$(MainVersion)</MyAssemblyVersion>
    </PropertyGroup>

    
    <PropertyGroup>
        <RoslynVersion>3.8.0</RoslynVersion>
        <CaravelaCompilerVersion>3.8.12-preview</CaravelaCompilerVersion>
        <MicrosoftCSharpVersion>4.7.0</MicrosoftCSharpVersion>
    </PropertyGroup>

    
    <Import Project="../artifacts/publish/private/MyVersion.props" Condition="Exists('../artifacts/publish/private/MyVersion.props')" />
    <Import Project="Dependencies.props" Condition="Exists('Dependencies.props')" />

    
    <PropertyGroup>
        <AssemblyVersion>$(MyAssemblyVersion)</AssemblyVersion>
        <Version>$(MyVersion)</Version>
    </PropertyGroup>
    

</Project>

Step 5. Directory.Build.props

Add the following content to Directory.Build.props:

<Project>

  <PropertyGroup>
    <RepoDirectory>$(MSBuildThisFileDirectory)</RepoDirectory>
    <RepoKind>AzureRepos</RepoKind>
  </PropertyGroup>

  <Import Project="eng\Versions.props" />
  <Import Project="eng\Packaging.props" />

  <Import Sdk="PostSharp.Engineering.Sdk" Project="BuildOptions.props" />
  <Import Sdk="PostSharp.Engineering.Sdk" Project="CodeQuality.props" />
  <Import Sdk="PostSharp.Engineering.Sdk" Project="SourceLink.props" />

</Project>

Step 6. Directory.Build.targets

Add the following content to Directory.Build.targets:

<Project>

  <Import Sdk="PostSharp.Engineering.Sdk"  Project="AssemblyMetadata.targets" />
  <Import Sdk="PostSharp.Engineering.Sdk"  Project="TeamCity.targets" />

</Project>

Step 7. Create the front-end build project

Create a file eng\src\Build.csproj with the following content:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <AssemblyName>Build</AssemblyName>
        <GenerateDocumentationFile>false</GenerateDocumentationFile>
        <LangVersion>latest</LangVersion>
        <Nullable>enable</Nullable>
        <NoWarn>SA0001;CS8002</NoWarn>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="PostSharp.Engineering.BuildTools.csproj" Version="$(PostSharpEngineeringVersion)" />
    </ItemGroup>

</Project>

Create also a file eng\src\Program.cs with content that varies according to your repo. You can use all the power of C# and PowerShell to customize the build. Note that in the PublicArtifacts, the strings $(Configuration) and $(PackageVersion), and only those strings, are replaced by their value.

using PostSharp.Engineering.BuildTools;
using PostSharp.Engineering.BuildTools.Commands.Build;
using Spectre.Console.Cli;
using System.Collections.Immutable;

namespace BuildCaravela
{
    internal class Program
    {
        private static int Main( string[] args )
        {
            var product = new Product
            {
                ProductName = "Caravela",
                Solutions = ImmutableArray.Create<Solution>(
                    new DotNetSolution( "Caravela.sln" )
                    {
                        SupportsTestCoverage = true
                    },
                    new DotNetSolution( "Tests\\Caravela.Framework.TestApp\\Caravela.Framework.TestApp.sln" )
                    {
                        IsTestOnly = true
                    } ),
                PublicArtifacts = ImmutableArray.Create(
                    "bin\\$(Configuration)\\Caravela.Framework.$(PackageVersion).nupkg",
                    "bin\\$(Configuration)\\Caravela.TestFramework.$(PackageVersion).nupkg",
                    "bin\\$(Configuration)\\Caravela.Framework.Redist.$(PackageVersion).nupkg",
                    "bin\\$(Configuration)\\Caravela.Framework.Sdk.$(PackageVersion).nupkg",
                    "bin\\$(Configuration)\\Caravela.Framework.Impl.$(PackageVersion).nupkg",
                    "bin\\$(Configuration)\\Caravela.Framework.DesignTime.Contracts.$(PackageVersion).nupkg" ),
                 Dependencies = ImmutableArray.Create(
                    new ProductDependency("Caravela.Compiler"), 
                    new ProductDependency("PostSharp.Engineering.BuildTools") )    
            };
            var commandApp = new CommandApp();
            commandApp.AddProductCommands( product );

            return commandApp.Run( args );
        }
    }
}

Step 8. Create Build.ps1, the front-end build script

Create Build.ps1 file in the repo root directory. The content should look like:

if ( $env:VisualStudioVersion -eq $null ) {
    Import-Module "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
    Enter-VsDevShell -VsInstallPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\" -StartInPath $(Get-Location)
}

& dotnet run --project "$PSScriptRoot\eng\src\Build.csproj" -- $args
exit $LASTEXITCODE

Step 9. Editing .gitignore

Exclude this:

artifacts
eng/tools
*.Import.props

Build Concepts

The code in Program.cs uses the concepts described here.

classDiagram

  class Product {

  }

  class Solution {

  }



  Program o-- "1" Product 
  Product o-- "*" Solution
  Product  o-- "*" DependencyDefinition
  Product  o-- "3" BuildConfigurationInfo
  BuildConfigurationInfo  o-- "*" IBuildTrigger
  BuildConfigurationInfo o-- "*" Publisher
  BuildConfigurationInfo o-- "*" Swapper
  Swapper o-- "*" Tester
  Solution <|-- DotNetSolution
  Solution <|-- MSBuildSolution
  Tester <|-- VSTestTester
  IBuildTrigger <|-- NightlyBuildTrigger
  IBuildTrigger <|-- SourceBuildTrigger
  Publisher <|-- MSDeployPublisher
  Publisher <|-- NuGetPublisher
  Publisher <|-- VsixPublisher
  

  • Program is your program, i.e. BuildMyProduct.
  • Product is a unique instance configured by Program, the root object that defines the build for the whole repo.
  • Solution represents a solution, project, or other build script in your repo. A solution is something that can be restored, built, packed, tested. Two standard implementations are DotNetSolution and MSBuildSolution.
  • BuildConfigurationInfo represents properties that are specific to a build configuration (i.e. Debug, Release or Public) for the product.
  • DependencyDefinition are dependencies to other repositories.
  • Publisher is something that publishes, or deploys, an already-built artefact to a feed, marketplace, deployment slot, or anything. There are standard implementations for NuGet, VSIX, web sites.
  • Swapper is something that swaps a staging deployment slot into the production deployment slot.
  • Tester is a test suite, typically running against a staging deployment, that must execute successfully before the staging deployment is swapped into the production deployment.

Continuous integration

We use TeamCity as our CI/CD pipeline, and we use Kotlin scripts stored in the Git repo. For an example, see the .teamcity directory the current repo.

Artifacts

All TeamCity artifacts are published under artifacts/publish. All build configurations should export and import these artifacts.

Commands

All TeamCity build configurations use the front-end Build.ps1:

  • Debug Build and Test: Build.ps1 test --numbered %build.number%
  • Release Build and Test: Build.ps1 test --public --sign
  • Publish to internal package sources: Build.ps1 publish
  • Publish to internal and public package source: Build.ps1 publish --public

Required environment variables

  • SIGNSERVER_SECRET
  • INTERNAL_NUGET_PUSH_URL
  • INTERNAL_NUGET_API_KEY
  • NUGET_ORG_API_KEY
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on PostSharp.Engineering.BuildTools:

Package Downloads
PostSharp.Engineering.BuildTools.AWS

Package Description

PostSharp.Engineering.DocFx

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2023.2.151 39 11/22/2024
2023.2.150 58 11/22/2024
2023.2.149 46 11/21/2024
2023.2.148 48 11/20/2024
2023.2.147 402 11/19/2024
2023.2.146 82 11/15/2024
2023.2.145 79 11/12/2024
2023.2.144 83 11/12/2024
2023.2.143 95 11/11/2024
2023.2.142 246 11/7/2024
2023.2.141 190 11/7/2024
2023.2.140 1,261 11/6/2024
2023.2.139 172 11/6/2024
2023.2.138 91 11/5/2024
2023.2.137 373 10/24/2024
2023.2.136 2,997 10/14/2024
2023.2.135 907 10/4/2024
2023.2.134 155 9/29/2024
2023.2.133 99 9/25/2024
2023.2.132 201 9/24/2024
2023.2.131 98 9/24/2024
2023.2.130 263 9/11/2024
2023.2.129 2,343 9/11/2024
2023.2.128 116 9/11/2024
2023.2.127 113 9/10/2024
2023.2.126 273 9/9/2024
2023.2.125 122 9/9/2024
2023.2.124 382 9/6/2024
2023.2.123 150 8/29/2024
2023.2.122 1,079 8/28/2024
2023.2.121 105 8/27/2024
2023.2.120 116 8/27/2024
2023.2.119 396 8/27/2024
2023.2.118 110 8/27/2024
2023.2.117 152 8/27/2024
2023.2.116 468 8/9/2024
2023.2.115 295 8/5/2024
2023.2.114 76 8/5/2024
2023.2.113 202 7/25/2024
2023.2.112 267 7/12/2024
2023.2.111 2,243 7/12/2024
2023.2.110 434 7/10/2024
2023.2.109 1,866 6/10/2024
2023.2.108 328 5/30/2024
2023.2.107 155 5/28/2024
2023.2.106 412 5/27/2024
2023.2.105 113 5/24/2024
2023.2.104 128 5/23/2024
2023.2.103 118 5/23/2024
2023.2.102 175 5/23/2024
2023.2.101 105 5/23/2024
2023.2.100 127 5/22/2024
2023.2.99 115 5/22/2024
2023.2.98 339 5/22/2024
2023.2.97 112 5/22/2024
2023.2.96 123 5/22/2024
2023.2.95 113 5/21/2024
2023.2.94 107 5/21/2024
2023.2.93 286 5/19/2024
2023.2.92 108 5/19/2024
2023.2.91 135 5/18/2024
2023.2.90 380 5/15/2024
2023.2.89 176 5/15/2024
2023.2.88 105 5/15/2024
2023.2.87 97 5/13/2024
2023.2.86 330 4/29/2024
2023.2.85 431 4/23/2024
2023.2.84 719 4/2/2024
2023.2.83 4,211 3/28/2024
2023.2.82 126 3/26/2024
2023.2.81 114 3/23/2024
2023.2.80 378 3/22/2024
2023.2.79 128 3/13/2024
2023.2.78 527 2/12/2024
2023.2.77 165 1/10/2024
2023.2.76 903 1/8/2024
2023.2.75 300 1/8/2024
2023.2.74 137 1/5/2024
2023.2.73 123 1/5/2024
2023.2.72 138 1/5/2024
2023.2.71 452 1/3/2024
2023.2.70 3,375 1/2/2024
2023.2.69 142 12/22/2023
2023.2.68 496 12/21/2023
2023.2.67 142 12/19/2023
2023.2.66 124 12/18/2023
2023.2.65 135 12/18/2023
2023.2.64 835 12/12/2023
2023.2.63 261 12/1/2023
2023.2.62 511 12/1/2023
2023.2.61 219 11/30/2023
2023.2.60 165 11/30/2023
2023.2.59 130 11/30/2023
2023.2.58 386 11/13/2023
2023.2.57 490 10/25/2023
2023.2.56 1,247 10/23/2023
2023.2.55 146 10/20/2023
2023.2.54 178 10/20/2023
2023.2.53 425 10/19/2023
2023.2.52 250 10/18/2023
2023.2.51 151 10/18/2023
2023.2.50 197 10/17/2023
2023.2.49 1,213 10/12/2023
2023.2.48 337 10/12/2023
2023.2.47 335 10/11/2023
2023.2.46 142 10/11/2023
2023.2.45 332 10/11/2023
2023.2.44 170 10/11/2023
2023.2.43 272 9/25/2023
2023.2.42 161 9/20/2023
2023.2.41 2,111 9/11/2023
2023.2.40 415 8/30/2023
2023.2.39 354 8/25/2023
2023.2.38 396 8/22/2023
2023.2.37 281 8/21/2023
2023.2.36 2,285 8/18/2023
2023.2.35 174 8/18/2023
2023.2.34 187 8/9/2023
2023.2.33 217 7/29/2023
2023.2.32 1,110 7/26/2023
2023.2.31 173 7/25/2023
2023.2.30 216 7/25/2023
2023.2.29 253 7/23/2023
2023.2.28 204 7/23/2023
2023.2.27 233 7/21/2023
2023.2.26 427 7/19/2023
2023.2.25 194 7/19/2023
2023.2.24 1,333 6/27/2023
2023.2.23 334 6/26/2023
2023.2.22 452 6/25/2023
2023.2.21 196 6/24/2023
2023.2.20 176 6/23/2023
2023.2.19 186 6/23/2023
2023.2.18 197 6/23/2023
2023.2.17 219 6/22/2023
2023.2.16 294 6/22/2023
2023.2.15 196 6/22/2023
2023.2.14 219 6/21/2023
2023.2.13 215 6/16/2023
2023.2.12 193 6/15/2023
2023.2.11 619 6/13/2023
2023.2.10 193 6/12/2023
2023.2.9 213 6/12/2023
2023.2.8 208 6/12/2023
2023.2.7 293 6/10/2023
2023.2.6-preview 172 6/10/2023
2023.2.5-preview 141 6/9/2023
2023.2.4-preview 231 6/9/2023
2023.2.3-preview 165 6/7/2023
2023.2.2-preview 207 6/2/2023
2023.2.1-preview 179 6/2/2023
2023.1.28-preview 110 9/5/2024
2023.1.27-preview 90 9/5/2024
2023.1.26-preview 139 9/4/2024
2023.1.25-preview 106 9/4/2024
2023.1.24-preview 92 9/4/2024
2023.1.23-preview 100 9/4/2024
2023.1.22-preview 112 9/3/2024
2023.1.21-preview 112 9/3/2024
2023.1.20-preview 117 9/3/2024
2023.1.19-preview 102 9/2/2024
2023.1.18-preview 107 9/2/2024
2023.1.17-preview 94 9/2/2024
2023.1.16-preview 108 8/30/2024
2023.1.15-preview 114 8/29/2024
2023.1.14-preview 189 5/24/2023
2023.1.13-preview 883 5/24/2023
2023.1.12-preview 193 5/23/2023
2023.1.11-preview 156 5/23/2023
2023.1.10-preview 139 5/17/2023
2023.1.9-preview 168 5/17/2023
2023.1.8-preview 132 5/15/2023
2023.1.7-preview 428 5/10/2023
2023.1.6-preview 236 4/27/2023
2023.1.5-preview 203 4/26/2023
2023.1.4-preview 143 4/26/2023
2023.1.3-preview 254 4/21/2023
2023.1.2-preview 150 4/21/2023
2023.1.1-preview 159 4/21/2023
2023.1.0-preview 155 4/21/2023
2023.0.150 200 5/29/2023
2023.0.149 497 5/24/2023
2023.0.148 209 5/23/2023
2023.0.147 246 5/17/2023
2023.0.146 279 5/17/2023
2023.0.145 193 5/9/2023
2023.0.144 435 5/2/2023
2023.0.143 207 5/2/2023
1.0.142-preview 180 4/24/2023
1.0.141-preview 243 4/5/2023
1.0.140-preview 247 4/4/2023
1.0.139-preview 253 3/30/2023
1.0.138-preview 233 3/30/2023
1.0.137-preview 141 3/30/2023
1.0.136-preview 151 3/30/2023
1.0.135-preview 764 3/30/2023
1.0.134-preview 308 3/1/2023
1.0.133-preview 160 3/1/2023
1.0.132-preview 566 2/27/2023
1.0.131-preview 422 2/24/2023
1.0.130-preview 864 2/22/2023
1.0.129-preview 154 2/22/2023
1.0.128-preview 217 2/21/2023
1.0.127-preview 152 2/17/2023
1.0.126-preview 628 2/16/2023
1.0.125-preview 193 2/16/2023
1.0.124-preview 158 2/15/2023
1.0.123-preview 138 2/15/2023
1.0.122-preview 182 2/10/2023
1.0.121-preview 138 2/10/2023
1.0.120-preview 143 2/10/2023
1.0.119-preview 192 2/9/2023
1.0.118-preview 187 2/8/2023
1.0.117-preview 195 1/30/2023
1.0.116-preview 149 1/26/2023
1.0.115-preview 147 1/26/2023
1.0.114-preview 793 1/16/2023
1.0.113-preview 225 1/13/2023
1.0.112-preview 364 1/8/2023
1.0.111-preview 477 1/5/2023
1.0.110-preview 682 12/18/2022
1.0.109-preview 203 12/15/2022
1.0.108-preview 193 12/13/2022
1.0.107-preview 207 12/9/2022
1.0.107-alpha.2 125 12/9/2022
1.0.107-alpha.1 113 12/9/2022
1.0.106-preview 209 12/8/2022
1.0.105-preview 164 12/8/2022
1.0.105-alpha.2 110 12/8/2022
1.0.105-alpha.1 117 12/6/2022
1.0.104-preview 228 12/5/2022
1.0.103-preview 284 12/2/2022
1.0.102-preview 457 11/18/2022
1.0.101-preview 1,174 11/3/2022
1.0.101-alpha.3 140 11/3/2022
1.0.101-alpha.2 151 11/2/2022
1.0.101-alpha.1 112 11/2/2022
1.0.100-preview 1,017 10/28/2022
1.0.99-preview 415 10/27/2022
1.0.99-alpha.3 119 10/27/2022
1.0.99-alpha.2 138 10/26/2022
1.0.99-alpha.1 116 10/26/2022
1.0.98-preview 254 10/25/2022
1.0.97-preview 465 10/20/2022
1.0.97-alpha.2 174 10/19/2022
1.0.97-alpha.1 164 10/19/2022
1.0.96-preview 418 10/7/2022
1.0.95-preview 177 10/4/2022
1.0.94-preview 565 9/29/2022
1.0.93-preview 178 9/29/2022
1.0.92-preview 212 9/27/2022
1.0.91-preview 268 9/27/2022
1.0.90-preview 223 9/27/2022
1.0.90-alpha.1 143 9/26/2022
1.0.89-preview 440 9/11/2022
1.0.87-preview 661 9/6/2022
1.0.86-preview 412 9/5/2022
1.0.86-alpha.1 120 9/2/2022
1.0.85-preview 342 8/2/2022
1.0.84-preview 355 7/29/2022
1.0.83-preview 433 7/28/2022
1.0.83-alpha.3 135 7/28/2022
1.0.83-alpha.2 133 7/28/2022
1.0.83-alpha.1 137 7/28/2022
1.0.82-preview 629 7/27/2022
1.0.82-beta.3 177 7/27/2022
1.0.82-beta.2 176 7/26/2022
1.0.82-beta 186 7/26/2022
1.0.82-alpha.1 129 7/25/2022
1.0.81-preview 254 7/22/2022
1.0.80-preview 206 7/20/2022
1.0.80-alpha.3 139 7/20/2022
1.0.80-alpha.2 137 7/20/2022
1.0.80-alpha 197 7/20/2022
1.0.79-preview 312 7/19/2022
1.0.79-beta 168 7/15/2022
1.0.79-alpha.1 246 7/2/2022
1.0.78-preview 310 7/12/2022
1.0.78-alpha.1 145 7/2/2022
1.0.77-preview 248 6/24/2022
1.0.76-preview 223 6/22/2022
1.0.75-preview 259 6/21/2022
1.0.74-preview 213 6/18/2022
1.0.73-preview 158 6/16/2022
1.0.72-preview 207 6/15/2022
1.0.71-preview 200 6/10/2022
1.0.70-preview 851 6/6/2022
1.0.70-beta 214 6/3/2022
1.0.69-preview 229 5/24/2022
1.0.68-preview 315 5/23/2022
1.0.68-beta-4 169 5/23/2022
1.0.68-beta-3 191 5/16/2022
1.0.68-beta-2 188 5/16/2022
1.0.68-beta 187 5/12/2022
1.0.67-preview 264 5/11/2022
1.0.67-beta-4 187 5/11/2022
1.0.67-beta-3 206 5/10/2022
1.0.67-beta-2 180 5/10/2022
1.0.67-beta 180 5/10/2022
1.0.66-preview 201 5/9/2022
1.0.65-preview 192 5/4/2022
1.0.65-beta 188 4/29/2022
1.0.64-preview 211 4/26/2022
1.0.63-preview 204 4/22/2022
1.0.63-beta-6 204 4/21/2022
1.0.63-beta-5 185 4/21/2022
1.0.63-beta-4 192 4/21/2022
1.0.63-beta-3 196 4/20/2022
1.0.63-beta-2 200 4/20/2022
1.0.63-beta 203 4/19/2022
1.0.62-preview 202 4/15/2022
1.0.62-beta-6 183 4/14/2022
1.0.62-beta-5 192 4/14/2022
1.0.62-beta-4 191 4/14/2022
1.0.62-beta-3 199 4/13/2022
1.0.62-beta-2 194 4/11/2022
1.0.62-beta 211 4/11/2022
1.0.61-preview 231 4/7/2022
1.0.61-beta 208 4/7/2022
1.0.60-preview 203 4/6/2022
1.0.59-preview 195 4/6/2022
1.0.59-beta 204 4/6/2022
1.0.58-beta-6 188 4/6/2022
1.0.58-beta-5 187 4/5/2022
1.0.58-beta-4 205 4/5/2022
1.0.58-beta-3 171 4/5/2022
1.0.58-beta-2 211 4/5/2022
1.0.58-beta 210 4/5/2022
1.0.56-preview 215 4/1/2022
1.0.56-beta-9 200 3/28/2022
1.0.56-beta-8 191 3/28/2022
1.0.56-beta-7 184 3/28/2022
1.0.56-beta-6 213 3/28/2022
1.0.56-beta-5 186 3/25/2022
1.0.56-beta-4 183 3/24/2022
1.0.56-beta-3 202 3/22/2022
1.0.56-beta-2 192 3/22/2022
1.0.56-beta-14 204 3/29/2022
1.0.56-beta-13 216 3/28/2022
1.0.56-beta-12 184 3/28/2022
1.0.56-beta-11 198 3/28/2022
1.0.56-beta-10 194 3/28/2022
1.0.56-beta 180 3/22/2022
1.0.55-preview 232 3/22/2022
1.0.54-preview 192 3/16/2022
1.0.53-preview 192 3/16/2022
1.0.52-preview 206 3/16/2022
1.0.51-preview 199 3/15/2022
1.0.50-preview 187 3/9/2022
1.0.49-preview 204 3/3/2022
1.0.48-preview 193 2/23/2022
1.0.47-preview 213 2/21/2022
1.0.46-preview 321 2/21/2022
1.0.45-preview 182 2/18/2022
1.0.43-preview 208 2/16/2022
1.0.42-preview 217 2/10/2022
1.0.41-preview 186 2/10/2022
1.0.40-preview 203 2/10/2022
1.0.39-preview 221 2/7/2022
1.0.38-preview 227 2/4/2022
1.0.37-preview 202 2/4/2022
1.0.36-preview 223 1/25/2022
1.0.35-preview 215 1/25/2022
1.0.34-preview 195 1/25/2022
1.0.33-preview 205 1/13/2022
1.0.32-preview 242 1/13/2022
1.0.31-preview 214 1/13/2022
1.0.30-preview 210 1/13/2022
1.0.29-preview 209 1/13/2022
1.0.28-preview 206 1/12/2022
1.0.27-preview 195 1/12/2022
1.0.26-preview 211 1/12/2022
1.0.25-preview 225 1/10/2022
1.0.24-preview 222 1/6/2022
1.0.23-preview 223 1/4/2022
1.0.22-preview 206 12/15/2021
1.0.21-preview 299 12/14/2021
1.0.20-preview 296 12/14/2021
1.0.19-preview 218 12/10/2021
1.0.18-preview 237 12/9/2021
1.0.17-preview 447 12/9/2021
1.0.16-preview 211 12/9/2021
1.0.15-preview 238 12/9/2021
1.0.14-preview 242 12/9/2021
1.0.13-preview 242 12/9/2021
1.0.12-preview 227 12/9/2021
1.0.10-preview 237 12/8/2021
1.0.9-preview 253 12/7/2021
1.0.8-preview 207 12/7/2021
1.0.7-preview 234 12/7/2021
1.0.6-preview 240 12/7/2021
1.0.4-preview 200 12/3/2021
1.0.3-preview 210 12/3/2021
1.0.2-preview 217 12/3/2021
1.0.1-preview 219 12/2/2021
1.0.0-preview 228 12/2/2021