Merge branch 'master' into merge/release/5.0-preview2-to-master

This commit is contained in:
Ryan Brandenburg 2020-03-11 10:12:08 -07:00 committed by GitHub
commit e98e85712c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
128 changed files with 2179 additions and 691 deletions

View File

@ -254,6 +254,38 @@ stages:
- name: Windows_arm_Packages - name: Windows_arm_Packages
path: artifacts/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 # Build MacOS
- template: jobs/default-build.yml - template: jobs/default-build.yml
parameters: parameters:

View File

@ -32,10 +32,10 @@ jobs:
steps: steps:
# Build the shared framework # Build the shared framework
- script: ./build.cmd -ci -all -pack -arch x64 -buildNative /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.build.x64.binlog - script: ./build.cmd -ci -all -pack -arch x64 -buildNative /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.build.x64.binlog
displayName: Build shared fx displayName: Build shared fx
- script: .\restore.cmd -ci - script: .\restore.cmd -ci
displayName: Restore displayName: Restore
- script: .\build.cmd -ci -NoRestore -test -projects eng\helix\helix.proj /p:RunQuarantinedTests=true /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildNative=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl - script: .\build.cmd -ci -NoRestore -test -noBuildJava -projects eng\helix\helix.proj /p:RunQuarantinedTests=true /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildNative=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Run build.cmd helix target displayName: Run build.cmd helix target
env: env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues

View File

@ -123,6 +123,7 @@
win-x64; win-x64;
win-x86; win-x86;
win-arm; win-arm;
win-arm64;
osx-x64; osx-x64;
linux-musl-x64; linux-musl-x64;
linux-musl-arm64; linux-musl-arm64;

View File

@ -118,7 +118,7 @@ param(
[ValidateSet('Debug', 'Release')] [ValidateSet('Debug', 'Release')]
$Configuration, $Configuration,
[ValidateSet('x64', 'x86', 'arm')] [ValidateSet('x64', 'x86', 'arm', 'arm64')]
$Architecture = 'x64', $Architecture = 'x64',
# A list of projects which should be built. # A list of projects which should be built.
@ -157,7 +157,7 @@ param(
# Other lifecycle targets # Other lifecycle targets
[switch]$Help, # Show help [switch]$Help, # Show help
# Optional arguments that enable downloading an internal # Optional arguments that enable downloading an internal
# runtime or runtime from a non-default location # runtime or runtime from a non-default location
[string]$DotNetRuntimeSourceFeed, [string]$DotNetRuntimeSourceFeed,

View File

@ -94,6 +94,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-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
<LatestPackageReference Include="microsoft.netcore.app.runtime.win-x86" 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-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.osx-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
<LatestPackageReference Include="microsoft.netcore.app.runtime.linux-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" /> <LatestPackageReference Include="microsoft.netcore.app.runtime.linux-x64" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />
<LatestPackageReference Include="microsoft.netcore.app.runtime.linux-arm" Version="$(MicrosoftNETCoreAppRuntimeVersion)" /> <LatestPackageReference Include="microsoft.netcore.app.runtime.linux-arm" Version="$(MicrosoftNETCoreAppRuntimeVersion)" />

View File

@ -93,9 +93,11 @@
<_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-x64\shared\Microsoft.NETCore.App\**\*.dll" CertificateName="None" /> <_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-x86\shared\Microsoft.NETCore.App\**\*.dll" CertificateName="None" />
<_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-arm\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-x64\host\**\*.dll" CertificateName="None" />
<_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-x86\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-arm\host\**\*.dll" CertificateName="None" />
<_DotNetFilesToExclude Include="$(BaseRedistNetCorePath)win-arm64\host\**\*.dll" CertificateName="None" />
<_DotNetFilesToExclude Include="$(RedistNetCorePath)dotnet.exe" CertificateName="None" /> <_DotNetFilesToExclude Include="$(RedistNetCorePath)dotnet.exe" CertificateName="None" />
<FileSignInfo Include="@(_DotNetFilesToExclude->'%(FileName)%(Extension)'->Distinct())" CertificateName="None" /> <FileSignInfo Include="@(_DotNetFilesToExclude->'%(FileName)%(Extension)'->Distinct())" CertificateName="None" />

View File

@ -13,336 +13,340 @@
<Uri>https://github.com/dotnet/blazor</Uri> <Uri>https://github.com/dotnet/blazor</Uri>
<Sha>dd7fb4d3931d556458f62642c2edfc59f6295bfb</Sha> <Sha>dd7fb4d3931d556458f62642c2edfc59f6295bfb</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.2.20160.3"> <Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.3.20157.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri> <Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>5cf08065b968b04aa07664d9291fdae004b413e7</Sha> <Sha>cc921d78edc850e3214917274d117bcc1450884b</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.2.20160.3"> <Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.3.20157.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri> <Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>5cf08065b968b04aa07664d9291fdae004b413e7</Sha> <Sha>cc921d78edc850e3214917274d117bcc1450884b</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.2.20160.3"> <Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.3.20157.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri> <Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>5cf08065b968b04aa07664d9291fdae004b413e7</Sha> <Sha>cc921d78edc850e3214917274d117bcc1450884b</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.2.20160.3"> <Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.3.20157.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri> <Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>5cf08065b968b04aa07664d9291fdae004b413e7</Sha> <Sha>cc921d78edc850e3214917274d117bcc1450884b</Sha>
</Dependency> </Dependency>
<Dependency Name="dotnet-ef" Version="5.0.0-preview.2.20159.4"> <Dependency Name="dotnet-ef" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.2.20159.4"> <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.2.20159.4"> <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.2.20159.4"> <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.2.20159.4"> <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.2.20159.4"> <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.2.20159.4"> <Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.3.20160.3">
<Uri>https://github.com/dotnet/efcore</Uri> <Uri>https://github.com/dotnet/efcore</Uri>
<Sha>b42460865c9301de83e966987de02686cedbe166</Sha> <Sha>9bad189861bded96caf604294628134de6b250cc</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri>
<Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Drawing.Common" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Permissions" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Text.Json" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Text.Json" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Threading.Channels" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.2-runtime.20160.6" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.2-runtime.20155.3" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<!-- <!--
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime. Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
All Runtime.$rid packages should have the same version. All Runtime.$rid packages should have the same version.
--> -->
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview.2.20160.6" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview.2.20155.3" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
</ProductDependencies> </ProductDependencies>
<ToolsetDependencies> <ToolsetDependencies>
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 --> <!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.2.20160.6" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.2.20155.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri> <Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d12f79a4d1b908636b96005fe30f547e54cea3ee</Sha> <Sha>2f6e072c97738a56eeeb25f1fdb5dcc955649db0</Sha>
</Dependency> </Dependency>
<Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-preview.2.20160.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language"> <Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-preview.3.20156.3" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>e9e40b4686cce3b7e8248f4f9edd47b004e1b52d</Sha> <Sha>540b4e8f129a132749a60174464b8c8274bfed7d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20151.1"> <Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20158.2">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>8ccad075bbb0db445e03eed0a6073d27bdd4f31a</Sha> <Sha>527179abfbb5cd738035c4ac2d2566c571ce85db</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20151.1"> <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20158.2">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>8ccad075bbb0db445e03eed0a6073d27bdd4f31a</Sha> <Sha>527179abfbb5cd738035c4ac2d2566c571ce85db</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20151.1"> <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20158.2">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>8ccad075bbb0db445e03eed0a6073d27bdd4f31a</Sha> <Sha>527179abfbb5cd738035c4ac2d2566c571ce85db</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.5.0-beta4-20153-05" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.5.0-beta4-20153-05" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/roslyn</Uri> <Uri>https://github.com/dotnet/roslyn</Uri>

View File

@ -9,7 +9,7 @@
<AspNetCoreMajorVersion>5</AspNetCoreMajorVersion> <AspNetCoreMajorVersion>5</AspNetCoreMajorVersion>
<AspNetCoreMinorVersion>0</AspNetCoreMinorVersion> <AspNetCoreMinorVersion>0</AspNetCoreMinorVersion>
<AspNetCorePatchVersion>0</AspNetCorePatchVersion> <AspNetCorePatchVersion>0</AspNetCorePatchVersion>
<PreReleaseVersionIteration>2</PreReleaseVersionIteration> <PreReleaseVersionIteration>3</PreReleaseVersionIteration>
<!-- <!--
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
--> -->
@ -62,95 +62,96 @@
--> -->
<PropertyGroup Label="Automated"> <PropertyGroup Label="Automated">
<!-- Packages from dotnet/arcade --> <!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20151.1</MicrosoftDotNetGenAPIPackageVersion> <MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20158.2</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/roslyn --> <!-- Packages from dotnet/roslyn -->
<MicrosoftNetCompilersToolsetPackageVersion>3.5.0-beta4-20153-05</MicrosoftNetCompilersToolsetPackageVersion> <MicrosoftNetCompilersToolsetPackageVersion>3.5.0-beta4-20153-05</MicrosoftNetCompilersToolsetPackageVersion>
<!-- Packages from dotnet/core-setup --> <!-- Packages from dotnet/core-setup -->
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.2-runtime.20160.6</MicrosoftExtensionsDependencyModelPackageVersion> <MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.2-runtime.20155.3</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.2.20160.6</MicrosoftNETCoreAppInternalPackageVersion> <MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.2.20155.3</MicrosoftNETCoreAppInternalPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.2.20160.6</MicrosoftNETCoreAppRefPackageVersion> <MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.2.20155.3</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.2.20160.6</MicrosoftNETCoreAppRuntimewinx64PackageVersion> <MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.2.20155.3</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0-preview.2.20160.6</NETStandardLibraryRefPackageVersion> <NETStandardLibraryRefPackageVersion>2.1.0-preview.2.20155.3</NETStandardLibraryRefPackageVersion>
<!-- Packages from dotnet/corefx --> <!-- Packages from dotnet/corefx -->
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.2.20160.6</MicrosoftWin32RegistryPackageVersion> <MicrosoftWin32RegistryPackageVersion>5.0.0-preview.2.20155.3</MicrosoftWin32RegistryPackageVersion>
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.2.20160.6</MicrosoftWin32SystemEventsPackageVersion> <MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.2.20155.3</MicrosoftWin32SystemEventsPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.2.20160.6</SystemComponentModelAnnotationsPackageVersion> <SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.2.20155.3</SystemComponentModelAnnotationsPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.2.20160.6</SystemDiagnosticsEventLogPackageVersion> <SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.2.20155.3</SystemDiagnosticsEventLogPackageVersion>
<SystemDrawingCommonPackageVersion>5.0.0-preview.2.20160.6</SystemDrawingCommonPackageVersion> <SystemDrawingCommonPackageVersion>5.0.0-preview.2.20155.3</SystemDrawingCommonPackageVersion>
<SystemIOPipelinesPackageVersion>5.0.0-preview.2.20160.6</SystemIOPipelinesPackageVersion> <SystemIOPipelinesPackageVersion>5.0.0-preview.2.20155.3</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.2.20160.6</SystemNetHttpWinHttpHandlerPackageVersion> <SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.2.20155.3</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.2.20160.6</SystemNetWebSocketsWebSocketProtocolPackageVersion> <SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.2.20155.3</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>5.0.0-preview.2.20160.6</SystemReflectionMetadataPackageVersion> <SystemReflectionMetadataPackageVersion>5.0.0-preview.2.20155.3</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.2.20160.6</SystemRuntimeCompilerServicesUnsafePackageVersion> <SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.2.20155.3</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.2.20160.6</SystemSecurityCryptographyCngPackageVersion> <SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.2.20155.3</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.2.20160.6</SystemSecurityCryptographyPkcsPackageVersion> <SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.2.20155.3</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.2.20160.6</SystemSecurityCryptographyXmlPackageVersion> <SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.2.20155.3</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.2.20160.6</SystemSecurityPermissionsPackageVersion> <SystemSecurityPermissionsPackageVersion>5.0.0-preview.2.20155.3</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.2.20160.6</SystemSecurityPrincipalWindowsPackageVersion> <SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.2.20155.3</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.2.20160.6</SystemServiceProcessServiceControllerPackageVersion> <SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.2.20155.3</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.2.20160.6</SystemTextEncodingsWebPackageVersion> <SystemTextEncodingsWebPackageVersion>5.0.0-preview.2.20155.3</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>5.0.0-preview.2.20160.6</SystemTextJsonPackageVersion> <SystemTextJsonPackageVersion>5.0.0-preview.2.20155.3</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>5.0.0-preview.2.20160.6</SystemThreadingChannelsPackageVersion> <SystemThreadingChannelsPackageVersion>5.0.0-preview.2.20155.3</SystemThreadingChannelsPackageVersion>
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.2.20160.6</SystemWindowsExtensionsPackageVersion> <SystemWindowsExtensionsPackageVersion>5.0.0-preview.2.20155.3</SystemWindowsExtensionsPackageVersion>
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 --> <!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.2.20160.6</MicrosoftNETCorePlatformsPackageVersion> <MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.2.20155.3</MicrosoftNETCorePlatformsPackageVersion>
<!-- Packages from dotnet/blazor --> <!-- Packages from dotnet/blazor -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion> <MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from dotnet/extensions --> <!-- Packages from dotnet/extensions -->
<InternalAspNetCoreAnalyzersPackageVersion>5.0.0-preview.2.20160.3</InternalAspNetCoreAnalyzersPackageVersion> <InternalAspNetCoreAnalyzersPackageVersion>5.0.0-preview.3.20156.3</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-preview.2.20160.3</MicrosoftAspNetCoreAnalyzerTestingPackageVersion> <MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-preview.3.20156.3</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsCachingAbstractionsPackageVersion> <MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsCachingMemoryPackageVersion> <MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsCachingSqlServerPackageVersion> <MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion> <MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationAbstractionsPackageVersion> <MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationBinderPackageVersion> <MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationCommandLinePackageVersion> <MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion> <MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion> <MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationIniPackageVersion> <MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationJsonPackageVersion> <MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationPackageVersion> <MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationUserSecretsPackageVersion> <MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsConfigurationXmlPackageVersion> <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion> <MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsDependencyInjectionPackageVersion> <MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsDiagnosticAdapterPackageVersion> <MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion> <MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsFileProvidersCompositePackageVersion> <MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsFileProvidersPhysicalPackageVersion> <MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsFileSystemGlobbingPackageVersion> <MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsHostingAbstractionsPackageVersion> <MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsHostingPackageVersion> <MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsHttpPackageVersion> <MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingAbstractionsPackageVersion> <MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion> <MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingConfigurationPackageVersion> <MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingConsolePackageVersion> <MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingDebugPackageVersion> <MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingEventSourcePackageVersion> <MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingEventLogPackageVersion> <MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingPackageVersion> <MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingTestingPackageVersion> <MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsLoggingTraceSourcePackageVersion> <MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion> <MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion> <MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsOptionsPackageVersion> <MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.2.20160.3</MicrosoftExtensionsPrimitivesPackageVersion> <MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftInternalExtensionsRefsPackageVersion> <MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.3.20156.3</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-preview.3.20156.3</MicrosoftInternalExtensionsRefsPackageVersion>
<!-- Packages from dotnet/efcore --> <!-- Packages from dotnet/efcore -->
<dotnetefPackageVersion>5.0.0-preview.2.20159.4</dotnetefPackageVersion> <dotnetefPackageVersion>5.0.0-preview.3.20160.3</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.2.20159.4</MicrosoftEntityFrameworkCoreInMemoryPackageVersion> <MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.3.20160.3</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.2.20159.4</MicrosoftEntityFrameworkCoreRelationalPackageVersion> <MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.3.20160.3</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.2.20159.4</MicrosoftEntityFrameworkCoreSqlitePackageVersion> <MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.3.20160.3</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.2.20159.4</MicrosoftEntityFrameworkCoreSqlServerPackageVersion> <MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.3.20160.3</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.2.20159.4</MicrosoftEntityFrameworkCoreToolsPackageVersion> <MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.3.20160.3</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.2.20159.4</MicrosoftEntityFrameworkCorePackageVersion> <MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.3.20160.3</MicrosoftEntityFrameworkCorePackageVersion>
<!-- Packages from dotnet/aspnetcore-tooling --> <!-- Packages from dotnet/aspnetcore-tooling -->
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.2.20160.3</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion> <MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.3.20157.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.2.20160.3</MicrosoftAspNetCoreRazorLanguagePackageVersion> <MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.3.20157.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.2.20160.3</MicrosoftCodeAnalysisRazorPackageVersion> <MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.3.20157.1</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.2.20160.3</MicrosoftNETSdkRazorPackageVersion> <MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.3.20157.1</MicrosoftNETSdkRazorPackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- <!--

View File

@ -1,83 +0,0 @@
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->
<Project Sdk="Microsoft.NET.Sdk">
<!--
This MSBuild file is intended to be used as the body of the default
publishing release pipeline. The release pipeline will use this file
to invoke the SignCheck tool to validate that packages about to
be published are correctly signed.
Parameters:
- PackageBasePath : Directory containing all files that need to be validated.
- SignCheckVersion : Version of SignCheck package to be used.
- SignValidationExclusionList : ItemGroup containing exclusion list to be forwarded to SignCheck.
- EnableJarSigningCheck : Whether .jar files should be validated.
- EnableStrongNameCheck : Whether strong name check should be performed.
-->
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<!--
From 'Signing.props' we import $(SignValidationExclusionList)
-->
<Import Project="$(MSBuildThisFileDirectory)Signing.props" Condition="Exists('$(MSBuildThisFileDirectory)Signing.props')" />
<Target Name="ValidateSigning">
<PropertyGroup>
<SignCheckToolPath>$(NuGetPackageRoot)Microsoft.DotNet.SignCheck\$(SignCheckVersion)\tools\Microsoft.DotNet.SignCheck.exe</SignCheckToolPath>
<SignCheckInputDir>$(PackageBasePath)</SignCheckInputDir>
<SignCheckLog>signcheck.log</SignCheckLog>
<SignCheckErrorLog>signcheck.errors.log</SignCheckErrorLog>
<SignCheckExclusionsFile>signcheck.exclusions.txt</SignCheckExclusionsFile>
</PropertyGroup>
<ItemGroup>
<!--
Documentation for these arguments is available here:
https://github.com/dotnet/arcade/tree/master/src/SignCheck
-->
<SignCheckArgs Include="--recursive" />
<SignCheckArgs Include="--traverse-subfolders" />
<SignCheckArgs Include="--file-status AllFiles" />
<SignCheckArgs Include="--log-file $(SignCheckLog)" />
<SignCheckArgs Include="--error-log-file $(SignCheckErrorLog)" />
<SignCheckArgs Include="--input-files $(SignCheckInputDir)" />
<SignCheckArgs Include="--exclusions-file $(SignCheckExclusionsFile)" Condition="'@(SignValidationExclusionList)' != ''" />
<SignCheckArgs Include="--verify-jar" Condition="'$(EnableJarSigningCheck)' == 'true'" />
<SignCheckArgs Include="--verify-strongname" Condition="'$(EnableStrongNameCheck)' == 'true'" />
</ItemGroup>
<WriteLinesToFile
File="$(SignCheckExclusionsFile)"
Lines="@(SignValidationExclusionList)"
Condition="'@(SignValidationExclusionList)' != ''"
Overwrite="true"
Encoding="Unicode"/>
<!--
IgnoreExitCode='true' because the tool doesn't return '0' on success.
-->
<Exec
Command="&quot;$(SignCheckToolPath)&quot; @(SignCheckArgs, ' ')"
IgnoreExitCode='true'
ConsoleToMsBuild="false"
StandardErrorImportance="high" />
<Error
Text="Signing validation failed. Check $(SignCheckErrorLog) for more information."
Condition="Exists($(SignCheckErrorLog)) and '$([System.IO.File]::ReadAllText($(SignCheckErrorLog)))' != ''" />
<Message
Text="##vso[artifact.upload containerfolder=LogFiles;artifactname=LogFiles]{SignCheckErrorLog}"
Condition="Exists($(SignCheckErrorLog)) and '$([System.IO.File]::ReadAllText($(SignCheckErrorLog)))' != ''" />
</Target>
<ItemGroup>
<PackageReference Include="Microsoft.DotNet.SignCheck" Version="$(SignCheckVersion)" />
</ItemGroup>
</Project>

View File

@ -26,6 +26,11 @@ Param(
[Parameter(ValueFromRemainingArguments=$true)][String[]]$properties [Parameter(ValueFromRemainingArguments=$true)][String[]]$properties
) )
# Unset 'Platform' environment variable to avoid unwanted collision in InstallDotNetCore.targets file
# some computer has this env var defined (e.g. Some HP)
if($env:Platform) {
$env:Platform=""
}
function Print-Usage() { function Print-Usage() {
Write-Host "Common settings:" Write-Host "Common settings:"
Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)" Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)"

View File

@ -1,41 +0,0 @@
set(CROSS_NDK_TOOLCHAIN $ENV{ROOTFS_DIR}/../)
set(CROSS_ROOTFS ${CROSS_NDK_TOOLCHAIN}/sysroot)
set(CLR_CMAKE_PLATFORM_ANDROID "Android")
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR arm)
## Specify the toolchain
set(TOOLCHAIN "arm-linux-androideabi")
set(CMAKE_PREFIX_PATH ${CROSS_NDK_TOOLCHAIN})
set(TOOLCHAIN_PREFIX ${TOOLCHAIN}-)
find_program(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}clang)
find_program(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}clang++)
find_program(CMAKE_ASM_COMPILER ${TOOLCHAIN_PREFIX}clang)
find_program(CMAKE_AR ${TOOLCHAIN_PREFIX}ar)
find_program(CMAKE_LD ${TOOLCHAIN_PREFIX}ar)
find_program(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)
find_program(CMAKE_OBJDUMP ${TOOLCHAIN_PREFIX}objdump)
add_compile_options(--sysroot=${CROSS_ROOTFS})
add_compile_options(-fPIE)
add_compile_options(-mfloat-abi=soft)
include_directories(SYSTEM ${CROSS_NDK_TOOLCHAIN}/include/c++/4.9.x/)
include_directories(SYSTEM ${CROSS_NDK_TOOLCHAIN}/include/c++/4.9.x/arm-linux-androideabi/)
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -B ${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -L${CROSS_ROOTFS}/lib/${TOOLCHAIN}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} --sysroot=${CROSS_ROOTFS}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -fPIE -pie")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOTFS}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

View File

@ -1,42 +0,0 @@
set(CROSS_NDK_TOOLCHAIN $ENV{ROOTFS_DIR}/../)
set(CROSS_ROOTFS ${CROSS_NDK_TOOLCHAIN}/sysroot)
set(CLR_CMAKE_PLATFORM_ANDROID "Android")
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
## Specify the toolchain
set(TOOLCHAIN "aarch64-linux-android")
set(CMAKE_PREFIX_PATH ${CROSS_NDK_TOOLCHAIN})
set(TOOLCHAIN_PREFIX ${TOOLCHAIN}-)
find_program(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}clang)
find_program(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}clang++)
find_program(CMAKE_ASM_COMPILER ${TOOLCHAIN_PREFIX}clang)
find_program(CMAKE_AR ${TOOLCHAIN_PREFIX}ar)
find_program(CMAKE_LD ${TOOLCHAIN_PREFIX}ar)
find_program(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)
find_program(CMAKE_OBJDUMP ${TOOLCHAIN_PREFIX}objdump)
add_compile_options(--sysroot=${CROSS_ROOTFS})
add_compile_options(-fPIE)
## Needed for Android or bionic specific conditionals
add_compile_options(-D__ANDROID__)
add_compile_options(-D__BIONIC__)
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -B ${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -L${CROSS_ROOTFS}/lib/${TOOLCHAIN}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} --sysroot=${CROSS_ROOTFS}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -fPIE -pie")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CROSS_LINK_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOTFS}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
__NDK_Version=r14 __NDK_Version=r21
usage() usage()
{ {
@ -16,11 +16,11 @@ usage()
echo. echo.
echo "By default, the NDK will be downloaded into the cross/android-rootfs/android-ndk-$__NDK_Version directory. If you already have an NDK installation," echo "By default, the NDK will be downloaded into the cross/android-rootfs/android-ndk-$__NDK_Version directory. If you already have an NDK installation,"
echo "you can set the NDK_DIR environment variable to have this script use that installation of the NDK." echo "you can set the NDK_DIR environment variable to have this script use that installation of the NDK."
echo "By default, this script will generate a file, android_platform, in the root of the ROOTFS_DIR directory that contains the RID for the supported and tested Android build: android.21-arm64. This file is to replace '/etc/os-release', which is not available for Android." echo "By default, this script will generate a file, android_platform, in the root of the ROOTFS_DIR directory that contains the RID for the supported and tested Android build: android.28-arm64. This file is to replace '/etc/os-release', which is not available for Android."
exit 1 exit 1
} }
__ApiLevel=21 # The minimum platform for arm64 is API level 21 __ApiLevel=28 # The minimum platform for arm64 is API level 21 but the minimum version that support glob(3) is 28. See $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/glob.h
__BuildArch=arm64 __BuildArch=arm64
__AndroidArch=aarch64 __AndroidArch=aarch64
__AndroidToolchain=aarch64-linux-android __AndroidToolchain=aarch64-linux-android
@ -54,12 +54,11 @@ done
# Obtain the location of the bash script to figure out where the root of the repo is. # Obtain the location of the bash script to figure out where the root of the repo is.
__CrossDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" __CrossDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
__Android_Cross_Dir="$(cd "$__CrossDir/../../../.tools/android-rootfs" && pwd)"
__Android_Cross_Dir="$__CrossDir/android-rootfs"
__NDK_Dir="$__Android_Cross_Dir/android-ndk-$__NDK_Version" __NDK_Dir="$__Android_Cross_Dir/android-ndk-$__NDK_Version"
__libunwind_Dir="$__Android_Cross_Dir/libunwind"
__lldb_Dir="$__Android_Cross_Dir/lldb" __lldb_Dir="$__Android_Cross_Dir/lldb"
__ToolchainDir="$__Android_Cross_Dir/toolchain/$__BuildArch" __ToolchainDir="$__Android_Cross_Dir/android-ndk-$__NDK_Version"
if [[ -n "$TOOLCHAIN_DIR" ]]; then if [[ -n "$TOOLCHAIN_DIR" ]]; then
__ToolchainDir=$TOOLCHAIN_DIR __ToolchainDir=$TOOLCHAIN_DIR
@ -89,49 +88,33 @@ if [ ! -d $__lldb_Dir ]; then
unzip -q $__Android_Cross_Dir/lldb-2.3.3614996-linux-x86_64.zip -d $__lldb_Dir unzip -q $__Android_Cross_Dir/lldb-2.3.3614996-linux-x86_64.zip -d $__lldb_Dir
fi fi
# Create the RootFS for both arm64 as well as aarch echo "Download dependencies..."
rm -rf $__Android_Cross_Dir/toolchain
echo Generating the $__BuildArch toolchain
$__NDK_Dir/build/tools/make_standalone_toolchain.py --arch $__BuildArch --api $__ApiLevel --install-dir $__ToolchainDir
# Install the required packages into the toolchain
# TODO: Add logic to get latest pkg version instead of specific version number
rm -rf $__Android_Cross_Dir/deb/
rm -rf $__Android_Cross_Dir/tmp
mkdir -p $__Android_Cross_Dir/deb/
mkdir -p $__Android_Cross_Dir/tmp/$arch/ mkdir -p $__Android_Cross_Dir/tmp/$arch/
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libicu_60.2_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libicu_60.2_$__AndroidArch.deb
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libicu-dev_60.2_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libicu-dev_60.2_$__AndroidArch.deb
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-glob-dev_0.4_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-glob-dev_0.4_$__AndroidArch.deb # combined dependencies for coreclr, installer and libraries
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-glob_0.4_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-glob_0.4_$__AndroidArch.deb __AndroidPackages="libicu"
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-support-dev_22_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-support-dev_22_$__AndroidArch.deb __AndroidPackages+=" libandroid-glob"
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libandroid-support_22_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libandroid-support_22_$__AndroidArch.deb __AndroidPackages+=" liblzma"
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/liblzma-dev_5.2.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/liblzma-dev_5.2.3_$__AndroidArch.deb __AndroidPackages+=" krb5"
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/liblzma_5.2.3_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/liblzma_5.2.3_$__AndroidArch.deb __AndroidPackages+=" openssl"
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libunwind-dev_1.2.20170304_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libunwind-dev_1.2.20170304_$__AndroidArch.deb
wget -nv -nc http://termux.net/dists/stable/main/binary-$__AndroidArch/libunwind_1.2.20170304_$__AndroidArch.deb -O $__Android_Cross_Dir/deb/libunwind_1.2.20170304_$__AndroidArch.deb
echo Unpacking Termux packages for path in $(wget -qO- http://termux.net/dists/stable/main/binary-$__AndroidArch/Packages |\
dpkg -x $__Android_Cross_Dir/deb/libicu_60.2_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/ grep -A15 "Package: \(${__AndroidPackages// /\\|}\)" | grep -v "static\|tool" | grep Filename); do
dpkg -x $__Android_Cross_Dir/deb/libicu-dev_60.2_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
dpkg -x $__Android_Cross_Dir/deb/libandroid-glob-dev_0.4_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/ if [[ "$path" != "Filename:" ]]; then
dpkg -x $__Android_Cross_Dir/deb/libandroid-glob_0.4_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/ echo "Working on: $path"
dpkg -x $__Android_Cross_Dir/deb/libandroid-support-dev_22_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/ wget -qO- http://termux.net/$path | dpkg -x - $__Android_Cross_Dir/tmp/$__AndroidArch/
dpkg -x $__Android_Cross_Dir/deb/libandroid-support_22_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/ fi
dpkg -x $__Android_Cross_Dir/deb/liblzma-dev_5.2.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/ done
dpkg -x $__Android_Cross_Dir/deb/liblzma_5.2.3_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
dpkg -x $__Android_Cross_Dir/deb/libunwind-dev_1.2.20170304_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
dpkg -x $__Android_Cross_Dir/deb/libunwind_1.2.20170304_$__AndroidArch.deb $__Android_Cross_Dir/tmp/$__AndroidArch/
cp -R $__Android_Cross_Dir/tmp/$__AndroidArch/data/data/com.termux/files/usr/* $__ToolchainDir/sysroot/usr/ cp -R $__Android_Cross_Dir/tmp/$__AndroidArch/data/data/com.termux/files/usr/* $__ToolchainDir/sysroot/usr/
# Generate platform file for build.sh script to assign to __DistroRid # Generate platform file for build.sh script to assign to __DistroRid
echo "Generating platform file..." echo "Generating platform file..."
echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/sysroot/android_platform
echo "RID=android.21-arm64" > $__ToolchainDir/sysroot/android_platform echo "Now to build coreclr, libraries and installers; run:"
echo Now run: echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \
echo CONFIG_DIR=\`realpath cross/android/$__BuildArch\` ROOTFS_DIR=\`realpath $__ToolchainDir/sysroot\` ./build.sh cross $__BuildArch skipgenerateversion skipnuget cmakeargs -DENABLE_LLDBPLUGIN=0 --subsetCategory coreclr \
--subsetCategory libraries \
--subsetCategory installer

View File

@ -43,10 +43,30 @@ if(TARGET_ARCH_NAME STREQUAL "armel")
endif() endif()
endif() endif()
set(CMAKE_SYSROOT "${CROSS_ROOTFS}") if("$ENV{__DistroRid}" MATCHES "android.*")
set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr") if(TARGET_ARCH_NAME STREQUAL "arm")
set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr") set(ANDROID_ABI armeabi-v7a)
set(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr") elseif(TARGET_ARCH_NAME STREQUAL "arm64")
set(ANDROID_ABI arm64-v8a)
endif()
# extract platform number required by the NDK's toolchain
string(REGEX REPLACE ".*\\.([0-9]+)-.*" "\\1" ANDROID_PLATFORM "$ENV{__DistroRid}")
set(ANDROID_TOOLCHAIN clang)
set(FEATURE_EVENT_TRACE 0) # disable event trace as there is no lttng-ust package in termux repository
set(CMAKE_SYSTEM_LIBRARY_PATH "${CROSS_ROOTFS}/usr/lib")
set(CMAKE_SYSTEM_INCLUDE_PATH "${CROSS_ROOTFS}/usr/include")
# include official NDK toolchain script
include(${CROSS_ROOTFS}/../build/cmake/android.toolchain.cmake)
else()
set(CMAKE_SYSROOT "${CROSS_ROOTFS}")
set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr")
set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr")
set(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr")
endif()
# Specify link flags # Specify link flags
@ -63,7 +83,7 @@ endif()
# Specify compile options # Specify compile options
if(TARGET_ARCH_NAME MATCHES "^(arm|armel|arm64)$") if(TARGET_ARCH_NAME MATCHES "^(arm|armel|arm64)$" AND NOT "$ENV{__DistroRid}" MATCHES "android.*")
set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN})
set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN})
set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN})

View File

@ -7,7 +7,7 @@ param (
. $PSScriptRoot\tools.ps1 . $PSScriptRoot\tools.ps1
function InstallDarcCli ($darcVersion) { function InstallDarcCli ($darcVersion, $toolpath) {
$darcCliPackageName = 'microsoft.dotnet.darc' $darcCliPackageName = 'microsoft.dotnet.darc'
$dotnetRoot = InitializeDotNetCli -install:$true $dotnetRoot = InitializeDotNetCli -install:$true
@ -32,13 +32,13 @@ function InstallDarcCli ($darcVersion) {
Write-Host "'$dotnet' tool install $darcCliPackageName --version $darcVersion --add-source '$arcadeServicesSource' -v $verbosity -g" Write-Host "'$dotnet' tool install $darcCliPackageName --version $darcVersion --add-source '$arcadeServicesSource' -v $verbosity -g"
& "$dotnet" tool install $darcCliPackageName --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g & "$dotnet" tool install $darcCliPackageName --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g
}else { }else {
Write-Host "'$dotnet' tool install $darcCliPackageName --version $darcVersion --add-source '$arcadeServicesSource' -v $verbosity -g --tool-path '$toolpath'" Write-Host "'$dotnet' tool install $darcCliPackageName --version $darcVersion --add-source '$arcadeServicesSource' -v $verbosity --tool-path '$toolpath'"
& "$dotnet" tool install $darcCliPackageName --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity --tool-path "$toolpath" & "$dotnet" tool install $darcCliPackageName --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity --tool-path "$toolpath"
} }
} }
try { try {
InstallDarcCli $darcVersion InstallDarcCli $darcVersion $toolpath
} }
catch { catch {
Write-Host $_.ScriptStackTrace Write-Host $_.ScriptStackTrace

View File

@ -31,7 +31,9 @@ function Write-PipelineTelemetryError {
$PSBoundParameters.Remove('Category') | Out-Null $PSBoundParameters.Remove('Category') | Out-Null
$Message = "(NETCORE_ENGINEERING_TELEMETRY=$Category) $Message" if($Force -Or ((Test-Path variable:ci) -And $ci)) {
$Message = "(NETCORE_ENGINEERING_TELEMETRY=$Category) $Message"
}
$PSBoundParameters.Remove('Message') | Out-Null $PSBoundParameters.Remove('Message') | Out-Null
$PSBoundParameters.Add('Message', $Message) $PSBoundParameters.Add('Message', $Message)
Write-PipelineTaskError @PSBoundParameters Write-PipelineTaskError @PSBoundParameters

View File

@ -10,6 +10,8 @@ parameters:
transportFeed: '' transportFeed: ''
shippingFeed: '' shippingFeed: ''
symbolsFeed: '' symbolsFeed: ''
# If the channel name is empty, no links will be generated
akaMSChannelName: ''
stages: stages:
- stage: ${{ parameters.stageName }} - stage: ${{ parameters.stageName }}
@ -161,6 +163,9 @@ stages:
/p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
/p:AzureDevOpsStaticSymbolsFeed='${{ parameters.symbolsFeed }}' /p:AzureDevOpsStaticSymbolsFeed='${{ parameters.symbolsFeed }}'
/p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
/p:LatestLinkShortUrlPrefix=dotnet/'${{ parameters.akaMSChannelName }}'
/p:AkaMSClientId=$(akams-client-id)
/p:AkaMSClientSecret=$(akams-client-secret)
${{ parameters.artifactsPublishingAdditionalParameters }} ${{ parameters.artifactsPublishingAdditionalParameters }}
- template: ../../steps/publish-logs.yml - template: ../../steps/publish-logs.yml

View File

@ -199,6 +199,7 @@ stages:
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'NetCore_Dev5_Publish' stageName: 'NetCore_Dev5_Publish'
channelName: '.NET Core 5 Dev' channelName: '.NET Core 5 Dev'
akaMSChannelName: 'net5/dev'
channelId: ${{ parameters.NetCoreDev5ChannelId }} channelId: ${{ parameters.NetCoreDev5ChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json'
@ -212,6 +213,7 @@ stages:
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'Net5_Preview1_Publish' stageName: 'Net5_Preview1_Publish'
channelName: '.NET 5 Preview 1' channelName: '.NET 5 Preview 1'
akaMSChannelName: 'net5/preview1'
channelId: ${{ parameters.Net5Preview1ChannelId }} channelId: ${{ parameters.Net5Preview1ChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json'
@ -225,6 +227,7 @@ stages:
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'Net5_Preview2_Publish' stageName: 'Net5_Preview2_Publish'
channelName: '.NET 5 Preview 2' channelName: '.NET 5 Preview 2'
akaMSChannelName: 'net5/preview2'
channelId: ${{ parameters.Net5Preview2ChannelId }} channelId: ${{ parameters.Net5Preview2ChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json'
@ -238,6 +241,7 @@ stages:
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'Net_Eng_Latest_Publish' stageName: 'Net_Eng_Latest_Publish'
channelName: '.NET Eng - Latest' channelName: '.NET Eng - Latest'
akaMSChannelName: 'eng/daily'
channelId: ${{ parameters.NetEngLatestChannelId }} channelId: ${{ parameters.NetEngLatestChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json'
@ -251,6 +255,7 @@ stages:
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'Net_Eng_Validation_Publish' stageName: 'Net_Eng_Validation_Publish'
channelName: '.NET Eng - Validation' channelName: '.NET Eng - Validation'
akaMSChannelName: 'eng/validation'
channelId: ${{ parameters.NetEngValidationChannelId }} channelId: ${{ parameters.NetEngValidationChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json'
@ -264,6 +269,7 @@ stages:
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'General_Testing_Publish' stageName: 'General_Testing_Publish'
channelName: 'General Testing' channelName: 'General Testing'
akaMSChannelName: 'generaltesting'
channelId: ${{ parameters.GeneralTestingChannelId }} channelId: ${{ parameters.GeneralTestingChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json' transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json'

View File

@ -635,7 +635,7 @@ function MSBuild-Core() {
$exitCode = Exec-Process $buildTool.Path $cmdArgs $exitCode = Exec-Process $buildTool.Path $cmdArgs
if ($exitCode -ne 0) { if ($exitCode -ne 0) {
Write-PipelineTelemetryError Category 'Build' -Message 'Build failed.' Write-PipelineTelemetryError -Category 'Build' -Message 'Build failed.'
$buildLog = GetMSBuildBinaryLogCommandLineArgument $args $buildLog = GetMSBuildBinaryLogCommandLineArgument $args
if ($buildLog -ne $null) { if ($buildLog -ne $null) {

View File

@ -1,6 +1,6 @@
@echo off @echo off
REM Disable "!Foo!" expansions because they break the filter syntax REM Need delayed expansion !PATH! so parens in the path don't mess up the parens for the if statements that use parens for blocks
setlocal disableextensions setlocal enabledelayedexpansion
REM Use '$' as a variable name prefix to avoid MSBuild variable collisions with these variables REM Use '$' as a variable name prefix to avoid MSBuild variable collisions with these variables
set $target=%1 set $target=%1
@ -9,6 +9,7 @@ set $runtimeVersion=%3
set $helixQueue=%4 set $helixQueue=%4
set $arch=%5 set $arch=%5
set $quarantined=%6 set $quarantined=%6
set $efVersion=%7
set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk
set DOTNET_ROOT=%DOTNET_HOME%\%$arch% set DOTNET_ROOT=%DOTNET_HOME%\%$arch%
@ -16,14 +17,24 @@ set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
set DOTNET_MULTILEVEL_LOOKUP=0 set DOTNET_MULTILEVEL_LOOKUP=0
set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home
set PATH=%DOTNET_ROOT%;%PATH%;%HELIX_CORRELATION_PAYLOAD%\node\bin set PATH=%DOTNET_ROOT%;!PATH!;%HELIX_CORRELATION_PAYLOAD%\node\bin
echo Set path to: %PATH%
echo "Installing SDK"
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %$arch% -Version %$sdkVersion% -InstallDir %DOTNET_ROOT%" powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %$arch% -Version %$sdkVersion% -InstallDir %DOTNET_ROOT%"
echo "Installing Runtime"
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %$arch% -Runtime dotnet -Version %$runtimeVersion% -InstallDir %DOTNET_ROOT%" powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %$arch% -Runtime dotnet -Version %$runtimeVersion% -InstallDir %DOTNET_ROOT%"
echo "Checking for Microsoft.AspNetCore.App"
if EXIST ".\Microsoft.AspNetCore.App" ( if EXIST ".\Microsoft.AspNetCore.App" (
echo "Found Microsoft.AspNetCore.App, copying to %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%" echo "Found Microsoft.AspNetCore.App, copying to %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%"
xcopy /i /y ".\Microsoft.AspNetCore.App" %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%\ xcopy /i /y ".\Microsoft.AspNetCore.App" %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%\
echo "Adding current directory to nuget sources: %HELIX_WORKITEM_ROOT%"
dotnet nuget add source %HELIX_WORKITEM_ROOT%
dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json
dotnet nuget list source
dotnet tool install dotnet-ef --global --version %$efVersion%
set PATH=!PATH!;%DOTNET_CLI_HOME%\.dotnet\tools
) )
echo "Current Directory: %HELIX_WORKITEM_ROOT%" echo "Current Directory: %HELIX_WORKITEM_ROOT%"
@ -31,6 +42,8 @@ set HELIX=%$helixQueue%
set HELIX_DIR=%HELIX_WORKITEM_ROOT% set HELIX_DIR=%HELIX_WORKITEM_ROOT%
set NUGET_FALLBACK_PACKAGES=%HELIX_DIR% set NUGET_FALLBACK_PACKAGES=%HELIX_DIR%
set NUGET_RESTORE=%HELIX_DIR%\nugetRestore set NUGET_RESTORE=%HELIX_DIR%\nugetRestore
set DotNetEfFullPath=%HELIX_DIR%\nugetRestore\dotnet-ef\%$efVersion%\tools\netcoreapp3.1\any\dotnet-ef.exe
echo "Set DotNetEfFullPath: %DotNetEfFullPath%"
echo "Setting HELIX_DIR: %HELIX_DIR%" echo "Setting HELIX_DIR: %HELIX_DIR%"
echo Creating nuget restore directory: %NUGET_RESTORE% echo Creating nuget restore directory: %NUGET_RESTORE%
mkdir %NUGET_RESTORE% mkdir %NUGET_RESTORE%
@ -53,6 +66,8 @@ if %$quarantined%==True (
set %$quarantined=true set %$quarantined=true
) )
REM Disable "!Foo!" expansions because they break the filter syntax
setlocal disabledelayedexpansion
set NONQUARANTINE_FILTER="Quarantined!=true" set NONQUARANTINE_FILTER="Quarantined!=true"
set QUARANTINE_FILTER="Quarantined=true" set QUARANTINE_FILTER="Quarantined=true"
if %$quarantined%==true ( if %$quarantined%==true (

View File

@ -6,6 +6,7 @@ dotnet_runtime_version="$3"
helix_queue_name="$4" helix_queue_name="$4"
target_arch="$5" target_arch="$5"
quarantined="$6" quarantined="$6"
efVersion="$7"
RESET="\033[0m" RESET="\033[0m"
RED="\033[0;31m" RED="\033[0;31m"
@ -33,6 +34,8 @@ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export helix="$helix_queue_name" export helix="$helix_queue_name"
export HELIX_DIR="$DIR" export HELIX_DIR="$DIR"
export NUGET_FALLBACK_PACKAGES="$DIR" export NUGET_FALLBACK_PACKAGES="$DIR"
export DotNetEfFullPath=$DIR\nugetRestore\dotnet-ef\$efVersion\tools\netcoreapp3.1\any\dotnet-ef.dll
echo "Set DotNetEfFullPath: $DotNetEfFullPath"
export NUGET_RESTORE="$DIR/nugetRestore" export NUGET_RESTORE="$DIR/nugetRestore"
echo "Creating nugetRestore directory: $NUGET_RESTORE" echo "Creating nugetRestore directory: $NUGET_RESTORE"
mkdir $NUGET_RESTORE mkdir $NUGET_RESTORE
@ -95,6 +98,17 @@ if [ -d "Microsoft.AspNetCore.App" ]
then then
echo "Found Microsoft.AspNetCore.App directory, copying to $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version." echo "Found Microsoft.AspNetCore.App directory, copying to $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version."
cp -r Microsoft.AspNetCore.App $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version cp -r Microsoft.AspNetCore.App $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version
echo "Adding current directory to nuget sources: $DIR"
dotnet nuget add source $DIR
dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json
dotnet nuget list source
dotnet tool install dotnet-ef --global --version $efVersion
# Ensure tools are on on PATH
export PATH="$PATH:$DOTNET_CLI_HOME/.dotnet/tools"
fi fi
if [ -e /proc/self/coredump_filter ]; then if [ -e /proc/self/coredump_filter ]; then

View File

@ -27,6 +27,8 @@
<Reference Include="Moq" /> <Reference Include="Moq" />
</ItemGroup> </ItemGroup>
<Import Project="$(RepoRoot)src\Testing\src\build\Microsoft.AspNetCore.Testing.props" Condition=" '$(IsTestProject)' == 'true' " />
<ItemDefinitionGroup Condition=" '$(IsTestProject)' == 'true' "> <ItemDefinitionGroup Condition=" '$(IsTestProject)' == 'true' ">
<Content> <Content>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View File

@ -120,8 +120,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
<TestAssembly>$(TargetFileName)</TestAssembly> <TestAssembly>$(TargetFileName)</TestAssembly>
<PreCommands>@(HelixPreCommand)</PreCommands> <PreCommands>@(HelixPreCommand)</PreCommands>
<PostCommands>@(HelixPostCommand)</PostCommands> <PostCommands>@(HelixPostCommand)</PostCommands>
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests)</Command> <Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion)</Command>
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests)</Command> <Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion)</Command>
<Command Condition="$(HelixCommand) != ''">$(HelixCommand)</Command> <Command Condition="$(HelixCommand) != ''">$(HelixCommand)</Command>
<Timeout>$(HelixTimeout)</Timeout> <Timeout>$(HelixTimeout)</Timeout>
</HelixWorkItem> </HelixWorkItem>

View File

@ -25,7 +25,7 @@
}, },
"msbuild-sdks": { "msbuild-sdks": {
"Yarn.MSBuild": "1.15.2", "Yarn.MSBuild": "1.15.2",
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20151.1", "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20158.2",
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20151.1" "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20158.2"
} }
} }

View File

@ -8,7 +8,6 @@
<Reference Include="Microsoft.AspNetCore.Antiforgery" /> <Reference Include="Microsoft.AspNetCore.Antiforgery" />
<Reference Include="Microsoft.AspNetCore.Http" /> <Reference Include="Microsoft.AspNetCore.Http" />
<Reference Include="Microsoft.Extensions.DependencyInjection" /> <Reference Include="Microsoft.Extensions.DependencyInjection" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.WebEncoders" /> <Reference Include="Microsoft.Extensions.WebEncoders" />
</ItemGroup> </ItemGroup>

View File

@ -16,7 +16,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Mvc.Testing" /> <Reference Include="Microsoft.AspNetCore.Mvc.Testing" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
<Target Name="PublishAssets" AfterTargets="Publish"> <Target Name="PublishAssets" AfterTargets="Publish">

View File

@ -3,9 +3,6 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework> <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
<!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
<!-- https://github.com/dotnet/aspnetcore/issues/10422 -->
<BuildHelixPayload>false</BuildHelixPayload>
<BaseOutputPath /> <BaseOutputPath />
</PropertyGroup> </PropertyGroup>

View File

@ -8,7 +8,7 @@ Blazor is a component based web UI framework. Blazor apps can run client-side in
Blazor uses only the latest web standards. No plugins or transpilation needed. It runs in the browser on a real .NET runtime implemented in [WebAssembly](http://webassembly.org) that executes normal .NET assemblies. Blazor uses only the latest web standards. No plugins or transpilation needed. It runs in the browser on a real .NET runtime implemented in [WebAssembly](http://webassembly.org) that executes normal .NET assemblies.
[![Gitter](https://badges.gitter.im/dotnet/blazor.svg)](https://gitter.im/dotnet/blazor?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Gitter](https://badges.gitter.im/aspnet/blazor.svg)](https://gitter.im/aspnet/blazor?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
You can learn more about Blazor at https://blazor.net. You can learn more about Blazor at https://blazor.net.

View File

@ -6,7 +6,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Components.Server" /> <Reference Include="Microsoft.AspNetCore.Components.Server" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup>

File diff suppressed because one or more lines are too long

View File

@ -17,6 +17,8 @@ namespace Microsoft.AspNetCore.Components.Forms
/// </summary> /// </summary>
[Parameter] public RenderFragment ChildContent { get; set; } [Parameter] public RenderFragment ChildContent { get; set; }
private readonly Type _nullableUnderlyingType = Nullable.GetUnderlyingType(typeof(TValue));
/// <inheritdoc /> /// <inheritdoc />
protected override void BuildRenderTree(RenderTreeBuilder builder) protected override void BuildRenderTree(RenderTreeBuilder builder)
{ {
@ -38,7 +40,7 @@ namespace Microsoft.AspNetCore.Components.Forms
validationErrorMessage = null; validationErrorMessage = null;
return true; return true;
} }
else if (typeof(TValue).IsEnum) else if (typeof(TValue).IsEnum || (_nullableUnderlyingType != null && _nullableUnderlyingType.IsEnum))
{ {
var success = BindConverter.TryConvertTo<TValue>(value, CultureInfo.CurrentCulture, out var parsedValue); var success = BindConverter.TryConvertTo<TValue>(value, CultureInfo.CurrentCulture, out var parsedValue);
if (success) if (success)

View File

@ -0,0 +1,153 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Rendering;
using Microsoft.AspNetCore.Components.RenderTree;
using Microsoft.AspNetCore.Components.Test.Helpers;
using Xunit;
namespace Microsoft.AspNetCore.Components.Forms
{
public class InputSelectTest
{
[Fact]
public async Task ParsesCurrentValueWhenUsingNotNullableEnumWithNotEmptyValue()
{
// Arrange
var model = new TestModel();
var rootComponent = new TestInputSelectHostComponent<TestEnum>
{
EditContext = new EditContext(model),
ValueExpression = () => model.NotNullableEnum
};
var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent);
// Act
inputSelectComponent.CurrentValueAsString = "Two";
// Assert
Assert.Equal(TestEnum.Two, inputSelectComponent.CurrentValue);
}
[Fact]
public async Task ParsesCurrentValueWhenUsingNotNullableEnumWithEmptyValue()
{
// Arrange
var model = new TestModel();
var rootComponent = new TestInputSelectHostComponent<TestEnum>
{
EditContext = new EditContext(model),
ValueExpression = () => model.NotNullableEnum
};
var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent);
// Act
inputSelectComponent.CurrentValueAsString = "";
// Assert
Assert.Equal(default, inputSelectComponent.CurrentValue);
}
[Fact]
public async Task ParsesCurrentValueWhenUsingNullableEnumWithNotEmptyValue()
{
// Arrange
var model = new TestModel();
var rootComponent = new TestInputSelectHostComponent<TestEnum?>
{
EditContext = new EditContext(model),
ValueExpression = () => model.NullableEnum
};
var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent);
// Act
inputSelectComponent.CurrentValueAsString = "Two";
// Assert
Assert.Equal(TestEnum.Two, inputSelectComponent.Value);
}
[Fact]
public async Task ParsesCurrentValueWhenUsingNullableEnumWithEmptyValue()
{
// Arrange
var model = new TestModel();
var rootComponent = new TestInputSelectHostComponent<TestEnum?>
{
EditContext = new EditContext(model),
ValueExpression = () => model.NullableEnum
};
var inputSelectComponent = await RenderAndGetTestInputComponentAsync(rootComponent);
// Act
inputSelectComponent.CurrentValueAsString = "";
// Assert
Assert.Null(inputSelectComponent.CurrentValue);
}
private static TestInputSelect<TValue> FindInputSelectComponent<TValue>(CapturedBatch batch)
=> batch.ReferenceFrames
.Where(f => f.FrameType == RenderTreeFrameType.Component)
.Select(f => f.Component)
.OfType<TestInputSelect<TValue>>()
.Single();
private static async Task<TestInputSelect<TValue>> RenderAndGetTestInputComponentAsync<TValue>(TestInputSelectHostComponent<TValue> hostComponent)
{
var testRenderer = new TestRenderer();
var componentId = testRenderer.AssignRootComponentId(hostComponent);
await testRenderer.RenderRootComponentAsync(componentId);
return FindInputSelectComponent<TValue>(testRenderer.Batches.Single());
}
enum TestEnum
{
One,
Two,
Tree
}
class TestModel
{
public TestEnum NotNullableEnum { get; set; }
public TestEnum? NullableEnum { get; set; }
}
class TestInputSelect<TValue> : InputSelect<TValue>
{
public new TValue CurrentValue => base.CurrentValue;
public new string CurrentValueAsString
{
get => base.CurrentValueAsString;
set => base.CurrentValueAsString = value;
}
}
class TestInputSelectHostComponent<TValue> : AutoRenderComponent
{
public EditContext EditContext { get; set; }
public Expression<Func<TValue>> ValueExpression { get; set; }
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenComponent<CascadingValue<EditContext>>(0);
builder.AddAttribute(1, "Value", EditContext);
builder.AddAttribute(2, "ChildContent", new RenderFragment(childBuilder =>
{
childBuilder.OpenComponent<TestInputSelect<TValue>>(0);
childBuilder.AddAttribute(0, "ValueExpression", ValueExpression);
childBuilder.CloseComponent();
}));
builder.CloseComponent();
}
}
}
}

View File

@ -33,7 +33,6 @@
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" /> <Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
<Reference Include="Microsoft.AspNetCore.StaticFiles" /> <Reference Include="Microsoft.AspNetCore.StaticFiles" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Ignitor" /> <Reference Include="Ignitor" />
</ItemGroup> </ItemGroup>

View File

@ -4,11 +4,11 @@
using System; using System;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.E2ETest;
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.RenderTree;
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.SignalR.Client; using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TestServer; using TestServer;
using Xunit; using Xunit;
@ -16,6 +16,7 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
{ {
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19666")]
public class ComponentHubInvalidEventTest : IgnitorTest<ServerStartup> public class ComponentHubInvalidEventTest : IgnitorTest<ServerStartup>
{ {
public ComponentHubInvalidEventTest(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output) public ComponentHubInvalidEventTest(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output)

View File

@ -14,6 +14,7 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
{ {
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19666")]
public class ComponentHubReliabilityTest : IgnitorTest<ServerStartup> public class ComponentHubReliabilityTest : IgnitorTest<ServerStartup>
{ {
public ComponentHubReliabilityTest(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output) public ComponentHubReliabilityTest(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output)

View File

@ -19,6 +19,7 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
{ {
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19666")]
public class InteropReliabilityTests : IgnitorTest<ServerStartup> public class InteropReliabilityTests : IgnitorTest<ServerStartup>
{ {
public InteropReliabilityTests(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output) public InteropReliabilityTests(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output)

View File

@ -6,6 +6,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Ignitor; using Ignitor;
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TestServer; using TestServer;
using Xunit; using Xunit;
@ -13,6 +14,7 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
{ {
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19666")]
public class RemoteRendererBufferLimitTest : IgnitorTest<ServerStartup> public class RemoteRendererBufferLimitTest : IgnitorTest<ServerStartup>
{ {
public RemoteRendererBufferLimitTest(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output) public RemoteRendererBufferLimitTest(BasicTestAppServerSiteFixture<ServerStartup> serverFixture, ITestOutputHelper output)
@ -31,7 +33,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
await Client.SelectAsync("test-selector-select", "BasicTestApp.LimitCounterComponent"); await Client.SelectAsync("test-selector-select", "BasicTestApp.LimitCounterComponent");
Client.ConfirmRenderBatch = false; Client.ConfirmRenderBatch = false;
for (int i = 0; i < 10; i++) for (var i = 0; i < 10; i++)
{ {
await Client.ClickAsync("increment"); await Client.ClickAsync("increment");
} }

View File

@ -1,5 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework> <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
@ -26,6 +25,5 @@
<ProjectReference Include="$(RepoRoot)src\DefaultBuilder\testassets\StartWithIApplicationBuilderUrlApp\StartWithIApplicationBuilderUrlApp.csproj" ReferenceOutputAssemblies="false" /> <ProjectReference Include="$(RepoRoot)src\DefaultBuilder\testassets\StartWithIApplicationBuilderUrlApp\StartWithIApplicationBuilderUrlApp.csproj" ReferenceOutputAssemblies="false" />
<Reference Include="Microsoft.AspNetCore" /> <Reference Include="Microsoft.AspNetCore" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -12,7 +12,6 @@
<Reference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" /> <Reference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" />
<Reference Include="Microsoft.Extensions.Hosting.Abstractions" /> <Reference Include="Microsoft.Extensions.Hosting.Abstractions" />
<Reference Include="Microsoft.Extensions.Logging.Abstractions" /> <Reference Include="Microsoft.Extensions.Logging.Abstractions" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.Options" /> <Reference Include="Microsoft.Extensions.Options" />
<Reference Include="Microsoft.Extensions.Primitives" /> <Reference Include="Microsoft.Extensions.Primitives" />

View File

@ -20,7 +20,6 @@
<Reference Include="Microsoft.AspNetCore.Owin" /> <Reference Include="Microsoft.AspNetCore.Owin" />
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.Extensions.Hosting" /> <Reference Include="Microsoft.Extensions.Hosting" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Options" /> <Reference Include="Microsoft.Extensions.Options" />
<Reference Include="System.Threading.Channels" /> <Reference Include="System.Threading.Channels" />
</ItemGroup> </ItemGroup>

View File

@ -21,7 +21,6 @@
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.Extensions.Logging.Console" /> <Reference Include="Microsoft.Extensions.Logging.Console" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -11,7 +11,6 @@
<Reference Include="Microsoft.Extensions.DependencyInjection" /> <Reference Include="Microsoft.Extensions.DependencyInjection" />
<Reference Include="Microsoft.AspNetCore.Routing" /> <Reference Include="Microsoft.AspNetCore.Routing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.WebEncoders" /> <Reference Include="Microsoft.Extensions.WebEncoders" />
</ItemGroup> </ItemGroup>

View File

@ -25,7 +25,6 @@
<ProjectReference Include="..\..\testassets\Identity.DefaultUI.WebSite\Identity.DefaultUI.WebSite.csproj" /> <ProjectReference Include="..\..\testassets\Identity.DefaultUI.WebSite\Identity.DefaultUI.WebSite.csproj" />
<Reference Include="Microsoft.AspNetCore.Mvc.Testing" /> <Reference Include="Microsoft.AspNetCore.Mvc.Testing" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.EntityFrameworkCore.Sqlite" /> <Reference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<Reference Include="AngleSharp" /> <Reference Include="AngleSharp" />
</ItemGroup> </ItemGroup>

View File

@ -13,7 +13,6 @@
<Reference Include="Microsoft.Extensions.Localization.Abstractions" /> <Reference Include="Microsoft.Extensions.Localization.Abstractions" />
<Reference Include="Microsoft.Extensions.Localization" /> <Reference Include="Microsoft.Extensions.Localization" />
<Reference Include="Microsoft.Extensions.Logging.Abstractions" /> <Reference Include="Microsoft.Extensions.Logging.Abstractions" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Options" /> <Reference Include="Microsoft.Extensions.Options" />
</ItemGroup> </ItemGroup>

View File

@ -10,7 +10,6 @@
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" /> <Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<Reference Include="Microsoft.Extensions.DependencyInjection" /> <Reference Include="Microsoft.Extensions.DependencyInjection" />
<Reference Include="Microsoft.Extensions.Logging.Abstractions" /> <Reference Include="Microsoft.Extensions.Logging.Abstractions" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.Options" /> <Reference Include="Microsoft.Extensions.Options" />
<Reference Include="Microsoft.Extensions.Primitives" /> <Reference Include="Microsoft.Extensions.Primitives" />

View File

@ -11,7 +11,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Cors" /> <Reference Include="Microsoft.AspNetCore.Cors" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -12,7 +12,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" /> <Reference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -7,7 +7,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.HttpOverrides" /> <Reference Include="Microsoft.AspNetCore.HttpOverrides" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Content Include="$(SharedSourceRoot)test\Certificates\*.cer" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" /> <Content Include="$(SharedSourceRoot)test\Certificates\*.cer" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup> </ItemGroup>

View File

@ -6,7 +6,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.HttpsPolicy" /> <Reference Include="Microsoft.AspNetCore.HttpsPolicy" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
</ItemGroup> </ItemGroup>

View File

@ -9,7 +9,6 @@
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.DependencyInjection" /> <Reference Include="Microsoft.Extensions.DependencyInjection" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -8,7 +8,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.NodeServices" /> <Reference Include="Microsoft.AspNetCore.NodeServices" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Content Include="js\**\*" /> <Content Include="js\**\*" />
</ItemGroup> </ItemGroup>

View File

@ -1,5 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework> <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
</PropertyGroup> </PropertyGroup>
@ -14,7 +13,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.ResponseCaching" /> <Reference Include="Microsoft.AspNetCore.ResponseCaching" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -12,7 +12,6 @@
<Reference Include="Microsoft.AspNetCore.Http" /> <Reference Include="Microsoft.AspNetCore.Http" />
<Reference Include="Microsoft.AspNetCore.ResponseCompression" /> <Reference Include="Microsoft.AspNetCore.ResponseCompression" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Net.Http.Headers" /> <Reference Include="Microsoft.Net.Http.Headers" />
</ItemGroup> </ItemGroup>

View File

@ -8,7 +8,6 @@
<Reference Include="Microsoft.AspNetCore.Session" /> <Reference Include="Microsoft.AspNetCore.Session" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Caching.Memory" /> <Reference Include="Microsoft.Extensions.Caching.Memory" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -14,7 +14,6 @@
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.DiagnosticAdapter" /> <Reference Include="Microsoft.Extensions.DiagnosticAdapter" />
<Reference Include="Microsoft.Extensions.Hosting" /> <Reference Include="Microsoft.Extensions.Hosting" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Content Include="js\**\*" /> <Content Include="js\**\*" />
</ItemGroup> </ItemGroup>

View File

@ -343,6 +343,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ ".wcm", "application/vnd.ms-works" }, { ".wcm", "application/vnd.ms-works" },
{ ".wdb", "application/vnd.ms-works" }, { ".wdb", "application/vnd.ms-works" },
{ ".webm", "video/webm" }, { ".webm", "video/webm" },
{ ".webmanifest", "application/manifest+json" }, // https://w3c.github.io/manifest/#media-type-registration
{ ".webp", "image/webp" }, { ".webp", "image/webp" },
{ ".wks", "application/vnd.ms-works" }, { ".wks", "application/vnd.ms-works" },
{ ".wm", "video/x-ms-wm" }, { ".wm", "video/x-ms-wm" },

View File

@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.Common; using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;

View File

@ -29,7 +29,6 @@
<Reference Include="Microsoft.AspNetCore.StaticFiles" /> <Reference Include="Microsoft.AspNetCore.StaticFiles" />
<Reference Include="Microsoft.AspNetCore.Server.HttpSys" /> <Reference Include="Microsoft.AspNetCore.Server.HttpSys" />
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" /> <Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -9,7 +9,6 @@
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" /> <Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
<Reference Include="Microsoft.AspNetCore.WebSockets" /> <Reference Include="Microsoft.AspNetCore.WebSockets" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -33,7 +33,6 @@
<Reference Include="Microsoft.Extensions.Configuration.UserSecrets" /> <Reference Include="Microsoft.Extensions.Configuration.UserSecrets" />
<Reference Include="Microsoft.Extensions.Logging.Abstractions" /> <Reference Include="Microsoft.Extensions.Logging.Abstractions" />
<Reference Include="Microsoft.Extensions.Logging.Console" /> <Reference Include="Microsoft.Extensions.Logging.Console" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Compile Include="$(SharedSourceRoot)CommandLineUtils\**\*.cs" /> <Compile Include="$(SharedSourceRoot)CommandLineUtils\**\*.cs" />

View File

@ -12,7 +12,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Authentication.Core" /> <Reference Include="Microsoft.AspNetCore.Authentication.Core" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -12,6 +12,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Microsoft.AspNetCore.Testing;
using Microsoft.AspNetCore.WebUtilities; using Microsoft.AspNetCore.WebUtilities;
using Newtonsoft.Json; using Newtonsoft.Json;
using Moq; using Moq;

View File

@ -15,6 +15,5 @@
<ProjectReference Include="..\..\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj" /> <ProjectReference Include="..\..\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj" />
<Reference Include="Microsoft.AspNetCore.ResponseCaching" /> <Reference Include="Microsoft.AspNetCore.ResponseCaching" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -7,7 +7,5 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj" /> <ProjectReference Include="..\..\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -6,8 +6,6 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj" /> <ProjectReference Include="..\..\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -8,7 +8,6 @@
<Reference Include="Microsoft.AspNetCore.Mvc" /> <Reference Include="Microsoft.AspNetCore.Mvc" />
<Reference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" /> <Reference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" />
<ProjectReference Include="..\..\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj" /> <ProjectReference Include="..\..\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -15,8 +15,6 @@
<Reference Include="Microsoft.AspNetCore.Mvc" /> <Reference Include="Microsoft.AspNetCore.Mvc" />
<ProjectReference Include="..\..\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj" /> <ProjectReference Include="..\..\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj" />
<ProjectReference Include="..\..\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj" /> <ProjectReference Include="..\..\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -12,8 +12,6 @@
<Reference Include="Microsoft.AspNetCore.Mvc.RazorPages" /> <Reference Include="Microsoft.AspNetCore.Mvc.RazorPages" />
<ProjectReference Include="..\..\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj" /> <ProjectReference Include="..\..\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj" />
<ProjectReference Include="..\..\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj" /> <ProjectReference Include="..\..\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -12,6 +12,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation; using Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;

View File

@ -12,6 +12,7 @@ using HtmlGenerationWebSite;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;

View File

@ -59,6 +59,5 @@
<Reference Include="Microsoft.AspNetCore.Routing.Abstractions" /> <Reference Include="Microsoft.AspNetCore.Routing.Abstractions" />
<Reference Include="Microsoft.AspNetCore.Routing" /> <Reference Include="Microsoft.AspNetCore.Routing" />
<Reference Include="Microsoft.AspNetCore.TestHost" /> <Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -26,6 +26,7 @@ namespace Templates.Test
[ConditionalFact] [ConditionalFact]
[SkipOnHelix("Not supported queues", Queues = "Windows.7.Amd64;Windows.7.Amd64.Open;OSX.1014.Amd64;OSX.1014.Amd64.Open")] [SkipOnHelix("Not supported queues", Queues = "Windows.7.Amd64;Windows.7.Amd64.Open;OSX.1014.Amd64;OSX.1014.Amd64.Open")]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task GrpcTemplate() public async Task GrpcTemplate()
{ {
Project = await ProjectFactory.GetOrCreateProject("grpc", Output); Project = await ProjectFactory.GetOrCreateProject("grpc", Output);

View File

@ -7,6 +7,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.CommandLineUtils;
@ -28,12 +29,11 @@ namespace Templates.Test.Helpers
? GetAssemblyMetadata("ArtifactsLogDir") ? GetAssemblyMetadata("ArtifactsLogDir")
: Path.Combine(Environment.GetEnvironmentVariable("HELIX_DIR"), "logs"); : Path.Combine(Environment.GetEnvironmentVariable("HELIX_DIR"), "logs");
// FIGURE OUT EF PATH public static string DotNetEfFullPath => (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DotNetEfFullPath")))
public static string DotNetEfFullPath => (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("helix")))
? typeof(ProjectFactoryFixture).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>() ? typeof(ProjectFactoryFixture).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>()
.First(attribute => attribute.Key == "DotNetEfFullPath") .First(attribute => attribute.Key == "DotNetEfFullPath")
.Value .Value
: Path.Combine("NuGetPackageRoot", "dotnet-ef/$(DotnetEfPackageVersion)/tools/netcoreapp3.1/any/dotnet-ef.dll"); : Environment.GetEnvironmentVariable("DotNetEfFullPath");
public SemaphoreSlim DotNetNewLock { get; set; } public SemaphoreSlim DotNetNewLock { get; set; }
public SemaphoreSlim NodeLock { get; set; } public SemaphoreSlim NodeLock { get; set; }
@ -306,14 +306,24 @@ namespace Templates.Test.Helpers
internal async Task<ProcessEx> RunDotNetEfCreateMigrationAsync(string migrationName) internal async Task<ProcessEx> RunDotNetEfCreateMigrationAsync(string migrationName)
{ {
var args = $"\"{DotNetEfFullPath}\" --verbose --no-build migrations add {migrationName}"; var args = $"--verbose --no-build migrations add {migrationName}";
// Only run one instance of 'dotnet new' at once, as a workaround for // Only run one instance of 'dotnet new' at once, as a workaround for
// https://github.com/aspnet/templating/issues/63 // https://github.com/aspnet/templating/issues/63
await DotNetNewLock.WaitAsync(); await DotNetNewLock.WaitAsync();
try try
{ {
var result = ProcessEx.Run(Output, TemplateOutputDir, DotNetMuxer.MuxerPathOrDefault(), args); var command = DotNetMuxer.MuxerPathOrDefault();
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DotNetEfFullPath")))
{
args = $"\"{DotNetEfFullPath}\" " + args;
}
else
{
command = "dotnet-ef";
}
var result = ProcessEx.Run(Output, TemplateOutputDir, command, args);
await result.Exited; await result.Exited;
return result; return result;
} }
@ -325,14 +335,24 @@ namespace Templates.Test.Helpers
internal async Task<ProcessEx> RunDotNetEfUpdateDatabaseAsync() internal async Task<ProcessEx> RunDotNetEfUpdateDatabaseAsync()
{ {
var args = $"\"{DotNetEfFullPath}\" --verbose --no-build database update"; var args = "--verbose --no-build database update";
// Only run one instance of 'dotnet new' at once, as a workaround for // Only run one instance of 'dotnet new' at once, as a workaround for
// https://github.com/aspnet/templating/issues/63 // https://github.com/aspnet/templating/issues/63
await DotNetNewLock.WaitAsync(); await DotNetNewLock.WaitAsync();
try try
{ {
var result = ProcessEx.Run(Output, TemplateOutputDir, DotNetMuxer.MuxerPathOrDefault(), args); var command = DotNetMuxer.MuxerPathOrDefault();
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DotNetEfFullPath")))
{
args = $"\"{DotNetEfFullPath}\" " + args;
}
else
{
command = "dotnet-ef";
}
var result = ProcessEx.Run(Output, TemplateOutputDir, command, args);
await result.Exited; await result.Exited;
return result; return result;
} }

View File

@ -120,7 +120,8 @@ namespace Templates.Test
[ConditionalTheory] [ConditionalTheory]
[MemberData(nameof(MSBuildIdentityUIPackageOptions))] [MemberData(nameof(MSBuildIdentityUIPackageOptions))]
[SkipOnHelix("ef restore no worky")] [SkipOnHelix("cert failure", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task IdentityUIPackage_WorksWithDifferentOptions(IDictionary<string, string> packageOptions, string versionValidator, string[] expectedFiles) public async Task IdentityUIPackage_WorksWithDifferentOptions(IDictionary<string, string> packageOptions, string versionValidator, string[] expectedFiles)
{ {
Project = await ProjectFactory.GetOrCreateProject("identityuipackage" + string.Concat(packageOptions.Values), Output); Project = await ProjectFactory.GetOrCreateProject("identityuipackage" + string.Concat(packageOptions.Values), Output);

View File

@ -3,12 +3,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Threading.Tasks;
using Templates.Test.Helpers;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
using Templates.Test.Helpers;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
using Microsoft.AspNetCore.Testing;
namespace Templates.Test namespace Templates.Test
{ {
@ -107,7 +107,8 @@ namespace Templates.Test
[ConditionalTheory] [ConditionalTheory]
[InlineData(true)] [InlineData(true)]
[InlineData(false)] [InlineData(false)]
[SkipOnHelix("ef restore no worky")] [SkipOnHelix("cert failure", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task MvcTemplate_IndividualAuth(bool useLocalDB) public async Task MvcTemplate_IndividualAuth(bool useLocalDB)
{ {
Project = await ProjectFactory.GetOrCreateProject("mvcindividual" + (useLocalDB ? "uld" : ""), Output); Project = await ProjectFactory.GetOrCreateProject("mvcindividual" + (useLocalDB ? "uld" : ""), Output);
@ -222,8 +223,8 @@ namespace Templates.Test
} }
} }
[ConditionalFact] [Fact]
[SkipOnHelix("razor compilation restore no worky")] [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task MvcTemplate_RazorRuntimeCompilation_BuildsAndPublishes() public async Task MvcTemplate_RazorRuntimeCompilation_BuildsAndPublishes()
{ {
Project = await ProjectFactory.GetOrCreateProject("mvc_rc", Output); Project = await ProjectFactory.GetOrCreateProject("mvc_rc", Output);

View File

@ -2,10 +2,10 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
using Templates.Test.Helpers; using Templates.Test.Helpers;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
using Microsoft.AspNetCore.Testing;
namespace Templates.Test namespace Templates.Test
{ {
@ -41,8 +41,8 @@ namespace Templates.Test
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult)); Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
} }
[ConditionalFact] [Fact]
[SkipOnHelix("restore no worky")] [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task RazorClassLibraryTemplateAsync() public async Task RazorClassLibraryTemplateAsync()
{ {
Project = await ProjectFactory.GetOrCreateProject("razorclasslib", Output); Project = await ProjectFactory.GetOrCreateProject("razorclasslib", Output);

View File

@ -97,7 +97,8 @@ namespace Templates.Test
[ConditionalTheory] [ConditionalTheory]
[InlineData(false)] [InlineData(false)]
[InlineData(true)] [InlineData(true)]
[SkipOnHelix("ef restore no worky")] [SkipOnHelix("cert failure", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task RazorPagesTemplate_IndividualAuth(bool useLocalDB) public async Task RazorPagesTemplate_IndividualAuth(bool useLocalDB)
{ {
Project = await ProjectFactory.GetOrCreateProject("razorpagesindividual" + (useLocalDB ? "uld" : ""), Output); Project = await ProjectFactory.GetOrCreateProject("razorpagesindividual" + (useLocalDB ? "uld" : ""), Output);
@ -212,8 +213,8 @@ namespace Templates.Test
} }
} }
[ConditionalFact] [Fact]
[SkipOnHelix("runtime compliation restore no worky")] [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task RazorPagesTemplate_RazorRuntimeCompilation_BuildsAndPublishes() public async Task RazorPagesTemplate_RazorRuntimeCompilation_BuildsAndPublishes()
{ {
Project = await ProjectFactory.GetOrCreateProject("razorpages_rc", Output); Project = await ProjectFactory.GetOrCreateProject("razorpages_rc", Output);

View File

@ -21,8 +21,8 @@ namespace Templates.Test
public ProjectFactoryFixture ProjectFactory { get; } public ProjectFactoryFixture ProjectFactory { get; }
public ITestOutputHelper Output { get; } public ITestOutputHelper Output { get; }
[ConditionalFact] [Fact]
[SkipOnHelix("restore no worky")] [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19716")]
public async Task WorkerTemplateAsync() public async Task WorkerTemplateAsync()
{ {
Project = await ProjectFactory.GetOrCreateProject("worker", Output); Project = await ProjectFactory.GetOrCreateProject("worker", Output);

View File

@ -6,6 +6,7 @@ using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests; using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS; using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit.Abstractions; using Xunit.Abstractions;

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Net.Http; using System.Net.Http;
using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS; using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;

View File

@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework> <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
<TestGroupName>IIS.FunctionalTests</TestGroupName> <TestGroupName>IIS.FunctionalTests</TestGroupName>
@ -24,7 +23,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="System.Diagnostics.EventLog" /> <Reference Include="System.Diagnostics.EventLog" />
</ItemGroup> </ItemGroup>

View File

@ -30,7 +30,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="System.Diagnostics.EventLog" /> <Reference Include="System.Diagnostics.EventLog" />
<Reference Include="System.Net.WebSockets.WebSocketProtocol" /> <Reference Include="System.Net.WebSockets.WebSocketProtocol" />

View File

@ -26,7 +26,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="System.Diagnostics.EventLog" /> <Reference Include="System.Diagnostics.EventLog" />
</ItemGroup> </ItemGroup>

View File

@ -17,7 +17,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.AspNetCore.Server.IIS" /> <Reference Include="Microsoft.AspNetCore.Server.IIS" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="System.Diagnostics.EventLog" /> <Reference Include="System.Diagnostics.EventLog" />
</ItemGroup> </ItemGroup>

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;

View File

@ -28,7 +28,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Hosting" /> <Reference Include="Microsoft.AspNetCore.Hosting" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.Extensions.Logging.Testing" />
<Reference Include="System.Diagnostics.EventLog" /> <Reference Include="System.Diagnostics.EventLog" />
</ItemGroup> </ItemGroup>

View File

@ -55,7 +55,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
private int _highestOpenedStreamId; private int _highestOpenedStreamId;
private bool _gracefulCloseStarted; private bool _gracefulCloseStarted;
private readonly Dictionary<int, Http2Stream> _streams = new Dictionary<int, Http2Stream>();
private int _clientActiveStreamCount = 0; private int _clientActiveStreamCount = 0;
private int _serverActiveStreamCount = 0; private int _serverActiveStreamCount = 0;
@ -66,6 +65,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
private int _isClosed; private int _isClosed;
// Internal for testing // Internal for testing
internal readonly Dictionary<int, Http2Stream> _streams = new Dictionary<int, Http2Stream>();
internal Http2StreamStack StreamPool; internal Http2StreamStack StreamPool;
internal const int InitialStreamPoolSize = 5; internal const int InitialStreamPoolSize = 5;
@ -304,6 +304,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
UpdateCompletedStreams(); UpdateCompletedStreams();
} }
while (StreamPool.TryPop(out var pooledStream))
{
pooledStream.Dispose();
}
// This cancels keep-alive and request header timeouts, but not the response drain timeout. // This cancels keep-alive and request header timeouts, but not the response drain timeout.
TimeoutControl.CancelTimeout(); TimeoutControl.CancelTimeout();
TimeoutControl.StartDrainTimeout(Limits.MinResponseDataRate, Limits.MaxResponseBufferSize); TimeoutControl.StartDrainTimeout(Limits.MinResponseDataRate, Limits.MaxResponseBufferSize);
@ -909,6 +914,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
} }
catch (Http2StreamErrorException) catch (Http2StreamErrorException)
{ {
_currentHeadersStream.Dispose();
ResetRequestHeaderParsingState(); ResetRequestHeaderParsingState();
throw; throw;
} }
@ -1069,11 +1075,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
throw new Http2ConnectionErrorException(CoreStrings.FormatHttp2ErrorStreamClosed(_incomingFrame.Type, _incomingFrame.StreamId), Http2ErrorCode.STREAM_CLOSED); throw new Http2ConnectionErrorException(CoreStrings.FormatHttp2ErrorStreamClosed(_incomingFrame.Type, _incomingFrame.StreamId), Http2ErrorCode.STREAM_CLOSED);
} }
_streams.Remove(stream.StreamId); RemoveStream(stream);
if (stream.CanReuse)
{
ReturnStream(stream);
}
} }
else else
{ {
@ -1087,6 +1089,19 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
} }
} }
private void RemoveStream(Http2Stream stream)
{
_streams.Remove(stream.StreamId);
if (stream.CanReuse)
{
ReturnStream(stream);
}
else
{
stream.Dispose();
}
}
// Compare to UpdateCompletedStreams, but only removes streams if over the max stream drain limit. // Compare to UpdateCompletedStreams, but only removes streams if over the max stream drain limit.
private void MakeSpaceInDrainQueue() private void MakeSpaceInDrainQueue()
{ {
@ -1099,11 +1114,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
_serverActiveStreamCount--; _serverActiveStreamCount--;
} }
_streams.Remove(stream.StreamId); RemoveStream(stream);
if (stream.CanReuse)
{
ReturnStream(stream);
}
} }
} }
@ -1460,7 +1471,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
Unknown = 0x40000000 Unknown = 0x40000000
} }
private static class GracefulCloseInitiator private static class GracefulCloseInitiator
{ {
public const int None = 0; public const int None = 0;

View File

@ -7,6 +7,7 @@ using System.Diagnostics;
using System.IO.Pipelines; using System.IO.Pipelines;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Threading.Tasks.Sources;
using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.Internal;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
@ -17,7 +18,7 @@ using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
{ {
internal class Http2OutputProducer : IHttpOutputProducer, IHttpOutputAborter internal class Http2OutputProducer : IHttpOutputProducer, IHttpOutputAborter, IValueTaskSource<FlushResult>, IDisposable
{ {
private int StreamId => _stream.StreamId; private int StreamId => _stream.StreamId;
private readonly Http2FrameWriter _frameWriter; private readonly Http2FrameWriter _frameWriter;
@ -33,14 +34,28 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
private readonly Pipe _pipe; private readonly Pipe _pipe;
private readonly ConcurrentPipeWriter _pipeWriter; private readonly ConcurrentPipeWriter _pipeWriter;
private readonly PipeReader _pipeReader; private readonly PipeReader _pipeReader;
private ValueTask<FlushResult> _dataWriteProcessingTask; private readonly ManualResetValueTaskSource<object> _resetAwaitable = new ManualResetValueTaskSource<object>();
private IMemoryOwner<byte> _fakeMemoryOwner;
private bool _startedWritingDataFrames; private bool _startedWritingDataFrames;
private bool _streamCompleted; private bool _streamCompleted;
private bool _suffixSent; private bool _suffixSent;
private bool _streamEnded; private bool _streamEnded;
private bool _writerComplete; private bool _writerComplete;
private bool _disposed;
private IMemoryOwner<byte> _fakeMemoryOwner; // Internal for testing
internal ValueTask _dataWriteProcessingTask;
/// <summary>The core logic for the IValueTaskSource implementation.</summary>
private ManualResetValueTaskSourceCore<FlushResult> _responseCompleteTaskSource = new ManualResetValueTaskSourceCore<FlushResult> { RunContinuationsAsynchronously = true }; // mutable struct, do not make this readonly
// This object is itself usable as a backing source for ValueTask. Since there's only ever one awaiter
// for this object's state transitions at a time, we allow the object to be awaited directly. All functionality
// associated with the implementation is just delegated to the ManualResetValueTaskSourceCore.
private ValueTask<FlushResult> GetWaiterTask() => new ValueTask<FlushResult>(this, _responseCompleteTaskSource.Version);
ValueTaskSourceStatus IValueTaskSource<FlushResult>.GetStatus(short token) => _responseCompleteTaskSource.GetStatus(token);
void IValueTaskSource<FlushResult>.OnCompleted(Action<object> continuation, object state, short token, ValueTaskSourceOnCompletedFlags flags) => _responseCompleteTaskSource.OnCompleted(continuation, state, token, flags);
FlushResult IValueTaskSource<FlushResult>.GetResult(short token) => _responseCompleteTaskSource.GetResult(token);
public Http2OutputProducer(Http2Stream stream, Http2StreamContext context, StreamOutputFlowControl flowControl) public Http2OutputProducer(Http2Stream stream, Http2StreamContext context, StreamOutputFlowControl flowControl)
{ {
@ -64,7 +79,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
public void StreamReset() public void StreamReset()
{ {
Debug.Assert(_dataWriteProcessingTask.IsCompletedSuccessfully); // Data background task must still be running.
Debug.Assert(!_dataWriteProcessingTask.IsCompleted);
// Response should have been completed.
Debug.Assert(_responseCompleteTaskSource.GetStatus(_responseCompleteTaskSource.Version) == ValueTaskSourceStatus.Succeeded);
_streamEnded = false; _streamEnded = false;
_suffixSent = false; _suffixSent = false;
@ -75,8 +93,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
_pipe.Reset(); _pipe.Reset();
_pipeWriter.Reset(); _pipeWriter.Reset();
_responseCompleteTaskSource.Reset();
_dataWriteProcessingTask = ProcessDataWrites(); // Trigger the data process task to resume
_resetAwaitable.SetResult(null);
} }
public void Complete() public void Complete()
@ -222,14 +242,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
{ {
if (_streamCompleted) if (_streamCompleted)
{ {
return _dataWriteProcessingTask; return GetWaiterTask();
} }
_streamCompleted = true; _streamCompleted = true;
_suffixSent = true; _suffixSent = true;
_pipeWriter.Complete(); _pipeWriter.Complete();
return _dataWriteProcessingTask; return GetWaiterTask();
} }
} }
@ -370,68 +390,90 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
{ {
} }
private async ValueTask<FlushResult> ProcessDataWrites() private async ValueTask ProcessDataWrites()
{ {
FlushResult flushResult = default; // ProcessDataWrites runs for the lifetime of the Http2OutputProducer, and is designed to be reused by multiple streams.
try // When Http2OutputProducer is no longer used (e.g. a stream is aborted and will no longer be used, or the connection is closed)
// it should be disposed so ProcessDataWrites exits. Not disposing won't cause a memory leak in release builds, but in debug
// builds active tasks are rooted on Task.s_currentActiveTasks. Dispose could be removed in the future when active tasks are
// tracked by a weak reference. See https://github.com/dotnet/runtime/issues/26565
do
{ {
ReadResult readResult; FlushResult flushResult = default;
ReadResult readResult = default;
do try
{ {
readResult = await _pipeReader.ReadAsync();
if (readResult.IsCanceled) do
{ {
// Response body is aborted, break and complete reader. readResult = await _pipeReader.ReadAsync();
break;
} if (readResult.IsCanceled)
else if (readResult.IsCompleted && _stream.ResponseTrailers?.Count > 0)
{
// Output is ending and there are trailers to write
// Write any remaining content then write trailers
if (readResult.Buffer.Length > 0)
{ {
// Only flush if required (i.e. content length exceeds flow control availability) // Response body is aborted, break and complete reader.
// Writing remaining content without flushing allows content and trailers to be sent in the same packet break;
await _frameWriter.WriteDataAsync(StreamId, _flowControl, readResult.Buffer, endStream: false, forceFlush: false);
} }
else if (readResult.IsCompleted && _stream.ResponseTrailers?.Count > 0)
_stream.ResponseTrailers.SetReadOnly();
_stream.DecrementActiveClientStreamCount();
flushResult = await _frameWriter.WriteResponseTrailers(StreamId, _stream.ResponseTrailers);
}
else if (readResult.IsCompleted && _streamEnded)
{
if (readResult.Buffer.Length != 0)
{ {
ThrowUnexpectedState(); // Output is ending and there are trailers to write
} // Write any remaining content then write trailers
if (readResult.Buffer.Length > 0)
{
// Only flush if required (i.e. content length exceeds flow control availability)
// Writing remaining content without flushing allows content and trailers to be sent in the same packet
await _frameWriter.WriteDataAsync(StreamId, _flowControl, readResult.Buffer, endStream: false, forceFlush: false);
}
// Headers have already been written and there is no other content to write _stream.ResponseTrailers.SetReadOnly();
flushResult = await _frameWriter.FlushAsync(outputAborter: null, cancellationToken: default);
}
else
{
var endStream = readResult.IsCompleted;
if (endStream)
{
_stream.DecrementActiveClientStreamCount(); _stream.DecrementActiveClientStreamCount();
flushResult = await _frameWriter.WriteResponseTrailers(StreamId, _stream.ResponseTrailers);
} }
flushResult = await _frameWriter.WriteDataAsync(StreamId, _flowControl, readResult.Buffer, endStream, forceFlush: true); else if (readResult.IsCompleted && _streamEnded)
} {
if (readResult.Buffer.Length != 0)
{
ThrowUnexpectedState();
}
_pipeReader.AdvanceTo(readResult.Buffer.End); // Headers have already been written and there is no other content to write
} while (!readResult.IsCompleted); flushResult = await _frameWriter.FlushAsync(outputAborter: null, cancellationToken: default);
} }
catch (Exception ex) else
{ {
_log.LogCritical(ex, nameof(Http2OutputProducer) + "." + nameof(ProcessDataWrites) + " observed an unexpected exception."); var endStream = readResult.IsCompleted;
} if (endStream)
{
_stream.DecrementActiveClientStreamCount();
}
flushResult = await _frameWriter.WriteDataAsync(StreamId, _flowControl, readResult.Buffer, endStream, forceFlush: true);
}
_pipeReader.Complete(); _pipeReader.AdvanceTo(readResult.Buffer.End);
} while (!readResult.IsCompleted);
}
catch (Exception ex)
{
_log.LogCritical(ex, nameof(Http2OutputProducer) + "." + nameof(ProcessDataWrites) + " observed an unexpected exception.");
}
return flushResult; _pipeReader.Complete();
// Signal via WriteStreamSuffixAsync to the stream that output has finished.
// Stream state will move to RequestProcessingStatus.ResponseCompleted
_responseCompleteTaskSource.SetResult(flushResult);
if (readResult.IsCompleted)
{
// Successfully read all data. Wait here for the stream to be reset.
await new ValueTask(_resetAwaitable, _resetAwaitable.Version);
_resetAwaitable.Reset();
}
else
{
// Stream was aborted.
break;
}
} while (!_disposed);
static void ThrowUnexpectedState() static void ThrowUnexpectedState()
{ {
@ -486,5 +528,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
useSynchronizationContext: false, useSynchronizationContext: false,
minimumSegmentSize: pool.GetMinimumSegmentSize() minimumSegmentSize: pool.GetMinimumSegmentSize()
)); ));
public void Dispose()
{
if (_disposed)
{
return;
}
_disposed = true;
_resetAwaitable.SetResult(null);
}
} }
} }

View File

@ -17,7 +17,7 @@ using Microsoft.Net.Http.Headers;
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
{ {
internal abstract partial class Http2Stream : HttpProtocol, IThreadPoolWorkItem internal abstract partial class Http2Stream : HttpProtocol, IThreadPoolWorkItem, IDisposable
{ {
private Http2StreamContext _context; private Http2StreamContext _context;
private Http2OutputProducer _http2Output; private Http2OutputProducer _http2Output;
@ -588,6 +588,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
/// </summary> /// </summary>
public abstract void Execute(); public abstract void Execute();
public void Dispose()
{
_http2Output.Dispose();
}
[Flags] [Flags]
private enum StreamCompletionFlags private enum StreamCompletionFlags
{ {

View File

@ -93,7 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
Walk(connection => Walk(connection =>
{ {
connection.GetTransport().Abort(new ConnectionAbortedException(CoreStrings.ConnectionAbortedDuringServerShutdown)); connection.TransportConnection.Abort(new ConnectionAbortedException(CoreStrings.ConnectionAbortedDuringServerShutdown));
abortTasks.Add(connection.ExecutionTask); abortTasks.Add(connection.ExecutionTask);
}); });

View File

@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
public ConnectionReference(KestrelConnection connection) public ConnectionReference(KestrelConnection connection)
{ {
_weakReference = new WeakReference<KestrelConnection>(connection); _weakReference = new WeakReference<KestrelConnection>(connection);
ConnectionId = connection.GetTransport().ConnectionId; ConnectionId = connection.TransportConnection.ConnectionId;
} }
public string ConnectionId { get; } public string ConnectionId { get; }

View File

@ -56,7 +56,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
} }
} }
public abstract BaseConnectionContext GetTransport(); public abstract BaseConnectionContext TransportConnection { get; }
public void OnHeartbeat(Action<object> action, object state) public void OnHeartbeat(Action<object> action, object state)
{ {

View File

@ -10,8 +10,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
internal class KestrelConnection<T> : KestrelConnection, IThreadPoolWorkItem where T : BaseConnectionContext internal class KestrelConnection<T> : KestrelConnection, IThreadPoolWorkItem where T : BaseConnectionContext
{ {
private readonly Func<T, Task> _connectionDelegate; private readonly Func<T, Task> _connectionDelegate;
private readonly T _transportConnection;
public T TransportConnection { get; set; }
public KestrelConnection(long id, public KestrelConnection(long id,
ServiceContext serviceContext, ServiceContext serviceContext,
@ -21,12 +20,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
: base(id, serviceContext, logger) : base(id, serviceContext, logger)
{ {
_connectionDelegate = connectionDelegate; _connectionDelegate = connectionDelegate;
TransportConnection = connectionContext; _transportConnection = connectionContext;
connectionContext.Features.Set<IConnectionHeartbeatFeature>(this); connectionContext.Features.Set<IConnectionHeartbeatFeature>(this);
connectionContext.Features.Set<IConnectionCompleteFeature>(this); connectionContext.Features.Set<IConnectionCompleteFeature>(this);
connectionContext.Features.Set<IConnectionLifetimeNotificationFeature>(this); connectionContext.Features.Set<IConnectionLifetimeNotificationFeature>(this);
} }
public override BaseConnectionContext TransportConnection => _transportConnection;
void IThreadPoolWorkItem.Execute() void IThreadPoolWorkItem.Execute()
{ {
_ = ExecuteAsync(); _ = ExecuteAsync();
@ -34,7 +35,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
internal async Task ExecuteAsync() internal async Task ExecuteAsync()
{ {
var connectionContext = TransportConnection; var connectionContext = _transportConnection;
try try
{ {
@ -63,15 +64,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
// Dispose the transport connection, this needs to happen before removing it from the // Dispose the transport connection, this needs to happen before removing it from the
// connection manager so that we only signal completion of this connection after the transport // connection manager so that we only signal completion of this connection after the transport
// is properly torn down. // is properly torn down.
await TransportConnection.DisposeAsync(); await connectionContext.DisposeAsync();
_serviceContext.ConnectionManager.RemoveConnection(_id); _serviceContext.ConnectionManager.RemoveConnection(_id);
} }
} }
public override BaseConnectionContext GetTransport()
{
return TransportConnection;
}
} }
} }

View File

@ -81,7 +81,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
connection.ConnectionClosed = new CancellationToken(canceled: true); connection.ConnectionClosed = new CancellationToken(canceled: true);
var kestrelConnection = new KestrelConnection<ConnectionContext>(0, serviceContext, _ => Task.CompletedTask, connection, serviceContext.Log); var kestrelConnection = new KestrelConnection<ConnectionContext>(0, serviceContext, _ => Task.CompletedTask, connection, serviceContext.Log);
serviceContext.ConnectionManager.AddConnection(0, kestrelConnection); serviceContext.ConnectionManager.AddConnection(0, kestrelConnection);
var completeFeature = kestrelConnection.GetTransport().Features.Get<IConnectionCompleteFeature>(); var completeFeature = kestrelConnection.TransportConnection.Features.Get<IConnectionCompleteFeature>();
Assert.NotNull(completeFeature); Assert.NotNull(completeFeature);
object stateObject = new object(); object stateObject = new object();
@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
connection.ConnectionClosed = new CancellationToken(canceled: true); connection.ConnectionClosed = new CancellationToken(canceled: true);
var kestrelConnection = new KestrelConnection<ConnectionContext>(0, serviceContext, _ => Task.CompletedTask, connection, serviceContext.Log); var kestrelConnection = new KestrelConnection<ConnectionContext>(0, serviceContext, _ => Task.CompletedTask, connection, serviceContext.Log);
serviceContext.ConnectionManager.AddConnection(0, kestrelConnection); serviceContext.ConnectionManager.AddConnection(0, kestrelConnection);
var completeFeature = kestrelConnection.GetTransport().Features.Get<IConnectionCompleteFeature>(); var completeFeature = kestrelConnection.TransportConnection.Features.Get<IConnectionCompleteFeature>();
Assert.NotNull(completeFeature); Assert.NotNull(completeFeature);
object stateObject = new object(); object stateObject = new object();

View File

@ -3,9 +3,11 @@
using System; using System;
using System.Buffers; using System.Buffers;
using System.Collections.Generic; using System.Buffers.Binary;
using System.Diagnostics;
using System.IO;
using System.IO.Pipelines; using System.IO.Pipelines;
using System.Net.Http.HPack; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
@ -25,20 +27,29 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
public class Http2ConnectionBenchmark public class Http2ConnectionBenchmark
{ {
private MemoryPool<byte> _memoryPool; private MemoryPool<byte> _memoryPool;
private Pipe _pipe;
private HttpRequestHeaders _httpRequestHeaders; private HttpRequestHeaders _httpRequestHeaders;
private Http2Connection _connection; private Http2Connection _connection;
private Http2HeadersEnumerator _requestHeadersEnumerator; private Http2HeadersEnumerator _requestHeadersEnumerator;
private int _currentStreamId; private int _currentStreamId;
private byte[] _headersBuffer; private byte[] _headersBuffer;
private DuplexPipe.DuplexPipePair _connectionPair;
private Http2Frame _httpFrame;
private string _responseData;
private int _dataWritten;
[Params(0, 10, 1024 * 1024)]
public int ResponseDataLength { get; set; }
[GlobalSetup] [GlobalSetup]
public void GlobalSetup() public void GlobalSetup()
{ {
_memoryPool = SlabMemoryPoolFactory.Create(); _memoryPool = SlabMemoryPoolFactory.Create();
_httpFrame = new Http2Frame();
_responseData = new string('!', ResponseDataLength);
var options = new PipeOptions(_memoryPool, readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false); var options = new PipeOptions(_memoryPool, readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false);
_pipe = new Pipe(options);
_connectionPair = DuplexPipe.CreateConnectionPair(options, options);
_httpRequestHeaders = new HttpRequestHeaders(); _httpRequestHeaders = new HttpRequestHeaders();
_httpRequestHeaders.Append(HeaderNames.Method, new StringValues("GET")); _httpRequestHeaders.Append(HeaderNames.Method, new StringValues("GET"));
@ -55,15 +66,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
Log = new KestrelTrace(NullLogger.Instance), Log = new KestrelTrace(NullLogger.Instance),
SystemClock = new MockSystemClock() SystemClock = new MockSystemClock()
}; };
serviceContext.ServerOptions.Limits.Http2.MaxStreamsPerConnection = int.MaxValue;
serviceContext.DateHeaderValueManager.OnHeartbeat(default); serviceContext.DateHeaderValueManager.OnHeartbeat(default);
_connection = new Http2Connection(new HttpConnectionContext _connection = new Http2Connection(new HttpConnectionContext
{ {
MemoryPool = _memoryPool, MemoryPool = _memoryPool,
ConnectionId = "TestConnectionId", ConnectionId = "TestConnectionId",
Protocols = Core.HttpProtocols.Http2, Protocols = HttpProtocols.Http2,
Transport = new MockDuplexPipe(_pipe.Reader, new NullPipeWriter()), Transport = _connectionPair.Transport,
ServiceContext = serviceContext, ServiceContext = serviceContext,
ConnectionFeatures = new FeatureCollection(), ConnectionFeatures = new FeatureCollection(),
TimeoutControl = new MockTimeoutControl(), TimeoutControl = new MockTimeoutControl(),
@ -73,11 +83,22 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
_currentStreamId = 1; _currentStreamId = 1;
_ = _connection.ProcessRequestsAsync(new DummyApplication()); _ = _connection.ProcessRequestsAsync(new DummyApplication(c => ResponseDataLength == 0 ? Task.CompletedTask : c.Response.WriteAsync(_responseData), new MockHttpContextFactory()));
_pipe.Writer.Write(Http2Connection.ClientPreface); _connectionPair.Application.Output.Write(Http2Connection.ClientPreface);
_pipe.Writer.WriteSettings(new Http2PeerSettings()); _connectionPair.Application.Output.WriteSettings(new Http2PeerSettings
_pipe.Writer.FlushAsync().GetAwaiter().GetResult(); {
InitialWindowSize = 2147483647
});
_connectionPair.Application.Output.FlushAsync().GetAwaiter().GetResult();
// Read past connection setup frames
ReceiveFrameAsync(_connectionPair.Application.Input, _httpFrame).GetAwaiter().GetResult();
Debug.Assert(_httpFrame.Type == Http2FrameType.SETTINGS);
ReceiveFrameAsync(_connectionPair.Application.Input, _httpFrame).GetAwaiter().GetResult();
Debug.Assert(_httpFrame.Type == Http2FrameType.WINDOW_UPDATE);
ReceiveFrameAsync(_connectionPair.Application.Input, _httpFrame).GetAwaiter().GetResult();
Debug.Assert(_httpFrame.Type == Http2FrameType.SETTINGS);
} }
[Benchmark] [Benchmark]
@ -85,15 +106,77 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{ {
_requestHeadersEnumerator.Initialize(_httpRequestHeaders); _requestHeadersEnumerator.Initialize(_httpRequestHeaders);
_requestHeadersEnumerator.MoveNext(); _requestHeadersEnumerator.MoveNext();
_pipe.Writer.WriteStartStream(streamId: _currentStreamId, _requestHeadersEnumerator, _headersBuffer, endStream: true); _connectionPair.Application.Output.WriteStartStream(streamId: _currentStreamId, _requestHeadersEnumerator, _headersBuffer, endStream: true, frame: _httpFrame);
await _connectionPair.Application.Output.FlushAsync();
while (true)
{
await ReceiveFrameAsync(_connectionPair.Application.Input, _httpFrame);
if (_httpFrame.StreamId != _currentStreamId && _httpFrame.StreamId != 0)
{
throw new Exception($"Unexpected stream ID: {_httpFrame.StreamId}");
}
if (_httpFrame.Type == Http2FrameType.DATA)
{
_dataWritten += _httpFrame.DataPayloadLength;
}
if (_dataWritten > 1024 * 32)
{
_connectionPair.Application.Output.WriteWindowUpdateAsync(streamId: 0, _dataWritten, _httpFrame);
await _connectionPair.Application.Output.FlushAsync();
_dataWritten = 0;
}
if ((_httpFrame.HeadersFlags & Http2HeadersFrameFlags.END_STREAM) == Http2HeadersFrameFlags.END_STREAM)
{
break;
}
}
_currentStreamId += 2; _currentStreamId += 2;
await _pipe.Writer.FlushAsync(); }
internal async ValueTask ReceiveFrameAsync(PipeReader pipeReader, Http2Frame frame, uint maxFrameSize = Http2PeerSettings.DefaultMaxFrameSize)
{
while (true)
{
var result = await pipeReader.ReadAsync();
var buffer = result.Buffer;
var consumed = buffer.Start;
var examined = buffer.Start;
try
{
if (Http2FrameReader.TryReadFrame(ref buffer, frame, maxFrameSize, out var framePayload))
{
consumed = examined = framePayload.End;
return;
}
else
{
examined = buffer.End;
}
if (result.IsCompleted)
{
throw new IOException("The reader completed without returning a frame.");
}
}
finally
{
pipeReader.AdvanceTo(consumed, examined);
}
}
} }
[GlobalCleanup] [GlobalCleanup]
public void Dispose() public void Dispose()
{ {
_pipe.Writer.Complete(); _connectionPair.Application.Output.Complete();
_memoryPool?.Dispose(); _memoryPool?.Dispose();
} }
} }

View File

@ -0,0 +1,42 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{
public class MockHttpContextFactory : IHttpContextFactory
{
private readonly object _lock = new object();
private readonly Queue<DefaultHttpContext> _cache = new Queue<DefaultHttpContext>();
public HttpContext Create(IFeatureCollection featureCollection)
{
DefaultHttpContext httpContext;
lock (_lock)
{
if (!_cache.TryDequeue(out httpContext))
{
httpContext = new DefaultHttpContext();
}
}
httpContext.Initialize(featureCollection);
return httpContext;
}
public void Dispose(HttpContext httpContext)
{
lock (_lock)
{
var defaultHttpContext = (DefaultHttpContext)httpContext;
defaultHttpContext.Uninitialize();
_cache.Enqueue(defaultHttpContext);
}
}
}
}

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Buffers; using System.Buffers;
using System.Buffers.Binary;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO.Pipelines; using System.IO.Pipelines;
using System.Net.Http.HPack; using System.Net.Http.HPack;
@ -24,9 +25,9 @@ namespace Microsoft.AspNetCore.Testing
writer.Write(payload); writer.Write(payload);
} }
public static void WriteStartStream(this PipeWriter writer, int streamId, Http2HeadersEnumerator headers, byte[] headerEncodingBuffer, bool endStream) public static void WriteStartStream(this PipeWriter writer, int streamId, Http2HeadersEnumerator headers, byte[] headerEncodingBuffer, bool endStream, Http2Frame frame = null)
{ {
var frame = new Http2Frame(); frame ??= new Http2Frame();
frame.PrepareHeaders(Http2HeadersFrameFlags.NONE, streamId); frame.PrepareHeaders(Http2HeadersFrameFlags.NONE, streamId);
var buffer = headerEncodingBuffer.AsSpan(); var buffer = headerEncodingBuffer.AsSpan();
@ -63,9 +64,9 @@ namespace Microsoft.AspNetCore.Testing
} }
} }
public static void WriteStartStream(this PipeWriter writer, int streamId, Span<byte> headerData, bool endStream) public static void WriteStartStream(this PipeWriter writer, int streamId, Span<byte> headerData, bool endStream, Http2Frame frame = null)
{ {
var frame = new Http2Frame(); frame ??= new Http2Frame();
frame.PrepareHeaders(Http2HeadersFrameFlags.NONE, streamId); frame.PrepareHeaders(Http2HeadersFrameFlags.NONE, streamId);
frame.PayloadLength = headerData.Length; frame.PayloadLength = headerData.Length;
frame.HeadersFlags = Http2HeadersFrameFlags.END_HEADERS; frame.HeadersFlags = Http2HeadersFrameFlags.END_HEADERS;
@ -79,10 +80,9 @@ namespace Microsoft.AspNetCore.Testing
writer.Write(headerData); writer.Write(headerData);
} }
public static void WriteData(this PipeWriter writer, int streamId, Memory<byte> data, bool endStream) public static void WriteData(this PipeWriter writer, int streamId, Memory<byte> data, bool endStream, Http2Frame frame = null)
{ {
var frame = new Http2Frame(); frame ??= new Http2Frame();
frame.PrepareData(streamId); frame.PrepareData(streamId);
frame.PayloadLength = data.Length; frame.PayloadLength = data.Length;
frame.DataFlags = endStream ? Http2DataFrameFlags.END_STREAM : Http2DataFrameFlags.NONE; frame.DataFlags = endStream ? Http2DataFrameFlags.END_STREAM : Http2DataFrameFlags.NONE;
@ -90,5 +90,14 @@ namespace Microsoft.AspNetCore.Testing
Http2FrameWriter.WriteHeader(frame, writer); Http2FrameWriter.WriteHeader(frame, writer);
writer.Write(data.Span); writer.Write(data.Span);
} }
public static void WriteWindowUpdateAsync(this PipeWriter writer, int streamId, int sizeIncrement, Http2Frame frame = null)
{
frame ??= new Http2Frame();
frame.PrepareWindowUpdate(streamId, sizeIncrement);
Http2FrameWriter.WriteHeader(frame, writer);
BinaryPrimitives.WriteUInt32BigEndian(writer.GetSpan(4), (uint)sizeIncrement);
writer.Advance(4);
}
} }
} }

View File

@ -76,12 +76,21 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
[Fact] [Fact]
public async Task StreamPool_SingleStream_ReturnedToPool() public async Task StreamPool_SingleStream_ReturnedToPool()
{ {
await InitializeConnectionAsync(_echoApplication); var serverTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
await InitializeConnectionAsync(async context =>
{
await serverTcs.Task;
await _echoApplication(context);
});
Assert.Equal(0, _connection.StreamPool.Count); Assert.Equal(0, _connection.StreamPool.Count);
await StartStreamAsync(1, _browserRequestHeaders, endStream: true); await StartStreamAsync(1, _browserRequestHeaders, endStream: true);
var stream = _connection._streams[1];
serverTcs.SetResult(null);
await ExpectAsync(Http2FrameType.HEADERS, await ExpectAsync(Http2FrameType.HEADERS,
withLength: 37, withLength: 37,
withFlags: (byte)(Http2HeadersFrameFlags.END_HEADERS | Http2HeadersFrameFlags.END_STREAM), withFlags: (byte)(Http2HeadersFrameFlags.END_HEADERS | Http2HeadersFrameFlags.END_STREAM),
@ -98,6 +107,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
Assert.Equal(1, _connection.StreamPool.Count); Assert.Equal(1, _connection.StreamPool.Count);
await StopConnectionAsync(expectedLastStreamId: 1, ignoreNonGoAwayFrames: false); await StopConnectionAsync(expectedLastStreamId: 1, ignoreNonGoAwayFrames: false);
var output = (Http2OutputProducer)stream.Output;
await output._dataWriteProcessingTask;
} }
[Fact] [Fact]
@ -216,14 +228,21 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
[QuarantinedTest] [QuarantinedTest]
public async Task StreamPool_StreamIsInvalidState_DontReturnedToPool() public async Task StreamPool_StreamIsInvalidState_DontReturnedToPool()
{ {
var serverTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
await InitializeConnectionAsync(async context => await InitializeConnectionAsync(async context =>
{ {
await serverTcs.Task;
await context.Response.WriteAsync("Content"); await context.Response.WriteAsync("Content");
throw new InvalidOperationException("Put the stream into an invalid state by throwing after writing to response."); throw new InvalidOperationException("Put the stream into an invalid state by throwing after writing to response.");
}); });
await StartStreamAsync(1, _browserRequestHeaders, endStream: true); await StartStreamAsync(1, _browserRequestHeaders, endStream: true);
var stream = _connection._streams[1];
serverTcs.SetResult(null);
await ExpectAsync(Http2FrameType.HEADERS, await ExpectAsync(Http2FrameType.HEADERS,
withLength: 33, withLength: 33,
withFlags: (byte)Http2HeadersFrameFlags.END_HEADERS, withFlags: (byte)Http2HeadersFrameFlags.END_HEADERS,
@ -244,6 +263,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
// Stream is not returned to the pool // Stream is not returned to the pool
Assert.Equal(0, _connection.StreamPool.Count); Assert.Equal(0, _connection.StreamPool.Count);
var output = (Http2OutputProducer)stream.Output;
await output._dataWriteProcessingTask;
await StopConnectionAsync(expectedLastStreamId: 1, ignoreNonGoAwayFrames: false); await StopConnectionAsync(expectedLastStreamId: 1, ignoreNonGoAwayFrames: false);
} }

View File

@ -6,6 +6,7 @@ using System.Buffers;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.IO; using System.IO;
using System.IO.Pipelines; using System.IO.Pipelines;
using System.Linq; using System.Linq;
@ -1051,12 +1052,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
protected Task SendWindowUpdateAsync(int streamId, int sizeIncrement) protected Task SendWindowUpdateAsync(int streamId, int sizeIncrement)
{ {
var outputWriter = _pair.Application.Output; var outputWriter = _pair.Application.Output;
var frame = new Http2Frame(); outputWriter.WriteWindowUpdateAsync(streamId, sizeIncrement);
frame.PrepareWindowUpdate(streamId, sizeIncrement);
Http2FrameWriter.WriteHeader(frame, outputWriter);
var buffer = outputWriter.GetSpan(4);
BinaryPrimitives.WriteUInt32BigEndian(buffer, (uint)sizeIncrement);
outputWriter.Advance(4);
return FlushAsync(outputWriter); return FlushAsync(outputWriter);
} }

View File

@ -143,6 +143,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests
} }
[Fact] [Fact]
[QuarantinedTest]
public async Task ClientHandshakeFailureLoggedAsDebug() public async Task ClientHandshakeFailureLoggedAsDebug()
{ {
var loggerProvider = new HandshakeErrorLoggerProvider(); var loggerProvider = new HandshakeErrorLoggerProvider();

Some files were not shown because too many files have changed in this diff Show More