Merge branch 'master' into johluo/migrate-logging-testing
This commit is contained in:
commit
f05e019271
|
|
@ -499,15 +499,15 @@ stages:
|
|||
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
|
||||
displayName: Setup IISExpress test certificates and schema
|
||||
afterBuild:
|
||||
- powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
|
||||
displayName: Run Flaky Tests
|
||||
- powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunQuarantinedTests=true"
|
||||
displayName: Run Quarantined Tests
|
||||
continueOnError: true
|
||||
- task: PublishTestResults@2
|
||||
displayName: Publish Flaky Test Results
|
||||
displayName: Publish Quarantined Test Results
|
||||
inputs:
|
||||
testResultsFormat: 'xUnit'
|
||||
testResultsFiles: '*.xml'
|
||||
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Flaky'
|
||||
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined'
|
||||
artifacts:
|
||||
- name: Windows_Test_Dumps
|
||||
path: artifacts/dumps/
|
||||
|
|
@ -574,15 +574,15 @@ stages:
|
|||
displayName: Pack Packages (for Template tests)
|
||||
- bash: ./src/ProjectTemplates/build.sh --ci --pack --no-restore --no-build-deps "/bl:artifacts/log/template.pack.binlog"
|
||||
displayName: Pack Templates (for Template tests)
|
||||
- bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true
|
||||
displayName: Run Flaky Tests
|
||||
- bash: ./build.sh --no-build --ci --test -p:RunQuarantinedTests=true
|
||||
displayName: Run Quarantined Tests
|
||||
continueOnError: true
|
||||
- task: PublishTestResults@2
|
||||
displayName: Publish Flaky Test Results
|
||||
displayName: Publish Quarantined Test Results
|
||||
inputs:
|
||||
testResultsFormat: 'xUnit'
|
||||
testResultsFiles: '*.xml'
|
||||
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Flaky'
|
||||
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined'
|
||||
artifacts:
|
||||
- name: MacOS_Test_Logs
|
||||
path: artifacts/log/
|
||||
|
|
@ -611,15 +611,15 @@ stages:
|
|||
displayName: Pack Packages (for Template tests)
|
||||
- bash: ./src/ProjectTemplates/build.sh --ci --pack --no-restore --no-build-deps "/bl:artifacts/log/template.pack.binlog"
|
||||
displayName: Pack Templates (for Template tests)
|
||||
- bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true
|
||||
displayName: Run Flaky Tests
|
||||
- bash: ./build.sh --no-build --ci --test -p:RunQuarantinedTests=true
|
||||
displayName: Run Quarantined Tests
|
||||
continueOnError: true
|
||||
- task: PublishTestResults@2
|
||||
displayName: Publish Flaky Test Results
|
||||
displayName: Publish Quarantined Test Results
|
||||
inputs:
|
||||
testResultsFormat: 'xUnit'
|
||||
testResultsFiles: '*.xml'
|
||||
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Flaky'
|
||||
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined'
|
||||
artifacts:
|
||||
- name: Linux_Test_Logs
|
||||
path: artifacts/log/
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@
|
|||
<DisableImplicitComponentsAnalyzers>true</DisableImplicitComponentsAnalyzers>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="eng\FlakyTests.BeforeArcade.props" />
|
||||
<Import Project="eng\QuarantinedTests.BeforeArcade.props" />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.DotNet.Arcade.Sdk" />
|
||||
<Import Project="eng\FlakyTests.AfterArcade.props" />
|
||||
<Import Project="eng\QuarantinedTests.AfterArcade.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<Product>Microsoft ASP.NET Core</Product>
|
||||
|
|
|
|||
|
|
@ -139,6 +139,11 @@ source activate.sh
|
|||
code .
|
||||
```
|
||||
|
||||
Note that if you are using the "Remote-WSL" extension in VSCode, the environment is not supplied
|
||||
to the process in WSL. You can workaround this by explicitly setting the environment variables
|
||||
in `~/.vscode-server/server-env-setup`.
|
||||
See https://code.visualstudio.com/docs/remote/wsl#_advanced-environment-setup-script for details.
|
||||
|
||||
## Building on command-line
|
||||
|
||||
You can also build the entire project on command line with the `build.cmd`/`.sh` scripts.
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<Project>
|
||||
<!-- Override where xUnit logs and results go if we're doing the flaky run -->
|
||||
<PropertyGroup Condition="'$(RunFlakyTests)' == 'true'">
|
||||
<ArtifactsLogDir>$(ArtifactsDir)log\$(Configuration)\Flaky\</ArtifactsLogDir>
|
||||
<ArtifactsTestResultsDir>$(ArtifactsDir)TestResults\$(Configuration)\Flaky\</ArtifactsTestResultsDir>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<Project>
|
||||
<!-- Local Dev Flakiness -->
|
||||
<PropertyGroup>
|
||||
<_FlakyRunAdditionalArgs>-trait "Flaky:All=true"</_FlakyRunAdditionalArgs>
|
||||
<_NonFlakyRunAdditionalArgs>-notrait "Flaky:All=true"</_NonFlakyRunAdditionalArgs>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Azure Pipelines Flakiness -->
|
||||
<PropertyGroup Condition="'$(TF_BUILD)' != ''">
|
||||
<_FlakyRunAdditionalArgs>$(_FlakyRunAdditionalArgs) -trait "Flaky:AzP:All=true" -trait "Flaky:AzP:OS:$(AGENT_OS)=true"</_FlakyRunAdditionalArgs>
|
||||
<_NonFlakyRunAdditionalArgs>$(_NonFlakyRunAdditionalArgs) -notrait "Flaky:AzP:All=true" -notrait "Flaky:AzP:OS:$(AGENT_OS)=true"</_NonFlakyRunAdditionalArgs>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TestRunnerAdditionalArguments Condition="'$(RunFlakyTests)' == ''">$(_NonFlakyRunAdditionalArgs) $(TestRunnerAdditionalArguments)</TestRunnerAdditionalArguments>
|
||||
<TestRunnerAdditionalArguments Condition="'$(RunFlakyTests)' == 'true'">$(_FlakyRunAdditionalArgs) $(TestRunnerAdditionalArguments)</TestRunnerAdditionalArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -49,10 +49,12 @@
|
|||
<!-- Do not push .nupkg files from Linux and macOS builds. They'll be packed up separately and signed on Windows. -->
|
||||
<ItemsToPushToBlobFeed Remove="@(ItemsToPushToBlobFeed)" Condition="'$(OS)' != 'Windows_NT'" />
|
||||
|
||||
<!-- Skip publishing checksums for now - the checksums for the .zip files don't match (https://github.com/dotnet/aspnetcore/issues/18792)
|
||||
<ItemsToPushToBlobFeed Include="@(_ChecksumsToPublish)">
|
||||
<PublishFlatContainer>true</PublishFlatContainer>
|
||||
<RelativeBlobPath>$(_UploadPathRoot)/Runtime/$(_PackageVersion)/%(Filename)%(Extension)</RelativeBlobPath>
|
||||
</ItemsToPushToBlobFeed>
|
||||
-->
|
||||
|
||||
<ItemsToPushToBlobFeed Include="@(_InstallersToPublish)">
|
||||
<IsShipping>true</IsShipping>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
<Project>
|
||||
<!-- Override where xUnit logs and results go if we're doing the Quarantined run -->
|
||||
<PropertyGroup Condition="'$(RunQuarantinedTests)' == 'true'">
|
||||
<ArtifactsLogDir>$(ArtifactsDir)log\$(Configuration)\Quarantined\</ArtifactsLogDir>
|
||||
<ArtifactsTestResultsDir>$(ArtifactsDir)TestResults\$(Configuration)\Quarantined\</ArtifactsTestResultsDir>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<_QuarantinedTestRunAdditionalArgs>-trait "Quarantined=true"</_QuarantinedTestRunAdditionalArgs>
|
||||
<_NonQuarantinedTestRunAdditionalArgs>-notrait "Quarantined=true"</_NonQuarantinedTestRunAdditionalArgs>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TestRunnerAdditionalArguments Condition="'$(RunQuarantinedTests)' == ''">$(_NonQuarantinedTestRunAdditionalArgs) $(TestRunnerAdditionalArguments)</TestRunnerAdditionalArguments>
|
||||
<TestRunnerAdditionalArguments Condition="'$(RunQuarantinedTests)' == 'true'">$(_QuarantinedTestRunAdditionalArgs) $(TestRunnerAdditionalArguments)</TestRunnerAdditionalArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -13,348 +13,344 @@
|
|||
<Uri>https://github.com/dotnet/blazor</Uri>
|
||||
<Sha>dd7fb4d3931d556458f62642c2edfc59f6295bfb</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.2.20154.1">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>151c6a416f147c687c61dcb9b8cf3f6bd0c1a79f</Sha>
|
||||
<Sha>33a9f3ca20e57e7fb69fd90b9aa9b2278f377a54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.2.20154.1">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>151c6a416f147c687c61dcb9b8cf3f6bd0c1a79f</Sha>
|
||||
<Sha>33a9f3ca20e57e7fb69fd90b9aa9b2278f377a54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.2.20154.1">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>151c6a416f147c687c61dcb9b8cf3f6bd0c1a79f</Sha>
|
||||
<Sha>33a9f3ca20e57e7fb69fd90b9aa9b2278f377a54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.2.20154.1">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>151c6a416f147c687c61dcb9b8cf3f6bd0c1a79f</Sha>
|
||||
<Sha>33a9f3ca20e57e7fb69fd90b9aa9b2278f377a54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="dotnet-ef" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="dotnet-ef" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.2.20126.1">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.2.20154.4">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>ca43ad17d612518231cc6b8a359e7168de1f76f1</Sha>
|
||||
<Sha>39633487003879903958dc09be5bb4ec6d6034df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-dev" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Json" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Text.Json" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.2-runtime.20154.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview.2.20125.16" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview.2.20154.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.2.20125.16" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>4807684b13d473c19121fbe757296e7607f3cabf</Sha>
|
||||
<Sha>9bcf3b12f4e7ad2667ca00afc804877d78b81a46</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-preview.2.20154.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
<Sha>a1c36119ce1b3ff9a7a69f7b088b9601962e58e2</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20123.1">
|
||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20151.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>85d76351b1f0245c9f331f72219d12e8e2d48e72</Sha>
|
||||
<Sha>8ccad075bbb0db445e03eed0a6073d27bdd4f31a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20123.1">
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20151.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>85d76351b1f0245c9f331f72219d12e8e2d48e72</Sha>
|
||||
<Sha>8ccad075bbb0db445e03eed0a6073d27bdd4f31a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20123.1">
|
||||
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20151.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>85d76351b1f0245c9f331f72219d12e8e2d48e72</Sha>
|
||||
<Sha>8ccad075bbb0db445e03eed0a6073d27bdd4f31a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="5.0.0-preview.2.20126.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>8fb38ab52b8f873109b6e87b4f04226d6a892ee4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.5.0-beta4-20125-04" 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>
|
||||
<Sha>1baa0b3063238ed752ad1f0368b1df6b6901373e</Sha>
|
||||
<Sha>20b9af913f1b8ce0a62f72bea9e75e4aa3cf6b0e</Sha>
|
||||
</Dependency>
|
||||
</ToolsetDependencies>
|
||||
</Dependencies>
|
||||
|
|
|
|||
|
|
@ -62,97 +62,96 @@
|
|||
-->
|
||||
<PropertyGroup Label="Automated">
|
||||
<!-- Packages from dotnet/arcade -->
|
||||
<MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20123.1</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20151.1</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<!-- Packages from dotnet/roslyn -->
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.5.0-beta4-20125-04</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.5.0-beta4-20153-05</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<!-- Packages from dotnet/core-setup -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.2.20125.16</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.2.20125.16</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.2.20125.16</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.2.20125.16</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview.2.20125.16</NETStandardLibraryRefPackageVersion>
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.2-runtime.20154.1</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.2.20154.1</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.2.20154.1</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.2.20154.1</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview.2.20154.1</NETStandardLibraryRefPackageVersion>
|
||||
<!-- Packages from dotnet/corefx -->
|
||||
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.2.20125.16</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.2.20125.16</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.2.20125.16</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.2.20125.16</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>5.0.0-preview.2.20125.16</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>5.0.0-preview.2.20125.16</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.2.20125.16</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.2.20125.16</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>5.0.0-preview.2.20125.16</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.2.20125.16</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.2.20125.16</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.2.20125.16</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.2.20125.16</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.2.20125.16</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.2.20125.16</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.2.20125.16</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.2.20125.16</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>5.0.0-preview.2.20125.16</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>5.0.0-preview.2.20125.16</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.2.20125.16</SystemWindowsExtensionsPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.2.20154.1</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.2.20154.1</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.2.20154.1</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>5.0.0-preview.2.20154.1</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>5.0.0-preview.2.20154.1</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.2.20154.1</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.2.20154.1</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>5.0.0-preview.2.20154.1</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.2.20154.1</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.2.20154.1</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.2.20154.1</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.2.20154.1</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.2.20154.1</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.2.20154.1</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.2.20154.1</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.2.20154.1</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>5.0.0-preview.2.20154.1</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>5.0.0-preview.2.20154.1</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.2.20154.1</SystemWindowsExtensionsPackageVersion>
|
||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.2.20125.16</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<!-- Packages from dotnet/blazor -->
|
||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||
<!-- Packages from dotnet/extensions -->
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>5.0.0-preview.2.20126.1</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-preview.2.20126.1</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>5.0.0-preview.2.20126.1</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-dev</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.2.20126.1</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>5.0.0-preview.2.20154.1</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-preview.2.20154.1</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.2.20154.1</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<!-- Packages from dotnet/efcore -->
|
||||
<dotnetefPackageVersion>5.0.0-preview.2.20126.1</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.2.20126.1</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.2.20126.1</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.2.20126.1</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.2.20126.1</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.2.20126.1</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<dotnetefPackageVersion>5.0.0-preview.2.20154.4</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.2.20154.4</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.2.20154.4</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.2.20154.4</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.2.20154.4</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.2.20154.4</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.2.20154.4</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<!-- Packages from dotnet/aspnetcore-tooling -->
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.2.20126.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.2.20126.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.2.20126.1</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.2.20126.1</MicrosoftNETSdkRazorPackageVersion>
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.2.20154.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.2.20154.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.2.20154.1</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.2.20154.1</MicrosoftNETSdkRazorPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
|
||||
|
|
@ -220,7 +219,7 @@
|
|||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>3.1.3</MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>
|
||||
<!-- 3rd party dependencies -->
|
||||
<AngleSharpPackageVersion>0.9.9</AngleSharpPackageVersion>
|
||||
<BenchmarkDotNetPackageVersion>0.10.13</BenchmarkDotNetPackageVersion>
|
||||
<BenchmarkDotNetPackageVersion>0.12.0</BenchmarkDotNetPackageVersion>
|
||||
<CastleCorePackageVersion>4.2.1</CastleCorePackageVersion>
|
||||
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
|
||||
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ case $cpuname in
|
|||
amd64|x86_64)
|
||||
buildarch=x64
|
||||
;;
|
||||
armv7l)
|
||||
armv*l)
|
||||
buildarch=arm
|
||||
;;
|
||||
i686)
|
||||
|
|
|
|||
|
|
@ -34,6 +34,14 @@ while (($# > 0)); do
|
|||
force=true
|
||||
shift 1
|
||||
;;
|
||||
--donotabortonfailure)
|
||||
donotabortonfailure=true
|
||||
shift 1
|
||||
;;
|
||||
--donotdisplaywarnings)
|
||||
donotdisplaywarnings=true
|
||||
shift 1
|
||||
;;
|
||||
--downloadretries)
|
||||
download_retries=$2
|
||||
shift 2
|
||||
|
|
@ -52,6 +60,8 @@ while (($# > 0)); do
|
|||
echo " - (default) %USERPROFILE%/.netcoreeng/native"
|
||||
echo ""
|
||||
echo " --clean Switch specifying not to install anything, but cleanup native asset folders"
|
||||
echo " --donotabortonfailure Switch specifiying whether to abort native tools installation on failure"
|
||||
echo " --donotdisplaywarnings Switch specifiying whether to display warnings during native tools installation on failure"
|
||||
echo " --force Clean and then install tools"
|
||||
echo " --help Print help and exit"
|
||||
echo ""
|
||||
|
|
@ -92,6 +102,7 @@ if [[ -z $install_directory ]]; then
|
|||
fi
|
||||
|
||||
install_bin="${native_base_dir}/bin"
|
||||
installed_any=false
|
||||
|
||||
ReadGlobalJsonNativeTools
|
||||
|
||||
|
|
@ -103,8 +114,8 @@ else
|
|||
for tool in "${!native_assets[@]}"
|
||||
do
|
||||
tool_version=${native_assets[$tool]}
|
||||
installer_name="install-$tool.sh"
|
||||
installer_command="$native_installer_dir/$installer_name"
|
||||
installer_path="$native_installer_dir/install-$tool.sh"
|
||||
installer_command="$installer_path"
|
||||
installer_command+=" --baseuri $base_uri"
|
||||
installer_command+=" --installpath $install_bin"
|
||||
installer_command+=" --version $tool_version"
|
||||
|
|
@ -118,11 +129,29 @@ else
|
|||
installer_command+=" --clean"
|
||||
fi
|
||||
|
||||
$installer_command
|
||||
|
||||
if [[ $? != 0 ]]; then
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Execution Failed"
|
||||
exit 1
|
||||
if [[ -a $installer_path ]]; then
|
||||
$installer_command
|
||||
if [[ $? != 0 ]]; then
|
||||
if [[ $donotabortonfailure = true ]]; then
|
||||
if [[ $donotdisplaywarnings != true ]]; then
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Execution Failed"
|
||||
fi
|
||||
else
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Execution Failed"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
$installed_any = true
|
||||
fi
|
||||
else
|
||||
if [[ $donotabortonfailure == true ]]; then
|
||||
if [[ $donotdisplaywarnings != true ]]; then
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Execution Failed: no install script"
|
||||
fi
|
||||
else
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Execution Failed: no install script"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
|
@ -135,8 +164,10 @@ if [[ -d $install_bin ]]; then
|
|||
echo "Native tools are available from $install_bin"
|
||||
echo "##vso[task.prependpath]$install_bin"
|
||||
else
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Native tools install directory does not exist, installation failed"
|
||||
exit 1
|
||||
if [[ $installed_any = true ]]; then
|
||||
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Native tools install directory does not exist, installation failed"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<Python>py -3</Python>
|
||||
<CoreRun>%HELIX_CORRELATION_PAYLOAD%\Core_Root\CoreRun.exe</CoreRun>
|
||||
<BaselineCoreRun>%HELIX_CORRELATION_PAYLOAD%\Baseline_Core_Root\CoreRun.exe</BaselineCoreRun>
|
||||
<HelixPreCommands>$(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd</HelixPreCommands>
|
||||
<HelixPreCommands>$(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd;set PYTHONPATH=%HELIX_WORKITEM_PAYLOAD%\scripts%3B%HELIX_WORKITEM_PAYLOAD%</HelixPreCommands>
|
||||
<ArtifactsDirectory>%HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts</ArtifactsDirectory>
|
||||
<BaselineArtifactsDirectory>%HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts_Baseline</BaselineArtifactsDirectory>
|
||||
<ResultsComparer>%HELIX_CORRELATION_PAYLOAD%\performance\src\tools\ResultsComparer\ResultsComparer.csproj</ResultsComparer>
|
||||
|
|
@ -99,4 +99,23 @@
|
|||
<Timeout>4:00</Timeout>
|
||||
</HelixWorkItem>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
|
||||
<HelixWorkItem Include="Crossgen System.Private.Xml.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen System.Linq.Expressions.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.VisualBasic.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.CSharp.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -84,6 +84,7 @@ stages:
|
|||
- job: publish_assets
|
||||
displayName: Publish Assets
|
||||
dependsOn: setupMaestroVars
|
||||
timeoutInMinutes: 120
|
||||
variables:
|
||||
- name: BARBuildId
|
||||
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ]
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ stages:
|
|||
- job: publish_assets
|
||||
displayName: Publish Assets
|
||||
dependsOn: setupMaestroVars
|
||||
timeoutInMinutes: 120
|
||||
variables:
|
||||
- name: BARBuildId
|
||||
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ]
|
||||
|
|
|
|||
|
|
@ -53,23 +53,21 @@ if %$quarantined%==True (
|
|||
set %$quarantined=true
|
||||
)
|
||||
|
||||
set NONQUARANTINE_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:%HELIX%!=true"
|
||||
set QUARANTINE_FILTER="Flaky:All=true|Flaky:Helix:All=true|Flaky:Helix:Queue:All=true|Flaky:Helix:Queue:%HELIX%=true"
|
||||
set NONQUARANTINE_FILTER="Quarantined!=true"
|
||||
set QUARANTINE_FILTER="Quarantined=true"
|
||||
if %$quarantined%==true (
|
||||
echo Running quarantined tests.
|
||||
%DOTNET_ROOT%\dotnet vstest %$target% --logger:xunit --TestCaseFilter:%QUARANTINE_FILTER%
|
||||
if errorlevel 1 (
|
||||
echo Failure in flaky test 1>&2
|
||||
echo Failure in quarantined test 1>&2
|
||||
REM DO NOT EXIT and DO NOT SET EXIT_CODE to 1
|
||||
)
|
||||
) else (
|
||||
REM We need to specify all possible Flaky filters that apply to this environment, because the flaky attribute
|
||||
REM only puts the explicit filter traits the user provided in
|
||||
REM Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
||||
echo Running non-quarantined tests.
|
||||
%DOTNET_ROOT%\dotnet vstest %$target% --logger:xunit --TestCaseFilter:%NONQUARANTINE_FILTER%
|
||||
if errorlevel 1 (
|
||||
echo Failure in non-flaky test 1>&2
|
||||
echo Failure in non-quarantined test 1>&2
|
||||
set exit_code=1
|
||||
REM DO NOT EXIT
|
||||
)
|
||||
|
|
|
|||
|
|
@ -115,11 +115,9 @@ fi
|
|||
|
||||
exit_code=0
|
||||
|
||||
# We need to specify all possible quarantined filters that apply to this environment, because the quarantine attribute
|
||||
# only puts the explicit filter traits the user provided in the flaky attribute
|
||||
# Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
||||
NONQUARANTINE_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:$helix_queue_name!=true"
|
||||
QUARANTINE_FILTER="Flaky:All=true|Flaky:Helix:All=true|Flaky:Helix:Queue:All=true|Flaky:Helix:Queue:$helix_queue_name=true"
|
||||
NONQUARANTINE_FILTER="Quarantined!=true"
|
||||
QUARANTINE_FILTER="Quarantined=true"
|
||||
if [ "$quarantined" == true ]; then
|
||||
echo "Running all tests including quarantined."
|
||||
$DOTNET_ROOT/dotnet vstest $test_binary_path --logger:xunit --TestCaseFilter:"$QUARANTINE_FILTER"
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
},
|
||||
"msbuild-sdks": {
|
||||
"Yarn.MSBuild": "1.15.2",
|
||||
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20123.1",
|
||||
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20123.1"
|
||||
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20151.1",
|
||||
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20151.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static string FormatValue(System.DateTimeOffset value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(decimal value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(double value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(short value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(int value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(long value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static bool? FormatValue(bool? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -21,6 +22,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static string FormatValue(System.DateTime? value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(decimal? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(double? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(short? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(int? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(long? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(float? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -47,6 +49,8 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static bool TryConvertToNullableFloat(object obj, System.Globalization.CultureInfo culture, out float? value) { throw null; }
|
||||
public static bool TryConvertToNullableInt(object obj, System.Globalization.CultureInfo culture, out int? value) { throw null; }
|
||||
public static bool TryConvertToNullableLong(object obj, System.Globalization.CultureInfo culture, out long? value) { throw null; }
|
||||
public static bool TryConvertToNullableShort(object obj, System.Globalization.CultureInfo culture, out short? value) { throw null; }
|
||||
public static bool TryConvertToShort(object obj, System.Globalization.CultureInfo culture, out short value) { throw null; }
|
||||
public static bool TryConvertToString(object obj, System.Globalization.CultureInfo culture, out string value) { throw null; }
|
||||
public static bool TryConvertTo<T>(object obj, System.Globalization.CultureInfo culture, out T value) { throw null; }
|
||||
}
|
||||
|
|
@ -165,6 +169,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime> setter, System.DateTime existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal> setter, decimal existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double> setter, double existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<short> setter, short existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int> setter, int existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long> setter, long existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<bool?> setter, bool? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -174,6 +179,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime?> setter, System.DateTime? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal?> setter, decimal? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double?> setter, double? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<short?> setter, short? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int?> setter, int? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long?> setter, long? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float?> setter, float? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static string FormatValue(System.DateTimeOffset value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(decimal value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(double value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(short value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(int value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(long value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static bool? FormatValue(bool? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -21,6 +22,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static string FormatValue(System.DateTime? value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(decimal? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(double? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(short? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(int? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(long? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(float? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -47,6 +49,8 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static bool TryConvertToNullableFloat(object obj, System.Globalization.CultureInfo culture, out float? value) { throw null; }
|
||||
public static bool TryConvertToNullableInt(object obj, System.Globalization.CultureInfo culture, out int? value) { throw null; }
|
||||
public static bool TryConvertToNullableLong(object obj, System.Globalization.CultureInfo culture, out long? value) { throw null; }
|
||||
public static bool TryConvertToNullableShort(object obj, System.Globalization.CultureInfo culture, out short? value) { throw null; }
|
||||
public static bool TryConvertToShort(object obj, System.Globalization.CultureInfo culture, out short value) { throw null; }
|
||||
public static bool TryConvertToString(object obj, System.Globalization.CultureInfo culture, out string value) { throw null; }
|
||||
public static bool TryConvertTo<T>(object obj, System.Globalization.CultureInfo culture, out T value) { throw null; }
|
||||
}
|
||||
|
|
@ -165,6 +169,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime> setter, System.DateTime existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal> setter, decimal existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double> setter, double existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<short> setter, short existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int> setter, int existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long> setter, long existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<bool?> setter, bool? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -174,6 +179,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime?> setter, System.DateTime? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal?> setter, decimal? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double?> setter, double? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<short?> setter, short? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int?> setter, int? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long?> setter, long? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float?> setter, float? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
//
|
||||
// Perf: our conversion routines present a regular API surface that allows us to specialize on types to avoid boxing.
|
||||
// for instance, many of these types could be cast to IFormattable to do the appropriate formatting, but that's going
|
||||
// to allocate.
|
||||
// to allocate.
|
||||
public static class BindConverter
|
||||
{
|
||||
private static object BoxedTrue = true;
|
||||
|
|
@ -158,6 +158,41 @@ namespace Microsoft.AspNetCore.Components
|
|||
return value.Value.ToString(culture ?? CultureInfo.CurrentCulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formats the provided <paramref name="value"/> for inclusion in an attribute.
|
||||
/// </summary>
|
||||
/// <param name="value">The value to format.</param>
|
||||
/// <param name="culture">
|
||||
/// The <see cref="CultureInfo"/> to use while formatting. Defaults to <see cref="CultureInfo.CurrentCulture"/>.
|
||||
/// </param>
|
||||
/// <returns>The formatted value.</returns>
|
||||
public static string FormatValue(short value, CultureInfo culture = null) => FormatShortValueCore(value, culture);
|
||||
|
||||
private static string FormatShortValueCore(short value, CultureInfo culture)
|
||||
{
|
||||
return value.ToString(culture ?? CultureInfo.CurrentCulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formats the provided <paramref name="value"/> for inclusion in an attribute.
|
||||
/// </summary>
|
||||
/// <param name="value">The value to format.</param>
|
||||
/// <param name="culture">
|
||||
/// The <see cref="CultureInfo"/> to use while formatting. Defaults to <see cref="CultureInfo.CurrentCulture"/>.
|
||||
/// </param>
|
||||
/// <returns>The formatted value.</returns>
|
||||
public static string FormatValue(short? value, CultureInfo culture = null) => FormatNullableShortValueCore(value, culture);
|
||||
|
||||
private static string FormatNullableShortValueCore(short? value, CultureInfo culture)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return value.Value.ToString(culture ?? CultureInfo.CurrentCulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formats the provided <paramref name="value"/> for inclusion in an attribute.
|
||||
/// </summary>
|
||||
|
|
@ -649,6 +684,71 @@ namespace Microsoft.AspNetCore.Components
|
|||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to convert a value to a <see cref="System.Int16"/>.
|
||||
/// </summary>
|
||||
/// <param name="obj">The object to convert.</param>
|
||||
/// <param name="culture">The <see cref="CultureInfo"/> to use for conversion.</param>
|
||||
/// <param name="value">The converted value.</param>
|
||||
/// <returns><c>true</c> if conversion is successful, otherwise <c>false</c>.</returns>
|
||||
public static bool TryConvertToShort(object obj, CultureInfo culture, out short value)
|
||||
{
|
||||
return ConvertToShortCore(obj, culture, out value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to convert a value to a nullable <see cref="System.Int16"/>.
|
||||
/// </summary>
|
||||
/// <param name="obj">The object to convert.</param>
|
||||
/// <param name="culture">The <see cref="CultureInfo"/> to use for conversion.</param>
|
||||
/// <param name="value">The converted value.</param>
|
||||
/// <returns><c>true</c> if conversion is successful, otherwise <c>false</c>.</returns>
|
||||
public static bool TryConvertToNullableShort(object obj, CultureInfo culture, out short? value)
|
||||
{
|
||||
return ConvertToNullableShort(obj, culture, out value);
|
||||
}
|
||||
|
||||
internal static BindParser<short> ConvertToShort = ConvertToShortCore;
|
||||
internal static BindParser<short?> ConvertToNullableShort = ConvertToNullableShortCore;
|
||||
|
||||
private static bool ConvertToShortCore(object obj, CultureInfo culture, out short value)
|
||||
{
|
||||
var text = (string)obj;
|
||||
if (string.IsNullOrEmpty(text))
|
||||
{
|
||||
value = default;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!short.TryParse(text, NumberStyles.Number, culture ?? CultureInfo.CurrentCulture, out var converted))
|
||||
{
|
||||
value = default;
|
||||
return false;
|
||||
}
|
||||
|
||||
value = converted;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool ConvertToNullableShortCore(object obj, CultureInfo culture, out short? value)
|
||||
{
|
||||
var text = (string)obj;
|
||||
if (string.IsNullOrEmpty(text))
|
||||
{
|
||||
value = default;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!short.TryParse(text, NumberStyles.Number, culture ?? CultureInfo.CurrentCulture, out var converted))
|
||||
{
|
||||
value = default;
|
||||
return false;
|
||||
}
|
||||
|
||||
value = converted;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to convert a value to a <see cref="System.Single"/>.
|
||||
/// </summary>
|
||||
|
|
@ -1198,6 +1298,14 @@ namespace Microsoft.AspNetCore.Components
|
|||
{
|
||||
formatter = (BindFormatter<long?>)FormatNullableLongValueCore;
|
||||
}
|
||||
else if (typeof(T) == typeof(short))
|
||||
{
|
||||
formatter = (BindFormatter<short>)FormatShortValueCore;
|
||||
}
|
||||
else if (typeof(T) == typeof(short?))
|
||||
{
|
||||
formatter = (BindFormatter<short?>)FormatNullableShortValueCore;
|
||||
}
|
||||
else if (typeof(T) == typeof(float))
|
||||
{
|
||||
formatter = (BindFormatter<float>)FormatFloatValueCore;
|
||||
|
|
@ -1323,6 +1431,14 @@ namespace Microsoft.AspNetCore.Components
|
|||
{
|
||||
parser = ConvertToNullableLong;
|
||||
}
|
||||
else if (typeof(T) == typeof(short))
|
||||
{
|
||||
parser = ConvertToShort;
|
||||
}
|
||||
else if (typeof(T) == typeof(short?))
|
||||
{
|
||||
parser = ConvertToNullableShort;
|
||||
}
|
||||
else if (typeof(T) == typeof(float))
|
||||
{
|
||||
parser = ConvertToFloat;
|
||||
|
|
|
|||
|
|
@ -136,6 +136,25 @@ namespace Microsoft.AspNetCore.Components
|
|||
return CreateBinderCore<long>(factory, receiver, setter, culture, ConvertToLong);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<short> setter,
|
||||
short existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<short>(factory, receiver, setter, culture, ConvertToShort);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
|
|
@ -155,6 +174,25 @@ namespace Microsoft.AspNetCore.Components
|
|||
return CreateBinderCore<long?>(factory, receiver, setter, culture, ConvertToNullableLong);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<short?> setter,
|
||||
short? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<short?>(factory, receiver, setter, culture, ConvertToNullableShort);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Components.Forms
|
|||
{
|
||||
/// <summary>
|
||||
/// An input component for editing numeric values.
|
||||
/// Supported numeric types are <see cref="int"/>, <see cref="long"/>, <see cref="float"/>, <see cref="double"/>, <see cref="decimal"/>.
|
||||
/// Supported numeric types are <see cref="int"/>, <see cref="long"/>, <see cref="short"/>, <see cref="float"/>, <see cref="double"/>, <see cref="decimal"/>.
|
||||
/// </summary>
|
||||
public class InputNumber<TValue> : InputBase<TValue>
|
||||
{
|
||||
|
|
@ -22,6 +22,7 @@ namespace Microsoft.AspNetCore.Components.Forms
|
|||
var targetType = Nullable.GetUnderlyingType(typeof(TValue)) ?? typeof(TValue);
|
||||
if (targetType == typeof(int) ||
|
||||
targetType == typeof(long) ||
|
||||
targetType == typeof(short) ||
|
||||
targetType == typeof(float) ||
|
||||
targetType == typeof(double) ||
|
||||
targetType == typeof(decimal))
|
||||
|
|
@ -86,6 +87,9 @@ namespace Microsoft.AspNetCore.Components.Forms
|
|||
case long @long:
|
||||
return BindConverter.FormatValue(@long, CultureInfo.InvariantCulture);
|
||||
|
||||
case short @short:
|
||||
return BindConverter.FormatValue(@short, CultureInfo.InvariantCulture);
|
||||
|
||||
case float @float:
|
||||
return BindConverter.FormatValue(@float, CultureInfo.InvariantCulture);
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,9 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Ignitor;
|
||||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.SignalR.Client;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
|
@ -27,6 +22,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19414")]
|
||||
public async Task CannotStartMultipleCircuits()
|
||||
{
|
||||
// Arrange
|
||||
|
|
|
|||
|
|
@ -186,6 +186,18 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
|
|||
Browser.Equal(90000000000.ToString(cultureInfo), () => display.Text);
|
||||
Browser.Equal(90000000000.ToString(CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
|
||||
|
||||
// short
|
||||
input = Browser.FindElement(By.Id("inputnumber_short"));
|
||||
display = Browser.FindElement(By.Id("inputnumber_short_value"));
|
||||
Browser.Equal(42.ToString(cultureInfo), () => display.Text);
|
||||
Browser.Equal(42.ToString(CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
|
||||
|
||||
input.Clear();
|
||||
input.SendKeys(127.ToString(CultureInfo.InvariantCulture));
|
||||
input.SendKeys("\t");
|
||||
Browser.Equal(127.ToString(cultureInfo), () => display.Text);
|
||||
Browser.Equal(127.ToString(CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
|
||||
|
||||
// decimal
|
||||
input = Browser.FindElement(By.Id("inputnumber_decimal"));
|
||||
display = Browser.FindElement(By.Id("inputnumber_decimal_value"));
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
|||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.SignalR.Client;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TestServer;
|
||||
using Xunit;
|
||||
|
|
@ -213,6 +214,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19410")]
|
||||
public async Task ContinuesWorkingAfterInvalidAsyncReturnCallback()
|
||||
{
|
||||
// Arrange
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ using BasicTestApp;
|
|||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
||||
using Microsoft.AspNetCore.Components.E2ETest.Tests;
|
||||
using Microsoft.AspNetCore.E2ETesting;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using OpenQA.Selenium;
|
||||
using OpenQA.Selenium.Support.UI;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
|
|
@ -35,5 +35,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
|
|||
$"{typeof(InvalidOperationException).FullName}: The current thread is not associated with the Dispatcher. Use InvokeAsync() to switch execution to the Dispatcher when triggering rendering or component state.",
|
||||
() => result.Text);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19413")]
|
||||
public override void CanDispatchAsyncWorkToSyncContext()
|
||||
=> base.CanDispatchAsyncWorkToSyncContext();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -355,6 +355,65 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
|||
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanBindTextboxShort()
|
||||
{
|
||||
var target = Browser.FindElement(By.Id("textbox-short"));
|
||||
var boundValue = Browser.FindElement(By.Id("textbox-short-value"));
|
||||
var mirrorValue = Browser.FindElement(By.Id("textbox-short-mirror"));
|
||||
Assert.Equal("-42", target.GetAttribute("value"));
|
||||
Assert.Equal("-42", boundValue.Text);
|
||||
Assert.Equal("-42", mirrorValue.GetAttribute("value"));
|
||||
|
||||
// Clear target; value resets to zero
|
||||
target.Clear();
|
||||
Browser.Equal("0", () => target.GetAttribute("value"));
|
||||
Assert.Equal("0", boundValue.Text);
|
||||
Assert.Equal("0", mirrorValue.GetAttribute("value"));
|
||||
|
||||
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||
// Leading zeros are not preserved
|
||||
target.SendKeys("42");
|
||||
Browser.Equal("042", () => target.GetAttribute("value"));
|
||||
target.SendKeys("\t");
|
||||
Browser.Equal("42", () => target.GetAttribute("value"));
|
||||
Assert.Equal("42", boundValue.Text);
|
||||
Assert.Equal("42", mirrorValue.GetAttribute("value"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanBindTextboxNullableShort()
|
||||
{
|
||||
var target = Browser.FindElement(By.Id("textbox-nullable-short"));
|
||||
var boundValue = Browser.FindElement(By.Id("textbox-nullable-short-value"));
|
||||
var mirrorValue = Browser.FindElement(By.Id("textbox-nullable-short-mirror"));
|
||||
Assert.Equal(string.Empty, target.GetAttribute("value"));
|
||||
Assert.Equal(string.Empty, boundValue.Text);
|
||||
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
||||
|
||||
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||
target.Clear();
|
||||
Browser.Equal("", () => boundValue.Text);
|
||||
Assert.Equal("", mirrorValue.GetAttribute("value"));
|
||||
|
||||
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||
target.SendKeys("-42\t");
|
||||
Browser.Equal("-42", () => boundValue.Text);
|
||||
Assert.Equal("-42", mirrorValue.GetAttribute("value"));
|
||||
|
||||
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||
target.Clear();
|
||||
target.SendKeys("42\t");
|
||||
Browser.Equal("42", () => boundValue.Text);
|
||||
Assert.Equal("42", mirrorValue.GetAttribute("value"));
|
||||
|
||||
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||
target.Clear();
|
||||
target.SendKeys("\t");
|
||||
Browser.Equal(string.Empty, () => boundValue.Text);
|
||||
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanBindTextboxFloat()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ using BasicTestApp.HierarchicalImportsTest.Subdir;
|
|||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
|
||||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
||||
using Microsoft.AspNetCore.E2ETesting;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using OpenQA.Selenium;
|
||||
using OpenQA.Selenium.Support.UI;
|
||||
using Xunit;
|
||||
|
|
@ -579,7 +580,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void CanDispatchAsyncWorkToSyncContext()
|
||||
public virtual void CanDispatchAsyncWorkToSyncContext()
|
||||
{
|
||||
var appElement = Browser.MountTestComponent<DispatchingComponent>();
|
||||
var result = appElement.FindElement(By.Id("result"));
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/1987", FlakyOn.AzP.Windows)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/1987")]
|
||||
public void InputEvent_RespondsOnKeystrokes()
|
||||
{
|
||||
Browser.MountTestComponent<InputEventComponent>();
|
||||
|
|
|
|||
|
|
@ -50,6 +50,18 @@
|
|||
<span id="textbox-nullable-long-value">@textboxNullableLongValue</span>
|
||||
<input id="textbox-nullable-long-mirror" @bind="textboxNullableLongValue" readonly />
|
||||
</p>
|
||||
<p>
|
||||
short:
|
||||
<input id="textbox-short" @bind="textboxShortValue" type="number" />
|
||||
<span id="textbox-short-value">@textboxShortValue</span>
|
||||
<input id="textbox-short-mirror" @bind="textboxShortValue" readonly />
|
||||
</p>
|
||||
<p>
|
||||
Nullable short:
|
||||
<input id="textbox-nullable-short" @bind="textboxNullableShortValue" type="number" />
|
||||
<span id="textbox-nullable-short-value">@textboxNullableShortValue</span>
|
||||
<input id="textbox-nullable-short-mirror" @bind="textboxNullableShortValue" readonly />
|
||||
</p>
|
||||
<p>
|
||||
float:
|
||||
<input id="textbox-float" @bind-value="textboxFloatValue" type="number" />
|
||||
|
|
@ -328,6 +340,8 @@
|
|||
int? textboxNullableIntValue = null;
|
||||
long textboxLongValue = 3_000_000_000;
|
||||
long? textboxNullableLongValue = null;
|
||||
short textboxShortValue = -42;
|
||||
short? textboxNullableShortValue = null;
|
||||
float textboxFloatValue = 3.141f;
|
||||
float? textboxNullableFloatValue = null;
|
||||
double textboxDoubleValue = 3.14159265359d;
|
||||
|
|
|
|||
|
|
@ -66,6 +66,10 @@
|
|||
long: <InputNumber id="inputnumber_long" @bind-Value="inputNumberLong" />
|
||||
<span id="inputnumber_long_value">@inputNumberLong</span>
|
||||
</div>
|
||||
<div>
|
||||
short: <InputNumber id="inputnumber_short" @bind-Value="inputNumberShort" />
|
||||
<span id="inputnumber_short_value">@inputNumberShort</span>
|
||||
</div>
|
||||
<div>
|
||||
decimal: <InputNumber id="inputnumber_decimal" @bind-Value="inputNumberDecimal" />
|
||||
<span id="inputnumber_decimal_value">@inputNumberDecimal</span>
|
||||
|
|
@ -104,6 +108,7 @@
|
|||
|
||||
int inputNumberInt = 42;
|
||||
long inputNumberLong = 4200;
|
||||
short inputNumberShort = 42;
|
||||
decimal inputNumberDecimal = 4.2m;
|
||||
|
||||
DateTime inputDateDateTime = new DateTime(1985, 3, 4);
|
||||
|
|
|
|||
|
|
@ -53,8 +53,6 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
<!-- Platform manifest and package override metatdata -->
|
||||
<ReferencePackSharedFxVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0</ReferencePackSharedFxVersion>
|
||||
<ReferencePackSharedFxVersion Condition="'$(VersionSuffix)' != ''">$(ReferencePackSharedFxVersion)-$(VersionSuffix)</ReferencePackSharedFxVersion>
|
||||
<ReferencePlatformManifestPath Condition="'$(IsServicingBuild)' != 'true'">$(PlatformManifestOutputPath)</ReferencePlatformManifestPath>
|
||||
<ReferencePlatformManifestPath Condition="'$(IsServicingBuild)' == 'true'">$(RepoRoot)eng\PlatformManifest.txt</ReferencePlatformManifestPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -157,7 +155,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
<RefPackContent Include="@(AspNetCoreReferenceAssemblyPath)" PackagePath="$(RefAssemblyPackagePath)" />
|
||||
<RefPackContent Include="@(AspNetCoreReferenceDocXml)" PackagePath="$(RefAssemblyPackagePath)" />
|
||||
<RefPackContent Include="$(TargetDir)$(PackageConflictManifestFileName)" PackagePath="$(ManifestsPackagePath)" />
|
||||
<RefPackContent Include="$(ReferencePlatformManifestPath)" PackagePath="$(ManifestsPackagePath)" />
|
||||
<RefPackContent Include="$(PlatformManifestOutputPath)" PackagePath="$(ManifestsPackagePath)" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@ namespace Microsoft.AspNetCore.Hosting
|
|||
|
||||
[Theory]
|
||||
[MemberData(nameof(RequestStartData))]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2230", FlakyOn.All)]
|
||||
public void RequestStart(DefaultHttpContext httpContext, string[] expected)
|
||||
{
|
||||
// Arrange
|
||||
|
|
|
|||
|
|
@ -238,7 +238,6 @@ namespace Microsoft.AspNetCore.Hosting
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2244", FlakyOn.Helix.All)]
|
||||
public async Task WebHostStopAsyncUsesDefaultTimeoutIfNoTokenProvided()
|
||||
{
|
||||
var data = new Dictionary<string, string>
|
||||
|
|
|
|||
|
|
@ -200,6 +200,7 @@ namespace Microsoft.Net.Http.Headers
|
|||
public static readonly string WebSocketSubProtocols;
|
||||
public static readonly string WWWAuthenticate;
|
||||
public static readonly string XFrameOptions;
|
||||
public static readonly string XRequestedWith;
|
||||
}
|
||||
public static partial class HeaderQuality
|
||||
{
|
||||
|
|
|
|||
|
|
@ -88,5 +88,6 @@ namespace Microsoft.Net.Http.Headers
|
|||
public static readonly string WebSocketSubProtocols = "Sec-WebSocket-Protocol";
|
||||
public static readonly string WWWAuthenticate = "WWW-Authenticate";
|
||||
public static readonly string XFrameOptions = "X-Frame-Options";
|
||||
public static readonly string XRequestedWith = "X-Requested-With";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@ namespace Microsoft.AspNetCore.Identity
|
|||
/// <value>
|
||||
/// The display name for the provider.
|
||||
/// </value>
|
||||
/// <remarks>
|
||||
/// Examples of the display name may be local, FACEBOOK, Google, etc.
|
||||
/// </remarks>
|
||||
public string ProviderDisplayName { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -79,7 +79,7 @@ namespace Microsoft.AspNetCore.Identity.Test
|
|||
|
||||
[Theory]
|
||||
[MemberData(nameof(ScriptWithFallbackSrcData))]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2267", FlakyOn.AzP.macOS)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2267")]
|
||||
public async Task IdentityUI_ScriptTags_FallbackSourceContent_Matches_CDNContent(ScriptTag scriptTag)
|
||||
{
|
||||
var wwwrootDir = Path.Combine(GetProjectBasePath(), "wwwroot", scriptTag.Version);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Http;
|
|||
using Microsoft.AspNetCore.Identity.Test;
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Identity.InMemory
|
||||
|
|
@ -425,7 +426,7 @@ namespace Microsoft.AspNetCore.Identity.InMemory
|
|||
}
|
||||
if (ajaxRequest)
|
||||
{
|
||||
request.Headers.Add("X-Requested-With", "XMLHttpRequest");
|
||||
request.Headers.Add(HeaderNames.XRequestedWith, "XMLHttpRequest");
|
||||
}
|
||||
var transaction = new Transaction
|
||||
{
|
||||
|
|
|
|||
|
|
@ -550,7 +550,6 @@ namespace Microsoft.AspNetCore.WebSockets.Test
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore/issues/8187", FlakyOn.Helix.All)]
|
||||
public async Task OriginIsNotValidatedForNonWebSocketRequests()
|
||||
{
|
||||
using (var server = KestrelWebSocketHelpers.CreateServer(LoggerFactory, out var port, context =>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
|||
builder.UseStartup<BasicWebSite.StartupWithCookieTempDataProviderAndCookieConsent>();
|
||||
|
||||
[Fact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/1803", FlakyOn.AzP.Windows)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/1803")]
|
||||
public async Task CookieTempDataProviderCookie_SetInResponse_OnGrantingConsent()
|
||||
{
|
||||
// Arrange
|
||||
|
|
@ -64,7 +64,7 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/1803", FlakyOn.AzP.Windows)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/1803")]
|
||||
public async Task CookieTempDataProviderCookie_NotSetInResponse_OnNoConsent()
|
||||
{
|
||||
// Arrange
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"defaultName": "WebApplication",
|
||||
"description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
|
||||
"groupIdentity": "Microsoft.Web.Blazor.Wasm",
|
||||
"precedence": "6001",
|
||||
"precedence": "7001",
|
||||
"guids": [
|
||||
"4C26868E-5E7C-458D-82E3-040509D0C71F",
|
||||
"5990939C-7E7B-4CFA-86FF-44CA5756498A",
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating a Blazor server app that runs server-side inside an ASP.NET Core app and handles user interactions over a SignalR connection. This template can be used for web apps with rich dynamic user interfaces (UIs).",
|
||||
"groupIdentity": "Microsoft.Web.Blazor.Server",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.Blazor.Server.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.Blazor.Server.CSharp.5.0",
|
||||
"shortName": "blazorserver",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/3.1-third-party-notices",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/5.0-third-party-notices",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
"type": "project"
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
|
||||
"groupIdentity": "Microsoft.Web.Empty",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.Empty.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.Empty.CSharp.5.0",
|
||||
"shortName": "web",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
|
||||
"groupIdentity": "Microsoft.Web.Empty",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.Empty.FSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.Empty.FSharp.5.0",
|
||||
"shortName": "web",
|
||||
"tags": {
|
||||
"language": "F#",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating a gRPC ASP.NET Core service.",
|
||||
"groupIdentity": "Microsoft.Web.Grpc",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Grpc.Service.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Grpc.Service.CSharp.5.0",
|
||||
"shortName": "grpc",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project for creating a Razor class library that targets .NET Standard",
|
||||
"groupIdentity": "Microsoft.Web.Razor",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.Razor.Library.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.Razor.Library.CSharp.5.0",
|
||||
"shortName": "razorclasslib",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
|
|
|
|||
|
|
@ -10,13 +10,13 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
|
||||
"groupIdentity": "Microsoft.Web.RazorPages",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.RazorPages.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.RazorPages.CSharp.5.0",
|
||||
"shortName": [
|
||||
"webapp",
|
||||
"razor"
|
||||
],
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/3.1-third-party-notices",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/5.0-third-party-notices",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
"type": "project"
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating an ASP.NET Core application with example ASP.NET Core MVC Views and Controllers. This template can also be used for RESTful HTTP services.",
|
||||
"groupIdentity": "Microsoft.Web.Mvc",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.Mvc.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.Mvc.CSharp.5.0",
|
||||
"shortName": "mvc",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/3.1-third-party-notices",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/5.0-third-party-notices",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
"type": "project"
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating an ASP.NET Core application with example ASP.NET Core MVC Views and Controllers. This template can also be used for RESTful HTTP services.",
|
||||
"groupIdentity": "Microsoft.Web.Mvc",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.Mvc.FSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.Mvc.FSharp.5.0",
|
||||
"shortName": "mvc",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/3.1-third-party-notices",
|
||||
"thirdPartyNotices": "https://aka.ms/aspnetcore/5.0-third-party-notices",
|
||||
"tags": {
|
||||
"language": "F#",
|
||||
"type": "project"
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating an ASP.NET Core application with an example Controller for a RESTful HTTP service. This template can also be used for ASP.NET Core MVC Views and Controllers.",
|
||||
"groupIdentity": "Microsoft.Web.WebApi",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.WebApi.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.WebApi.CSharp.5.0",
|
||||
"shortName": "webapi",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "A project template for creating an ASP.NET Core application with an example Controller for a RESTful HTTP service. This template can also be used for ASP.NET Core MVC Views and Controllers.",
|
||||
"groupIdentity": "Microsoft.Web.WebApi",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Web.WebApi.FSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Web.WebApi.FSharp.5.0",
|
||||
"shortName": "webapi",
|
||||
"tags": {
|
||||
"language": "F#",
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
"generatorVersions": "[1.0.0.0-*)",
|
||||
"description": "An empty project template for creating a worker service.",
|
||||
"groupIdentity": "Microsoft.Worker.Empty",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.Worker.Empty.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.Worker.Empty.CSharp.5.0",
|
||||
"shortName": "worker",
|
||||
"tags": {
|
||||
"language": "C#",
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@
|
|||
"SPA"
|
||||
],
|
||||
"groupIdentity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.Angular",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.Angular.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.Angular.CSharp.5.0",
|
||||
"name": "ASP.NET Core with Angular",
|
||||
"preferNameDirectory": true,
|
||||
"primaryOutputs": [
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@
|
|||
"SPA"
|
||||
],
|
||||
"groupIdentity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.React",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.React.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.React.CSharp.5.0",
|
||||
"name": "ASP.NET Core with React.js",
|
||||
"preferNameDirectory": true,
|
||||
"primaryOutputs": [
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@
|
|||
"SPA"
|
||||
],
|
||||
"groupIdentity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.ReactRedux",
|
||||
"precedence": "6000",
|
||||
"identity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.ReactRedux.CSharp.3.1",
|
||||
"precedence": "7000",
|
||||
"identity": "Microsoft.DotNet.Web.Spa.ProjectTemplates.ReactRedux.CSharp.5.0",
|
||||
"name": "ASP.NET Core with React.js and Redux",
|
||||
"preferNameDirectory": true,
|
||||
"primaryOutputs": [
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ namespace Templates.Test.SpaTemplateTest
|
|||
public Task ReactTemplate_Works_NetCore()
|
||||
=> SpaTemplateImplAsync("reactnoauth", "react", useLocalDb: false, usesAuth: false);
|
||||
|
||||
[QuarantinedTest]
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("selenium")]
|
||||
public Task ReactTemplate_IndividualAuth_NetCore()
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ using Microsoft.Net.Http.Headers;
|
|||
namespace Microsoft.AspNetCore.Authentication.Cookies
|
||||
{
|
||||
/// <summary>
|
||||
/// This default implementation of the ICookieAuthenticationEvents may be used if the
|
||||
/// This default implementation of the ICookieAuthenticationEvents may be used if the
|
||||
/// application only needs to override a few of the interface methods. This may be used as a base class
|
||||
/// or may be instantiated directly.
|
||||
/// </summary>
|
||||
|
|
@ -103,9 +103,9 @@ namespace Microsoft.AspNetCore.Authentication.Cookies
|
|||
|
||||
private static bool IsAjaxRequest(HttpRequest request)
|
||||
{
|
||||
return string.Equals(request.Query["X-Requested-With"], "XMLHttpRequest", StringComparison.Ordinal) ||
|
||||
string.Equals(request.Headers["X-Requested-With"], "XMLHttpRequest", StringComparison.Ordinal);
|
||||
}
|
||||
return string.Equals(request.Query[HeaderNames.XRequestedWith], "XMLHttpRequest", StringComparison.Ordinal) ||
|
||||
string.Equals(request.Headers[HeaderNames.XRequestedWith], "XMLHttpRequest", StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Implements the interface method by invoking the related delegate method.
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Hosting;
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
|
|
@ -20,6 +21,7 @@ using Xunit;
|
|||
|
||||
namespace Microsoft.AspNetCore.Authentication.Negotiate
|
||||
{
|
||||
[QuarantinedTest]
|
||||
public class EventTests
|
||||
{
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
<Reference Include="Microsoft.AspNetCore.Authentication.Negotiate" />
|
||||
<Reference Include="Microsoft.AspNetCore.Diagnostics" />
|
||||
<Reference Include="Microsoft.AspNetCore.Routing" />
|
||||
<Reference Include="Microsoft.AspNetCore.Testing" />
|
||||
<Reference Include="Microsoft.AspNetCore.TestHost" />
|
||||
<Reference Include="Microsoft.Extensions.Hosting" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Hosting;
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
|
|
@ -21,6 +22,7 @@ using Xunit.Sdk;
|
|||
|
||||
namespace Microsoft.AspNetCore.Authentication.Negotiate
|
||||
{
|
||||
[QuarantinedTest]
|
||||
public class NegotiateHandlerTests
|
||||
{
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Builder;
|
|||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Hosting.Server;
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
|
@ -14,6 +15,7 @@ using Xunit;
|
|||
|
||||
namespace Microsoft.AspNetCore.Authentication.Negotiate
|
||||
{
|
||||
[QuarantinedTest]
|
||||
public class ServerDeferralTests
|
||||
{
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
|
|||
public class RequestBodyTests
|
||||
{
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/1826", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/1826")]
|
||||
public async Task RequestBody_SyncReadDisabledByDefault_WorksWhenEnabled()
|
||||
{
|
||||
string address;
|
||||
|
|
@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2206", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2206")]
|
||||
public async Task RequestBody_ReadAsyncPartialBodyAndExpiredTimeout_Canceled()
|
||||
{
|
||||
StaggardContent content = new StaggardContent();
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2135", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2135")]
|
||||
public async Task Caching_JustPublic_NotCached()
|
||||
{
|
||||
var requestCount = 1;
|
||||
|
|
@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2207", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2207")]
|
||||
public async Task Caching_WithoutContentType_Cached_OnWin7AndWin2008R2()
|
||||
{
|
||||
if (Utilities.IsWin8orLater)
|
||||
|
|
@ -237,7 +237,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[InlineData("0")]
|
||||
[InlineData("-1")]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2208", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2208")]
|
||||
public async Task Caching_InvalidExpires_NotCached(string expiresValue)
|
||||
{
|
||||
var requestCount = 1;
|
||||
|
|
@ -378,7 +378,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2209", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2209")]
|
||||
public async Task Caching_VariousStatusCodes_Cached()
|
||||
{
|
||||
var requestCount = 1;
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2267", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2267")]
|
||||
public async Task Server_ShutdownDuringRequest_Success()
|
||||
{
|
||||
Task<string> responseTask;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@
|
|||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\RequestHandlerLib;..\IISLib;..\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\AspNetCore\Inc;..\InProcessRequestHandler\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" </AdditionalOptions>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
|
|
@ -125,6 +126,7 @@
|
|||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\RequestHandlerLib;..\IISLib;..\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\AspNetCore\Inc;..\InProcessRequestHandler\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" </AdditionalOptions>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
|
|
@ -150,6 +152,7 @@
|
|||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\RequestHandlerLib;..\IISLib;..\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\AspNetCore\Inc;..\InProcessRequestHandler\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" </AdditionalOptions>
|
||||
|
|
@ -179,6 +182,7 @@
|
|||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\RequestHandlerLib;..\IISLib;..\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\AspNetCore\Inc;..\InProcessRequestHandler\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" </AdditionalOptions>
|
||||
|
|
@ -200,4 +204,4 @@
|
|||
</AdditionalDependencies>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ namespace InprocessTests
|
|||
|
||||
TEST(Dotnet_EXE_Path_Tests, EndWith_dotnet)
|
||||
{
|
||||
HostFxrResolver resolver;
|
||||
std::filesystem::path hostFxrDllPath;
|
||||
std::vector<std::wstring> arguments;
|
||||
ErrorContext errorContext;
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ namespace BenchmarkDotNet.Attributes
|
|||
|
||||
Add(JitOptimizationsValidator.FailOnError);
|
||||
|
||||
Add(Job.Core
|
||||
Add(Job.Default
|
||||
.With(CsProjCoreToolchain.From(NetCoreAppSettings.NetCoreApp21))
|
||||
.With(new GcMode { Server = true })
|
||||
.WithTargetCount(10)
|
||||
.WithIterationCount(10)
|
||||
.WithInvocationCount(1)
|
||||
.WithUnrollFactor(1)
|
||||
.With(RunStrategy.ColdStart));
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[InlineData(HostingModel.InProcess)]
|
||||
[InlineData(HostingModel.OutOfProcess)]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore/issues/7075", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/7075")]
|
||||
public async Task AppOfflineAddedAndRemovedStress(HostingModel hostingModel)
|
||||
{
|
||||
var deploymentResult = await AssertStarts(hostingModel);
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[InlineData(HostingModel.InProcess)]
|
||||
[InlineData(HostingModel.OutOfProcess)]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/1794", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/1794")]
|
||||
public async Task ConfigurationTouchedStress(HostingModel hostingModel)
|
||||
{
|
||||
var deploymentResult = await DeployAsync(Fixture.GetBaseDeploymentParameters(hostingModel));
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.InProcess
|
|||
// I think this test is flaky due to freb file not being created quickly enough.
|
||||
// Adding extra logging, marking as flaky, and repeating should help
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2570", FlakyOn.Helix.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2570")]
|
||||
[Repeat(10)]
|
||||
[RequiresIIS(IISCapability.FailedRequestTracingModule)]
|
||||
public async Task CheckFrebDisconnect()
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.InProcess
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore/issues/7341", FlakyOn.Helix.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/7341")]
|
||||
public async Task ReadAndWriteSynchronously()
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
|
||||
[ConditionalTheory]
|
||||
[MemberData(nameof(TestVariants))]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2200", FlakyOn.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2200")]
|
||||
public async Task CheckUTF8File(TestVariant variant)
|
||||
{
|
||||
var path = "CheckConsoleFunctions";
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/1817", FlakyOn.AzP.Windows)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/1817")]
|
||||
public async Task ReaderThrowsResetExceptionOnInvalidBody()
|
||||
{
|
||||
var requestStartedCompletionSource = CreateTaskCompletionSource();
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -127,6 +127,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
private readonly long _bits;
|
||||
private int _next;
|
||||
private KeyValuePair<string, StringValues> _current;
|
||||
private KnownHeaderType _currentKnownType;
|
||||
private readonly bool _hasUnknown;
|
||||
private Dictionary<string, StringValues>.Enumerator _unknownEnumerator;
|
||||
|
||||
|
|
@ -136,6 +137,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
_bits = collection._bits;
|
||||
_next = 0;
|
||||
_current = default;
|
||||
_currentKnownType = default;
|
||||
_hasUnknown = collection.MaybeUnknown != null;
|
||||
_unknownEnumerator = _hasUnknown
|
||||
? collection.MaybeUnknown.GetEnumerator()
|
||||
|
|
@ -144,6 +146,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
|
||||
public KeyValuePair<string, StringValues> Current => _current;
|
||||
|
||||
internal KnownHeaderType CurrentKnownType => _currentKnownType;
|
||||
|
||||
object IEnumerator.Current => _current;
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
private readonly long _bits;
|
||||
private int _next;
|
||||
private KeyValuePair<string, StringValues> _current;
|
||||
private KnownHeaderType _currentKnownType;
|
||||
private readonly bool _hasUnknown;
|
||||
private Dictionary<string, StringValues>.Enumerator _unknownEnumerator;
|
||||
|
||||
|
|
@ -103,6 +104,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
_bits = collection._bits;
|
||||
_next = 0;
|
||||
_current = default;
|
||||
_currentKnownType = default;
|
||||
_hasUnknown = collection.MaybeUnknown != null;
|
||||
_unknownEnumerator = _hasUnknown
|
||||
? collection.MaybeUnknown.GetEnumerator()
|
||||
|
|
@ -111,6 +113,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
|
||||
public KeyValuePair<string, StringValues> Current => _current;
|
||||
|
||||
internal KnownHeaderType CurrentKnownType => _currentKnownType;
|
||||
|
||||
object IEnumerator.Current => _current;
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
private readonly long _bits;
|
||||
private int _next;
|
||||
private KeyValuePair<string, StringValues> _current;
|
||||
private KnownHeaderType _currentKnownType;
|
||||
private readonly bool _hasUnknown;
|
||||
private Dictionary<string, StringValues>.Enumerator _unknownEnumerator;
|
||||
|
||||
|
|
@ -52,6 +53,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
_bits = collection._bits;
|
||||
_next = 0;
|
||||
_current = default;
|
||||
_currentKnownType = default;
|
||||
_hasUnknown = collection.MaybeUnknown != null;
|
||||
_unknownEnumerator = _hasUnknown
|
||||
? collection.MaybeUnknown.GetEnumerator()
|
||||
|
|
@ -60,6 +62,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
|||
|
||||
public KeyValuePair<string, StringValues> Current => _current;
|
||||
|
||||
internal KnownHeaderType CurrentKnownType => _currentKnownType;
|
||||
|
||||
object IEnumerator.Current => _current;
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,157 @@
|
|||
// 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.Net.Http;
|
||||
using System.Net.Http.HPack;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
||||
{
|
||||
internal static class HPackHeaderWriter
|
||||
{
|
||||
/// <summary>
|
||||
/// Begin encoding headers in the first HEADERS frame.
|
||||
/// </summary>
|
||||
public static bool BeginEncodeHeaders(int statusCode, Http2HeadersEnumerator headersEnumerator, Span<byte> buffer, out int length)
|
||||
{
|
||||
if (!HPackEncoder.EncodeStatusHeader(statusCode, buffer, out var statusCodeLength))
|
||||
{
|
||||
throw new HPackEncodingException(SR.net_http_hpack_encode_failure);
|
||||
}
|
||||
|
||||
if (!headersEnumerator.MoveNext())
|
||||
{
|
||||
length = statusCodeLength;
|
||||
return true;
|
||||
}
|
||||
|
||||
// We're ok with not throwing if no headers were encoded because we've already encoded the status.
|
||||
// There is a small chance that the header will encode if there is no other content in the next HEADERS frame.
|
||||
var done = EncodeHeaders(headersEnumerator, buffer.Slice(statusCodeLength), throwIfNoneEncoded: false, out var headersLength);
|
||||
length = statusCodeLength + headersLength;
|
||||
|
||||
return done;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Begin encoding headers in the first HEADERS frame.
|
||||
/// </summary>
|
||||
public static bool BeginEncodeHeaders(Http2HeadersEnumerator headersEnumerator, Span<byte> buffer, out int length)
|
||||
{
|
||||
if (!headersEnumerator.MoveNext())
|
||||
{
|
||||
length = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
return EncodeHeaders(headersEnumerator, buffer, throwIfNoneEncoded: true, out length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Continue encoding headers in the next HEADERS frame. The enumerator should already have a current value.
|
||||
/// </summary>
|
||||
public static bool ContinueEncodeHeaders(Http2HeadersEnumerator headersEnumerator, Span<byte> buffer, out int length)
|
||||
{
|
||||
return EncodeHeaders(headersEnumerator, buffer, throwIfNoneEncoded: true, out length);
|
||||
}
|
||||
|
||||
private static bool EncodeHeaders(Http2HeadersEnumerator headersEnumerator, Span<byte> buffer, bool throwIfNoneEncoded, out int length)
|
||||
{
|
||||
var currentLength = 0;
|
||||
do
|
||||
{
|
||||
if (!EncodeHeader(headersEnumerator.KnownHeaderType, headersEnumerator.Current.Key, headersEnumerator.Current.Value, buffer.Slice(currentLength), out int headerLength))
|
||||
{
|
||||
// The the header wasn't written and no headers have been written then the header is too large.
|
||||
// Throw an error to avoid an infinite loop of attempting to write large header.
|
||||
if (currentLength == 0 && throwIfNoneEncoded)
|
||||
{
|
||||
throw new HPackEncodingException(SR.net_http_hpack_encode_failure);
|
||||
}
|
||||
|
||||
length = currentLength;
|
||||
return false;
|
||||
}
|
||||
|
||||
currentLength += headerLength;
|
||||
}
|
||||
while (headersEnumerator.MoveNext());
|
||||
|
||||
length = currentLength;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool EncodeHeader(KnownHeaderType knownHeaderType, string name, string value, Span<byte> buffer, out int length)
|
||||
{
|
||||
var hPackStaticTableId = GetResponseHeaderStaticTableId(knownHeaderType);
|
||||
|
||||
if (hPackStaticTableId == -1)
|
||||
{
|
||||
return HPackEncoder.EncodeLiteralHeaderFieldWithoutIndexingNewName(name, value, buffer, out length);
|
||||
}
|
||||
else
|
||||
{
|
||||
return HPackEncoder.EncodeLiteralHeaderFieldWithoutIndexing(hPackStaticTableId, value, buffer, out length);
|
||||
}
|
||||
}
|
||||
|
||||
private static int GetResponseHeaderStaticTableId(KnownHeaderType responseHeaderType)
|
||||
{
|
||||
switch (responseHeaderType)
|
||||
{
|
||||
case KnownHeaderType.CacheControl:
|
||||
return H2StaticTable.CacheControl;
|
||||
case KnownHeaderType.Date:
|
||||
return H2StaticTable.Date;
|
||||
case KnownHeaderType.TransferEncoding:
|
||||
return H2StaticTable.TransferEncoding;
|
||||
case KnownHeaderType.Via:
|
||||
return H2StaticTable.Via;
|
||||
case KnownHeaderType.Allow:
|
||||
return H2StaticTable.Allow;
|
||||
case KnownHeaderType.ContentType:
|
||||
return H2StaticTable.ContentType;
|
||||
case KnownHeaderType.ContentEncoding:
|
||||
return H2StaticTable.ContentEncoding;
|
||||
case KnownHeaderType.ContentLanguage:
|
||||
return H2StaticTable.ContentLanguage;
|
||||
case KnownHeaderType.ContentLocation:
|
||||
return H2StaticTable.ContentLocation;
|
||||
case KnownHeaderType.ContentRange:
|
||||
return H2StaticTable.ContentRange;
|
||||
case KnownHeaderType.Expires:
|
||||
return H2StaticTable.Expires;
|
||||
case KnownHeaderType.LastModified:
|
||||
return H2StaticTable.LastModified;
|
||||
case KnownHeaderType.AcceptRanges:
|
||||
return H2StaticTable.AcceptRanges;
|
||||
case KnownHeaderType.Age:
|
||||
return H2StaticTable.Age;
|
||||
case KnownHeaderType.ETag:
|
||||
return H2StaticTable.ETag;
|
||||
case KnownHeaderType.Location:
|
||||
return H2StaticTable.Location;
|
||||
case KnownHeaderType.ProxyAuthenticate:
|
||||
return H2StaticTable.ProxyAuthenticate;
|
||||
case KnownHeaderType.RetryAfter:
|
||||
return H2StaticTable.RetryAfter;
|
||||
case KnownHeaderType.Server:
|
||||
return H2StaticTable.Server;
|
||||
case KnownHeaderType.SetCookie:
|
||||
return H2StaticTable.SetCookie;
|
||||
case KnownHeaderType.Vary:
|
||||
return H2StaticTable.Vary;
|
||||
case KnownHeaderType.WWWAuthenticate:
|
||||
return H2StaticTable.WwwAuthenticate;
|
||||
case KnownHeaderType.AccessControlAllowOrigin:
|
||||
return H2StaticTable.AccessControlAllowOrigin;
|
||||
case KnownHeaderType.ContentLength:
|
||||
return H2StaticTable.ContentLength;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -65,7 +65,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
private int _gracefulCloseInitiator;
|
||||
private int _isClosed;
|
||||
|
||||
private Http2StreamStack _streamPool;
|
||||
// Internal for testing
|
||||
internal Http2StreamStack StreamPool;
|
||||
|
||||
internal const int InitialStreamPoolSize = 5;
|
||||
internal const int MaxStreamPoolSize = 40;
|
||||
|
|
@ -111,7 +112,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
_serverSettings.InitialWindowSize = (uint)http2Limits.InitialStreamWindowSize;
|
||||
|
||||
// Start pool off at a smaller size if the max number of streams is less than the InitialStreamPoolSize
|
||||
_streamPool = new Http2StreamStack(Math.Min(InitialStreamPoolSize, http2Limits.MaxStreamsPerConnection));
|
||||
StreamPool = new Http2StreamStack(Math.Min(InitialStreamPoolSize, http2Limits.MaxStreamsPerConnection));
|
||||
|
||||
_inputTask = ReadInputAsync();
|
||||
}
|
||||
|
|
@ -572,7 +573,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
|
||||
private Http2Stream GetStream<TContext>(IHttpApplication<TContext> application)
|
||||
{
|
||||
if (_streamPool.TryPop(out var stream))
|
||||
if (StreamPool.TryPop(out var stream))
|
||||
{
|
||||
stream.InitializeWithExistingContext(_incomingFrame.StreamId);
|
||||
return stream;
|
||||
|
|
@ -606,9 +607,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
|
||||
private void ReturnStream(Http2Stream stream)
|
||||
{
|
||||
if (_streamPool.Count < MaxStreamPoolSize)
|
||||
if (StreamPool.Count < MaxStreamPoolSize)
|
||||
{
|
||||
_streamPool.Push(stream);
|
||||
StreamPool.Push(stream);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -972,8 +973,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
catch (Http2StreamErrorException)
|
||||
{
|
||||
MakeSpaceInDrainQueue();
|
||||
// Tracked for draining
|
||||
_completedStreams.Enqueue(_currentHeadersStream);
|
||||
|
||||
// Because this stream isn't being queued, OnRequestProcessingEnded will not be
|
||||
// automatically called and the stream won't be completed.
|
||||
// Manually complete stream to ensure pipes are completed.
|
||||
// Completing the stream will add it to the completed stream queue.
|
||||
_currentHeadersStream.DecrementActiveClientStreamCount();
|
||||
_currentHeadersStream.CompleteStream(errored: true);
|
||||
throw;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using System.Buffers.Binary;
|
|||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO.Pipelines;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.HPack;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
|
@ -27,7 +28,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
|
||||
private readonly object _writeLock = new object();
|
||||
private readonly Http2Frame _outgoingFrame;
|
||||
private readonly HPackEncoder _hpackEncoder = new HPackEncoder();
|
||||
private readonly Http2HeadersEnumerator _headersEnumerator = new Http2HeadersEnumerator();
|
||||
private readonly ConcurrentPipeWriter _outputWriter;
|
||||
private readonly ConnectionContext _connectionContext;
|
||||
private readonly Http2Connection _http2Connection;
|
||||
|
|
@ -160,7 +161,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
| Padding (*) ...
|
||||
+---------------------------------------------------------------+
|
||||
*/
|
||||
public void WriteResponseHeaders(int streamId, int statusCode, Http2HeadersFrameFlags headerFrameFlags, IHeaderDictionary headers)
|
||||
public void WriteResponseHeaders(int streamId, int statusCode, Http2HeadersFrameFlags headerFrameFlags, HttpResponseHeaders headers)
|
||||
{
|
||||
lock (_writeLock)
|
||||
{
|
||||
|
|
@ -171,9 +172,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
|
||||
try
|
||||
{
|
||||
_headersEnumerator.Initialize(headers);
|
||||
_outgoingFrame.PrepareHeaders(headerFrameFlags, streamId);
|
||||
var buffer = _headerEncodingBuffer.AsSpan();
|
||||
var done = _hpackEncoder.BeginEncode(statusCode, EnumerateHeaders(headers), buffer, out var payloadLength);
|
||||
var done = HPackHeaderWriter.BeginEncodeHeaders(statusCode, _headersEnumerator, buffer, out var payloadLength);
|
||||
FinishWritingHeaders(streamId, payloadLength, done);
|
||||
}
|
||||
catch (HPackEncodingException hex)
|
||||
|
|
@ -196,9 +198,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
|
||||
try
|
||||
{
|
||||
_headersEnumerator.Initialize(headers);
|
||||
_outgoingFrame.PrepareHeaders(Http2HeadersFrameFlags.END_STREAM, streamId);
|
||||
var buffer = _headerEncodingBuffer.AsSpan();
|
||||
var done = _hpackEncoder.BeginEncode(EnumerateHeaders(headers), buffer, out var payloadLength);
|
||||
var done = HPackHeaderWriter.BeginEncodeHeaders(_headersEnumerator, buffer, out var payloadLength);
|
||||
FinishWritingHeaders(streamId, payloadLength, done);
|
||||
}
|
||||
catch (HPackEncodingException hex)
|
||||
|
|
@ -227,7 +230,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
{
|
||||
_outgoingFrame.PrepareContinuation(Http2ContinuationFrameFlags.NONE, streamId);
|
||||
|
||||
done = _hpackEncoder.Encode(buffer, out payloadLength);
|
||||
done = HPackHeaderWriter.ContinueEncodeHeaders(_headersEnumerator, buffer, out payloadLength);
|
||||
_outgoingFrame.PayloadLength = payloadLength;
|
||||
|
||||
if (done)
|
||||
|
|
@ -662,16 +665,5 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
flowControl.Abort();
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<KeyValuePair<string, string>> EnumerateHeaders(IHeaderDictionary headers)
|
||||
{
|
||||
foreach (var header in headers)
|
||||
{
|
||||
foreach (var value in header.Value)
|
||||
{
|
||||
yield return new KeyValuePair<string, string>(header.Key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,169 @@
|
|||
// 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;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
||||
{
|
||||
internal sealed class Http2HeadersEnumerator : IEnumerator<KeyValuePair<string, string>>
|
||||
{
|
||||
private bool _isTrailers;
|
||||
private HttpResponseHeaders.Enumerator _headersEnumerator;
|
||||
private HttpResponseTrailers.Enumerator _trailersEnumerator;
|
||||
private IEnumerator<KeyValuePair<string, StringValues>> _genericEnumerator;
|
||||
private StringValues.Enumerator _stringValuesEnumerator;
|
||||
|
||||
public KnownHeaderType KnownHeaderType { get; private set; }
|
||||
public KeyValuePair<string, string> Current { get; private set; }
|
||||
object IEnumerator.Current => Current;
|
||||
|
||||
public Http2HeadersEnumerator()
|
||||
{
|
||||
}
|
||||
|
||||
public void Initialize(HttpResponseHeaders headers)
|
||||
{
|
||||
_headersEnumerator = headers.GetEnumerator();
|
||||
_trailersEnumerator = default;
|
||||
_genericEnumerator = null;
|
||||
_isTrailers = false;
|
||||
|
||||
_stringValuesEnumerator = default;
|
||||
Current = default;
|
||||
KnownHeaderType = default;
|
||||
}
|
||||
|
||||
public void Initialize(HttpResponseTrailers headers)
|
||||
{
|
||||
_headersEnumerator = default;
|
||||
_trailersEnumerator = headers.GetEnumerator();
|
||||
_genericEnumerator = null;
|
||||
_isTrailers = true;
|
||||
|
||||
_stringValuesEnumerator = default;
|
||||
Current = default;
|
||||
KnownHeaderType = default;
|
||||
}
|
||||
|
||||
public void Initialize(IDictionary<string, StringValues> headers)
|
||||
{
|
||||
_headersEnumerator = default;
|
||||
_trailersEnumerator = default;
|
||||
_genericEnumerator = headers.GetEnumerator();
|
||||
_isTrailers = false;
|
||||
|
||||
_stringValuesEnumerator = default;
|
||||
Current = default;
|
||||
KnownHeaderType = default;
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
if (MoveNextOnStringEnumerator())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!TryGetNextStringEnumerator(out _stringValuesEnumerator))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return MoveNextOnStringEnumerator();
|
||||
}
|
||||
|
||||
private string GetCurrentKey()
|
||||
{
|
||||
if (_genericEnumerator != null)
|
||||
{
|
||||
return _genericEnumerator.Current.Key;
|
||||
}
|
||||
else if (_isTrailers)
|
||||
{
|
||||
return _trailersEnumerator.Current.Key;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _headersEnumerator.Current.Key;
|
||||
}
|
||||
}
|
||||
|
||||
private bool MoveNextOnStringEnumerator()
|
||||
{
|
||||
var result = _stringValuesEnumerator.MoveNext();
|
||||
Current = result ? new KeyValuePair<string, string>(GetCurrentKey(), _stringValuesEnumerator.Current) : default;
|
||||
return result;
|
||||
}
|
||||
|
||||
private bool TryGetNextStringEnumerator(out StringValues.Enumerator enumerator)
|
||||
{
|
||||
if (_genericEnumerator != null)
|
||||
{
|
||||
if (!_genericEnumerator.MoveNext())
|
||||
{
|
||||
enumerator = default;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
enumerator = _genericEnumerator.Current.Value.GetEnumerator();
|
||||
KnownHeaderType = default;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (_isTrailers)
|
||||
{
|
||||
if (!_trailersEnumerator.MoveNext())
|
||||
{
|
||||
enumerator = default;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
enumerator = _trailersEnumerator.Current.Value.GetEnumerator();
|
||||
KnownHeaderType = _trailersEnumerator.CurrentKnownType;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!_headersEnumerator.MoveNext())
|
||||
{
|
||||
enumerator = default;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
enumerator = _headersEnumerator.Current.Value.GetEnumerator();
|
||||
KnownHeaderType = _headersEnumerator.CurrentKnownType;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
if (_genericEnumerator != null)
|
||||
{
|
||||
_genericEnumerator.Reset();
|
||||
}
|
||||
else if (_isTrailers)
|
||||
{
|
||||
_trailersEnumerator.Reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
_headersEnumerator.Reset();
|
||||
}
|
||||
_stringValuesEnumerator = default;
|
||||
KnownHeaderType = default;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -71,6 +71,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
public void InitializeWithExistingContext(int streamId)
|
||||
{
|
||||
_context.StreamId = streamId;
|
||||
|
||||
Initialize(_context);
|
||||
}
|
||||
|
||||
|
|
@ -103,6 +104,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
}
|
||||
|
||||
protected override void OnRequestProcessingEnded()
|
||||
{
|
||||
CompleteStream(errored: false);
|
||||
}
|
||||
|
||||
public void CompleteStream(bool errored)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -110,14 +116,23 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
// If the app finished without reading the request body tell the client not to finish sending it.
|
||||
if (!EndStreamReceived && !RstStreamReceived)
|
||||
{
|
||||
Log.RequestBodyNotEntirelyRead(ConnectionIdFeature, TraceIdentifier);
|
||||
if (!errored)
|
||||
{
|
||||
Log.RequestBodyNotEntirelyRead(ConnectionIdFeature, TraceIdentifier);
|
||||
}
|
||||
|
||||
var (oldState, newState) = ApplyCompletionFlag(StreamCompletionFlags.Aborted);
|
||||
if (oldState != newState)
|
||||
{
|
||||
Debug.Assert(_decrementCalled);
|
||||
// Don't block on IO. This never faults.
|
||||
_ = _http2Output.WriteRstStreamAsync(Http2ErrorCode.NO_ERROR);
|
||||
|
||||
// If there was an error starting the stream then we don't want to write RST_STREAM here.
|
||||
// The connection will handle writing RST_STREAM with the correct error code.
|
||||
if (!errored)
|
||||
{
|
||||
// Don't block on IO. This never faults.
|
||||
_ = _http2Output.WriteRstStreamAsync(Http2ErrorCode.NO_ERROR);
|
||||
}
|
||||
RequestBodyPipe.Writer.Complete();
|
||||
}
|
||||
}
|
||||
|
|
@ -129,8 +144,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
// The app can no longer read any more of the request body, so return any bytes that weren't read to the
|
||||
// connection's flow-control window.
|
||||
_inputFlowControl.Abort();
|
||||
|
||||
Reset();
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
@ -173,7 +186,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
// CONNECT - :scheme and :path must be excluded
|
||||
if (Method == HttpMethod.Connect)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(RequestHeaders[HeaderNames.Scheme]) || !String.IsNullOrEmpty(RequestHeaders[HeaderNames.Path]))
|
||||
if (!String.IsNullOrEmpty(HttpRequestHeaders.HeaderScheme) || !String.IsNullOrEmpty(HttpRequestHeaders.HeaderPath))
|
||||
{
|
||||
ResetAndAbort(new ConnectionAbortedException(CoreStrings.Http2ErrorConnectMustNotSendSchemeOrPath), Http2ErrorCode.PROTOCOL_ERROR);
|
||||
return false;
|
||||
|
|
@ -192,16 +205,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
// - That said, we shouldn't allow arbitrary values or use them to populate Request.Scheme, right?
|
||||
// - For now we'll restrict it to http/s and require it match the transport.
|
||||
// - We'll need to find some concrete scenarios to warrant unblocking this.
|
||||
if (!string.Equals(RequestHeaders[HeaderNames.Scheme], Scheme, StringComparison.OrdinalIgnoreCase))
|
||||
if (!string.Equals(HttpRequestHeaders.HeaderScheme, Scheme, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ResetAndAbort(new ConnectionAbortedException(
|
||||
CoreStrings.FormatHttp2StreamErrorSchemeMismatch(RequestHeaders[HeaderNames.Scheme], Scheme)), Http2ErrorCode.PROTOCOL_ERROR);
|
||||
CoreStrings.FormatHttp2StreamErrorSchemeMismatch(HttpRequestHeaders.HeaderScheme, Scheme)), Http2ErrorCode.PROTOCOL_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
// :path (and query) - Required
|
||||
// Must start with / except may be * for OPTIONS
|
||||
var path = RequestHeaders[HeaderNames.Path].ToString();
|
||||
var path = HttpRequestHeaders.HeaderPath.ToString();
|
||||
RawTarget = path;
|
||||
|
||||
// OPTIONS - https://tools.ietf.org/html/rfc7540#section-8.1.2.3
|
||||
|
|
@ -238,7 +251,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
private bool TryValidateMethod()
|
||||
{
|
||||
// :method
|
||||
_methodText = RequestHeaders[HeaderNames.Method].ToString();
|
||||
_methodText = HttpRequestHeaders.HeaderMethod.ToString();
|
||||
Method = HttpUtilities.GetKnownMethod(_methodText);
|
||||
|
||||
if (Method == HttpMethod.None)
|
||||
|
|
@ -264,7 +277,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
|||
// :authority (optional)
|
||||
// Prefer this over Host
|
||||
|
||||
var authority = RequestHeaders[HeaderNames.Authority];
|
||||
var authority = HttpRequestHeaders.HeaderAuthority;
|
||||
var host = HttpRequestHeaders.HeaderHost;
|
||||
if (!StringValues.IsNullOrEmpty(authority))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,12 +3,14 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http.HPack;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
|
||||
{
|
||||
public class HPackEncoderTests
|
||||
public class HPackHeaderWriterTests
|
||||
{
|
||||
public static TheoryData<KeyValuePair<string, string>[], byte[], int?> SinglePayloadData
|
||||
{
|
||||
|
|
@ -89,16 +91,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
|
|||
[MemberData(nameof(SinglePayloadData))]
|
||||
public void EncodesHeadersInSinglePayloadWhenSpaceAvailable(KeyValuePair<string, string>[] headers, byte[] expectedPayload, int? statusCode)
|
||||
{
|
||||
var encoder = new HPackEncoder();
|
||||
var payload = new byte[1024];
|
||||
var length = 0;
|
||||
if (statusCode.HasValue)
|
||||
{
|
||||
Assert.True(encoder.BeginEncode(statusCode.Value, headers, payload, out length));
|
||||
Assert.True(HPackHeaderWriter.BeginEncodeHeaders(statusCode.Value, GetHeadersEnumerator(headers), payload, out length));
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.True(encoder.BeginEncode(headers, payload, out length));
|
||||
Assert.True(HPackHeaderWriter.BeginEncodeHeaders(GetHeadersEnumerator(headers), payload, out length));
|
||||
}
|
||||
Assert.Equal(expectedPayload.Length, length);
|
||||
|
||||
|
|
@ -115,10 +116,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
|
|||
[InlineData(false)]
|
||||
public void EncodesHeadersInMultiplePayloadsWhenSpaceNotAvailable(bool exactSize)
|
||||
{
|
||||
var encoder = new HPackEncoder();
|
||||
|
||||
var statusCode = 200;
|
||||
var headers = new []
|
||||
var headers = new[]
|
||||
{
|
||||
new KeyValuePair<string, string>("date", "Mon, 24 Jul 2017 19:22:30 GMT"),
|
||||
new KeyValuePair<string, string>("content-type", "text/html; charset=utf-8"),
|
||||
|
|
@ -156,33 +155,45 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
|
|||
|
||||
Span<byte> payload = new byte[1024];
|
||||
var offset = 0;
|
||||
var headerEnumerator = GetHeadersEnumerator(headers);
|
||||
|
||||
// When !exactSize, slices are one byte short of fitting the next header
|
||||
var sliceLength = expectedStatusCodePayload.Length + (exactSize ? 0 : expectedDateHeaderPayload.Length - 1);
|
||||
Assert.False(encoder.BeginEncode(statusCode, headers, payload.Slice(offset, sliceLength), out var length));
|
||||
Assert.False(HPackHeaderWriter.BeginEncodeHeaders(statusCode, headerEnumerator, payload.Slice(offset, sliceLength), out var length));
|
||||
Assert.Equal(expectedStatusCodePayload.Length, length);
|
||||
Assert.Equal(expectedStatusCodePayload, payload.Slice(0, length).ToArray());
|
||||
|
||||
offset += length;
|
||||
|
||||
sliceLength = expectedDateHeaderPayload.Length + (exactSize ? 0 : expectedContentTypeHeaderPayload.Length - 1);
|
||||
Assert.False(encoder.Encode(payload.Slice(offset, sliceLength), out length));
|
||||
Assert.False(HPackHeaderWriter.ContinueEncodeHeaders(headerEnumerator, payload.Slice(offset, sliceLength), out length));
|
||||
Assert.Equal(expectedDateHeaderPayload.Length, length);
|
||||
Assert.Equal(expectedDateHeaderPayload, payload.Slice(offset, length).ToArray());
|
||||
|
||||
offset += length;
|
||||
|
||||
sliceLength = expectedContentTypeHeaderPayload.Length + (exactSize ? 0 : expectedServerHeaderPayload.Length - 1);
|
||||
Assert.False(encoder.Encode(payload.Slice(offset, sliceLength), out length));
|
||||
Assert.False(HPackHeaderWriter.ContinueEncodeHeaders(headerEnumerator, payload.Slice(offset, sliceLength), out length));
|
||||
Assert.Equal(expectedContentTypeHeaderPayload.Length, length);
|
||||
Assert.Equal(expectedContentTypeHeaderPayload, payload.Slice(offset, length).ToArray());
|
||||
|
||||
offset += length;
|
||||
|
||||
sliceLength = expectedServerHeaderPayload.Length;
|
||||
Assert.True(encoder.Encode(payload.Slice(offset, sliceLength), out length));
|
||||
Assert.True(HPackHeaderWriter.ContinueEncodeHeaders(headerEnumerator, payload.Slice(offset, sliceLength), out length));
|
||||
Assert.Equal(expectedServerHeaderPayload.Length, length);
|
||||
Assert.Equal(expectedServerHeaderPayload, payload.Slice(offset, length).ToArray());
|
||||
}
|
||||
|
||||
private static Http2HeadersEnumerator GetHeadersEnumerator(IEnumerable<KeyValuePair<string, string>> headers)
|
||||
{
|
||||
var groupedHeaders = headers
|
||||
.GroupBy(k => k.Key)
|
||||
.ToDictionary(g => g.Key, g => new StringValues(g.Select(gg => gg.Value).ToArray()));
|
||||
|
||||
var enumerator = new Http2HeadersEnumerator();
|
||||
enumerator.Initialize(groupedHeaders);
|
||||
return enumerator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -13,15 +13,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
public class GeneratedCodeTests
|
||||
{
|
||||
[ConditionalFact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2223", FlakyOn.Helix.All)]
|
||||
public void GeneratedCodeIsUpToDate()
|
||||
{
|
||||
var httpHeadersGeneratedPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "HttpHeaders.Generated.cs");
|
||||
var httpProtocolGeneratedPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "HttpProtocol.Generated.cs");
|
||||
var httpUtilitiesGeneratedPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "HttpUtilities.Generated.cs");
|
||||
var http2ConnectionGeneratedPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "Http2Connection.Generated.cs");
|
||||
var transportMultiplexedConnectionGeneratedPath = Path.Combine(AppContext.BaseDirectory,"shared", "GeneratedContent", "TransportMultiplexedConnection.Generated.cs");
|
||||
var transportConnectionGeneratedPath = Path.Combine(AppContext.BaseDirectory,"shared", "GeneratedContent", "TransportConnection.Generated.cs");
|
||||
var transportMultiplexedConnectionGeneratedPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "TransportMultiplexedConnection.Generated.cs");
|
||||
var transportConnectionGeneratedPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "TransportConnection.Generated.cs");
|
||||
|
||||
var testHttpHeadersGeneratedPath = Path.GetTempFileName();
|
||||
var testHttpProtocolGeneratedPath = Path.GetTempFileName();
|
||||
|
|
|
|||
|
|
@ -29,10 +29,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.Internal
|
|||
_log = log;
|
||||
_context = new QuicTransportContext(_log, options);
|
||||
EndPoint = endpoint;
|
||||
|
||||
var quicListenerOptions = new QuicListenerOptions();
|
||||
var sslConfig = new SslServerAuthenticationOptions();
|
||||
sslConfig.ServerCertificate = options.Certificate;
|
||||
sslConfig.ApplicationProtocols = new List<SslApplicationProtocol>() { new SslApplicationProtocol(options.Alpn) };
|
||||
_listener = new QuicListener(QuicImplementationProviders.MsQuic, endpoint as IPEndPoint, sslConfig);
|
||||
|
||||
quicListenerOptions.ServerAuthenticationOptions = sslConfig;
|
||||
quicListenerOptions.CertificateFilePath = options.CertificateFilePath;
|
||||
quicListenerOptions.PrivateKeyFilePath = options.PrivateKeyFilePath;
|
||||
quicListenerOptions.ListenEndPoint = endpoint as IPEndPoint;
|
||||
|
||||
_listener = new QuicListener(QuicImplementationProviders.MsQuic, quicListenerOptions);
|
||||
_listener.Start();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Quic
|
|||
/// </summary>
|
||||
public X509Certificate2 Certificate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional path to certificate file to configure the security configuration.
|
||||
/// </summary>
|
||||
public string CertificateFilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional path to private key file to configure the security configuration.
|
||||
/// </summary>
|
||||
public string PrivateKeyFilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Sets the idle timeout for connections and streams.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,100 @@
|
|||
// 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.Buffers;
|
||||
using System.Collections.Generic;
|
||||
using System.IO.Pipelines;
|
||||
using System.Net.Http.HPack;
|
||||
using System.Threading.Tasks;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
public class Http2ConnectionBenchmark
|
||||
{
|
||||
private MemoryPool<byte> _memoryPool;
|
||||
private Pipe _pipe;
|
||||
private HttpRequestHeaders _httpRequestHeaders;
|
||||
private Http2Connection _connection;
|
||||
private Http2HeadersEnumerator _requestHeadersEnumerator;
|
||||
private int _currentStreamId;
|
||||
private byte[] _headersBuffer;
|
||||
|
||||
[GlobalSetup]
|
||||
public void GlobalSetup()
|
||||
{
|
||||
_memoryPool = SlabMemoryPoolFactory.Create();
|
||||
|
||||
var options = new PipeOptions(_memoryPool, readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false);
|
||||
_pipe = new Pipe(options);
|
||||
|
||||
_httpRequestHeaders = new HttpRequestHeaders();
|
||||
_httpRequestHeaders.Append(HeaderNames.Method, new StringValues("GET"));
|
||||
_httpRequestHeaders.Append(HeaderNames.Path, new StringValues("/"));
|
||||
_httpRequestHeaders.Append(HeaderNames.Scheme, new StringValues("http"));
|
||||
_httpRequestHeaders.Append(HeaderNames.Authority, new StringValues("localhost:80"));
|
||||
|
||||
_headersBuffer = new byte[1024 * 16];
|
||||
|
||||
var serviceContext = new ServiceContext
|
||||
{
|
||||
DateHeaderValueManager = new DateHeaderValueManager(),
|
||||
ServerOptions = new KestrelServerOptions(),
|
||||
Log = new KestrelTrace(NullLogger.Instance),
|
||||
SystemClock = new MockSystemClock()
|
||||
};
|
||||
serviceContext.ServerOptions.Limits.Http2.MaxStreamsPerConnection = int.MaxValue;
|
||||
serviceContext.DateHeaderValueManager.OnHeartbeat(default);
|
||||
|
||||
_connection = new Http2Connection(new HttpConnectionContext
|
||||
{
|
||||
MemoryPool = _memoryPool,
|
||||
ConnectionId = "TestConnectionId",
|
||||
Protocols = Core.HttpProtocols.Http2,
|
||||
Transport = new MockDuplexPipe(_pipe.Reader, new NullPipeWriter()),
|
||||
ServiceContext = serviceContext,
|
||||
ConnectionFeatures = new FeatureCollection(),
|
||||
TimeoutControl = new MockTimeoutControl(),
|
||||
});
|
||||
|
||||
_requestHeadersEnumerator = new Http2HeadersEnumerator();
|
||||
|
||||
_currentStreamId = 1;
|
||||
|
||||
_ = _connection.ProcessRequestsAsync(new DummyApplication());
|
||||
|
||||
_pipe.Writer.Write(Http2Connection.ClientPreface);
|
||||
_pipe.Writer.WriteSettings(new Http2PeerSettings());
|
||||
_pipe.Writer.FlushAsync().GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public async Task EmptyRequest()
|
||||
{
|
||||
_requestHeadersEnumerator.Initialize(_httpRequestHeaders);
|
||||
_requestHeadersEnumerator.MoveNext();
|
||||
_pipe.Writer.WriteStartStream(streamId: _currentStreamId, _requestHeadersEnumerator, _headersBuffer, endStream: true);
|
||||
_currentStreamId += 2;
|
||||
await _pipe.Writer.FlushAsync();
|
||||
}
|
||||
|
||||
[GlobalCleanup]
|
||||
public void Dispose()
|
||||
{
|
||||
_pipe.Writer.Complete();
|
||||
_memoryPool?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
// 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.Buffers;
|
||||
using System.IO.Pipelines;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.FlowControl;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
public class Http2FrameWriterBenchmark
|
||||
{
|
||||
private MemoryPool<byte> _memoryPool;
|
||||
private Pipe _pipe;
|
||||
private Http2FrameWriter _frameWriter;
|
||||
private HttpResponseHeaders _responseHeaders;
|
||||
|
||||
[GlobalSetup]
|
||||
public void GlobalSetup()
|
||||
{
|
||||
_memoryPool = SlabMemoryPoolFactory.Create();
|
||||
|
||||
var options = new PipeOptions(_memoryPool, readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false);
|
||||
_pipe = new Pipe(options);
|
||||
|
||||
_frameWriter = new Http2FrameWriter(
|
||||
new NullPipeWriter(),
|
||||
connectionContext: null,
|
||||
http2Connection: null,
|
||||
new OutputFlowControl(initialWindowSize: uint.MaxValue),
|
||||
timeoutControl: null,
|
||||
minResponseDataRate: null,
|
||||
"TestConnectionId",
|
||||
_memoryPool,
|
||||
new KestrelTrace(NullLogger.Instance));
|
||||
|
||||
_responseHeaders = new HttpResponseHeaders();
|
||||
_responseHeaders.HeaderContentType = "application/json";
|
||||
_responseHeaders.HeaderContentLength = "1024";
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public void WriteResponseHeaders()
|
||||
{
|
||||
_frameWriter.WriteResponseHeaders(0, 200, Http2HeadersFrameFlags.END_HEADERS, _responseHeaders);
|
||||
}
|
||||
|
||||
[GlobalCleanup]
|
||||
public void Dispose()
|
||||
{
|
||||
_pipe.Writer.Complete();
|
||||
_memoryPool?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
|
|
@ -10,6 +10,8 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(KestrelSharedSourceRoot)test\DummyApplication.cs" />
|
||||
<Compile Include="$(KestrelSharedSourceRoot)test\PipeWriterHttp2FrameExtensions.cs" />
|
||||
<Compile Include="$(RepoRoot)src\Shared\Buffers.MemoryPool\*.cs" LinkBase="MemoryPool" />
|
||||
<Compile Include="$(KestrelSharedSourceRoot)test\TestApplicationErrorLogger.cs" />
|
||||
<Compile Include="$(KestrelSharedSourceRoot)test\TestHttp1Connection.cs" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
// 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.IO.Pipelines;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
internal class MockDuplexPipe : IDuplexPipe
|
||||
{
|
||||
public MockDuplexPipe(PipeReader input, PipeWriter output)
|
||||
{
|
||||
Input = input;
|
||||
Output = output;
|
||||
}
|
||||
|
||||
public PipeReader Input { get; }
|
||||
public PipeWriter Output { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
// 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 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
internal class MockSystemClock : ISystemClock
|
||||
{
|
||||
public DateTimeOffset UtcNow { get; }
|
||||
public long UtcNowTicks { get; }
|
||||
public DateTimeOffset UtcNowUnsynchronized { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
// 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 Microsoft.AspNetCore.Server.Kestrel.Core;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.FlowControl;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
internal class MockTimeoutControl : ITimeoutControl
|
||||
{
|
||||
public TimeoutReason TimerReason { get; } = TimeoutReason.KeepAlive;
|
||||
|
||||
public void BytesRead(long count)
|
||||
{
|
||||
}
|
||||
|
||||
public void BytesWrittenToBuffer(MinDataRate minRate, long count)
|
||||
{
|
||||
}
|
||||
|
||||
public void CancelTimeout()
|
||||
{
|
||||
}
|
||||
|
||||
public void InitializeHttp2(InputFlowControl connectionInputFlowControl)
|
||||
{
|
||||
}
|
||||
|
||||
public void ResetTimeout(long ticks, TimeoutReason timeoutReason)
|
||||
{
|
||||
}
|
||||
|
||||
public void SetTimeout(long ticks, TimeoutReason timeoutReason)
|
||||
{
|
||||
}
|
||||
|
||||
public void StartRequestBody(MinDataRate minRate)
|
||||
{
|
||||
}
|
||||
|
||||
public void StartTimingRead()
|
||||
{
|
||||
}
|
||||
|
||||
public void StartTimingWrite()
|
||||
{
|
||||
}
|
||||
|
||||
public void StopRequestBody()
|
||||
{
|
||||
}
|
||||
|
||||
public void StopTimingRead()
|
||||
{
|
||||
}
|
||||
|
||||
public void StopTimingWrite()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
// 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.IO.Pipelines;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
internal class NullPipeWriter : PipeWriter
|
||||
{
|
||||
// Should be large enough for any content attempting to write to the buffer
|
||||
private readonly byte[] _buffer = new byte[1024 * 128];
|
||||
|
||||
public override void Advance(int bytes)
|
||||
{
|
||||
}
|
||||
|
||||
public override void CancelPendingFlush()
|
||||
{
|
||||
}
|
||||
|
||||
public override void Complete(Exception exception = null)
|
||||
{
|
||||
}
|
||||
|
||||
public override ValueTask<FlushResult> FlushAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
return new ValueTask<FlushResult>(new FlushResult(false, true));
|
||||
}
|
||||
|
||||
public override Memory<byte> GetMemory(int sizeHint = 0)
|
||||
{
|
||||
return _buffer;
|
||||
}
|
||||
|
||||
public override Span<byte> GetSpan(int sizeHint = 0)
|
||||
{
|
||||
return _buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -38,4 +38,4 @@
|
|||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ namespace CodeGenerator
|
|||
{
|
||||
var requestPrimaryHeaders = new[]
|
||||
{
|
||||
":authority",
|
||||
":method",
|
||||
":path",
|
||||
":scheme",
|
||||
"Accept",
|
||||
"Connection",
|
||||
"Host",
|
||||
|
|
@ -72,6 +76,10 @@ namespace CodeGenerator
|
|||
};
|
||||
RequestHeaders = commonHeaders.Concat(new[]
|
||||
{
|
||||
":authority",
|
||||
":method",
|
||||
":path",
|
||||
":scheme",
|
||||
"Accept",
|
||||
"Accept-Charset",
|
||||
"Accept-Encoding",
|
||||
|
|
@ -247,7 +255,7 @@ namespace CodeGenerator
|
|||
{
|
||||
public string Name { get; set; }
|
||||
public int Index { get; set; }
|
||||
public string Identifier => Name.Replace("-", "");
|
||||
public string Identifier => ResolveIdentifier(Name);
|
||||
|
||||
public byte[] Bytes => Encoding.ASCII.GetBytes($"\r\n{Name}: ");
|
||||
public int BytesOffset { get; set; }
|
||||
|
|
@ -264,6 +272,21 @@ namespace CodeGenerator
|
|||
public string SetBit() => $"_bits |= {"0x" + (1L << Index).ToString("x")}L";
|
||||
public string ClearBit() => $"_bits &= ~{"0x" + (1L << Index).ToString("x")}L";
|
||||
|
||||
private string ResolveIdentifier(string name)
|
||||
{
|
||||
var identifer = name.Replace("-", "");
|
||||
|
||||
// Pseudo headers start with a colon. A colon isn't valid in C# names so
|
||||
// remove it and pascal case the header name. e.g. :path -> Path, :scheme -> Scheme.
|
||||
// This identifier will match the names in HeadersNames.cs
|
||||
if (identifer.StartsWith(':'))
|
||||
{
|
||||
identifer = char.ToUpper(identifer[1]) + identifer.Substring(2);
|
||||
}
|
||||
|
||||
return identifer;
|
||||
}
|
||||
|
||||
private void GetMaskAndComp(string name, int offset, int count, out ulong mask, out ulong comp)
|
||||
{
|
||||
mask = 0;
|
||||
|
|
@ -539,6 +562,9 @@ namespace CodeGenerator
|
|||
|
||||
var responseTrailers = ResponseTrailers;
|
||||
|
||||
var allHeaderNames = RequestHeaders.Concat(ResponseHeaders).Concat(ResponseTrailers)
|
||||
.Select(h => h.Identifier).Distinct().OrderBy(n => n).ToArray();
|
||||
|
||||
var loops = new[]
|
||||
{
|
||||
new
|
||||
|
|
@ -589,6 +615,11 @@ using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
|
|||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
||||
{{
|
||||
internal enum KnownHeaderType
|
||||
{{
|
||||
Unknown,{Each(allHeaderNames, n => @"
|
||||
" + n + ",")}
|
||||
}}
|
||||
{Each(loops, loop => $@"
|
||||
internal partial class {loop.ClassName}
|
||||
{{{(loop.Bytes != null ?
|
||||
|
|
@ -1035,6 +1066,7 @@ $@" private void Clear(long bitsToClear)
|
|||
if ({header.TestBit()})
|
||||
{{
|
||||
_current = new KeyValuePair<string, StringValues>(HeaderNames.{header.Identifier}, _collection._headers._{header.Identifier});
|
||||
_currentKnownType = KnownHeaderType.{header.Identifier};
|
||||
_next = {header.Index + 1};
|
||||
return true;
|
||||
}}")}
|
||||
|
|
@ -1042,6 +1074,7 @@ $@" private void Clear(long bitsToClear)
|
|||
if (_collection._contentLength.HasValue)
|
||||
{{
|
||||
_current = new KeyValuePair<string, StringValues>(HeaderNames.ContentLength, HeaderUtilities.FormatNonNegativeInt64(_collection._contentLength.Value));
|
||||
_currentKnownType = KnownHeaderType.ContentLength;
|
||||
_next = {loop.Headers.Count()};
|
||||
return true;
|
||||
}}" : "")}
|
||||
|
|
@ -1049,9 +1082,11 @@ $@" private void Clear(long bitsToClear)
|
|||
if (!_hasUnknown || !_unknownEnumerator.MoveNext())
|
||||
{{
|
||||
_current = default(KeyValuePair<string, StringValues>);
|
||||
_currentKnownType = default;
|
||||
return false;
|
||||
}}
|
||||
_current = _unknownEnumerator.Current;
|
||||
_currentKnownType = KnownHeaderType.Unknown;
|
||||
return true;
|
||||
}}
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,94 @@
|
|||
// 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.Buffers;
|
||||
using System.Collections.Generic;
|
||||
using System.IO.Pipelines;
|
||||
using System.Net.Http.HPack;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2;
|
||||
|
||||
namespace Microsoft.AspNetCore.Testing
|
||||
{
|
||||
internal static class PipeWriterHttp2FrameExtensions
|
||||
{
|
||||
public static void WriteSettings(this PipeWriter writer, Http2PeerSettings clientSettings)
|
||||
{
|
||||
var frame = new Http2Frame();
|
||||
frame.PrepareSettings(Http2SettingsFrameFlags.NONE);
|
||||
var settings = clientSettings.GetNonProtocolDefaults();
|
||||
var payload = new byte[settings.Count * Http2FrameReader.SettingSize];
|
||||
frame.PayloadLength = payload.Length;
|
||||
Http2FrameWriter.WriteSettings(settings, payload);
|
||||
Http2FrameWriter.WriteHeader(frame, writer);
|
||||
writer.Write(payload);
|
||||
}
|
||||
|
||||
public static void WriteStartStream(this PipeWriter writer, int streamId, Http2HeadersEnumerator headers, byte[] headerEncodingBuffer, bool endStream)
|
||||
{
|
||||
var frame = new Http2Frame();
|
||||
frame.PrepareHeaders(Http2HeadersFrameFlags.NONE, streamId);
|
||||
|
||||
var buffer = headerEncodingBuffer.AsSpan();
|
||||
var done = HPackHeaderWriter.BeginEncodeHeaders(headers, buffer, out var length);
|
||||
frame.PayloadLength = length;
|
||||
|
||||
if (done)
|
||||
{
|
||||
frame.HeadersFlags = Http2HeadersFrameFlags.END_HEADERS;
|
||||
}
|
||||
|
||||
if (endStream)
|
||||
{
|
||||
frame.HeadersFlags |= Http2HeadersFrameFlags.END_STREAM;
|
||||
}
|
||||
|
||||
Http2FrameWriter.WriteHeader(frame, writer);
|
||||
writer.Write(buffer.Slice(0, length));
|
||||
|
||||
while (!done)
|
||||
{
|
||||
frame.PrepareContinuation(Http2ContinuationFrameFlags.NONE, streamId);
|
||||
|
||||
done = HPackHeaderWriter.ContinueEncodeHeaders(headers, buffer, out length);
|
||||
frame.PayloadLength = length;
|
||||
|
||||
if (done)
|
||||
{
|
||||
frame.ContinuationFlags = Http2ContinuationFrameFlags.END_HEADERS;
|
||||
}
|
||||
|
||||
Http2FrameWriter.WriteHeader(frame, writer);
|
||||
writer.Write(buffer.Slice(0, length));
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteStartStream(this PipeWriter writer, int streamId, Span<byte> headerData, bool endStream)
|
||||
{
|
||||
var frame = new Http2Frame();
|
||||
frame.PrepareHeaders(Http2HeadersFrameFlags.NONE, streamId);
|
||||
frame.PayloadLength = headerData.Length;
|
||||
frame.HeadersFlags = Http2HeadersFrameFlags.END_HEADERS;
|
||||
|
||||
if (endStream)
|
||||
{
|
||||
frame.HeadersFlags |= Http2HeadersFrameFlags.END_STREAM;
|
||||
}
|
||||
|
||||
Http2FrameWriter.WriteHeader(frame, writer);
|
||||
writer.Write(headerData);
|
||||
}
|
||||
|
||||
public static void WriteData(this PipeWriter writer, int streamId, Memory<byte> data, bool endStream)
|
||||
{
|
||||
var frame = new Http2Frame();
|
||||
|
||||
frame.PrepareData(streamId);
|
||||
frame.PayloadLength = data.Length;
|
||||
frame.DataFlags = endStream ? Http2DataFrameFlags.END_STREAM : Http2DataFrameFlags.NONE;
|
||||
|
||||
Http2FrameWriter.WriteHeader(frame, writer);
|
||||
writer.Write(data.Span);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -100,7 +100,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[MemberData(nameof(IPEndPointRegistrationDataDynamicPort))]
|
||||
[IPv6SupportedCondition]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2074", FlakyOn.AzP.macOS)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2074")]
|
||||
public async Task RegisterIPEndPoint_DynamicPort_Success(IPEndPoint endPoint, string testUrl)
|
||||
{
|
||||
await RegisterIPEndPoint_Success(endPoint, testUrl);
|
||||
|
|
@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[MemberData(nameof(IPEndPointRegistrationDataPort443))]
|
||||
[IPv6SupportedCondition]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2711", FlakyOn.AzP.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2711")]
|
||||
public async Task RegisterIPEndPoint_Port443_Success(IPEndPoint endpoint, string testUrl)
|
||||
{
|
||||
if (!CanBindToEndpoint(endpoint.Address, 443))
|
||||
|
|
@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[MemberData(nameof(AddressRegistrationDataIPv6Port5000Default))]
|
||||
[IPv6SupportedCondition]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2711", FlakyOn.AzP.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2711")]
|
||||
public async Task RegisterAddresses_IPv6Port5000Default_Success(string addressInput, string[] testUrls)
|
||||
{
|
||||
if (!CanBindToEndpoint(IPAddress.Loopback, 5000) || !CanBindToEndpoint(IPAddress.IPv6Loopback, 5000))
|
||||
|
|
@ -145,7 +145,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
[ConditionalTheory]
|
||||
[MemberData(nameof(AddressRegistrationDataIPv6Port80))]
|
||||
[IPv6SupportedCondition]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2711", FlakyOn.AzP.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2711")]
|
||||
public async Task RegisterAddresses_IPv6Port80_Success(string addressInput, string[] testUrls)
|
||||
{
|
||||
if (!CanBindToEndpoint(IPAddress.Loopback, 80) || !CanBindToEndpoint(IPAddress.IPv6Loopback, 80))
|
||||
|
|
@ -157,7 +157,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2179", FlakyOn.Helix.All)]
|
||||
[QuarantinedTest("https://github.com/dotnet/aspnetcore-internal/issues/2179")]
|
||||
[MemberData(nameof(AddressRegistrationDataIPv6ScopeId))]
|
||||
[IPv6SupportedCondition]
|
||||
[IPv6ScopeIdPresentCondition]
|
||||
|
|
@ -596,7 +596,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[Flaky("https://github.com/dotnet/aspnetcore-internal/issues/2178", FlakyOn.All)]
|
||||
public async Task DoesNotOverrideDirectConfigurationWithIServerAddressesFeature_IfPreferHostingUrlsFalse()
|
||||
{
|
||||
var useUrlsAddress = $"http://127.0.0.1:0";
|
||||
|
|
@ -881,7 +880,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
var exception = Assert.Throws<IOException>(() => host.Start());
|
||||
|
||||
var thisAddressString = $"http://{(addressFamily == AddressFamily.InterNetwork ? "127.0.0.1" : "[::1]")}:{port}";
|
||||
var otherAddressString = $"http://{(addressFamily == AddressFamily.InterNetworkV6? "127.0.0.1" : "[::1]")}:{port}";
|
||||
var otherAddressString = $"http://{(addressFamily == AddressFamily.InterNetworkV6 ? "127.0.0.1" : "[::1]")}:{port}";
|
||||
|
||||
if (exception.Message == CoreStrings.FormatEndpointAlreadyInUse(otherAddressString))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
|||
{
|
||||
public class ConnectionMiddlewareTests : LoggedTest
|
||||
{
|
||||
[Flaky("<No longer needed; tracked in Kusto>", FlakyOn.All)]
|
||||
[Fact]
|
||||
public async Task ThrowingSynchronousConnectionMiddlewareDoesNotCrashServer()
|
||||
{
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue