Merge branch 'master' into 'merge/release/3.1-to-master'

This commit is contained in:
Doug Bunting 2019-09-18 17:10:04 -07:00
commit 693d39d495
No known key found for this signature in database
GPG Key ID: EE41520987982C03
55 changed files with 1167 additions and 543 deletions

View File

@ -16,7 +16,8 @@
<IsPackable Condition="'$(IsAspNetCoreApp)' == 'true' AND '$(IsShippingPackage)' != 'true'">false</IsPackable> <IsPackable Condition="'$(IsAspNetCoreApp)' == 'true' AND '$(IsShippingPackage)' != 'true'">false</IsPackable>
<!-- Only build assemblies in Microsoft.AspNetCore.App in source build --> <!-- Only build assemblies in Microsoft.AspNetCore.App in source build -->
<ExcludeFromSourceBuild Condition="'$(ExcludeFromSourceBuild)' == '' and '$(DotNetBuildFromSource)' == 'true' and '$(IsAspNetCoreApp)' != 'true'">true</ExcludeFromSourceBuild> <!-- Analyzer package are needed in source build for WebSDK -->
<ExcludeFromSourceBuild Condition="'$(ExcludeFromSourceBuild)' == '' and '$(DotNetBuildFromSource)' == 'true' and '$(IsAspNetCoreApp)' != 'true' and '$(IsAnalyzersProject)' != 'true'">true</ExcludeFromSourceBuild>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Resx settings"> <PropertyGroup Label="Resx settings">

View File

@ -154,6 +154,10 @@ and are generated based on the last package release.
<LatestPackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildUtilitiesCorePackageVersion)" /> <LatestPackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildUtilitiesCorePackageVersion)" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="External dependencies available in source build" >
<LatestPackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonPackageVersion)" />
</ItemGroup>
<ItemGroup Label="External dependencies" Condition="'$(DotNetBuildFromSource)' != 'true'"> <ItemGroup Label="External dependencies" Condition="'$(DotNetBuildFromSource)' != 'true'">
<LatestPackageReference Include="AngleSharp" Version="$(AngleSharpPackageVersion)" /> <LatestPackageReference Include="AngleSharp" Version="$(AngleSharpPackageVersion)" />
<LatestPackageReference Include="BenchmarkDotNet" Version="$(BenchmarkDotNetPackageVersion)" /> <LatestPackageReference Include="BenchmarkDotNet" Version="$(BenchmarkDotNetPackageVersion)" />
@ -171,7 +175,6 @@ and are generated based on the last package release.
<LatestPackageReference Include="Mono.Cecil" Version="$(MonoCecilPackageVersion)" /> <LatestPackageReference Include="Mono.Cecil" Version="$(MonoCecilPackageVersion)" />
<LatestPackageReference Include="Mono.WebAssembly.Interop" Version="$(MonoWebAssemblyInteropPackageVersion)" /> <LatestPackageReference Include="Mono.WebAssembly.Interop" Version="$(MonoWebAssemblyInteropPackageVersion)" />
<LatestPackageReference Include="Moq" Version="$(MoqPackageVersion)" /> <LatestPackageReference Include="Moq" Version="$(MoqPackageVersion)" />
<LatestPackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonPackageVersion)" />
<LatestPackageReference Include="Newtonsoft.Json.Bson" Version="$(NewtonsoftJsonBsonPackageVersion)" /> <LatestPackageReference Include="Newtonsoft.Json.Bson" Version="$(NewtonsoftJsonBsonPackageVersion)" />
<LatestPackageReference Include="NSwag.ApiDescription.Client" Version="$(NSwagApiDescriptionClientPackageVersion)" /> <LatestPackageReference Include="NSwag.ApiDescription.Client" Version="$(NSwagApiDescriptionClientPackageVersion)" />
<LatestPackageReference Include="Selenium.Support" Version="$(SeleniumSupportPackageVersion)" /> <LatestPackageReference Include="Selenium.Support" Version="$(SeleniumSupportPackageVersion)" />

View File

@ -105,10 +105,11 @@
<FileSignInfo Include="Microsoft.Build.Locator.dll" CertificateName="None" /> <FileSignInfo Include="Microsoft.Build.Locator.dll" CertificateName="None" />
<!-- <!--
We include the Microsoft.Data.SqlClient.dll assembly in our global tool 'dotnet-sql-cache'. We include the Microsoft.Data.SqlClient.dll and Microsoft.Identity.Client.dll assembly in our global tool 'dotnet-sql-cache'.
It is already signed by that team, so we don't need to sign it. It is already signed by that team, so we don't need to sign it.
--> -->
<FileSignInfo Include="Microsoft.Data.SqlClient.dll" CertificateName="None" /> <FileSignInfo Include="Microsoft.Data.SqlClient.dll" CertificateName="None" />
<FileSignInfo Include="Microsoft.Identity.Client.dll" CertificateName="None" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -9,408 +9,412 @@
--> -->
<Dependencies> <Dependencies>
<ProductDependencies> <ProductDependencies>
<Dependency Name="Microsoft.AspNetCore.Blazor.Mono" Version="5.0.0-alpha1.19426.2"> <Dependency Name="Microsoft.AspNetCore.Blazor.Mono" Version="5.0.0-alpha1.19463.2">
<Uri>https://github.com/aspnet/Blazor</Uri> <Uri>https://github.com/aspnet/Blazor</Uri>
<Sha>7eeab316fa122b69a9bd777c93dcc78bc6a68905</Sha> <Sha>f5d0da88db7b29207fc005a7478bf0b9b6fc9fc9</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-alpha1.19428.3"> <Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-alpha1.19467.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>64d85fe81e8f5ea374e7783318bd094604fa7ae9</Sha> <Sha>01db467df0350147bbf04f80f8c16033c23a4b4a</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-alpha1.19428.3"> <Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-alpha1.19467.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>64d85fe81e8f5ea374e7783318bd094604fa7ae9</Sha> <Sha>01db467df0350147bbf04f80f8c16033c23a4b4a</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-alpha1.19428.3"> <Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-alpha1.19467.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>64d85fe81e8f5ea374e7783318bd094604fa7ae9</Sha> <Sha>01db467df0350147bbf04f80f8c16033c23a4b4a</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-alpha1.19428.3"> <Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-alpha1.19467.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>64d85fe81e8f5ea374e7783318bd094604fa7ae9</Sha> <Sha>01db467df0350147bbf04f80f8c16033c23a4b4a</Sha>
</Dependency> </Dependency>
<Dependency Name="dotnet-ef" Version="5.0.0-alpha1.19428.1"> <Dependency Name="dotnet-ef" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-alpha1.19428.1"> <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-alpha1.19428.1"> <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-alpha1.19428.1"> <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-alpha1.19428.1"> <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-alpha1.19428.1"> <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-alpha1.19428.1"> <Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-alpha1.19467.7">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>ff13800c0774c936734ca070410f05299e896346</Sha> <Sha>0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Localization" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Localization" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ObjectPool" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.WebEncoders" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.JSInterop" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.JSInterop" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Mono.WebAssembly.Interop" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Mono.WebAssembly.Interop" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.2.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.2.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.CSharp" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.CSharp" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64" Pinned="true">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Drawing.Common" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.IO.Pipelines" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Drawing.Common" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.IO.Pipelines" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Reflection.Metadata" Version="1.9.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Reflection.Metadata" Version="1.9.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Permissions" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Permissions" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Security.Principal.Windows" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Text.Json" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Text.Encodings.Web" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Threading.Channels" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Text.Json" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="System.Windows.Extensions" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="System.Threading.Channels" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-alpha1.19425.8" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="System.Windows.Extensions" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-alpha1.19465.2" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>70a3592bd46540bd596f95db4469c040018aa249</Sha> <Sha>9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-alpha1.19425.8" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-alpha1.19465.2" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>70a3592bd46540bd596f95db4469c040018aa249</Sha> <Sha>9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46</Sha>
</Dependency> </Dependency>
<!-- <!--
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime. Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
All Runtime.$rid packages should have the same version. All Runtime.$rid packages should have the same version.
--> -->
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-alpha1.19425.8" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-alpha1.19465.2" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>70a3592bd46540bd596f95db4469c040018aa249</Sha> <Sha>9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46</Sha>
</Dependency> </Dependency>
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-alpha1.19425.8" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="NETStandard.Library.Ref" Version="2.1.0-alpha1.19465.2" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>70a3592bd46540bd596f95db4469c040018aa249</Sha> <Sha>9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46</Sha>
</Dependency> </Dependency>
</ProductDependencies> </ProductDependencies>
<ToolsetDependencies> <ToolsetDependencies>
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 --> <!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-alpha1.19425.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-alpha1.19462.7" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>ba50ba15d0747d5be1e8bd38ea03a5ba892314bd</Sha> <Sha>be3d4bad4576eecda116d3e9a368cd6959ecf5ce</Sha>
</Dependency> </Dependency>
<Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19425.1"> <Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19425.1">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
@ -424,13 +428,13 @@
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>2de3acc671fc624191672a45564f9ef130af5cd4</Sha> <Sha>2de3acc671fc624191672a45564f9ef130af5cd4</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="5.0.0-alpha1.19427.4" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.Testing" Version="5.0.0-alpha1.19466.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>d8590b1c03f6fcb1adfe667bd81b4407b39f71c7</Sha> <Sha>3702cd2801d0459663bccebe6ae63054748b8589</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.4.0-beta1-19424-01" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.4.0-beta1-19456-03" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/roslyn</Uri> <Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>a36dcccf259ceec904a36b381085d2d940d80ea0</Sha> <Sha>3c865821f2864393a0ff7fe22c92ded6d51a546c</Sha>
</Dependency> </Dependency>
</ToolsetDependencies> </ToolsetDependencies>
</Dependencies> </Dependencies>

View File

