diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml
index 3c4cf61f15bfdcea587111e0af739489cb09d77c..a50a42de86868d51f4bde453486e447953a20f0d 100644
--- a/.azure/pipelines/ci.yml
+++ b/.azure/pipelines/ci.yml
@@ -250,6 +250,38 @@ stages:
       - name: Windows_arm_Packages
         path: artifacts/packages/
 
+  # Build Windows ARM64
+  - template: jobs/default-build.yml
+    parameters:
+      codeSign: true
+      jobName: Windows_64_build
+      jobDisplayName: "Build: Windows ARM64"
+      agentOs: Windows
+      buildArgs:
+        -arch arm64
+        -sign
+        -pack
+        -noBuildNodeJS
+        -noBuildJava
+        /bl:artifacts/log/build.win-arm64.binlog
+        /p:DotNetSignType=$(_SignType)
+        /p:OnlyPackPlatformSpecificPackages=true
+        /p:AssetManifestFileName=aspnetcore-win-arm64.xml
+        $(_BuildArgs)
+        $(_PublishArgs)
+        $(_InternalRuntimeDownloadArgs)
+      installNodeJs: false
+      installJdk: false
+      artifacts:
+      - name: Windows_arm64_Logs
+        path: artifacts/log/
+        publishOnError: true
+        includeForks: true
+      - name: Windows_arm64_Packages
+        path: artifacts/packages/
+      - name: Windows_arm64_Installers
+        path: artifacts/installers/
+
   # Build MacOS
   - template: jobs/default-build.yml
     parameters:
diff --git a/Directory.Build.props b/Directory.Build.props
index 56feda43edd3aea16c0383de4a0bf23799ac82b7..53865f2cfb492238d40d252bc569d2a0a7121026 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -115,6 +115,7 @@
       win-x64;
       win-x86;
       win-arm;
+      win-arm64;
       osx-x64;
       linux-musl-x64;
       linux-musl-arm64;
diff --git a/build.ps1 b/build.ps1
index cf854f54b4c332c0f1f3ece85960ab68e1b1fc71..6b82c05af688e27e8c1107cdc91f29f18440e66c 100644
--- a/build.ps1
+++ b/build.ps1
@@ -118,7 +118,7 @@ param(
     [ValidateSet('Debug', 'Release')]
     $Configuration,
 
-    [ValidateSet('x64', 'x86', 'arm')]
+    [ValidateSet('x64', 'x86', 'arm', 'arm64')]
     $Architecture = 'x64',
 
     # A list of projects which should be built.
@@ -157,7 +157,7 @@ param(
 
     # Other lifecycle targets
     [switch]$Help, # Show help
-    
+
     # Optional arguments that enable downloading an internal
     # runtime or runtime from a non-default location
     [string]$DotNetRuntimeSourceFeed,
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 8e7bb0ecd50f03af720ca54965918b95ab51d5b8..73ffdde39f7b76b85b6321a5c8b87e5a01ceec08 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -107,6 +107,7 @@ and are generated based on the last package release.
     <LatestPackageReference Include="microsoft.netcore.app.runtime.win-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
     <LatestPackageReference Include="microsoft.netcore.app.runtime.win-x86" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
     <LatestPackageReference Include="microsoft.netcore.app.runtime.win-arm" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
+    <LatestPackageReference Include="microsoft.netcore.app.runtime.win-arm64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
     <LatestPackageReference Include="microsoft.netcore.app.runtime.osx-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
     <LatestPackageReference Include="microsoft.netcore.app.runtime.linux-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
     <LatestPackageReference Include="microsoft.netcore.app.runtime.linux-arm" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
diff --git a/eng/Signing.props b/eng/Signing.props
index 3b61e9205f8c37e2cadf9faafeae225ab781386b..024a5c8a0aaa94ef9b20408798bda41efaa40c43 100644
--- a/eng/Signing.props
+++ b/eng/Signing.props
@@ -93,9 +93,11 @@
     <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-x64\shared\Microsoft.NETCore.App\**\*.dll" CertificateName="None" />
     <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-x86\shared\Microsoft.NETCore.App\**\*.dll" CertificateName="None" />
     <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-arm\shared\Microsoft.NETCore.App\**\*.dll" CertificateName="None" />
+    <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-arm64\shared\Microsoft.NETCore.App\**\*.dll" CertificateName="None" />
     <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-x64\host\**\*.dll" CertificateName="None" />
     <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-x86\host\**\*.dll" CertificateName="None" />
     <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-arm\host\**\*.dll" CertificateName="None" />
+    <_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-arm64\host\**\*.dll" CertificateName="None" />
     <_DotNetFilesToExclude Include="$(RedistNetCorePath)dotnet.exe" CertificateName="None" />
     <FileSignInfo Include="@(_DotNetFilesToExclude->'%(FileName)%(Extension)'->Distinct())" CertificateName="None" />
 
diff --git a/src/Shared/E2ETesting/E2ETesting.props b/src/Shared/E2ETesting/E2ETesting.props
index e31cbd93ac224bd54d22e7b274f1085186b1f315..82769181de3c118eb9bf31b1474a0fe8533a072a 100644
--- a/src/Shared/E2ETesting/E2ETesting.props
+++ b/src/Shared/E2ETesting/E2ETesting.props
@@ -4,7 +4,7 @@
     <DefaultItemExcludes>$(DefaultItemExcludes);node_modules\**</DefaultItemExcludes>
     <SeleniumScreenShotsFolderPath>$([MSBuild]::NormalizeDirectory('$(ArtifactsTestResultsDir)','$(MSBuildProjectName)'))</SeleniumScreenShotsFolderPath>
     <SeleniumProcessTrackingFolder Condition="'$(SeleniumProcessTrackingFolder)' == ''">$([MSBuild]::EnsureTrailingSlash('$(RepoRoot)'))artifacts\tmp\selenium\</SeleniumProcessTrackingFolder>
-    <SeleniumE2ETestsSupported Condition="'$(SeleniumE2ETestsSupported)' == '' and '$(TargetArchitecture)' != 'arm' and '$(OS)' == 'Windows_NT'">true</SeleniumE2ETestsSupported>
+    <SeleniumE2ETestsSupported Condition="'$(SeleniumE2ETestsSupported)' == '' and '$(TargetArchitecture)' != 'arm' and '$(TargetArchitecture)' != 'arm64' and '$(OS)' == 'Windows_NT'">true</SeleniumE2ETestsSupported>
 
     <!-- We want to enforce prerequisites when we build from the CI or within Visual Studio -->
     <EnforcedE2EBuildEnvironment Condition="'$(ContinuousIntegrationBuild)' == 'true' or '$(BuildingInsideVisualStudio)' == 'true'">true</EnforcedE2EBuildEnvironment>