@ -52,114 +52,114 @@
<!-- Packages from dotnet/arcade --> <!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19425.1</MicrosoftDotNetGenAPIPackageVersion> <MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19425.1</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/roslyn --> <!-- Packages from dotnet/roslyn -->
<MicrosoftNetCompilersToolsetPackageVersion>3.4.0-beta1-19424-01</MicrosoftNetCompilersToolsetPackageVersion> <MicrosoftNetCompilersToolsetPackageVersion>3.4.0-beta1-19456-03</MicrosoftNetCompilersToolsetPackageVersion>
<!-- Packages from dotnet/core-setup --> <!-- Packages from dotnet/core-setup -->
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-alpha1.19425.8</MicrosoftExtensionsDependencyModelPackageVersion> <MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-alpha1.19465.2</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-alpha1.19425.8</MicrosoftNETCoreAppRefPackageVersion> <MicrosoftNETCoreAppRefPackageVersion>5.0.0-alpha1.19465.2</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-alpha1.19425.8</MicrosoftNETCoreAppRuntimewinx64PackageVersion> <MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-alpha1.19465.2</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0-alpha1.19425.8</NETStandardLibraryRefPackageVersion> <NETStandardLibraryRefPackageVersion>2.1.0-alpha1.19465.2</NETStandardLibraryRefPackageVersion>
<!-- Packages from dotnet/corefx --> <!-- Packages from dotnet/corefx -->
<MicrosoftBclAsyncInterfacesPackageVersion>1.2.0-alpha1.19425.4</MicrosoftBclAsyncInterfacesPackageVersion> <MicrosoftBclAsyncInterfacesPackageVersion>1.2.0-alpha1.19462.7</MicrosoftBclAsyncInterfacesPackageVersion>
<MicrosoftCSharpPackageVersion>5.0.0-alpha1.19425.4</MicrosoftCSharpPackageVersion> <MicrosoftCSharpPackageVersion>5.0.0-alpha1.19462.7</MicrosoftCSharpPackageVersion>
<MicrosoftWin32RegistryPackageVersion>5.0.0-alpha1.19425.4</MicrosoftWin32RegistryPackageVersion> <MicrosoftWin32RegistryPackageVersion>5.0.0-alpha1.19462.7</MicrosoftWin32RegistryPackageVersion>
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-alpha1.19425.4</MicrosoftWin32SystemEventsPackageVersion> <MicrosoftWin32SystemEventsPackageVersion>5.0.0-alpha1.19462.7</MicrosoftWin32SystemEventsPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>5.0.0-alpha1.19425.4</SystemComponentModelAnnotationsPackageVersion> <SystemComponentModelAnnotationsPackageVersion>5.0.0-alpha1.19462.7</SystemComponentModelAnnotationsPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>5.0.0-alpha1.19425.4</SystemDiagnosticsEventLogPackageVersion> <SystemDiagnosticsEventLogPackageVersion>5.0.0-alpha1.19462.7</SystemDiagnosticsEventLogPackageVersion>
<SystemDrawingCommonPackageVersion>5.0.0-alpha1.19425.4</SystemDrawingCommonPackageVersion> <SystemDrawingCommonPackageVersion>5.0.0-alpha1.19462.7</SystemDrawingCommonPackageVersion>
<SystemIOPipelinesPackageVersion>5.0.0-alpha1.19425.4</SystemIOPipelinesPackageVersion> <SystemIOPipelinesPackageVersion>5.0.0-alpha1.19462.7</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-alpha1.19425.4</SystemNetHttpWinHttpHandlerPackageVersion> <SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-alpha1.19462.7</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-alpha1.19425.4</SystemNetWebSocketsWebSocketProtocolPackageVersion> <SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-alpha1.19462.7</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>1.9.0-alpha1.19425.4</SystemReflectionMetadataPackageVersion> <SystemReflectionMetadataPackageVersion>1.9.0-alpha1.19462.7</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-alpha1.19425.4</SystemRuntimeCompilerServicesUnsafePackageVersion> <SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-alpha1.19462.7</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>5.0.0-alpha1.19425.4</SystemSecurityCryptographyCngPackageVersion> <SystemSecurityCryptographyCngPackageVersion>5.0.0-alpha1.19462.7</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-alpha1.19425.4</SystemSecurityCryptographyPkcsPackageVersion> <SystemSecurityCryptographyPkcsPackageVersion>5.0.0-alpha1.19462.7</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-alpha1.19425.4</SystemSecurityCryptographyXmlPackageVersion> <SystemSecurityCryptographyXmlPackageVersion>5.0.0-alpha1.19462.7</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>5.0.0-alpha1.19425.4</SystemSecurityPermissionsPackageVersion> <SystemSecurityPermissionsPackageVersion>5.0.0-alpha1.19462.7</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-alpha1.19425.4</SystemSecurityPrincipalWindowsPackageVersion> <SystemSecurityPrincipalWindowsPackageVersion>5.0.0-alpha1.19462.7</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-alpha1.19425.4</SystemServiceProcessServiceControllerPackageVersion> <SystemServiceProcessServiceControllerPackageVersion>5.0.0-alpha1.19462.7</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>5.0.0-alpha1.19425.4</SystemTextEncodingsWebPackageVersion> <SystemTextEncodingsWebPackageVersion>5.0.0-alpha1.19462.7</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>5.0.0-alpha1.19425.4</SystemTextJsonPackageVersion> <SystemTextJsonPackageVersion>5.0.0-alpha1.19462.7</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>5.0.0-alpha1.19425.4</SystemThreadingChannelsPackageVersion> <SystemThreadingChannelsPackageVersion>5.0.0-alpha1.19462.7</SystemThreadingChannelsPackageVersion>
<SystemWindowsExtensionsPackageVersion>5.0.0-alpha1.19425.4</SystemWindowsExtensionsPackageVersion> <SystemWindowsExtensionsPackageVersion>5.0.0-alpha1.19462.7</SystemWindowsExtensionsPackageVersion>
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 --> <!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-alpha1.19425.4</MicrosoftNETCorePlatformsPackageVersion> <MicrosoftNETCorePlatformsPackageVersion>5.0.0-alpha1.19462.7</MicrosoftNETCorePlatformsPackageVersion>
<!-- Packages from aspnet/Blazor --> <!-- Packages from aspnet/Blazor -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>5.0.0-alpha1.19426.2</MicrosoftAspNetCoreBlazorMonoPackageVersion> <MicrosoftAspNetCoreBlazorMonoPackageVersion>5.0.0-alpha1.19463.2</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from aspnet/Extensions --> <!-- Packages from aspnet/Extensions -->
<InternalAspNetCoreAnalyzersPackageVersion>5.0.0-alpha1.19427.4</InternalAspNetCoreAnalyzersPackageVersion> <InternalAspNetCoreAnalyzersPackageVersion>5.0.0-alpha1.19466.1</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-alpha1.19427.4</MicrosoftAspNetCoreAnalyzerTestingPackageVersion> <MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-alpha1.19466.1</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion> <MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>5.0.0-alpha1.19427.4</MicrosoftAspNetCoreTestingPackageVersion> <MicrosoftAspNetCoreTestingPackageVersion>5.0.0-alpha1.19466.1</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion> <MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsCachingAbstractionsPackageVersion> <MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsCachingMemoryPackageVersion> <MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsCachingSqlServerPackageVersion> <MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion> <MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion> <MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationAbstractionsPackageVersion> <MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion> <MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationBinderPackageVersion> <MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationCommandLinePackageVersion> <MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion> <MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion> <MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationIniPackageVersion> <MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationJsonPackageVersion> <MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion> <MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationPackageVersion> <MicrosoftExtensionsConfigurationPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationUserSecretsPackageVersion> <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsConfigurationXmlPackageVersion> <MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion> <MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsDependencyInjectionPackageVersion> <MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsDiagnosticAdapterPackageVersion> <MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion> <MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion> <MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion> <MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsFileProvidersCompositePackageVersion> <MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion> <MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsFileProvidersPhysicalPackageVersion> <MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsFileSystemGlobbingPackageVersion> <MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion> <MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsHostingAbstractionsPackageVersion> <MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsHostingPackageVersion> <MicrosoftExtensionsHostingPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion> <MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsHttpPackageVersion> <MicrosoftExtensionsHttpPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLocalizationAbstractionsPackageVersion> <MicrosoftExtensionsLocalizationAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLocalizationPackageVersion> <MicrosoftExtensionsLocalizationPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingAbstractionsPackageVersion> <MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion> <MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingConfigurationPackageVersion> <MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingConsolePackageVersion> <MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingDebugPackageVersion> <MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingEventSourcePackageVersion> <MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingEventLogPackageVersion> <MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingPackageVersion> <MicrosoftExtensionsLoggingPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingTestingPackageVersion> <MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsLoggingTraceSourcePackageVersion> <MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsObjectPoolPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsObjectPoolPackageVersion> <MicrosoftExtensionsObjectPoolPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsObjectPoolPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion> <MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion> <MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsOptionsPackageVersion> <MicrosoftExtensionsOptionsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion> <MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsPrimitivesPackageVersion> <MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion> <MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsValueStopwatchSourcesPackageVersion> <MicrosoftExtensionsValueStopwatchSourcesPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>5.0.0-alpha1.19427.4</MicrosoftExtensionsWebEncodersPackageVersion> <MicrosoftExtensionsWebEncodersPackageVersion>5.0.0-alpha1.19466.1</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-alpha1.19427.4</MicrosoftInternalExtensionsRefsPackageVersion> <MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-alpha1.19466.1</MicrosoftInternalExtensionsRefsPackageVersion>
<MicrosoftJSInteropPackageVersion>5.0.0-alpha1.19427.4</MicrosoftJSInteropPackageVersion> <MicrosoftJSInteropPackageVersion>5.0.0-alpha1.19466.1</MicrosoftJSInteropPackageVersion>
<MonoWebAssemblyInteropPackageVersion>5.0.0-alpha1.19427.4</MonoWebAssemblyInteropPackageVersion> <MonoWebAssemblyInteropPackageVersion>5.0.0-alpha1.19466.1</MonoWebAssemblyInteropPackageVersion>
<!-- Packages from aspnet/EntityFrameworkCore --> <!-- Packages from aspnet/EntityFrameworkCore -->
<dotnetefPackageVersion>5.0.0-alpha1.19428.1</dotnetefPackageVersion> <dotnetefPackageVersion>5.0.0-alpha1.19467.7</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-alpha1.19428.1</MicrosoftEntityFrameworkCoreInMemoryPackageVersion> <MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-alpha1.19467.7</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-alpha1.19428.1</MicrosoftEntityFrameworkCoreRelationalPackageVersion> <MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-alpha1.19467.7</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-alpha1.19428.1</MicrosoftEntityFrameworkCoreSqlitePackageVersion> <MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-alpha1.19467.7</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-alpha1.19428.1</MicrosoftEntityFrameworkCoreSqlServerPackageVersion> <MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-alpha1.19467.7</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-alpha1.19428.1</MicrosoftEntityFrameworkCoreToolsPackageVersion> <MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-alpha1.19467.7</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-alpha1.19428.1</MicrosoftEntityFrameworkCorePackageVersion> <MicrosoftEntityFrameworkCorePackageVersion>5.0.0-alpha1.19467.7</MicrosoftEntityFrameworkCorePackageVersion>
<!-- Packages from aspnet/AspNetCore-Tooling --> <!-- Packages from aspnet/AspNetCore-Tooling -->
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-alpha1.19428.3</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion> <MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-alpha1.19467.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-alpha1.19428.3</MicrosoftAspNetCoreRazorLanguagePackageVersion> <MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-alpha1.19467.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-alpha1.19428.3</MicrosoftCodeAnalysisRazorPackageVersion> <MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-alpha1.19467.1</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>5.0.0-alpha1.19428.3</MicrosoftNETSdkRazorPackageVersion> <MicrosoftNETSdkRazorPackageVersion>5.0.0-alpha1.19467.1</MicrosoftNETSdkRazorPackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- <!--

View File

@ -1,9 +1,9 @@
param ( param (
$darcVersion = $null, $darcVersion = $null,
$versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" $versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16",
$verbosity = "m"
) )
$verbosity = "m"
. $PSScriptRoot\tools.ps1 . $PSScriptRoot\tools.ps1
function InstallDarcCli ($darcVersion) { function InstallDarcCli ($darcVersion) {

View File

@ -3,6 +3,7 @@
source="${BASH_SOURCE[0]}" source="${BASH_SOURCE[0]}"
darcVersion='' darcVersion=''
versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16"
verbosity=m
while [[ $# > 0 ]]; do while [[ $# > 0 ]]; do
opt="$(echo "$1" | awk '{print tolower($0)}')" opt="$(echo "$1" | awk '{print tolower($0)}')"
@ -15,6 +16,10 @@ while [[ $# > 0 ]]; do
versionEndpoint=$2 versionEndpoint=$2
shift shift
;; ;;
--verbosity)
verbosity=$2
shift
;;
*) *)
echo "Invalid argument: $1" echo "Invalid argument: $1"
usage usage
@ -34,7 +39,6 @@ while [[ -h "$source" ]]; do
[[ $source != /* ]] && source="$scriptroot/$source" [[ $source != /* ]] && source="$scriptroot/$source"
done done
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
verbosity=m
. "$scriptroot/tools.sh" . "$scriptroot/tools.sh"

View File

@ -152,6 +152,8 @@ function Get-File {
} }
else { else {
Write-Verbose "Downloading $Uri" Write-Verbose "Downloading $Uri"
# Don't display the console progress UI - it's a huge perf hit
$ProgressPreference = 'SilentlyContinue'
while($Attempt -Lt $DownloadRetries) while($Attempt -Lt $DownloadRetries)
{ {
try { try {

View File

@ -37,10 +37,10 @@ function FirstMatchingSymbolDescriptionOrDefault {
# DWARF file for a .dylib # DWARF file for a .dylib
$DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf") $DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf")
$dotnetsymbolExe = "$env:USERPROFILE\.dotnet\tools" $dotnetSymbolExe = "$env:USERPROFILE\.dotnet\tools"
$dotnetsymbolExe = Resolve-Path "$dotnetsymbolExe\dotnet-symbol.exe" $dotnetSymbolExe = Resolve-Path "$dotnetSymbolExe\dotnet-symbol.exe"
& $dotnetsymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null & $dotnetSymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null
if (Test-Path $PdbPath) { if (Test-Path $PdbPath) {
return "PDB" return "PDB"
@ -159,25 +159,25 @@ function CheckSymbolsAvailable {
} }
} }
function Installdotnetsymbol { function InstallDotnetSymbol {
$dotnetsymbolPackageName = "dotnet-symbol" $dotnetSymbolPackageName = "dotnet-symbol"
$dotnetRoot = InitializeDotNetCli -install:$true $dotnetRoot = InitializeDotNetCli -install:$true
$dotnet = "$dotnetRoot\dotnet.exe" $dotnet = "$dotnetRoot\dotnet.exe"
$toolList = & "$dotnet" tool list --global $toolList = & "$dotnet" tool list --global
if (($toolList -like "*$dotnetsymbolPackageName*") -and ($toolList -like "*$dotnetsymbolVersion*")) { if (($toolList -like "*$dotnetSymbolPackageName*") -and ($toolList -like "*$dotnetSymbolVersion*")) {
Write-Host "dotnet-symbol version $dotnetsymbolVersion is already installed." Write-Host "dotnet-symbol version $dotnetSymbolVersion is already installed."
} }
else { else {
Write-Host "Installing dotnet-symbol version $dotnetsymbolVersion..." Write-Host "Installing dotnet-symbol version $dotnetSymbolVersion..."
Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed."
& "$dotnet" tool install $dotnetsymbolPackageName --version $dotnetsymbolVersion --verbosity "minimal" --global & "$dotnet" tool install $dotnetSymbolPackageName --version $dotnetSymbolVersion --verbosity "minimal" --global
} }
} }
try { try {
Installdotnetsymbol InstallDotnetSymbol
CheckSymbolsAvailable CheckSymbolsAvailable
} }

View File

@ -53,8 +53,8 @@ if ($ValidPath -eq $False)
exit 1 exit 1
} }
& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $ArtifactsDirectory -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel & $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory (Split-Path $SourceDirectory -Parent) -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel
$gdnFolder = Join-Path $ArtifactsDirectory ".gdn" $gdnFolder = Join-Path (Split-Path $SourceDirectory -Parent) ".gdn"
if ($TsaOnboard) { if ($TsaOnboard) {
if ($TsaCodebaseName -and $TsaNotificationEmail -and $TsaCodebaseAdmin -and $TsaBugAreaPath) { if ($TsaCodebaseName -and $TsaNotificationEmail -and $TsaCodebaseAdmin -and $TsaBugAreaPath) {

View File

@ -11,6 +11,9 @@ $ErrorActionPreference = "Stop"
Set-StrictMode -Version 2.0 Set-StrictMode -Version 2.0
$LASTEXITCODE = 0 $LASTEXITCODE = 0
# Don't display the console progress UI - it's a huge perf hit
$ProgressPreference = 'SilentlyContinue'
# Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file # Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file
$encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$AzureDevOpsAccessToken")) $encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$AzureDevOpsAccessToken"))
$escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn") $escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn")

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Microsoft.Guardian.Cli" version="0.7.1"/> <package id="Microsoft.Guardian.Cli" version="0.7.2"/>
</packages> </packages>

View File

@ -1,7 +1,10 @@
parameters: parameters:
overrideParameters: '' # Optional: to override values for parameters. overrideParameters: '' # Optional: to override values for parameters.
additionalParameters: '' # Optional: parameters that need user specific values eg: '-SourceToolsList @("abc","def") -ArtifactToolsList @("ghi","jkl")' additionalParameters: '' # Optional: parameters that need user specific values eg: '-SourceToolsList @("abc","def") -ArtifactToolsList @("ghi","jkl")'
continueOnError: false # optional: determines whether to continue the build if the step errors; # There is some sort of bug (has been reported) in Azure DevOps where if this parameter is named
# 'continueOnError', the parameter value is not correctly picked up.
# This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter
sdlContinueOnError: false # optional: determines whether to continue the build if the step errors;
dependsOn: '' # Optional: dependencies of the job dependsOn: '' # Optional: dependencies of the job
jobs: jobs:
@ -26,12 +29,12 @@ jobs:
-InputPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts -InputPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts
-ExtractPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts -ExtractPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts
displayName: Extract Blob Artifacts displayName: Extract Blob Artifacts
continueOnError: ${{ parameters.continueOnError }} continueOnError: ${{ parameters.sdlContinueOnError }}
- powershell: eng/common/sdl/extract-artifact-packages.ps1 - powershell: eng/common/sdl/extract-artifact-packages.ps1
-InputPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts -InputPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts
-ExtractPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts -ExtractPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts
displayName: Extract Package Artifacts displayName: Extract Package Artifacts
continueOnError: ${{ parameters.continueOnError }} continueOnError: ${{ parameters.sdlContinueOnError }}
- task: NuGetToolInstaller@1 - task: NuGetToolInstaller@1
displayName: 'Install NuGet.exe' displayName: 'Install NuGet.exe'
- task: NuGetCommand@2 - task: NuGetCommand@2
@ -45,12 +48,12 @@ jobs:
- ${{ if ne(parameters.overrideParameters, '') }}: - ${{ if ne(parameters.overrideParameters, '') }}:
- powershell: eng/common/sdl/execute-all-sdl-tools.ps1 ${{ parameters.overrideParameters }} - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 ${{ parameters.overrideParameters }}
displayName: Execute SDL displayName: Execute SDL
continueOnError: ${{ parameters.continueOnError }} continueOnError: ${{ parameters.sdlContinueOnError }}
- ${{ if eq(parameters.overrideParameters, '') }}: - ${{ if eq(parameters.overrideParameters, '') }}:
- powershell: eng/common/sdl/execute-all-sdl-tools.ps1 - powershell: eng/common/sdl/execute-all-sdl-tools.ps1
-GuardianPackageName Microsoft.Guardian.Cli.0.7.1 -GuardianPackageName Microsoft.Guardian.Cli.0.7.2
-NugetPackageDirectory $(Build.SourcesDirectory)\.packages -NugetPackageDirectory $(Build.SourcesDirectory)\.packages
-AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw) -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw)
${{ parameters.additionalParameters }} ${{ parameters.additionalParameters }}
displayName: Execute SDL displayName: Execute SDL
continueOnError: ${{ parameters.continueOnError }} continueOnError: ${{ parameters.sdlContinueOnError }}

View File

@ -1,11 +1,12 @@
parameters: parameters:
enableSourceLinkValidation: true enableSourceLinkValidation: false
enableSigningValidation: true enableSigningValidation: true
enableSymbolValidation: true enableSymbolValidation: false
enableNugetValidation: true enableNugetValidation: true
publishInstallersAndChecksums: false publishInstallersAndChecksums: false
SDLValidationParameters: SDLValidationParameters:
enable: false enable: false
continueOnError: false
params: '' params: ''
# These parameters let the user customize the call to sdk-task.ps1 for publishing # These parameters let the user customize the call to sdk-task.ps1 for publishing
@ -92,6 +93,7 @@ stages:
- template: /eng/common/templates/job/execute-sdl.yml - template: /eng/common/templates/job/execute-sdl.yml
parameters: parameters:
additionalParameters: ${{ parameters.SDLValidationParameters.params }} additionalParameters: ${{ parameters.SDLValidationParameters.params }}
continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }}
- template: \eng\common\templates\post-build\channels\netcore-dev-5.yml - template: \eng\common\templates\post-build\channels\netcore-dev-5.yml
parameters: parameters:

View File

@ -163,6 +163,7 @@ function GetDotNetInstallScript([string] $dotnetRoot) {
$installScript = Join-Path $dotnetRoot "dotnet-install.ps1" $installScript = Join-Path $dotnetRoot "dotnet-install.ps1"
if (!(Test-Path $installScript)) { if (!(Test-Path $installScript)) {
Create-Directory $dotnetRoot Create-Directory $dotnetRoot
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
Invoke-WebRequest "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" -OutFile $installScript Invoke-WebRequest "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" -OutFile $installScript
} }
@ -282,6 +283,7 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) {
Create-Directory $packageDir Create-Directory $packageDir
Write-Host "Downloading $packageName $packageVersion" Write-Host "Downloading $packageName $packageVersion"
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
Invoke-WebRequest "https://dotnet.myget.org/F/roslyn-tools/api/v2/package/$packageName/$packageVersion/" -OutFile $packagePath Invoke-WebRequest "https://dotnet.myget.org/F/roslyn-tools/api/v2/package/$packageName/$packageVersion/" -OutFile $packagePath
Unzip $packagePath $packageDir Unzip $packagePath $packageDir
} }

View File

@ -208,12 +208,19 @@ function GetDotNetInstallScript {
# Use curl if available, otherwise use wget # Use curl if available, otherwise use wget
if command -v curl > /dev/null; then if command -v curl > /dev/null; then
curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || {
else local exit_code=$?
wget -q -O "$install_script" "$install_script_url" Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
ExitWithExitCode $exit_code
}
else
wget -q -O "$install_script" "$install_script_url" || {
local exit_code=$?
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
ExitWithExitCode $exit_code
}
fi fi
fi fi
# return value # return value
_GetDotNetInstallScript="$install_script" _GetDotNetInstallScript="$install_script"
} }

View File

@ -1,47 +1,58 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Runtime.InteropServices;
using Microsoft.AspNetCore.Components.Rendering;
namespace Microsoft.AspNetCore.Components.RenderTree namespace Microsoft.AspNetCore.Components.RenderTree
{ {
// https://github.com/dotnet/arcade/pull/2033 // https://github.com/dotnet/arcade/pull/2033
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)] [StructLayout(LayoutKind.Explicit, Pack = 4)]
public readonly partial struct RenderTreeFrame public readonly partial struct RenderTreeFrame
{ {
[System.Runtime.InteropServices.FieldOffsetAttribute(8)] [FieldOffset(0)] public readonly int Sequence;
public readonly int AttributeEventHandlerId;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(4)] public readonly RenderTreeFrameType FrameType;
public readonly string AttributeName;
[System.Runtime.InteropServices.FieldOffsetAttribute(24)] [FieldOffset(8)] public readonly int ElementSubtreeLength;
public readonly object AttributeValue;
[System.Runtime.InteropServices.FieldOffsetAttribute(12)] [FieldOffset(16)] public readonly string ElementName;
public readonly int ComponentId;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(24)] public readonly object ElementKey;
public readonly System.Action<object> ComponentReferenceCaptureAction;
[System.Runtime.InteropServices.FieldOffsetAttribute(8)] [FieldOffset(16)] public readonly string TextContent;
public readonly int ComponentReferenceCaptureParentFrameIndex;
[System.Runtime.InteropServices.FieldOffsetAttribute(8)] [FieldOffset(8)] public readonly ulong AttributeEventHandlerId;
public readonly int ComponentSubtreeLength;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(16)] public readonly string AttributeName;
public readonly System.Type ComponentType;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(24)] public readonly object AttributeValue;
public readonly string ElementName;
[System.Runtime.InteropServices.FieldOffsetAttribute(24)] [FieldOffset(32)] public readonly string AttributeEventUpdatesAttributeName;
public readonly System.Action<Microsoft.AspNetCore.Components.ElementReference> ElementReferenceCaptureAction;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(8)] public readonly int ComponentSubtreeLength;
public readonly string ElementReferenceCaptureId;
[System.Runtime.InteropServices.FieldOffsetAttribute(8)] [FieldOffset(12)] public readonly int ComponentId;
public readonly int ElementSubtreeLength;
[System.Runtime.InteropServices.FieldOffsetAttribute(4)] [FieldOffset(16)] public readonly Type ComponentType;
public readonly Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType FrameType;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(32)] public readonly object ComponentKey;
public readonly string MarkupContent;
[System.Runtime.InteropServices.FieldOffsetAttribute(8)] public IComponent Component => null;
public readonly int RegionSubtreeLength;
[System.Runtime.InteropServices.FieldOffsetAttribute(0)] [FieldOffset(8)] public readonly int RegionSubtreeLength;
public readonly int Sequence;
[System.Runtime.InteropServices.FieldOffsetAttribute(16)] [FieldOffset(16)] public readonly string ElementReferenceCaptureId;
public readonly string TextContent;
public Microsoft.AspNetCore.Components.IComponent Component { get { throw null; } } [FieldOffset(24)] public readonly Action<ElementReference> ElementReferenceCaptureAction;
public override string ToString() { throw null; }
[FieldOffset(8)] public readonly int ComponentReferenceCaptureParentFrameIndex;
[FieldOffset(16)] public readonly Action<object> ComponentReferenceCaptureAction;
[FieldOffset(16)] public readonly string MarkupContent;
public override string ToString() => null;
} }
} }

View File

@ -6,7 +6,7 @@ export class UserSpecifiedDisplay implements ReconnectDisplay {
static readonly FailedClassName = 'components-reconnect-failed'; static readonly FailedClassName = 'components-reconnect-failed';
static readonly RefusedClassName = 'components-reconnect-refused'; static readonly RejectedClassName = 'components-reconnect-rejected';
constructor(private dialog: HTMLElement) { constructor(private dialog: HTMLElement) {
} }
@ -25,13 +25,13 @@ export class UserSpecifiedDisplay implements ReconnectDisplay {
this.removeClasses(); this.removeClasses();
this.dialog.classList.add(UserSpecifiedDisplay.FailedClassName); this.dialog.classList.add(UserSpecifiedDisplay.FailedClassName);
} }
rejected(): void { rejected(): void {
this.removeClasses(); this.removeClasses();
this.dialog.classList.add(UserSpecifiedDisplay.RefusedClassName); this.dialog.classList.add(UserSpecifiedDisplay.RejectedClassName);
} }
private removeClasses() { private removeClasses() {
this.dialog.classList.remove(UserSpecifiedDisplay.ShowClassName, UserSpecifiedDisplay.HideClassName, UserSpecifiedDisplay.FailedClassName, UserSpecifiedDisplay.RefusedClassName); this.dialog.classList.remove(UserSpecifiedDisplay.ShowClassName, UserSpecifiedDisplay.HideClassName, UserSpecifiedDisplay.FailedClassName, UserSpecifiedDisplay.RejectedClassName);
} }
} }

View File

@ -34,9 +34,6 @@ namespace Microsoft.AspNetCore
IEnumerable<string> dlls = Directory.GetFiles(_targetingPackRoot, "*.dll", SearchOption.AllDirectories); IEnumerable<string> dlls = Directory.GetFiles(_targetingPackRoot, "*.dll", SearchOption.AllDirectories);
Assert.NotEmpty(dlls); Assert.NotEmpty(dlls);
// Workaround https://github.com/aspnet/AspNetCore/issues/11206
dlls = dlls.Where(d => !d.Contains("System.IO.Pipelines"));
Assert.All(dlls, path => Assert.All(dlls, path =>
{ {
var assemblyName = AssemblyName.GetAssemblyName(path); var assemblyName = AssemblyName.GetAssemblyName(path);

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.AspNetCore.Server.IntegrationTesting namespace Microsoft.AspNetCore.Server.IntegrationTesting

View File

@ -1,13 +0,0 @@
using Microsoft.AspNetCore.Hosting.Server.Features;
using System.Linq;
namespace Microsoft.AspNetCore.Hosting
{
public static class IWebHostExtensions
{
public static string GetAddress(this IWebHost host)
{
return host.ServerFeatures.Get<IServerAddressesFeature>().Addresses.First();
}
}
}

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Description>ASP.NET Core helpers to deploy applications to IIS Express, IIS, WebListener and Kestrel for testing.</Description> <Description>ASP.NET Core helpers to deploy applications to IIS Express, IIS, WebListener and Kestrel for testing.</Description>
@ -19,7 +19,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.AspNetCore.Hosting.Abstractions" />
<Reference Include="Microsoft.AspNetCore.Testing" /> <Reference Include="Microsoft.AspNetCore.Testing" />
<Reference Include="Microsoft.Extensions.FileProviders.Embedded" /> <Reference Include="Microsoft.Extensions.FileProviders.Embedded" />
<Reference Include="Microsoft.Extensions.Logging" /> <Reference Include="Microsoft.Extensions.Logging" />

3
src/Hosting/build.cmd Normal file
View File

@ -0,0 +1,3 @@
@ECHO OFF
SET RepoRoot=%~dp0..\..
%RepoRoot%\build.cmd -projects %~dp0**\*.*proj %*

View File

@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Hosting.FunctionalTests
public ShutdownTests(ITestOutputHelper output) : base(output) { } public ShutdownTests(ITestOutputHelper output) : base(output) { }
[ConditionalFact] [ConditionalFact(Skip = "https://github.com/aspnet/AspNetCore-Internal/issues/2577")]
[OSSkipCondition(OperatingSystems.Windows)] [OSSkipCondition(OperatingSystems.Windows)]
[OSSkipCondition(OperatingSystems.MacOSX)] [OSSkipCondition(OperatingSystems.MacOSX)]
[Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2577", FlakyOn.All)] [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2577", FlakyOn.All)]

View File

@ -9,7 +9,6 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Xunit; using Xunit;
@ -26,7 +25,7 @@ namespace Microsoft.AspNetCore.Identity.Test
public IdentityUIScriptsTest(ITestOutputHelper output) public IdentityUIScriptsTest(ITestOutputHelper output)
{ {
_output = output; _output = output;
_httpClient = new HttpClient(new RetryHandler(new HttpClientHandler() { })); _httpClient = new HttpClient(new RetryHandler(new HttpClientHandler() { }, output, TimeSpan.FromSeconds(1), 5));
} }
public static IEnumerable<object[]> ScriptWithIntegrityData public static IEnumerable<object[]> ScriptWithIntegrityData
@ -188,25 +187,5 @@ namespace Microsoft.AspNetCore.Identity.Test
throw new InvalidOperationException($"Solution root could not be located using application root {applicationPath}."); throw new InvalidOperationException($"Solution root could not be located using application root {applicationPath}.");
} }
class RetryHandler : DelegatingHandler
{
public RetryHandler(HttpMessageHandler innerHandler) : base(innerHandler) { }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
HttpResponseMessage result = null;
for (var i = 0; i < 10; i++)
{
result = await base.SendAsync(request, cancellationToken);
if (result.IsSuccessStatusCode)
{
return result;
}
await Task.Delay(1000);
}
return result;
}
}
} }
} }

View File

@ -0,0 +1,65 @@
// 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.Threading;
using System.Threading.Tasks;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Identity.Test
{
internal class RetryHandler : DelegatingHandler
{
private readonly ITestOutputHelper _output;
private readonly int _maxRetries;
private TimeSpan _waitIntervalBeforeRetry;
public RetryHandler(
HttpClientHandler httpClientHandler,
ITestOutputHelper output,
TimeSpan initialWaitTime,
int maxAttempts) : base(httpClientHandler)
{
_waitIntervalBeforeRetry = initialWaitTime;
_output = output;
_maxRetries = maxAttempts;
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
HttpResponseMessage result = null;
var url = request.RequestUri;
var method = request.Method;
for (var i = 0; i < _maxRetries; i++)
{
try
{
_output.WriteLine($"Sending request '{method} - {url}' {i+1} attempt.");
result = await base.SendAsync(request, cancellationToken);
if (result.IsSuccessStatusCode)
{
return result;
}
else
{
_output.WriteLine($"Request '{method} - {url}' failed with {result.StatusCode}.");
}
}
catch (Exception e)
{
_output.WriteLine($"Request '{method} - {url}' failed with {e.ToString()}");
}
finally
{
await Task.Delay(_waitIntervalBeforeRetry, cancellationToken);
_waitIntervalBeforeRetry = _waitIntervalBeforeRetry * 2;
}
}
// Try one last time to show the actual error.
return await base.SendAsync(request, cancellationToken);
}
}
}

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
@ -15,9 +15,10 @@ namespace Microsoft.AspNetCore.HttpsPolicy
{ {
public class HttpsRedirectionMiddleware public class HttpsRedirectionMiddleware
{ {
private const int PortNotFound = -1;
private readonly RequestDelegate _next; private readonly RequestDelegate _next;
private bool _portEvaluated = false; private readonly Lazy<int> _httpsPort;
private int? _httpsPort;
private readonly int _statusCode; private readonly int _statusCode;
private readonly IServerAddressesFeature _serverAddressesFeature; private readonly IServerAddressesFeature _serverAddressesFeature;
@ -42,8 +43,14 @@ namespace Microsoft.AspNetCore.HttpsPolicy
throw new ArgumentNullException(nameof(options)); throw new ArgumentNullException(nameof(options));
} }
var httpsRedirectionOptions = options.Value; var httpsRedirectionOptions = options.Value;
_httpsPort = httpsRedirectionOptions.HttpsPort; if (httpsRedirectionOptions.HttpsPort.HasValue)
_portEvaluated = _httpsPort.HasValue; {
_httpsPort = new Lazy<int>(() => httpsRedirectionOptions.HttpsPort.Value);
}
else
{
_httpsPort = new Lazy<int>(TryGetHttpsPort);
}
_statusCode = httpsRedirectionOptions.RedirectStatusCode; _statusCode = httpsRedirectionOptions.RedirectStatusCode;
_logger = loggerFactory.CreateLogger<HttpsRedirectionMiddleware>(); _logger = loggerFactory.CreateLogger<HttpsRedirectionMiddleware>();
} }
@ -70,7 +77,13 @@ namespace Microsoft.AspNetCore.HttpsPolicy
/// <returns></returns> /// <returns></returns>
public Task Invoke(HttpContext context) public Task Invoke(HttpContext context)
{ {
if (context.Request.IsHttps || !TryGetHttpsPort(out var port)) if (context.Request.IsHttps)
{
return _next(context);
}
var port = _httpsPort.Value;
if (port == PortNotFound)
{ {
return _next(context); return _next(context);
} }
@ -101,7 +114,8 @@ namespace Microsoft.AspNetCore.HttpsPolicy
return Task.CompletedTask; return Task.CompletedTask;
} }
private bool TryGetHttpsPort(out int port) // Returns PortNotFound (-1) if we were unable to determine the port.
private int TryGetHttpsPort()
{ {
// The IServerAddressesFeature will not be ready until the middleware is Invoked, // The IServerAddressesFeature will not be ready until the middleware is Invoked,
// Order for finding the HTTPS port: // Order for finding the HTTPS port:
@ -109,59 +123,47 @@ namespace Microsoft.AspNetCore.HttpsPolicy
// 2. HTTPS_PORT environment variable // 2. HTTPS_PORT environment variable
// 3. IServerAddressesFeature // 3. IServerAddressesFeature
// 4. Fail if not set // 4. Fail if not set
var nullablePort = _config.GetValue<int?>("HTTPS_PORT");
port = -1; if (nullablePort.HasValue)
if (_portEvaluated)
{ {
port = _httpsPort ?? port; var port = nullablePort.Value;
return _httpsPort.HasValue;
}
_portEvaluated = true;
_httpsPort = _config.GetValue<int?>("HTTPS_PORT");
if (_httpsPort.HasValue)
{
port = _httpsPort.Value;
_logger.PortLoadedFromConfig(port); _logger.PortLoadedFromConfig(port);
return true; return port;
} }
if (_serverAddressesFeature == null) if (_serverAddressesFeature == null)
{ {
_logger.FailedToDeterminePort(); _logger.FailedToDeterminePort();
return false; return PortNotFound;
} }
int? httpsPort = null;
foreach (var address in _serverAddressesFeature.Addresses) foreach (var address in _serverAddressesFeature.Addresses)
{ {
var bindingAddress = BindingAddress.Parse(address); var bindingAddress = BindingAddress.Parse(address);
if (bindingAddress.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) if (bindingAddress.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase))
{ {
// If we find multiple different https ports specified, throw // If we find multiple different https ports specified, throw
if (httpsPort.HasValue && httpsPort != bindingAddress.Port) if (nullablePort.HasValue && nullablePort != bindingAddress.Port)
{ {
_logger.FailedMultiplePorts(); _logger.FailedMultiplePorts();
return false; return PortNotFound;
} }
else else
{ {
httpsPort = bindingAddress.Port; nullablePort = bindingAddress.Port;
} }
} }
} }
if (httpsPort.HasValue) if (nullablePort.HasValue)
{ {
_httpsPort = httpsPort; var port = nullablePort.Value;
port = _httpsPort.Value;
_logger.PortFromServer(port); _logger.PortFromServer(port);
return true; return port;
} }
_logger.FailedToDeterminePort(); _logger.FailedToDeterminePort();
return false; return PortNotFound;
} }
} }
} }

View File

@ -39,7 +39,7 @@ namespace LocalizationWebsite
}); });
var noAttributeStringLocalizer = stringLocalizerFactory.Create(typeof(ResourcesClassLibraryNoAttribute.Model)); var noAttributeStringLocalizer = stringLocalizerFactory.Create(typeof(ResourcesClassLibraryNoAttribute.Model));
var withAttributeStringLocalizer = stringLocalizerFactory.Create(typeof(ResourcesClassLibraryWithAttribute.Model)); var withAttributeStringLocalizer = stringLocalizerFactory.Create(typeof(Alternate.Namespace.Model));
var noAttributeAssembly = typeof(ResourcesClassLibraryNoAttribute.Model).GetTypeInfo().Assembly; var noAttributeAssembly = typeof(ResourcesClassLibraryNoAttribute.Model).GetTypeInfo().Assembly;
var noAttributeName = new AssemblyName(noAttributeAssembly.FullName).Name; var noAttributeName = new AssemblyName(noAttributeAssembly.FullName).Name;
@ -47,10 +47,10 @@ namespace LocalizationWebsite
nameof(ResourcesClassLibraryNoAttribute.Model), nameof(ResourcesClassLibraryNoAttribute.Model),
noAttributeName); noAttributeName);
var withAttributeAssembly = typeof(ResourcesClassLibraryWithAttribute.Model).GetTypeInfo().Assembly; var withAttributeAssembly = typeof(Alternate.Namespace.Model).GetTypeInfo().Assembly;
var withAttributeName = new AssemblyName(withAttributeAssembly.FullName).Name; var withAttributeName = new AssemblyName(withAttributeAssembly.FullName).Name;
var withAttributeNameStringLocalizer = stringLocalizerFactory.Create( var withAttributeNameStringLocalizer = stringLocalizerFactory.Create(
nameof(ResourcesClassLibraryWithAttribute.Model), nameof(Alternate.Namespace.Model),
withAttributeName); withAttributeName);
app.Run(async (context) => app.Run(async (context) =>

View File

@ -1,7 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace ResourcesClassLibraryWithAttribute namespace Alternate.Namespace
{ {
public class Model public class Model
{ {

View File

@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.StaticFiles
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{ {
var environment = server.Services.GetRequiredService<IWebHostEnvironment>(); var environment = server.Services.GetRequiredService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var response = await client.GetAsync("hello"); var response = await client.GetAsync("hello");
var responseText = await response.Content.ReadAsStringAsync(); var responseText = await response.Content.ReadAsStringAsync();
@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.StaticFiles
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{ {
var environment = server.Services.GetRequiredService<IWebHostEnvironment>(); var environment = server.Services.GetRequiredService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var response = await client.GetAsync("hello"); var response = await client.GetAsync("hello");
var responseText = await response.Content.ReadAsStringAsync(); var responseText = await response.Content.ReadAsStringAsync();

View File

@ -0,0 +1,17 @@
// 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.Linq;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server.Features;
namespace Microsoft.AspNetCore.StaticFiles
{
public static class Helpers
{
public static string GetAddress(IWebHost server)
{
return server.ServerFeatures.Get<IServerAddressesFeature>().Addresses.First();
}
}
}

View File

@ -35,7 +35,7 @@ namespace Microsoft.AspNetCore.StaticFiles
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{ {
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var response = await client.GetAsync("TestDocument.txt"); var response = await client.GetAsync("TestDocument.txt");
@ -76,7 +76,7 @@ namespace Microsoft.AspNetCore.StaticFiles
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{ {
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var response = await client.GetAsync("TestDocument.txt"); var response = await client.GetAsync("TestDocument.txt");
@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.StaticFiles
using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel))) using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{ {
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var last = File.GetLastWriteTimeUtc(Path.Combine(AppContext.BaseDirectory, "TestDocument.txt")); var last = File.GetLastWriteTimeUtc(Path.Combine(AppContext.BaseDirectory, "TestDocument.txt"));
var response = await client.GetAsync("TestDocument.txt"); var response = await client.GetAsync("TestDocument.txt");
@ -143,7 +143,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
var hostingEnvironment = server.Services.GetService<IWebHostEnvironment>(); var hostingEnvironment = server.Services.GetService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl)); var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var response = await client.GetAsync(requestUrl); var response = await client.GetAsync(requestUrl);
@ -181,7 +181,7 @@ namespace Microsoft.AspNetCore.StaticFiles
{ {
var hostingEnvironment = server.Services.GetService<IWebHostEnvironment>(); var hostingEnvironment = server.Services.GetService<IWebHostEnvironment>();
using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) }) using (var client = new HttpClient { BaseAddress = new Uri(Helpers.GetAddress(server)) })
{ {
var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl)); var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var request = new HttpRequestMessage(HttpMethod.Head, requestUrl); var request = new HttpRequestMessage(HttpMethod.Head, requestUrl);
@ -261,7 +261,7 @@ namespace Microsoft.AspNetCore.StaticFiles
using (var server = builder.Start(TestUrlHelper.GetTestUrl(serverType))) using (var server = builder.Start(TestUrlHelper.GetTestUrl(serverType)))
{ {
// We don't use HttpClient here because it's disconnect behavior varies across platforms. // We don't use HttpClient here because it's disconnect behavior varies across platforms.
var socket = SendSocketRequestAsync(server.GetAddress(), "/TestDocument1MB.txt"); var socket = SendSocketRequestAsync(Helpers.GetAddress(server), "/TestDocument1MB.txt");
await requestReceived.Task.TimeoutAfter(interval); await requestReceived.Task.TimeoutAfter(interval);
socket.LingerState = new LingerOption(true, 0); socket.LingerState = new LingerOption(true, 0);

View File

@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters
internal override string ReadAsync_AddsModelValidationErrorsToModelState_Expected => "$.Age"; internal override string ReadAsync_AddsModelValidationErrorsToModelState_Expected => "$.Age";
internal override string JsonFormatter_EscapedKeys_Expected => "$[0]['It\\u0022s a key']"; internal override string JsonFormatter_EscapedKeys_Expected => "$[0]['It\"s a key']";
internal override string JsonFormatter_EscapedKeys_Bracket_Expected => "$[0]['It[s a key']"; internal override string JsonFormatter_EscapedKeys_Bracket_Expected => "$[0]['It[s a key']";

View File

@ -333,7 +333,7 @@ namespace Microsoft.AspNetCore.Mvc.DataAnnotations
var contextAttributes = context.Attributes; var contextAttributes = context.Attributes;
var contextAttributesCount = contextAttributes.Count; var contextAttributesCount = contextAttributes.Count;
var attributes = new List<object>(contextAttributesCount); var attributes = new List<object>(contextAttributesCount);
for (var i = 0; i < contextAttributesCount; i++) for (var i = 0; i < contextAttributesCount; i++)
{ {
var attribute = contextAttributes[i]; var attribute = contextAttributes[i];
@ -367,15 +367,15 @@ namespace Microsoft.AspNetCore.Mvc.DataAnnotations
else if (context.Key.MetadataKind == ModelMetadataKind.Property) else if (context.Key.MetadataKind == ModelMetadataKind.Property)
{ {
addInferredRequiredAttribute = IsNullableReferenceType( addInferredRequiredAttribute = IsNullableReferenceType(
context.Key.ContainerType, context.Key.ContainerType,
member: null, member: null,
context.PropertyAttributes); context.PropertyAttributes);
} }
else if (context.Key.MetadataKind == ModelMetadataKind.Parameter) else if (context.Key.MetadataKind == ModelMetadataKind.Parameter)
{ {
addInferredRequiredAttribute = IsNullableReferenceType( addInferredRequiredAttribute = IsNullableReferenceType(
context.Key.ParameterInfo?.Member.ReflectedType, context.Key.ParameterInfo?.Member.ReflectedType,
context.Key.ParameterInfo.Member, context.Key.ParameterInfo.Member,
context.ParameterAttributes); context.ParameterAttributes);
} }
else else
@ -494,6 +494,15 @@ namespace Microsoft.AspNetCore.Mvc.DataAnnotations
internal static bool IsNullableBasedOnContext(Type containingType, MemberInfo member) internal static bool IsNullableBasedOnContext(Type containingType, MemberInfo member)
{ {
// For generic types, inspecting the nullability requirement additionally requires
// inspecting the nullability constraint on generic type parameters. This is fairly non-triviial
// so we'll just avoid calculating it. Users should still be able to apply an explicit [Required]
// attribute on these members.
if (containingType.IsGenericType)
{
return false;
}
// The [Nullable] and [NullableContext] attributes are not inherited. // The [Nullable] and [NullableContext] attributes are not inherited.
// //
// The [NullableContext] attribute can appear on a method or on the module. // The [NullableContext] attribute can appear on a method or on the module.
@ -516,7 +525,7 @@ namespace Microsoft.AspNetCore.Mvc.DataAnnotations
} }
type = type.DeclaringType; type = type.DeclaringType;
} }
while (type != null); while (type != null);
// If we don't find the attribute on the declaring type then repeat at the module level // If we don't find the attribute on the declaring type then repeat at the module level

View File

@ -1339,6 +1339,38 @@ namespace Microsoft.AspNetCore.Mvc.DataAnnotations
Assert.True(result); Assert.True(result);
} }
[Fact]
public void IsNullableReferenceType_ReturnsFalse_ForKeyValuePairWithoutNullableConstraints()
{
// Arrange
var type = typeof(KeyValuePair<string, object>);
var property = type.GetProperty(nameof(KeyValuePair<string, object>.Key));
// Act
var result = DataAnnotationsMetadataProvider.IsNullableReferenceType(type, member: null, property.GetCustomAttributes(inherit: true));
// Assert
Assert.False(result);
}
#nullable enable
[Fact]
public void IsNullableReferenceType_ReturnsTrue_ForKeyValuePairWithNullableConstraints()
{
// Arrange
var type = typeof(KeyValuePair<string, object>);
var property = type.GetProperty(nameof(KeyValuePair<string, object>.Key))!;
// Act
var result = DataAnnotationsMetadataProvider.IsNullableReferenceType(type, member: null, property.GetCustomAttributes(inherit: true));
// Assert
// While we'd like for result to be 'true', we don't have a very good way of actually calculating it correctly.
// This test is primarily here to document the behavior.
Assert.False(result);
}
#nullable restore
[Fact] [Fact]
public void IsNonNullable_FindsNullableProperty() public void IsNonNullable_FindsNullableProperty()
{ {

View File

@ -1126,6 +1126,105 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Assert.Equal(expectedMessage, exception.Message); Assert.Equal(expectedMessage, exception.Message);
} }
[Fact]
public async Task CollectionModelBinder_CollectionOfSimpleTypes_DoesNotResultInValidationError()
{
// Regression test for https://github.com/aspnet/AspNetCore/issues/13512
// Arrange
var parameter = new ParameterDescriptor()
{
Name = "parameter",
ParameterType = typeof(Collection<string>),
};
var testContext = ModelBindingTestHelper.GetTestContext(
request =>
{
request.QueryString = new QueryString("?[0]=hello&[1]=");
});
var modelState = testContext.ModelState;
var metadata = testContext.MetadataProvider.GetMetadataForType(parameter.ParameterType);
var valueProvider = await CompositeValueProvider.CreateAsync(testContext);
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(testContext);
// Act
var result = await parameterBinder.BindModelAsync(parameter, testContext);
// Assert
Assert.True(modelState.IsValid);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(result.IsModelSet);
var model = Assert.IsType<Collection<string>>(result.Model);
Assert.Collection(
model,
item => Assert.Equal("hello", item),
item => Assert.Null(item));
Assert.Collection(
modelState,
kvp =>
{
Assert.Equal("[0]", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
},
kvp =>
{
Assert.Equal("[1]", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
});
}
[Fact]
public async Task CollectionModelBinder_CollectionOfNonNullableTypes_AppliesImplicitRequired()
{
// Arrange
var parameter = new ParameterDescriptor()
{
Name = "parameter",
ParameterType = typeof(Collection<string>),
};
var testContext = ModelBindingTestHelper.GetTestContext(
request =>
{
request.QueryString = new QueryString("?[0]=hello&[1]=");
});
var modelState = testContext.ModelState;
var metadata = testContext.MetadataProvider.GetMetadataForType(parameter.ParameterType);
var valueProvider = await CompositeValueProvider.CreateAsync(testContext);
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(testContext);
// Act
var result = await parameterBinder.BindModelAsync(parameter, testContext);
// Assert
Assert.True(modelState.IsValid);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(result.IsModelSet);
var model = Assert.IsType<Collection<string>>(result.Model);
Assert.Collection(
model,
item => Assert.Equal("hello", item),
item => Assert.Null(item));
Assert.Collection(
modelState,
kvp =>
{
Assert.Equal("[0]", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
},
kvp =>
{
Assert.Equal("[1]", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
});
}
private class ClosedGenericCollection : Collection<string> private class ClosedGenericCollection : Collection<string>
{ {
} }

View File

@ -5,6 +5,7 @@ using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.Abstractions;
@ -1162,6 +1163,211 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Assert.Equal(expectedMessage, exception.Message); Assert.Equal(expectedMessage, exception.Message);
} }
[Fact]
public async Task DictionaryModelBinder_DictionaryOfSimpleType_NullValue_DoesNotResultInRequiredValidation()
{
// Regression test for https://github.com/aspnet/AspNetCore/issues/13512
// Arrange
var parameterBinder = ModelBindingTestHelper.GetParameterBinder();
var parameter = new ParameterDescriptor()
{
Name = "parameter",
ParameterType = typeof(Dictionary<string, string>)
};
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter[key0]=");
});
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await parameterBinder.BindModelAsync(parameter, testContext);
// Assert
Assert.True(modelBindingResult.IsModelSet);
var model = Assert.IsType<Dictionary<string, string>>(modelBindingResult.Model);
Assert.Collection(
model.OrderBy(kvp => kvp.Key),
kvp =>
{
Assert.Equal("key0", kvp.Key);
Assert.Null(kvp.Value);
});
Assert.Collection(
modelState.OrderBy(kvp => kvp.Key),
kvp =>
{
Assert.Equal("parameter[key0]", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
});
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
#nullable enable
public class NonNullPerson
{
public int Age { get; set; }
// This should be implicitly required
public string Name { get; set; } = default!;
}
#nullable restore
[Fact]
public async Task DictionaryModelBinder_ValuesIsNonNullableType_AppliesImplicitRequired()
{
// Arrange
var parameterBinder = ModelBindingTestHelper.GetParameterBinder();
var parameter = new ParameterDescriptor()
{
Name = "parameter",
ParameterType = typeof(Dictionary<string, NonNullPerson>)
};
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter[key0].Age=&parameter[key0].Name=name0&parameter[key1].Age=27&parameter[key1].Name=");
});
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await parameterBinder.BindModelAsync(parameter, testContext);
// Assert
Assert.True(modelBindingResult.IsModelSet);
var model = Assert.IsType<Dictionary<string, NonNullPerson>>(modelBindingResult.Model);
Assert.Collection(
model.OrderBy(kvp => kvp.Key),
kvp =>
{
Assert.Equal("key0", kvp.Key);
var person = kvp.Value;
Assert.Equal(0, person.Age);
Assert.Equal("name0", person.Name);
},
kvp =>
{
Assert.Equal("key1", kvp.Key);
var person = kvp.Value;
Assert.Equal(27, person.Age);
Assert.Null(person.Name);
});
Assert.Collection(
modelState.OrderBy(kvp => kvp.Key),
kvp =>
{
Assert.Equal("parameter[key0].Age", kvp.Key);
Assert.Equal(ModelValidationState.Invalid, kvp.Value.ValidationState);
Assert.Equal("The value '' is invalid.", Assert.Single(kvp.Value.Errors).ErrorMessage);
},
kvp =>
{
Assert.Equal("parameter[key0].Name", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
},
kvp =>
{
Assert.Equal("parameter[key1].Age", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
},
kvp =>
{
Assert.Equal("parameter[key1].Name", kvp.Key);
Assert.Equal(ModelValidationState.Invalid, kvp.Value.ValidationState);
Assert.Equal("The Name field is required.", Assert.Single(kvp.Value.Errors).ErrorMessage);
});
Assert.Equal(2, modelState.ErrorCount);
Assert.False(modelState.IsValid);
}
#nullable enable
public class NonNullPersonWithRequiredProperties
{
public int Age { get; set; }
[Required]
public string? Name { get; set; }
}
#nullable restore
[Fact]
public async Task DictionaryModelBinder_ValuesNullableTypeWithRequiredAttributes_AppliesValidation()
{
// Arrange
var parameterBinder = ModelBindingTestHelper.GetParameterBinder();
var parameter = new ParameterDescriptor()
{
Name = "parameter",
ParameterType = typeof(Dictionary<string, NonNullPersonWithRequiredProperties>)
};
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter[key0].Age=&parameter[key0].Name=name0&parameter[key1].Age=27&parameter[key1].Name=");
});
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await parameterBinder.BindModelAsync(parameter, testContext);
// Assert
Assert.True(modelBindingResult.IsModelSet);
var model = Assert.IsType<Dictionary<string, NonNullPersonWithRequiredProperties>>(modelBindingResult.Model);
Assert.Collection(
model.OrderBy(kvp => kvp.Key),
kvp =>
{
Assert.Equal("key0", kvp.Key);
var person = kvp.Value;
Assert.Equal(0, person.Age);
Assert.Equal("name0", person.Name);
},
kvp =>
{
Assert.Equal("key1", kvp.Key);
var person = kvp.Value;
Assert.Equal(27, person.Age);
Assert.Null(person.Name);
});
Assert.Collection(
modelState.OrderBy(kvp => kvp.Key),
kvp =>
{
Assert.Equal("parameter[key0].Age", kvp.Key);
Assert.Equal(ModelValidationState.Invalid, kvp.Value.ValidationState);
Assert.Equal("The value '' is invalid.", Assert.Single(kvp.Value.Errors).ErrorMessage);
},
kvp =>
{
Assert.Equal("parameter[key0].Name", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
},
kvp =>
{
Assert.Equal("parameter[key1].Age", kvp.Key);
Assert.Equal(ModelValidationState.Valid, kvp.Value.ValidationState);
},
kvp =>
{
Assert.Equal("parameter[key1].Name", kvp.Key);
Assert.Equal(ModelValidationState.Invalid, kvp.Value.ValidationState);
Assert.Equal("The Name field is required.", Assert.Single(kvp.Value.Errors).ErrorMessage);
});
Assert.Equal(2, modelState.ErrorCount);
Assert.False(modelState.IsValid);
}
private class ClosedGenericDictionary : Dictionary<string, string> private class ClosedGenericDictionary : Dictionary<string, string>
{ {
} }

View File

@ -61,6 +61,7 @@
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath> <RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ResolvedFileToPublish> </ResolvedFileToPublish>
</ItemGroup> </ItemGroup>
</Target> </Target>

View File

@ -56,6 +56,7 @@
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath> <RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ResolvedFileToPublish> </ResolvedFileToPublish>
</ItemGroup> </ItemGroup>
</Target> </Target>

View File

@ -45,6 +45,7 @@
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath> <RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ResolvedFileToPublish> </ResolvedFileToPublish>
</ItemGroup> </ItemGroup>
</Target> </Target>

View File

@ -6,7 +6,6 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.E2ETesting; using Microsoft.AspNetCore.E2ETesting;
@ -96,6 +95,11 @@ namespace Templates.Test.SpaTemplateTest
} }
} }
if (template == "react" || template == "reactredux")
{
await CleanupReactClientAppBuildFolder(clientAppSubdirPath);
}
using (var aspNetProcess = Project.StartBuiltProjectAsync()) using (var aspNetProcess = Project.StartBuiltProjectAsync())
{ {
Assert.False( Assert.False(
@ -144,6 +148,35 @@ namespace Templates.Test.SpaTemplateTest
} }
} }
private async Task CleanupReactClientAppBuildFolder(string clientAppSubdirPath)
{
ProcessEx testResult = null;
int? testResultExitCode = null;
for (int i = 0; i < 3; i++)
{
try
{
testResult = await ProcessEx.RunViaShellAsync(Output, clientAppSubdirPath, "npx rimraf ./build");
testResultExitCode = testResult.ExitCode;
if (testResultExitCode == 0)
{
return;
}
}
catch
{
}
finally
{
testResult.Dispose();
}
await Task.Delay(3000);
}
Assert.True(testResultExitCode == 0, ErrorMessages.GetFailedProcessMessage("npx rimraf ./build", Project, testResult));
}
private void ValidatePackageJson(string clientAppSubdirPath) private void ValidatePackageJson(string clientAppSubdirPath)
{ {
Assert.True(File.Exists(Path.Combine(clientAppSubdirPath, "package.json")), "Missing a package.json"); Assert.True(File.Exists(Path.Combine(clientAppSubdirPath, "package.json")), "Missing a package.json");

View File

@ -24,39 +24,54 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
new TaskCompletionSource<FlushResult>(TaskCreationOptions.RunContinuationsAsynchronously), new TaskCompletionSource<FlushResult>(TaskCreationOptions.RunContinuationsAsynchronously),
}; };
var sync = new object();
var mockPipeWriter = new MockPipeWriter(pipeWriterFlushTcsArray); var mockPipeWriter = new MockPipeWriter(pipeWriterFlushTcsArray);
var concurrentPipeWriter = new ConcurrentPipeWriter(mockPipeWriter, diagnosticPool, sync);
// No need to pass in a real sync object since all the calls in this test are passthrough. ValueTask<FlushResult> flushTask;
var concurrentPipeWriter = new ConcurrentPipeWriter(mockPipeWriter, diagnosticPool, new object());
var memory = concurrentPipeWriter.GetMemory(); lock (sync)
Assert.Equal(1, mockPipeWriter.GetMemoryCallCount); {
var memory = concurrentPipeWriter.GetMemory();
Assert.Equal(1, mockPipeWriter.GetMemoryCallCount);
concurrentPipeWriter.Advance(memory.Length); concurrentPipeWriter.Advance(memory.Length);
Assert.Equal(1, mockPipeWriter.AdvanceCallCount); Assert.Equal(1, mockPipeWriter.AdvanceCallCount);
var flushTask0 = concurrentPipeWriter.FlushAsync(); flushTask = concurrentPipeWriter.FlushAsync();
Assert.Equal(1, mockPipeWriter.FlushCallCount); Assert.Equal(1, mockPipeWriter.FlushCallCount);
pipeWriterFlushTcsArray[0].SetResult(default); pipeWriterFlushTcsArray[0].SetResult(default);
}
await flushTask0.DefaultTimeout(); await flushTask.DefaultTimeout();
memory = concurrentPipeWriter.GetMemory(); lock (sync)
Assert.Equal(2, mockPipeWriter.GetMemoryCallCount); {
var memory = concurrentPipeWriter.GetMemory();
Assert.Equal(2, mockPipeWriter.GetMemoryCallCount);
concurrentPipeWriter.Advance(memory.Length); concurrentPipeWriter.Advance(memory.Length);
Assert.Equal(2, mockPipeWriter.AdvanceCallCount); Assert.Equal(2, mockPipeWriter.AdvanceCallCount);
var flushTask1 = concurrentPipeWriter.FlushAsync(); flushTask = concurrentPipeWriter.FlushAsync();
Assert.Equal(2, mockPipeWriter.FlushCallCount); Assert.Equal(2, mockPipeWriter.FlushCallCount);
pipeWriterFlushTcsArray[1].SetResult(default); pipeWriterFlushTcsArray[1].SetResult(default);
}
await flushTask1.DefaultTimeout(); await flushTask.DefaultTimeout();
var completeEx = new Exception(); var completeEx = new Exception();
await concurrentPipeWriter.CompleteAsync(completeEx).DefaultTimeout(); ValueTask completeTask;
lock (sync)
{
completeTask = concurrentPipeWriter.CompleteAsync(completeEx);
}
await completeTask.DefaultTimeout();
Assert.Same(completeEx, mockPipeWriter.CompleteException); Assert.Same(completeEx, mockPipeWriter.CompleteException);
} }
} }

View File

@ -57,6 +57,8 @@ public class HubConnection {
private Map<String, Observable> streamMap = new ConcurrentHashMap<>(); private Map<String, Observable> streamMap = new ConcurrentHashMap<>();
private TransportEnum transportEnum = TransportEnum.ALL; private TransportEnum transportEnum = TransportEnum.ALL;
private String connectionId; private String connectionId;
private String connectionToken;
private final int negotiateVersion = 1;
private final Logger logger = LoggerFactory.getLogger(HubConnection.class); private final Logger logger = LoggerFactory.getLogger(HubConnection.class);
/** /**
@ -340,11 +342,12 @@ public class HubConnection {
}); });
stopError = null; stopError = null;
String urlWithQS = Utils.appendQueryString(baseUrl, "negotiateVersion=" + negotiateVersion);
Single<NegotiateResponse> negotiate = null; Single<NegotiateResponse> negotiate = null;
if (!skipNegotiate) { if (!skipNegotiate) {
negotiate = tokenCompletable.andThen(Single.defer(() -> startNegotiate(baseUrl, 0))); negotiate = tokenCompletable.andThen(Single.defer(() -> startNegotiate(urlWithQS, 0)));
} else { } else {
negotiate = tokenCompletable.andThen(Single.defer(() -> Single.just(new NegotiateResponse(baseUrl)))); negotiate = tokenCompletable.andThen(Single.defer(() -> Single.just(new NegotiateResponse(urlWithQS))));
} }
CompletableSubject start = CompletableSubject.create(); CompletableSubject start = CompletableSubject.create();
@ -377,7 +380,6 @@ public class HubConnection {
hubConnectionStateLock.lock(); hubConnectionStateLock.lock();
try { try {
hubConnectionState = HubConnectionState.CONNECTED; hubConnectionState = HubConnectionState.CONNECTED;
this.connectionId = negotiateResponse.getConnectionId();
logger.info("HubConnection started."); logger.info("HubConnection started.");
resetServerTimeout(); resetServerTimeout();
//Don't send pings if we're using long polling. //Don't send pings if we're using long polling.
@ -447,19 +449,21 @@ public class HubConnection {
throw new RuntimeException("There were no compatible transports on the server."); throw new RuntimeException("There were no compatible transports on the server.");
} }
String finalUrl = url; if (response.getVersion() > 0) {
if (response.getConnectionId() != null) { this.connectionId = response.getConnectionId();
if (url.contains("?")) { this.connectionToken = response.getConnectionToken();
finalUrl = url + "&id=" + response.getConnectionId(); } else {
} else { this.connectionToken = this.connectionId = response.getConnectionId();
finalUrl = url + "?id=" + response.getConnectionId();
}
} }
String finalUrl = Utils.appendQueryString(url, "id=" + this.connectionToken);
response.setFinalUrl(finalUrl); response.setFinalUrl(finalUrl);
return Single.just(response); return Single.just(response);
} }
return startNegotiate(response.getRedirectUrl(), negotiateAttempts + 1); String redirectUrl = Utils.appendQueryString(response.getRedirectUrl(), "negotiateVersion=" + negotiateVersion);
return startNegotiate(redirectUrl, negotiateAttempts + 1);
}); });
} }
@ -521,6 +525,7 @@ public class HubConnection {
handshakeResponseSubject.onComplete(); handshakeResponseSubject.onComplete();
redirectAccessTokenProvider = null; redirectAccessTokenProvider = null;
connectionId = null; connectionId = null;
connectionToken = null;
transportEnum = TransportEnum.ALL; transportEnum = TransportEnum.ALL;
this.localHeaders.clear(); this.localHeaders.clear();
this.streamMap.clear(); this.streamMap.clear();

View File

@ -10,7 +10,7 @@ class Negotiate {
// Check if we have a query string. If we do then we ignore it for now. // Check if we have a query string. If we do then we ignore it for now.
int queryStringIndex = url.indexOf('?'); int queryStringIndex = url.indexOf('?');
if (queryStringIndex > 0) { if (queryStringIndex > 0) {
negotiateUrl = url.substring(0, url.indexOf('?')); negotiateUrl = url.substring(0, queryStringIndex);
} else { } else {
negotiateUrl = url; negotiateUrl = url;
} }
@ -24,7 +24,7 @@ class Negotiate {
// Add the query string back if it existed. // Add the query string back if it existed.
if (queryStringIndex > 0) { if (queryStringIndex > 0) {
negotiateUrl += url.substring(url.indexOf('?')); negotiateUrl += url.substring(queryStringIndex);
} }
return negotiateUrl; return negotiateUrl;

View File

@ -11,11 +11,13 @@ import com.google.gson.stream.JsonReader;
class NegotiateResponse { class NegotiateResponse {
private String connectionId; private String connectionId;
private String connectionToken;
private Set<String> availableTransports = new HashSet<>(); private Set<String> availableTransports = new HashSet<>();
private String redirectUrl; private String redirectUrl;
private String accessToken; private String accessToken;
private String error; private String error;
private String finalUrl; private String finalUrl;
private int version;
public NegotiateResponse(JsonReader reader) { public NegotiateResponse(JsonReader reader) {
try { try {
@ -30,6 +32,12 @@ class NegotiateResponse {
case "ProtocolVersion": case "ProtocolVersion":
this.error = "Detected an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details."; this.error = "Detected an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.";
return; return;
case "negotiateVersion":
this.version = reader.nextInt();
break;
case "connectionToken":
this.connectionToken = reader.nextString();
break;
case "url": case "url":
this.redirectUrl = reader.nextString(); this.redirectUrl = reader.nextString();
break; break;
@ -106,6 +114,14 @@ class NegotiateResponse {
return finalUrl; return finalUrl;
} }
public int getVersion() {
return version;
}
public String getConnectionToken() {
return connectionToken;
}
public void setFinalUrl(String url) { public void setFinalUrl(String url) {
this.finalUrl = url; this.finalUrl = url;
} }

View File

@ -0,0 +1,14 @@
// 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.
package com.microsoft.signalr;
class Utils {
public static String appendQueryString(String original, String queryStringValue) {
if (original.contains("?")) {
return original + "&" + queryStringValue;
} else {
return original + "?" + queryStringValue;
}
}
}

View File

@ -1,4 +1,3 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

View File

@ -1714,12 +1714,12 @@ class HubConnectionTest {
List<HttpRequest> sentRequests = client.getSentRequests(); List<HttpRequest> sentRequests = client.getSentRequests();
assertEquals(1, sentRequests.size()); assertEquals(1, sentRequests.size());
assertEquals("http://example.com/negotiate", sentRequests.get(0).getUrl()); assertEquals("http://example.com/negotiate?negotiateVersion=1", sentRequests.get(0).getUrl());
} }
@Test @Test
public void negotiateThatRedirectsForeverFailsAfter100Tries() { public void negotiateThatRedirectsForeverFailsAfter100Tries() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://example.com\"}"))); (req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://example.com\"}")));
HubConnection hubConnection = HubConnectionBuilder HubConnection hubConnection = HubConnectionBuilder
@ -1752,7 +1752,7 @@ class HubConnectionTest {
@Test @Test
public void connectionIdIsAvailableAfterStart() { public void connectionIdIsAvailableAfterStart() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", (req) -> Single.just(new HttpResponse(200, "",
"{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"))); + "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
@ -1775,9 +1775,62 @@ class HubConnectionTest {
assertNull(hubConnection.getConnectionId()); assertNull(hubConnection.getConnectionId());
} }
@Test
public void connectionTokenAppearsInQSConnectionIdIsOnConnectionInstance() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "",
"{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\"," +
"\"negotiateVersion\": 1," +
"\"connectionToken\":\"connection-token-value\"," +
"\"availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
MockTransport transport = new MockTransport(true);
HubConnection hubConnection = HubConnectionBuilder
.create("http://example.com")
.withTransportImplementation(transport)
.withHttpClient(client)
.build();
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
assertNull(hubConnection.getConnectionId());
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", hubConnection.getConnectionId());
assertEquals("http://example.com?negotiateVersion=1&id=connection-token-value", transport.getUrl());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
assertNull(hubConnection.getConnectionId());
}
@Test
public void connectionTokenIsIgnoredIfNegotiateVersionIsNotPresentInNegotiateResponse() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "",
"{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\"," +
"\"connectionToken\":\"connection-token-value\"," +
"\"availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
MockTransport transport = new MockTransport(true);
HubConnection hubConnection = HubConnectionBuilder
.create("http://example.com")
.withTransportImplementation(transport)
.withHttpClient(client)
.build();
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
assertNull(hubConnection.getConnectionId());
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", hubConnection.getConnectionId());
assertEquals("http://example.com?negotiateVersion=1&id=bVOiRPG8-6YiJ6d7ZcTOVQ", transport.getUrl());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
assertNull(hubConnection.getConnectionId());
}
@Test @Test
public void afterSuccessfulNegotiateConnectsWithWebsocketsTransport() { public void afterSuccessfulNegotiateConnectsWithWebsocketsTransport() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", (req) -> Single.just(new HttpResponse(200, "",
"{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"))); + "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
@ -1798,7 +1851,7 @@ class HubConnectionTest {
@Test @Test
public void afterSuccessfulNegotiateConnectsWithLongPollingTransport() { public void afterSuccessfulNegotiateConnectsWithLongPollingTransport() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", (req) -> Single.just(new HttpResponse(200, "",
"{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"LongPolling\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"))); + "availableTransports\":[{\"transport\":\"LongPolling\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
@ -1891,7 +1944,7 @@ class HubConnectionTest {
@Test @Test
public void receivingServerSentEventsTransportFromNegotiateFails() { public void receivingServerSentEventsTransportFromNegotiateFails() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", (req) -> Single.just(new HttpResponse(200, "",
"{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"ServerSentEvents\",\"transferFormats\":[\"Text\"]}]}"))); + "availableTransports\":[{\"transport\":\"ServerSentEvents\",\"transferFormats\":[\"Text\"]}]}")));
@ -1911,7 +1964,7 @@ class HubConnectionTest {
@Test @Test
public void negotiateThatReturnsErrorThrowsFromStart() { public void negotiateThatReturnsErrorThrowsFromStart() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", "{\"error\":\"Test error.\"}"))); (req) -> Single.just(new HttpResponse(200, "", "{\"error\":\"Test error.\"}")));
MockTransport transport = new MockTransport(true); MockTransport transport = new MockTransport(true);
@ -1928,7 +1981,7 @@ class HubConnectionTest {
@Test @Test
public void DetectWhenTryingToConnectToClassicSignalRServer() { public void DetectWhenTryingToConnectToClassicSignalRServer() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", "{\"Url\":\"/signalr\"," + (req) -> Single.just(new HttpResponse(200, "", "{\"Url\":\"/signalr\"," +
"\"ConnectionToken\":\"X97dw3uxW4NPPggQsYVcNcyQcuz4w2\"," + "\"ConnectionToken\":\"X97dw3uxW4NPPggQsYVcNcyQcuz4w2\"," +
"\"ConnectionId\":\"05265228-1e2c-46c5-82a1-6a5bcc3f0143\"," + "\"ConnectionId\":\"05265228-1e2c-46c5-82a1-6a5bcc3f0143\"," +
@ -1954,9 +2007,9 @@ class HubConnectionTest {
@Test @Test
public void negotiateRedirectIsFollowed() { public void negotiateRedirectIsFollowed() {
TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate", TestHttpClient client = new TestHttpClient().on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\"}"))) (req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\"}")))
.on("POST", "http://testexample.com/negotiate", .on("POST", "http://testexample.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" (req) -> Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"))); + "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
@ -1978,11 +2031,11 @@ class HubConnectionTest {
AtomicReference<String> beforeRedirectToken = new AtomicReference<>(); AtomicReference<String> beforeRedirectToken = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", (req) -> { .on("POST", "http://example.com/negotiate?negotiateVersion=1", (req) -> {
beforeRedirectToken.set(req.getHeaders().get("Authorization")); beforeRedirectToken.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"newToken\"}")); return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"newToken\"}"));
}) })
.on("POST", "http://testexample.com/negotiate", (req) -> { .on("POST", "http://testexample.com/negotiate?negotiateVersion=1", (req) -> {
token.set(req.getHeaders().get("Authorization")); token.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")); + "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"));
@ -2018,7 +2071,7 @@ class HubConnectionTest {
public void accessTokenProviderIsUsedForNegotiate() { public void accessTokenProviderIsUsedForNegotiate() {
AtomicReference<String> token = new AtomicReference<>(); AtomicReference<String> token = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
token.set(req.getHeaders().get("Authorization")); token.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2043,11 +2096,13 @@ class HubConnectionTest {
public void accessTokenProviderIsOverriddenFromRedirectNegotiate() { public void accessTokenProviderIsOverriddenFromRedirectNegotiate() {
AtomicReference<String> token = new AtomicReference<>(); AtomicReference<String> token = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", (req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"newToken\"}"))) .on("POST", "http://example.com/negotiate?negotiateVersion=1", (req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"newToken\"}")))
.on("POST", "http://testexample.com/negotiate", (req) -> { .on("POST", "http://testexample.com/negotiate?negotiateVersion=1", (req) -> {
token.set(req.getHeaders().get("Authorization")); token.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\","
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")); + "\"connectionToken\":\"connection-token-value\","
+ "\"negotiateVersion\":1,"
+ "\"availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"));
}); });
MockTransport transport = new MockTransport(true); MockTransport transport = new MockTransport(true);
@ -2060,7 +2115,7 @@ class HubConnectionTest {
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait(); hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState()); assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("http://testexample.com/?id=bVOiRPG8-6YiJ6d7ZcTOVQ", transport.getUrl()); assertEquals("http://testexample.com/?negotiateVersion=1&id=connection-token-value", transport.getUrl());
hubConnection.stop(); hubConnection.stop();
assertEquals("Bearer newToken", token.get()); assertEquals("Bearer newToken", token.get());
} }
@ -2071,14 +2126,14 @@ class HubConnectionTest {
AtomicReference<String> beforeRedirectToken = new AtomicReference<>(); AtomicReference<String> beforeRedirectToken = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", (req) -> { .on("POST", "http://example.com/negotiate?negotiateVersion=1", (req) -> {
beforeRedirectToken.set(req.getHeaders().get("Authorization")); beforeRedirectToken.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"newToken\"}")); return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"newToken\"}"));
}) })
.on("POST", "http://testexample.com/negotiate", (req) -> { .on("POST", "http://testexample.com/negotiate?negotiateVersion=1", (req) -> {
token.set(req.getHeaders().get("Authorization")); token.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\","
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")); + "\"availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"));
}); });
MockTransport transport = new MockTransport(true); MockTransport transport = new MockTransport(true);
@ -2112,7 +2167,7 @@ class HubConnectionTest {
AtomicInteger redirectCount = new AtomicInteger(); AtomicInteger redirectCount = new AtomicInteger();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", (req) -> { .on("POST", "http://example.com/negotiate?negotiateVersion=1", (req) -> {
if (redirectCount.get() == 0) { if (redirectCount.get() == 0) {
redirectCount.incrementAndGet(); redirectCount.incrementAndGet();
redirectToken.set(req.getHeaders().get("Authorization")); redirectToken.set(req.getHeaders().get("Authorization"));
@ -2122,7 +2177,7 @@ class HubConnectionTest {
return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"secondRedirectToken\"}")); return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"secondRedirectToken\"}"));
} }
}) })
.on("POST", "http://testexample.com/negotiate", (req) -> { .on("POST", "http://testexample.com/negotiate?negotiateVersion=1", (req) -> {
token.set(req.getHeaders().get("Authorization")); token.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")); + "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"));
@ -2189,7 +2244,7 @@ class HubConnectionTest {
public void userAgentHeaderIsSet() { public void userAgentHeaderIsSet() {
AtomicReference<String> header = new AtomicReference<>(); AtomicReference<String> header = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
header.set(req.getHeaders().get("User-Agent")); header.set(req.getHeaders().get("User-Agent"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2213,7 +2268,7 @@ class HubConnectionTest {
public void userAgentHeaderCanBeOverwritten() { public void userAgentHeaderCanBeOverwritten() {
AtomicReference<String> header = new AtomicReference<>(); AtomicReference<String> header = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
header.set(req.getHeaders().get("User-Agent")); header.set(req.getHeaders().get("User-Agent"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2237,7 +2292,7 @@ class HubConnectionTest {
public void userAgentCanBeCleared() { public void userAgentCanBeCleared() {
AtomicReference<String> header = new AtomicReference<>(); AtomicReference<String> header = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
header.set(req.getHeaders().get("User-Agent")); header.set(req.getHeaders().get("User-Agent"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2260,7 +2315,7 @@ class HubConnectionTest {
public void headersAreSetAndSentThroughBuilder() { public void headersAreSetAndSentThroughBuilder() {
AtomicReference<String> header = new AtomicReference<>(); AtomicReference<String> header = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
header.set(req.getHeaders().get("ExampleHeader")); header.set(req.getHeaders().get("ExampleHeader"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2285,7 +2340,7 @@ class HubConnectionTest {
public void headersAreNotClearedWhenConnectionIsRestarted() { public void headersAreNotClearedWhenConnectionIsRestarted() {
AtomicReference<String> header = new AtomicReference<>(); AtomicReference<String> header = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
header.set(req.getHeaders().get("Authorization")); header.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2315,12 +2370,12 @@ class HubConnectionTest {
AtomicReference<String> afterRedirectHeader = new AtomicReference<>(); AtomicReference<String> afterRedirectHeader = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
beforeRedirectHeader.set(req.getHeaders().get("Authorization")); beforeRedirectHeader.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"redirectToken\"}\"}")); return Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\",\"accessToken\":\"redirectToken\"}\"}"));
}) })
.on("POST", "http://testexample.com/negotiate", .on("POST", "http://testexample.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
afterRedirectHeader.set(req.getHeaders().get("Authorization")); afterRedirectHeader.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2358,7 +2413,7 @@ class HubConnectionTest {
public void sameHeaderSetTwiceGetsOverwritten() { public void sameHeaderSetTwiceGetsOverwritten() {
AtomicReference<String> header = new AtomicReference<>(); AtomicReference<String> header = new AtomicReference<>();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> { (req) -> {
header.set(req.getHeaders().get("ExampleHeader")); header.set(req.getHeaders().get("ExampleHeader"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
@ -2403,8 +2458,8 @@ class HubConnectionTest {
public void hubConnectionCanBeStartedAfterBeingStoppedAndRedirected() { public void hubConnectionCanBeStartedAfterBeingStoppedAndRedirected() {
MockTransport mockTransport = new MockTransport(); MockTransport mockTransport = new MockTransport();
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", (req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\"}"))) .on("POST", "http://example.com/negotiate?negotiateVersion=1", (req) -> Single.just(new HttpResponse(200, "", "{\"url\":\"http://testexample.com/\"}")))
.on("POST", "http://testexample.com/negotiate", (req) -> Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" .on("POST", "http://testexample.com/negotiate?negotiateVersion=1", (req) -> Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"))); + "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}")));
HubConnection hubConnection = HubConnectionBuilder HubConnection hubConnection = HubConnectionBuilder
@ -2426,7 +2481,7 @@ class HubConnectionTest {
@Test @Test
public void non200FromNegotiateThrowsError() { public void non200FromNegotiateThrowsError() {
TestHttpClient client = new TestHttpClient() TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate", .on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> Single.just(new HttpResponse(500, "Internal server error", ""))); (req) -> Single.just(new HttpResponse(500, "Internal server error", "")));
MockTransport transport = new MockTransport(); MockTransport transport = new MockTransport();

View File

@ -15,8 +15,9 @@ import com.google.gson.stream.JsonReader;
class NegotiateResponseTest { class NegotiateResponseTest {
@Test @Test
public void VerifyNegotiateResponse() { public void VerifyNegotiateResponse() {
String stringNegotiateResponse = "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\"" + String stringNegotiateResponse = "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\"," +
"availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}," + "\"negotiateVersion\": 99, \"connectionToken\":\"connection-token-value\"," +
"\"availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}," +
"{\"transport\":\"ServerSentEvents\",\"transferFormats\":[\"Text\"]}," + "{\"transport\":\"ServerSentEvents\",\"transferFormats\":[\"Text\"]}," +
"{\"transport\":\"LongPolling\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"; "{\"transport\":\"LongPolling\",\"transferFormats\":[\"Text\",\"Binary\"]}]}";
NegotiateResponse negotiateResponse = new NegotiateResponse(new JsonReader(new StringReader(stringNegotiateResponse))); NegotiateResponse negotiateResponse = new NegotiateResponse(new JsonReader(new StringReader(stringNegotiateResponse)));
@ -26,6 +27,8 @@ class NegotiateResponseTest {
assertNull(negotiateResponse.getAccessToken()); assertNull(negotiateResponse.getAccessToken());
assertNull(negotiateResponse.getRedirectUrl()); assertNull(negotiateResponse.getRedirectUrl());
assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", negotiateResponse.getConnectionId()); assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", negotiateResponse.getConnectionId());
assertEquals("connection-token-value", negotiateResponse.getConnectionToken());
assertEquals(99, negotiateResponse.getVersion());
} }
@Test @Test
@ -56,4 +59,23 @@ class NegotiateResponseTest {
NegotiateResponse negotiateResponse = new NegotiateResponse(new JsonReader(new StringReader(stringNegotiateResponse))); NegotiateResponse negotiateResponse = new NegotiateResponse(new JsonReader(new StringReader(stringNegotiateResponse)));
assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", negotiateResponse.getConnectionId()); assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", negotiateResponse.getConnectionId());
} }
@Test
public void NegotiateResponseWithNegotiateVersion() {
String stringNegotiateResponse = "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\"," +
"\"negotiateVersion\": 99}";
NegotiateResponse negotiateResponse = new NegotiateResponse(new JsonReader(new StringReader(stringNegotiateResponse)));
assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", negotiateResponse.getConnectionId());
assertEquals(99, negotiateResponse.getVersion());
}
@Test
public void NegotiateResponseWithConnectionToken() {
String stringNegotiateResponse = "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\"," +
"\"negotiateVersion\": 99, \"connectionToken\":\"connection-token-value\"}";
NegotiateResponse negotiateResponse = new NegotiateResponse(new JsonReader(new StringReader(stringNegotiateResponse)));
assertEquals("bVOiRPG8-6YiJ6d7ZcTOVQ", negotiateResponse.getConnectionId());
assertEquals("connection-token-value", negotiateResponse.getConnectionToken());
assertEquals(99, negotiateResponse.getVersion());
}
} }

View File

@ -30,17 +30,17 @@ public class UserAgentTest {
} }
@Test @Test
public void verifyJavaVendor(){ public void verifyJavaVendor() {
assertEquals(System.getProperty("java.vendor"), UserAgentHelper.getJavaVendor()); assertEquals(System.getProperty("java.vendor"), UserAgentHelper.getJavaVendor());
} }
@Test @Test
public void verifyJavaVersion(){ public void verifyJavaVersion() {
assertEquals(System.getProperty("java.version"), UserAgentHelper.getJavaVersion()); assertEquals(System.getProperty("java.version"), UserAgentHelper.getJavaVersion());
} }
@Test @Test
public void checkUserAgentString(){ public void checkUserAgentString() {
String userAgent = UserAgentHelper.createUserAgentString(); String userAgent = UserAgentHelper.createUserAgentString();
assertNotNull(userAgent); assertNotNull(userAgent);

View File

@ -155,6 +155,17 @@ namespace Microsoft.DotNet.OpenApi.Add.Tests
Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content); Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content);
Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFile}\" CodeGenerator=\"NSwagTypeScript\" />", content); Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFile}\" CodeGenerator=\"NSwagTypeScript\" />", content);
} }
// Build project and make sure it compiles
using var buildProc = ProcessEx.Run(_outputHelper, _tempDir.Root, "dotnet", "build");
await buildProc.Exited;
Assert.True(buildProc.ExitCode == 0, $"Build failed: {buildProc.Output}");
// Run project and make sure it doesn't crash
using var runProc = ProcessEx.Run(_outputHelper, _tempDir.Root, "dotnet", "run");
Thread.Sleep(100);
Assert.False(runProc.HasExited, $"Run failed with: {runProc.Output}");
} }
[Fact] [Fact]
@ -178,6 +189,16 @@ namespace Microsoft.DotNet.OpenApi.Add.Tests
Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content); Assert.Contains("<PackageReference Include=\"NSwag.ApiDescription.Client\" Version=\"", content);
Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFile}\"", content); Assert.Contains($"<OpenApiReference Include=\"{nswagJsonFile}\"", content);
} }
// Build project and make sure it compiles
var buildProc = ProcessEx.Run(_outputHelper, _tempDir.Root, "dotnet", "build");
await buildProc.Exited;
Assert.True(buildProc.ExitCode == 0, $"Build failed: {buildProc.Output}");
// Run project and make sure it doesn't crash
using var runProc = ProcessEx.Run(_outputHelper, _tempDir.Root, "dotnet", "run");
Thread.Sleep(100);
Assert.False(runProc.HasExited, $"Run failed with: {runProc.Output}");
} }
[Fact] [Fact]

View File

@ -9,6 +9,7 @@
<PackAsTool>true</PackAsTool> <PackAsTool>true</PackAsTool>
<!-- This package is for internal use only. It contains a CLI which is bundled in the .NET Core SDK. --> <!-- This package is for internal use only. It contains a CLI which is bundled in the .NET Core SDK. -->
<IsShippingPackage>false</IsShippingPackage> <IsShippingPackage>false</IsShippingPackage>
<ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -91,7 +91,7 @@ namespace Microsoft.Extensions.SecretManager.Tools.Internal
var existingUserSecretsId = projectDocument.XPathSelectElements("//UserSecretsId").FirstOrDefault(); var existingUserSecretsId = projectDocument.XPathSelectElements("//UserSecretsId").FirstOrDefault();
// Check if a UserSecretsId is already set // Check if a UserSecretsId is already set
if (existingUserSecretsId != default) if (existingUserSecretsId != null)
{ {
// Only set the UserSecretsId if the user specified an explicit value // Only set the UserSecretsId if the user specified an explicit value
if (string.IsNullOrWhiteSpace(OverrideId)) if (string.IsNullOrWhiteSpace(OverrideId))

View File

@ -10,6 +10,7 @@
<PackAsTool>true</PackAsTool> <PackAsTool>true</PackAsTool>
<!-- This package is for internal use only. It contains a CLI which is bundled in the .NET Core SDK. --> <!-- This package is for internal use only. It contains a CLI which is bundled in the .NET Core SDK. -->
<IsShippingPackage>false</IsShippingPackage> <IsShippingPackage>false</IsShippingPackage>
<ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -9,6 +9,7 @@
<PackAsTool>true</PackAsTool> <PackAsTool>true</PackAsTool>
<!-- This package is for internal use only. It contains a CLI which is bundled in the .NET Core SDK. --> <!-- This package is for internal use only. It contains a CLI which is bundled in the .NET Core SDK. -->
<IsShippingPackage>false</IsShippingPackage> <IsShippingPackage>false</IsShippingPackage>
<ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>