merge from master (#9)

merge from master

Co-authored-by: Nick Darvey <nickdarvey@outlook.com.au>
Co-authored-by: David Fowler <davidfowl@gmail.com>
Co-authored-by: Pranav K <prkrishn@hotmail.com>
Co-authored-by: Ryan Nowak <nowakra@gmail.com>
Co-authored-by: Justin Kotalik <jkotalik12@gmail.com>
Co-authored-by: Kristian Hellang <kristian@hellang.com>
Co-authored-by: Ajay Bhargav Baaskaran <ajaybhargavb@gmail.com>
Co-authored-by: null <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Hao Kung <HaoK@users.noreply.github.com>
Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Co-authored-by: Chris Ross <Tratcher@Outlook.com>
Co-authored-by: Thomas Levesque <thomaslevesque@users.noreply.github.com>
Co-authored-by: Javier Calvarro Nelson <jacalvar@microsoft.com>
Co-authored-by: Mikael Mengistu <mikaelm12@users.noreply.github.com>
Co-authored-by: Stephen Halter <halter73@gmail.com>
Co-authored-by: Brennan <brecon@microsoft.com>
Co-authored-by: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Co-authored-by: Andrew Stanton-Nurse <andrew@stanton-nurse.com>
Co-authored-by: Jacques Eloff <joeloff@users.noreply.github.com>
Co-authored-by: John Luo <johluo@microsoft.com>
Co-authored-by: huysentruitw <wouter_huysentruit@hotmail.com>
Co-authored-by: Ben Adams <thundercat@illyriad.co.uk>
Co-authored-by: Dylan Dmitri Gray <d.dylan.g@gmail.com>
Co-authored-by: Nate McMaster <natemcmaster@users.noreply.github.com>
Co-authored-by: dotnet-maestro <@dotnet-maestro>
Co-authored-by: Daniel Roth <daroth@microsoft.com>
This commit is contained in:
Isaac Levin 2019-07-01 13:05:10 -04:00 committed by GitHub
commit ff1065070c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
653 changed files with 6390 additions and 5354 deletions

View File

@ -10,8 +10,8 @@ pr:
jobs:
- template: jobs/default-build.yml
parameters:
jobName: Helix
jobDisplayName: 'Tests: Helix'
jobName: Helix_x64
jobDisplayName: 'Tests: Helix x64'
agentOs: Windows
timeoutInMinutes: 240
steps:
@ -25,3 +25,23 @@ jobs:
- name: Helix_logs
path: artifacts/log/
publishOnError: true
# Build Helix ARM64
- template: jobs/default-build.yml
parameters:
jobName: Helix_arm64
jobDisplayName: "Tests: Helix ARM64"
agentOs: Linux
timeoutInMinutes: 240
steps:
- script: ./restore.sh -ci
displayName: Restore
- script: ./build.sh -ci --arch arm64 -test --no-build-nodejs -projects $(Build.SourcesDirectory)/eng/helix/helix.proj /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildNative=true -bl
displayName: Run build.sh helix arm64 target
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
installNodeJs: false
artifacts:
- name: Helix_arm64_logs
path: artifacts/logs/
publishOnError: true

2
.gitignore vendored
View File

@ -39,4 +39,4 @@ modules/
launchSettings.json
msbuild.ProjectImports.zip
StyleCop.Cache
UpgradeLog.htm
UpgradeLog.htm

View File

@ -25,7 +25,12 @@
<PackageBrandingVersion>$(VersionPrefix)</PackageBrandingVersion>
<PackageBrandingVersion Condition=" '$(VersionSuffix)' != '' ">$(PackageBrandingVersion) $(BrandingVersionSuffix.Trim())</PackageBrandingVersion>
<SiteExtensionSuffix>$(VersionSuffix.Replace('.','-'))</SiteExtensionSuffix>
<SiteExtensionPackageVersion>$(VersionPrefix)-$(SiteExtensionSuffix)</SiteExtensionPackageVersion>
<OriginalPackageVersion>$(Version)</OriginalPackageVersion>
<PackageVersion Condition=" '$(PackageVersion)' == '' ">$(Version)</PackageVersion>
<PackageVersion Condition=" '$(NoSemVer20)' == 'true' ">$(SiteExtensionPackageVersion)</PackageVersion>
<SharedFxVersion>$(PackageVersion)</SharedFxVersion>
<TargetingPackVersion>$(TargetingPackVersionPrefix)</TargetingPackVersion>
@ -93,6 +98,10 @@
<BuildHelixPayload Condition="'$(BuildHelixPayload)' == '' AND '$(IsTestProject)' == 'true'">true</BuildHelixPayload>
</PropertyGroup>
<ItemGroup Condition="'$(Language)' == 'C#' AND '$(IsReferenceAssemblyProject)' == 'true'">
<Compile Include="$(SharedSourceRoot)ReferenceAssemblyInfo.cs" LinkBase="Properties" />
</ItemGroup>
<ItemGroup>
<KnownFrameworkReference Update="Microsoft.NETCore.App">
<!-- Always update the 'latest version', whether the repo is servicing or not. -->

View File

@ -1,12 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<!--
Restore sources should be defined in eng/Versions.props.
The only allowed feeds here are dotnet-core and nuget.org, which is required to work around
https://github.com/Microsoft/msbuild/issues/2914
-->
<add key="dotnet-core" value="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>

View File

@ -24,6 +24,8 @@
<FileExtensionSignInfo Include=".nupkg" CertificateName="NuGet" />
<FileExtensionSignInfo Include=".vsix" CertificateName="VsixSHA2" />
<FileExtensionSignInfo Include=".zip" CertificateName="None" />
<FileExtensionSignInfo Include=".cab" CertificateName="None" />
<FileExtensionSignInfo Include=".msi" CertificateName="None" />
<!--
Use the PublicKeyToken of .NET assemblies to determine with authenticode cert to use.

View File

@ -9,400 +9,400 @@
-->
<Dependencies>
<ProductDependencies>
<Dependency Name="Microsoft.AspNetCore.Blazor.Mono" Version="0.10.0-preview7.19323.1">
<Dependency Name="Microsoft.AspNetCore.Blazor.Mono" Version="0.10.0-preview7.19351.1">
<Uri>https://github.com/aspnet/Blazor</Uri>
<Sha>8df334032840bda9221fe281890e88fb1de06845</Sha>
<Sha>10ac2538243650ab287ba9fafe6d05e30c40f9ae</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview7.19321.2">
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview7.19328.6">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview7.19321.2">
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview7.19328.6">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview7.19321.2">
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview7.19328.6">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
</Dependency>
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview7.19321.2">
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview7.19328.6">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
</Dependency>
<Dependency Name="dotnet-ef" Version="3.0.0-preview7.19313.2">
<Dependency Name="dotnet-ef" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview7.19313.2">
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview7.19313.2">
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview7.19313.2">
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview7.19313.2">
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview7.19313.2">
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview7.19313.2">
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview7.19330.4">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<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>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
</Dependency>
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Text.Json" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Text.Json" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview7-27812-08" CoherentParentDependency="Microsoft.Extensions.Logging">
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview7-27826-20" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
</Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="3.0.0-preview7-27812-08" CoherentParentDependency="Microsoft.Extensions.Logging">
<Dependency Name="Microsoft.NETCore.App.Ref" Version="3.0.0-preview7-27826-20" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
</Dependency>
<!--
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
All Runtime.$rid packages should have the same version.
-->
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="3.0.0-preview7-27812-08" CoherentParentDependency="Microsoft.Extensions.Logging">
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="3.0.0-preview7-27826-20" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
</Dependency>
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview7-27812-08" CoherentParentDependency="Microsoft.Extensions.Logging">
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview7-27826-20" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview7.19312.3" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview7.19326.13" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
</Dependency>
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19323.4">
<Uri>https://github.com/dotnet/arcade</Uri>
@ -416,9 +416,9 @@
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>9946534da4f73e6242ca105f6798ab58119c9ab0</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview7.19312.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview7.19328.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
</Dependency>
</ToolsetDependencies>
</Dependencies>

View File

@ -54,110 +54,110 @@
<!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19323.4</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/core-setup -->
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview7-27812-08</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>3.0.0-preview7-27812-08</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.0.0-preview7-27812-08</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0-preview7-27812-08</NETStandardLibraryRefPackageVersion>
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview7-27826-20</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>3.0.0-preview7-27826-20</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.0.0-preview7-27826-20</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0-preview7-27826-20</NETStandardLibraryRefPackageVersion>
<!-- Packages from dotnet/corefx -->
<MicrosoftBclAsyncInterfacesPackageVersion>1.0.0-preview7.19312.3</MicrosoftBclAsyncInterfacesPackageVersion>
<MicrosoftCSharpPackageVersion>4.6.0-preview7.19312.3</MicrosoftCSharpPackageVersion>
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview7.19312.3</MicrosoftWin32RegistryPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview7.19312.3</SystemComponentModelAnnotationsPackageVersion>
<MicrosoftBclAsyncInterfacesPackageVersion>1.0.0-preview7.19326.13</MicrosoftBclAsyncInterfacesPackageVersion>
<MicrosoftCSharpPackageVersion>4.6.0-preview7.19326.13</MicrosoftCSharpPackageVersion>
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview7.19326.13</MicrosoftWin32RegistryPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview7.19326.13</SystemComponentModelAnnotationsPackageVersion>
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview7.19312.3</SystemDiagnosticsEventLogPackageVersion>
<SystemIOPipelinesPackageVersion>4.6.0-preview7.19312.3</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview7.19312.3</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview7.19312.3</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>1.7.0-preview7.19312.3</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview7.19312.3</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview7.19312.3</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview7.19312.3</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview7.19312.3</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>4.6.0-preview7.19312.3</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview7.19312.3</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview7.19312.3</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>4.6.0-preview7.19312.3</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>4.6.0-preview7.19312.3</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>4.6.0-preview7.19312.3</SystemThreadingChannelsPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview7.19326.13</SystemDiagnosticsEventLogPackageVersion>
<SystemIOPipelinesPackageVersion>4.6.0-preview7.19326.13</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview7.19326.13</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview7.19326.13</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>1.7.0-preview7.19326.13</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview7.19326.13</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview7.19326.13</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview7.19326.13</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview7.19326.13</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>4.6.0-preview7.19326.13</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview7.19326.13</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview7.19326.13</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>4.6.0-preview7.19326.13</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>4.6.0-preview7.19326.13</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>4.6.0-preview7.19326.13</SystemThreadingChannelsPackageVersion>
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview7.19312.3</MicrosoftNETCorePlatformsPackageVersion>
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview7.19326.13</MicrosoftNETCorePlatformsPackageVersion>
<!-- Packages from aspnet/Blazor -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19323.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19351.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from aspnet/Extensions -->
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview7.19312.4</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview7.19312.4</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview7.19312.4</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsObjectPoolPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview7.19312.4</MicrosoftInternalExtensionsRefsPackageVersion>
<MicrosoftJSInteropPackageVersion>3.0.0-preview7.19312.4</MicrosoftJSInteropPackageVersion>
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview7.19312.4</MonoWebAssemblyInteropPackageVersion>
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview7.19328.2</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview7.19328.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview7.19328.2</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsObjectPoolPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview7.19328.2</MicrosoftInternalExtensionsRefsPackageVersion>
<MicrosoftJSInteropPackageVersion>3.0.0-preview7.19328.2</MicrosoftJSInteropPackageVersion>
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview7.19328.2</MonoWebAssemblyInteropPackageVersion>
<!-- Packages from aspnet/EntityFrameworkCore -->
<dotnetefPackageVersion>3.0.0-preview7.19313.2</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCorePackageVersion>
<dotnetefPackageVersion>3.0.0-preview7.19330.4</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCorePackageVersion>
<!-- Packages from aspnet/AspNetCore-Tooling -->
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview7.19321.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview7.19321.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview7.19321.2</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview7.19321.2</MicrosoftNETSdkRazorPackageVersion>
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview7.19328.6</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview7.19328.6</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview7.19328.6</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview7.19328.6</MicrosoftNETSdkRazorPackageVersion>
</PropertyGroup>
<!--
@ -217,8 +217,7 @@
<CastleCorePackageVersion>4.2.1</CastleCorePackageVersion>
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
<GrpcAspNetCoreServerPackageVersion>0.1.21-pre1</GrpcAspNetCoreServerPackageVersion>
<GrpcToolsPackageVersion>1.21.0</GrpcToolsPackageVersion>
<GrpcAspNetCorePackageVersion>0.1.22-pre1</GrpcAspNetCorePackageVersion>
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview3.4</IdentityServer4AspNetIdentityPackageVersion>
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkPackageVersion>
<IdentityServer4PackageVersion>3.0.0-preview3.4</IdentityServer4PackageVersion>

View File

@ -31,7 +31,6 @@
<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
</PropertyGroup>
<!-- Workaround for https://github.com/dotnet/arcade/issues/204 -->
<ItemGroup>
<PackageReference Include="Internal.AspNetCore.BuildTasks" PrivateAssets="All" Version="$(InternalAspNetCoreBuildTasksPackageVersion)" IsImplicitlyDefined="true" />
@ -58,4 +57,10 @@
</KnownFrameworkReference>
</ItemGroup>
<!-- Work around https://github.com/dotnet/cli/issues/11378. -->
<Target Name="_WorkaroundNetStandard" AfterTargets="ResolvePackageAssets">
<ItemGroup>
<TransitiveFrameworkReference Remove="NETStandard.Library" />
</ItemGroup>
</Target>
</Project>

View File

@ -9,16 +9,18 @@ if type -P "node" &>/dev/null; then
fi
node_version=$1
arch=$2
osname=`uname -s`
echo $osname
if [ "$osname" = "Darwin" ]; then
platformarch='darwin-x64'
platformarch="darwin-$arch"
else
platformarch='linux-x64'
platformarch="linux-$arch"
fi
echo "PlatformArch: $platformarch"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
output_dir="$DIR/node"
url="http://nodejs.org/dist/v$node_version/node-v$node_version-$platformarch.tar.gz"
echo "Downloading from: $url"
tmp="$(mktemp -d -t install-node.XXXXXX)"
trap "rm -rf $tmp" EXIT
cd "$tmp"

View File

@ -7,17 +7,18 @@ set targetFrameworkIdentifier=%2
set sdkVersion=%3
set runtimeVersion=%4
set helixQueue=%5
set arch=%6
set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk
set DOTNET_ROOT=%DOTNET_HOME%\x64
set DOTNET_ROOT=%DOTNET_HOME%\%arch%
set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
set DOTNET_MULTILEVEL_LOOKUP=0
set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home
set PATH=%DOTNET_ROOT%;%PATH%;%HELIX_CORRELATION_PAYLOAD%\node\bin
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture x64 -Version %sdkVersion% -InstallDir %DOTNET_ROOT%"
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture x64 -Runtime dotnet -Version %runtimeVersion% -InstallDir %DOTNET_ROOT%"
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %arch% -Version %sdkVersion% -InstallDir %DOTNET_ROOT%"
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %arch% -Runtime dotnet -Version %runtimeVersion% -InstallDir %DOTNET_ROOT%"
set HELIX=%helixQueue%

View File

@ -27,7 +27,7 @@
<PropertyGroup Condition=" '$(ContinuousIntegrationBuild)' == 'true' ">
<HelixType>ci</HelixType>
<Creator>aspnetcore</Creator>
<HelixBuild>$(BUILD_BUILDNUMBER).$(SYSTEM_JOBATTEMPT)</HelixBuild>
<HelixBuild>$(BUILD_BUILDNUMBER).$(TargetArchitecture).$(SYSTEM_JOBATTEMPT)</HelixBuild>
<WaitForWorkItemCompletion>true</WaitForWorkItemCompletion>
<EnableAzurePipelinesReporter>true</EnableAzurePipelinesReporter>
<FailOnMissionControlTestFailure>true</FailOnMissionControlTestFailure>

View File

@ -10,7 +10,10 @@
<HelixAvailablePlatform Include="Windows" />
<HelixAvailablePlatform Include="OSX" />
<HelixAvailablePlatform Include="Linux" />
</ItemGroup>
<!-- x64 queues -->
<ItemGroup Condition="'$(IsWindowsOnlyTest)' != 'true' AND '$(TargetArchitecture)' == 'x64'">
<HelixAvailableTargetQueue Include="Windows.10.Amd64.ClientRS4.VS2017.Open" Platform="Windows" />
<HelixAvailableTargetQueue Include="Windows.81.Amd64.Open" Platform="Windows" />
<HelixAvailableTargetQueue Include="Windows.7.Amd64.Open" Platform="Windows" />
@ -23,8 +26,16 @@
<HelixAvailableTargetQueue Include="Debian.9.Amd64.Open" Platform="Linux" />
<HelixAvailableTargetQueue Include="Redhat.7.Amd64.Open" Platform="Linux" />
<HelixAvailableTargetQueue Include="(Fedora.28.Amd64.Open)Ubuntu.1604.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-28-helix-09ca40b-20190508143249" Platform="Linux" />
<!-- TODO: re-enable Debian.9.Arm64.Open and Ubuntu.1804.Arm64.Open -->
</ItemGroup>
<ItemGroup Condition="'$(IsWindowsOnlyTest)' != 'true' AND '$(TargetArchitecture)' == 'arm64'">
<!-- arm64 queues -->
<HelixAvailableTargetQueue Include="(Debian.9.Arm64.Open)Ubuntu.1604.Arm64.Docker.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-0a0ebdd-20190312215438" Platform="Linux" />
<!-- Need to resolve permission issues on this docker queue
<HelixAvailableTargetQueue Include="(Alpine.38.Arm64)Ubuntu.1604.Arm64.Docker@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-arm64v8-46e69dd-20190327215724" Platform="Linux" />
<HelixAvailableTargetQueue Include="(Ubuntu-1804.Arm64.Open)Ubuntu.1604.Arm64.Docker.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm64v8-6f28fa9-20190606004102" Platform="Linux" />
-->
</ItemGroup>
<ItemGroup Condition="'$(IsWindowsOnlyTest)' == 'true'">

View File

@ -37,7 +37,7 @@
</ItemGroup>
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'false'">
<HelixPreCommand Include="./installnode.sh $(NodeVersion)" />
<HelixPreCommand Include="./installnode.sh $(NodeVersion) $(TargetArchitecture)" />
</ItemGroup>
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'true'">

View File

@ -49,8 +49,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
<PropertyGroup>
<BuildHelixPayload Condition="'@(_HelixApplicableTargetQueue->Count())' == '0'">false</BuildHelixPayload>
<BuildHelixPayload Condition="'$(TargetArchitecture)' == 'arm64' AND '$(SkipHelixArm)' == 'true'">false</BuildHelixPayload>
</PropertyGroup>
</Target>
<Target Name="_PublishHelixArchive" DependsOnTargets="Publish" >
@ -78,8 +78,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
<TestAssembly>$(TargetFileName)</TestAssembly>
<PreCommands>@(HelixPreCommand)</PreCommands>
<PostCommands>@(HelixPostCommand)</PostCommands>
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(TargetFrameworkIdentifier) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue)</Command>
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue)</Command>
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(TargetFrameworkIdentifier) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture)</Command>
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture)</Command>
<Timeout>$(HelixTimeout)</Timeout>
</HelixWorkItem>
</ItemGroup>

View File

@ -13,6 +13,11 @@
<_BackupPackageJson>$(IntermediateOutputPath)$(MSBuildProjectName).package.json.bak</_BackupPackageJson>
</PropertyGroup>
<ItemGroup>
<TSFiles Include="$(MSBuildProjectDirectory)\*\*.ts" />
<TSFiles Include="$(MSBuildProjectDirectory)\package.json" />
</ItemGroup>
<Target Name="_CheckForInvalidConfiguration">
<Error Text="Missing expected property: PackageId" Condition="'$(IsPackable)' != 'false' and '$(PackageId)' == ''" />
</Target>
@ -31,8 +36,14 @@
BuildInParallel="true" />
</Target>
<Target Name="Build" DependsOnTargets="PrepareForBuild;ResolveProjectReferences">
<Yarn Command="run build" Condition="'$(IsBuildable)' != 'false'" StandardOutputImportance="High" StandardErrorImportance="High" />
<Target Name="Build" DependsOnTargets="PrepareForBuild;ResolveProjectReferences;_Build" />
<Target Name="_Build"
Condition="'$(IsBuildable)' != 'false'"
Inputs="@(TSFiles)"
Outputs="$(BaseIntermediateOutputPath)\build-sentinel" >
<Yarn Command="run build" StandardOutputImportance="High" StandardErrorImportance="High" />
<WriteLinesToFile Overwrite="true" File="$(BaseIntermediateOutputPath)\build-sentinel" />
</Target>
<PropertyGroup>

View File

@ -14,6 +14,7 @@
<_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)">
<PackageId>$(PackageId)</PackageId>
<PackageVersion>$(PackageVersion)</PackageVersion>
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
<VersionVariableName>$(PackageId.Replace('.',''))PackageVersion</VersionVariableName>
</_ProjectPathWithVersion>
</ItemGroup>

View File

@ -76,10 +76,6 @@
</ItemGroup>
<PropertyGroup>
<ProjectListFile>$(MSBuildThisFileDirectory)..\eng\ProjectReferences.props</ProjectListFile>
<RefsTargetFramework>$(TargetFrameworks)</RefsTargetFramework>
<RefsTargetFramework Condition="'$(RefsTargetFramework)' == ''">$(TargetFramework)</RefsTargetFramework>
<ReferencesContent>
<![CDATA[
<ItemGroup Condition="'%24(TargetFramework)' == '$(TargetFramework)'">

View File

@ -23,6 +23,10 @@ namespace RepoTasks
[Required]
public string TargetFile { get; set; }
public string ManagedRoot { get; set; } = "";
public string NativeRoot { get; set; } = "";
/// <summary>
/// Extra attributes to place on the root node.
///
@ -46,7 +50,6 @@ namespace RepoTasks
{
Item = item,
Filename = Path.GetFileName(item.ItemSpec),
TargetPath = item.GetMetadata("TargetPath"),
AssemblyName = FileUtilities.GetAssemblyName(item.ItemSpec),
FileVersion = FileUtilities.GetFileVersion(item.ItemSpec),
IsNative = item.GetMetadata("IsNativeImage") == "true",
@ -55,15 +58,14 @@ namespace RepoTasks
.Where(f =>
!f.IsSymbolFile &&
(f.Filename.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || f.IsNative))
.OrderBy(f => f.TargetPath, StringComparer.Ordinal)
.ThenBy(f => f.Filename, StringComparer.Ordinal))
.OrderBy(f => f.Filename, StringComparer.Ordinal))
{
var element = new XElement(
"File",
new XAttribute("Type", f.IsNative ? "Native" : "Managed"),
new XAttribute(
"Path",
Path.Combine(f.TargetPath, f.Filename).Replace('\\', '/')));
Path.Combine(f.IsNative ? NativeRoot : ManagedRoot, f.Filename).Replace('\\', '/')));
if (f.AssemblyName != null)
{

View File

@ -1,9 +1,9 @@
{
"sdk": {
"version": "3.0.100-preview5-011568"
"version": "3.0.100-preview6-012264"
},
"tools": {
"dotnet": "3.0.100-preview5-011568",
"dotnet": "3.0.100-preview6-012264",
"runtimes": {
"dotnet/x64": [
"$(MicrosoftNETCoreAppRuntimeVersion)"

View File

@ -284,8 +284,7 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
var ex = Assert.Throws<ArgumentNullException>(
() => tokenProvider.TryValidateTokenSet(httpContext, null, fieldtoken, out message));
var trimmed = ex.Message.Substring(0, ex.Message.IndexOf(Environment.NewLine));
Assert.Equal(@"The required antiforgery cookie token must be provided.", trimmed);
Assert.StartsWith(@"The required antiforgery cookie token must be provided.", ex.Message);
}
[Fact]
@ -307,8 +306,7 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
var ex = Assert.Throws<ArgumentNullException>(
() => tokenProvider.TryValidateTokenSet(httpContext, cookieToken, null, out message));
var trimmed = ex.Message.Substring(0, ex.Message.IndexOf(Environment.NewLine));
Assert.Equal("The required antiforgery request token must be provided.", trimmed);
Assert.StartsWith("The required antiforgery request token must be provided.", ex.Message);
}
[Fact]
@ -625,4 +623,4 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
}
}
}
}
}

View File

@ -2,6 +2,8 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<!-- Test asset publishing not working on arm64 https://github.com/aspnet/AspNetCore/issues/11205 -->
<SkipHelixArm>true</SkipHelixArm>
</PropertyGroup>
<ItemGroup>

View File

@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
"Blazor._internal.http.sendAsync",
id,
request.Content == null ? null : await request.Content.ReadAsByteArrayAsync(),
JsonSerializer.ToString(options, JsonSerializerOptionsProvider.Options));
JsonSerializer.Serialize(options, JsonSerializerOptionsProvider.Options));
return await tcs.Task;
}
@ -100,7 +100,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
}
else
{
var responseDescriptor = JsonSerializer.Parse<ResponseDescriptor>(responseDescriptorJson, JsonSerializerOptionsProvider.Options);
var responseDescriptor = JsonSerializer.Deserialize<ResponseDescriptor>(responseDescriptorJson, JsonSerializerOptionsProvider.Options);
var responseContent = responseBodyData == null ? null : new ByteArrayContent(responseBodyData);
var responseMessage = responseDescriptor.ToResponseMessage(responseContent);
tcs.SetResult(responseMessage);

View File

@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Blazor.Build
assemblyReferences,
embeddedContent,
linkerEnabled);
return JsonSerializer.ToString(data, JsonSerializerOptionsProvider.Options);
return JsonSerializer.Serialize(data, JsonSerializerOptionsProvider.Options);
}
private static string GetAssemblyEntryPoint(string assemblyPath)

View File

@ -28,7 +28,7 @@
<PropertyGroup>
<RunCommand>dotnet</RunCommand>
<_BlazorCliLocation>$(MSBuildThisFileDirectory)../../DevServer/src/bin/$(Configuration)/netcoreapp3.0/blazor-devserver.dll</_BlazorCliLocation>
<RunArguments>exec &quot;$(_BlazorCliLocation)&quot; serve &quot;$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)&quot; $(AdditionalRunArguments)</RunArguments>
<RunArguments>exec &quot;$(_BlazorCliLocation)&quot; serve --applicationpath &quot;$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)&quot; $(AdditionalRunArguments)</RunArguments>
</PropertyGroup>
<ItemGroup>

View File

@ -1,11 +1,9 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Runtime.Versioning;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.CommandLineUtils;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Blazor.DevServer.Commands
{
@ -23,28 +21,11 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Commands
HelpOption("-?|-h|--help");
ApplicationPath = new CommandArgument()
{
Description = "Path to the client application dll",
MultipleValues = false,
Name = "<PATH>",
ShowInHelpText = true
};
Arguments.Add(ApplicationPath);
OnExecute(Execute);
}
public CommandArgument ApplicationPath { get; private set; }
private int Execute()
{
if (string.IsNullOrWhiteSpace(ApplicationPath.Value))
{
throw new InvalidOperationException($"Invalid value for parameter '{nameof(ApplicationPath)}'. Value supplied: '{ApplicationPath.Value}'");
}
Server.Startup.ApplicationAssembly = ApplicationPath.Value;
Server.Program.BuildWebHost(RemainingArguments.ToArray()).Run();
return 0;
}

View File

@ -19,6 +19,7 @@
<Reference Include="Microsoft.AspNetCore.ResponseCompression" />
<Reference Include="Microsoft.AspNetCore" />
<Reference Include="Microsoft.Extensions.CommandLineUtils.Sources" />
<Reference Include="Microsoft.Extensions.Hosting" />
</ItemGroup>
<!-- Pack settings -->

View File

@ -1,8 +1,15 @@
// 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.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Blazor.DevServer.Server
{
@ -18,12 +25,24 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
/// <summary>
/// Intended for framework test use only.
/// </summary>
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(new ConfigurationBuilder()
.AddCommandLine(args)
.Build())
.UseStartup<Startup>()
.Build();
public static IHost BuildWebHost(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(cb => {
var applicationPath = args.SkipWhile(a => a != "--applicationpath").Skip(1).FirstOrDefault();
var name = Path.ChangeExtension(applicationPath,".StaticWebAssets.xml");
if (name != null)
{
cb.AddInMemoryCollection(new Dictionary<string, string>
{
[WebHostDefaults.StaticWebAssetsKey] = name
});
}
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
}).Build();
}
}

View File

@ -17,7 +17,12 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
{
internal class Startup
{
public static string ApplicationAssembly { get; set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
@ -35,7 +40,7 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
public void Configure(IApplicationBuilder app, IWebHostEnvironment environment, IConfiguration configuration)
{
var applicationAssemblyFullPath = ResolveApplicationAssemblyFullPath(environment);
var applicationAssemblyFullPath = ResolveApplicationAssemblyFullPath();
app.UseDeveloperExceptionPage();
app.UseResponseCompression();
@ -54,15 +59,22 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
});
}
private static string ResolveApplicationAssemblyFullPath(IWebHostEnvironment environment)
private string ResolveApplicationAssemblyFullPath()
{
var applicationAssemblyFullPath = Path.Combine(environment.ContentRootPath, ApplicationAssembly);
if (!File.Exists(applicationAssemblyFullPath))
const string applicationPathKey = "applicationpath";
var configuredApplicationPath = Configuration.GetValue<string>(applicationPathKey);
if (string.IsNullOrEmpty(configuredApplicationPath))
{
throw new InvalidOperationException($"Application assembly not found at {applicationAssemblyFullPath}.");
throw new InvalidOperationException($"No value was supplied for the required option '{applicationPathKey}'.");
}
return applicationAssemblyFullPath;
var resolvedApplicationPath = Path.GetFullPath(configuredApplicationPath);
if (!File.Exists(resolvedApplicationPath))
{
throw new InvalidOperationException($"Application assembly not found at {resolvedApplicationPath}.");
}
return resolvedApplicationPath;
}
private static void EnableConfiguredPathbase(IApplicationBuilder app, IConfiguration configuration)

View File

@ -2,6 +2,6 @@
<PropertyGroup>
<_BlazorDevServerDll>$(MSBuildThisFileDirectory)../tools/blazor-devserver.dll</_BlazorDevServerDll>
<RunCommand>dotnet</RunCommand>
<RunArguments>&quot;$(_BlazorDevServerDll)&quot; serve &quot;$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)&quot;</RunArguments>
<RunArguments>&quot;$(_BlazorDevServerDll)&quot; serve --applicationpath &quot;$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)&quot;</RunArguments>
</PropertyGroup>
</Project>

View File

@ -2,7 +2,6 @@
"$schema": "http://json.schemastore.org/vs-2017.3.host",
"name": {
"text": "Blazor (ASP.NET Core hosted)",
"package": "{0CD94836-1526-4E85-87D3-FB5274C5AFC9}",
"id": "1050"
},
"description": {

View File

@ -4,7 +4,7 @@
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
int currentCount = 0;

View File

@ -40,6 +40,6 @@ else
protected override async Task OnInitAsync()
{
forecasts = await Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecasts");
forecasts = await Http.GetJsonAsync<WeatherForecast[]>("weatherforecast");
}
}

View File

@ -1,11 +1,11 @@
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">BlazorHosted-CSharp</a>
<button class="navbar-toggler" @onclick="@ToggleNavMenu">
<button class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">

View File

@ -4,7 +4,7 @@
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2093904">brief survey</a>
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2098127">brief survey</a>
</span>
and tell us what you think.
</div>

View File

@ -1,22 +1,31 @@
using BlazorHosted_CSharp.Shared;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace BlazorHosted_CSharp.Server.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static string[] Summaries = new[]
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
[HttpGet("[action]")]
public IEnumerable<WeatherForecast> WeatherForecasts()
private readonly ILogger<WeatherForecastController> logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
this.logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
@ -24,7 +33,8 @@ namespace BlazorHosted_CSharp.Server.Controllers
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
});
})
.ToArray();
}
}
}

View File

@ -2,7 +2,6 @@
"$schema": "http://json.schemastore.org/vs-2017.3.host",
"name": {
"text": "Blazor (client-side)",
"package": "{0CD94836-1526-4E85-87D3-FB5274C5AFC9}",
"id": "1050"
},
"description": {

View File

@ -4,7 +4,7 @@
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
int currentCount = 0;

View File

@ -1,11 +1,11 @@
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">BlazorStandalone-CSharp</a>
<button class="navbar-toggler" @onclick="@ToggleNavMenu">
<button class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">

View File

@ -4,7 +4,7 @@
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2093904">brief survey</a>
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2098127">brief survey</a>
</span>
and tell us what you think.
</div>

View File

@ -9,10 +9,10 @@
<button id="serialize-small" @onclick=SerializeSmall>Serialize (small)</button>
<button id="serialize-large" @onclick=SerializeLarge>Serialize (large)</button>
<p><pre style="border: 1px solid black; overflow: scroll;">serializedValue</pre></p>
<p><pre style="border: 1px solid black; overflow: scroll;">@serializedValue</pre></p>
@if (serializedValue != null)
{
<p>Serialized length: <strong id="serialized-length">serializedValue.Length</strong> chars</p>
<p>Serialized length: <strong id="serialized-length">@serializedValue.Length</strong> chars</p>
}
<button id="deserialize-small" @onclick=DeserializeSmall>Deserialize (small)</button>
@ -33,8 +33,8 @@
protected override void OnInit()
{
smallOrgChartJson = JsonSerializer.ToString(smallOrgChart);
largeOrgChartJson = JsonSerializer.ToString(largeOrgChart);
smallOrgChartJson = JsonSerializer.Serialize(smallOrgChart);
largeOrgChartJson = JsonSerializer.Serialize(largeOrgChart);
}
protected override void OnAfterRender()
@ -51,10 +51,10 @@
}
void SerializeSmall()
=> serializedValue = JsonSerializer.ToString(smallOrgChart);
=> serializedValue = JsonSerializer.Serialize(smallOrgChart);
void SerializeLarge()
=> serializedValue = JsonSerializer.ToString(largeOrgChart);
=> serializedValue = JsonSerializer.Serialize(largeOrgChart);
void DeserializeSmall()
=> numPeopleDeserialized = Deserialize(smallOrgChartJson);
@ -81,7 +81,7 @@
static int Deserialize(string json)
{
var ceo = JsonSerializer.Parse<Person>(json);
var ceo = JsonSerializer.Deserialize<Person>(json);
return CountPeople(ceo);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -238,6 +238,17 @@ export class BrowserRenderer {
break;
}
}
// We handle setting 'value' on a <select> in two different ways:
// [1] When inserting a corresponding <option>, in case you're dynamically adding options
// [2] After we finish inserting the <select>, in case the descendant options are being
// added as an opaque markup block rather than individually
// Right here we implement [2]
if (newDomElementRaw instanceof HTMLSelectElement && selectValuePropname in newDomElementRaw) {
const selectValue = newDomElementRaw[selectValuePropname];
newDomElementRaw.value = selectValue;
delete newDomElementRaw[selectValuePropname];
}
}
private insertComponent(batch: RenderBatch, parent: LogicalElement, childIndex: number, frame: RenderTreeFrame) {
@ -317,7 +328,8 @@ export class BrowserRenderer {
// <select> is special, in that anything we write to .value will be lost if there
// isn't yet a matching <option>. To maintain the expected behavior no matter the
// element insertion/update order, preserve the desired value separately so
// we can recover it when inserting any matching <option>.
// we can recover it when inserting any matching <option> or after inserting an
// entire markup block of descendants.
element[selectValuePropname] = value;
}
return true;
@ -330,10 +342,11 @@ export class BrowserRenderer {
element.removeAttribute('value');
}
// See above for why we have this special handling for <select>/<option>
const parentElement = element.parentElement;
if (parentElement && (selectValuePropname in parentElement) && parentElement[selectValuePropname] === value) {
this.tryApplyValueProperty(batch, parentElement, attributeFrame);
delete parentElement[selectValuePropname];
// Note that this is only one of the two cases where we set the value on a <select>
const selectElem = this.findClosestAncestorSelectElement(element);
if (selectElem && (selectValuePropname in selectElem) && selectElem[selectValuePropname] === value) {
this.tryApplyValueProperty(batch, selectElem, attributeFrame);
delete selectElem[selectValuePropname];
}
return true;
}
@ -353,6 +366,18 @@ export class BrowserRenderer {
}
}
private findClosestAncestorSelectElement(element: Element | null) {
while (element) {
if (element instanceof HTMLSelectElement) {
return element;
} else {
element = element.parentElement;
}
}
return null;
}
private insertFrameRange(batch: RenderBatch, componentId: number, parent: LogicalElement, childIndex: number, frames: ArrayValues<RenderTreeFrame>, startIndex: number, endIndexExcl: number): number {
const origChildIndex = childIndex;
for (let index = startIndex; index < endIndexExcl; index++) {

View File

@ -144,6 +144,10 @@
resolved "https://dotnet.myget.org/F/aspnetcore-dev/npm/@dotnet/jsinterop/-/@dotnet/jsinterop-3.0.0-preview6.19280.1.tgz#4c991132f33157de93bc3b6db93cffc9e964b241"
integrity sha1-TJkRMvMxV96TvDttuTz/yelkskE=
"@microsoft/signalr@link:../../SignalR/clients/ts/signalr":
version "0.0.0"
uid ""
"@types/emscripten@0.0.31":
version "0.0.31"
resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-0.0.31.tgz#160817d1324e8b7049604d39ac47d85eeeedd597"

View File

@ -36,10 +36,10 @@ namespace Microsoft.AspNetCore.Components.Browser
{
if (fieldInfo.FieldValue is JsonElement attributeValueJsonElement)
{
switch (attributeValueJsonElement.Type)
switch (attributeValueJsonElement.ValueKind)
{
case JsonValueType.True:
case JsonValueType.False:
case JsonValueKind.True:
case JsonValueKind.False:
fieldInfo.FieldValue = attributeValueJsonElement.GetBoolean();
break;
default:
@ -90,23 +90,23 @@ namespace Microsoft.AspNetCore.Components.Browser
private static T Deserialize<T>(string eventArgsJson)
{
return JsonSerializer.Parse<T>(eventArgsJson, JsonSerializerOptionsProvider.Options);
return JsonSerializer.Deserialize<T>(eventArgsJson, JsonSerializerOptionsProvider.Options);
}
private static UIChangeEventArgs DeserializeUIEventChangeArgs(string eventArgsJson)
{
var changeArgs = Deserialize<UIChangeEventArgs>(eventArgsJson);
var jsonElement = (JsonElement)changeArgs.Value;
switch (jsonElement.Type)
switch (jsonElement.ValueKind)
{
case JsonValueType.Null:
case JsonValueKind.Null:
changeArgs.Value = null;
break;
case JsonValueType.String:
case JsonValueKind.String:
changeArgs.Value = jsonElement.GetString();
break;
case JsonValueType.True:
case JsonValueType.False:
case JsonValueKind.True:
case JsonValueKind.False:
changeArgs.Value = jsonElement.GetBoolean();
break;
default:

View File

@ -102,6 +102,21 @@ namespace Microsoft.AspNetCore.Components
public void Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterCollection parameters) { throw null; }
}
public partial class PageDisplay : Microsoft.AspNetCore.Components.IComponent
{
public PageDisplay() { }
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment AuthorizingContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.AuthenticationState> NotAuthorizedContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public System.Type Page { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public System.Collections.Generic.IDictionary<string, object> PageParameters { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
public void Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterCollection parameters) { throw null; }
}
}
namespace Microsoft.AspNetCore.Components.Forms
@ -231,24 +246,6 @@ namespace Microsoft.AspNetCore.Components.Forms
}
}
namespace Microsoft.AspNetCore.Components.Layouts
{
public partial class PageDisplay : Microsoft.AspNetCore.Components.IComponent
{
public PageDisplay() { }
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment AuthorizingContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.AuthenticationState> NotAuthorizedContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public System.Type Page { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public System.Collections.Generic.IDictionary<string, object> PageParameters { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
public void Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterCollection parameters) { throw null; }
}
}
namespace Microsoft.AspNetCore.Components.Routing
{
public partial class NavLink : Microsoft.AspNetCore.Components.IComponent, System.IDisposable
@ -270,7 +267,9 @@ namespace Microsoft.AspNetCore.Components.Routing
public System.Reflection.Assembly AppAssembly { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment NotFoundContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment<AuthenticationState> NotAuthorizedContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
[Microsoft.AspNetCore.Components.ParameterAttribute]
public Microsoft.AspNetCore.Components.RenderFragment AuthorizingContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
public void Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
public void Dispose() { }

View File

@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Components
public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri)
{
var stringContent = await httpClient.GetStringAsync(requestUri);
return JsonSerializer.Parse<T>(stringContent, JsonSerializerOptionsProvider.Options);
return JsonSerializer.Deserialize<T>(stringContent, JsonSerializerOptionsProvider.Options);
}
/// <summary>
@ -95,7 +95,7 @@ namespace Microsoft.AspNetCore.Components
/// <returns>The response parsed as an object of the generic type.</returns>
public static async Task<T> SendJsonAsync<T>(this HttpClient httpClient, HttpMethod method, string requestUri, object content)
{
var requestJson = JsonSerializer.ToString(content, JsonSerializerOptionsProvider.Options);
var requestJson = JsonSerializer.Serialize(content, JsonSerializerOptionsProvider.Options);
var response = await httpClient.SendAsync(new HttpRequestMessage(method, requestUri)
{
Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
@ -112,7 +112,7 @@ namespace Microsoft.AspNetCore.Components
else
{
var stringContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Parse<T>(stringContent, JsonSerializerOptionsProvider.Options);
return JsonSerializer.Deserialize<T>(stringContent, JsonSerializerOptionsProvider.Options);
}
}

View File

@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Components.Test
{
Assert.Equal(httpMethod, req.Method);
Assert.Equal(TestUri, req.RequestUri.AbsoluteUri);
Assert.Equal(JsonSerializer.ToString(requestContent, _jsonSerializerOptions), await ((StringContent)req.Content).ReadAsStringAsync());
Assert.Equal(JsonSerializer.Serialize(requestContent, _jsonSerializerOptions), await ((StringContent)req.Content).ReadAsStringAsync());
return CreateJsonResponse(HttpStatusCode.OK, new Person
{
Name = "Abc",
@ -151,7 +151,7 @@ namespace Microsoft.AspNetCore.Components.Test
{
Assert.Equal(httpMethod, req.Method);
Assert.Equal(TestUri, req.RequestUri.AbsoluteUri);
Assert.Equal(JsonSerializer.ToString(requestContent, _jsonSerializerOptions), await ((StringContent)req.Content).ReadAsStringAsync());
Assert.Equal(JsonSerializer.Serialize(requestContent, _jsonSerializerOptions), await ((StringContent)req.Content).ReadAsStringAsync());
return new HttpResponseMessage(HttpStatusCode.BadGateway);
}));
@ -165,7 +165,7 @@ namespace Microsoft.AspNetCore.Components.Test
{
return new HttpResponseMessage(statusCode)
{
Content = new StringContent(JsonSerializer.ToString(content, _jsonSerializerOptions))
Content = new StringContent(JsonSerializer.Serialize(content, _jsonSerializerOptions))
};
}

View File

@ -201,6 +201,10 @@ namespace Microsoft.AspNetCore.Components.Browser.Rendering
return;
}
// Even though we're not on the renderer sync context here, it's safe to assume ordered execution of the following
// line (i.e., matching the order in which we received batch completion messages) based on the fact that SignalR
// synchronizes calls to hub methods. That is, it won't issue more than one call to this method from the same hub
// at the same time on different threads.
if (!PendingRenderBatches.TryDequeue(out var entry) || entry.BatchId != incomingBatchId)
{
HandleException(

View File

@ -316,39 +316,6 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
Assert.False(registry.DisconnectedCircuits.TryGetValue(circuitHost.CircuitId, out _));
}
[Fact]
[Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2689", FlakyOn.All)]
public void CircuitRegistryUsesConfiguredMaxRetainedDisconnectedCircuitsValue()
{
// Arrange
var circuitIdFactory = TestCircuitIdFactory.CreateTestFactory();
var maxCircuits = 3;
var circuitOptions = new CircuitOptions
{
MaxRetainedDisconnectedCircuits = maxCircuits,
};
var registry = new TestCircuitRegistry(circuitIdFactory, circuitOptions);
var hosts = Enumerable.Range(0, maxCircuits + 2)
.Select(_ => TestCircuitHost.Create())
.ToArray();
// Act
for (var i = 0; i < hosts.Length; i++)
{
registry.RegisterDisconnectedCircuit(hosts[i]);
}
// Assert
for (var i = 0; i < maxCircuits; i++)
{
Assert.True(registry.DisconnectedCircuits.TryGetValue(hosts[i].CircuitId, out var _));
}
// Additional circuits do not get registered.
Assert.False(registry.DisconnectedCircuits.TryGetValue(hosts[maxCircuits].CircuitId, out var _));
Assert.False(registry.DisconnectedCircuits.TryGetValue(hosts[maxCircuits + 1].CircuitId, out var _));
}
[Fact]
public async Task DisconnectedCircuitIsRemovedAfterConfiguredTimeout()
{

View File

@ -1,6 +1,7 @@
// 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.Diagnostics;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
@ -16,12 +17,7 @@ namespace Microsoft.AspNetCore.Components.Server.Tests
public void MapBlazorHub_WiresUp_UnderlyingHub()
{
// Arrange
var applicationBuilder = new ApplicationBuilder(
new ServiceCollection()
.AddLogging()
.AddSingleton(Mock.Of<IHostApplicationLifetime>())
.AddSignalR().Services
.AddServerSideBlazor().Services.BuildServiceProvider());
var applicationBuilder = CreateAppBuilder();
var called = false;
// Act
@ -40,12 +36,7 @@ namespace Microsoft.AspNetCore.Components.Server.Tests
public void MapBlazorHub_MostGeneralOverload_MapsUnderlyingHub()
{
// Arrange
var applicationBuilder = new ApplicationBuilder(
new ServiceCollection()
.AddLogging()
.AddSingleton(Mock.Of<IHostApplicationLifetime>())
.AddSignalR().Services
.AddServerSideBlazor().Services.BuildServiceProvider());
var applicationBuilder = CreateAppBuilder();
var called = false;
// Act
@ -59,5 +50,23 @@ namespace Microsoft.AspNetCore.Components.Server.Tests
// Assert
Assert.True(called);
}
private IApplicationBuilder CreateAppBuilder()
{
var services = new ServiceCollection();
services.AddSingleton(Mock.Of<IHostApplicationLifetime>());
services.AddLogging();
services.AddOptions();
var listener = new DiagnosticListener("Microsoft.AspNetCore");
services.AddSingleton(listener);
services.AddSingleton<DiagnosticSource>(listener);
services.AddRouting();
services.AddSignalR();
services.AddServerSideBlazor();
var serviceProvder = services.BuildServiceProvider();
return new ApplicationBuilder(serviceProvder);
}
}
}

View File

@ -1,3 +1,3 @@
@ECHO OFF
SET RepoRoot=%~dp0..\..
%RepoRoot%\build.cmd -projects %~dp0**\*.*proj %*
%RepoRoot%\build.cmd -projects %~dp0**\*.*proj "/p:EnforceE2ETestPrerequisites=true" %*

View File

@ -4,4 +4,4 @@ set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
repo_root="$DIR/../.."
"$repo_root/build.sh" --projects "$DIR/**/*.*proj" "$@"
"$repo_root/build.sh" --projects "$DIR/**/*.*proj" "/p:EnforceE2ETestPrerequisites=true" "$@"

View File

@ -2,7 +2,13 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using DevHostServerProgram = Microsoft.AspNetCore.Blazor.DevServer.Server.Program;
namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures
@ -22,7 +28,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures
{
"--urls", "http://127.0.0.1:0",
"--contentroot", ContentRoot,
"--pathbase", PathBase
"--pathbase", PathBase,
"--applicationpath", typeof(TProgram).Assembly.Location,
};
if (!string.IsNullOrEmpty(Environment))
@ -31,7 +38,29 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures
args.Add(Environment);
}
return DevHostServerProgram.BuildWebHost(args.ToArray());
return new FakeWebHost(DevHostServerProgram.BuildWebHost(args.ToArray()));
}
private class FakeWebHost : IWebHost
{
private readonly IHost _realHost;
public FakeWebHost(IHost realHost)
{
_realHost = realHost;
}
public IFeatureCollection ServerFeatures => ((IServer)_realHost.Services.GetService(typeof(IServer))).Features;
public IServiceProvider Services => _realHost.Services;
public void Dispose() => _realHost.Dispose();
public void Start() => _realHost.Start();
public Task StartAsync(CancellationToken cancellationToken = default) => _realHost.StartAsync();
public Task StopAsync(CancellationToken cancellationToken = default) => _realHost.StopAsync();
}
}
}

View File

@ -7,10 +7,7 @@
<TargetFramework>netcoreapp3.0</TargetFramework>
<TestGroupName>Components.E2ETests</TestGroupName>
<!--
Temporarily disabled until this runs on macOS
-->
<SkipTests Condition="'$(SeleniumE2ETestsSupported)' != 'true'">true</SkipTests>
<SkipTests>true</SkipTests>
<!-- https://github.com/aspnet/AspNetCore/issues/6857 -->
<BuildHelixPayload>false</BuildHelixPayload>

View File

@ -214,6 +214,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
Assert.Equal("Fourth choice", target.SelectedOption.Text);
}
[Fact]
public void CanBindSelectToMarkup()
{
var target = new SelectElement(Browser.FindElement(By.Id("select-markup-box")));
var boundValue = Browser.FindElement(By.Id("select-markup-box-value"));
Assert.Equal("Second choice", target.SelectedOption.Text);
Assert.Equal("Second", boundValue.Text);
// Modify target; verify value is updated
target.SelectByText("Third choice");
Browser.Equal("Third", () => boundValue.Text);
}
[Fact]
public void CanBindTextboxInt()
{

View File

@ -276,8 +276,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
{
var rootBefore = new Node(null, "root", before);
var rootAfter = new Node(null, "root", after);
var jsonBefore = JsonSerializer.ToString(rootBefore, TestJsonSerializerOptionsProvider.Options);
var jsonAfter = JsonSerializer.ToString(rootAfter, TestJsonSerializerOptionsProvider.Options);
var jsonBefore = JsonSerializer.Serialize(rootBefore, TestJsonSerializerOptionsProvider.Options);
var jsonAfter = JsonSerializer.Serialize(rootAfter, TestJsonSerializerOptionsProvider.Options);
var appElem = MountTestComponent<KeyCasesComponent>();
var textbox = appElem.FindElement(By.TagName("textarea"));
@ -329,7 +329,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
{
var javascript = (IJavaScriptExecutor)Browser;
javascript.ExecuteScript(
$"document.getElementById('{textAreaElementWithId.GetAttribute("id")}').value = {JsonSerializer.ToString(value, TestJsonSerializerOptionsProvider.Options)}");
$"document.getElementById('{textAreaElementWithId.GetAttribute("id")}').value = {JsonSerializer.Serialize(value, TestJsonSerializerOptionsProvider.Options)}");
textAreaElementWithId.SendKeys(" "); // So it fires the change event
}

View File

@ -145,18 +145,32 @@
<h2>Select</h2>
<p>
<select id="select-box" @bind="selectValue">
<option value=@SelectableValue.First>First choice</option>
<option value=@SelectableValue.Second>Second choice</option>
<option value=@SelectableValue.Third>Third choice</option>
@if (includeFourthOption)
{
<option value=@SelectableValue.Fourth>Fourth choice</option>
}
<optgroup label="Some choices"> <!-- Show it also works with optgroup -->
<option value=@SelectableValue.First>First choice</option>
<option value=@SelectableValue.Second>Second choice</option>
<option value=@SelectableValue.Third>Third choice</option>
@if (includeFourthOption)
{
<option value=@SelectableValue.Fourth>Fourth choice</option>
}
</optgroup>
</select>
<span id="select-box-value">@selectValue</span>
<button id="select-box-add-option" @onclick="AddAndSelectNewSelectOption">Add and select new item</button>
</p>
<h2>Select (markup block)</h2>
<p>
<select id="select-markup-box" @bind="selectMarkupValue">
<optgroup label="Some choices">
<option value="First">First choice</option>
<option value="Second">Second choice</option>
<option value="Third">Third choice</option>
</optgroup>
</select>
<span id="select-markup-box-value">@selectMarkupValue</span>
</p>
@code {
string textboxInitiallyBlankValue = null;
string textboxInitiallyPopulatedValue = "Hello";
@ -187,6 +201,7 @@ Guid textboxGenericGuidValue = Guid.Empty;
bool includeFourthOption = false;
enum SelectableValue { First, Second, Third, Fourth }
SelectableValue selectValue = SelectableValue.Second;
SelectableValue selectMarkupValue = SelectableValue.Second;
void AddAndSelectNewSelectOption()
{

View File

@ -7,18 +7,12 @@
<div id="duplicate-on-element-override">
<DuplicateAttributesOnElementChildComponent
BoolAttributeBefore="true"
StringAttributeBefore="original-text"
UnmatchedValues="@elementValues"
BoolAttributeAfter="false"
StringAttributeAfter="other-text" />
</div>
@functions {
void SomeMethod()
{
}
Dictionary<string, object> elementValues = new Dictionary<string, object>()
{
{ "bool", true },

View File

@ -1,37 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.RenderTree;
namespace BasicTestApp
{
// Written in C# for flexibility and because we don't currently have the ability to write this in .razor.
public class DuplicateAttributesOnElementChildComponent : ComponentBase
{
[Parameter] public string StringAttributeBefore { get; private set; }
[Parameter] public bool BoolAttributeBefore { get; private set; }
[Parameter] public string StringAttributeAfter { get; private set; }
[Parameter] public bool? BoolAttributeAfter { get; private set; }
[Parameter(CaptureUnmatchedValues = true)] public Dictionary<string, object> UnmatchedValues { get; private set; }
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(0, "div");
builder.AddAttribute(1, "string", StringAttributeBefore);
builder.AddAttribute(2, "bool", BoolAttributeBefore);
builder.AddMultipleAttributes(3, UnmatchedValues);
if (StringAttributeAfter != null)
{
builder.AddAttribute(4, "string", StringAttributeAfter);
}
if (BoolAttributeAfter != null)
{
builder.AddAttribute(5, "bool", BoolAttributeAfter);
}
builder.CloseElement();
}
}
}

View File

@ -0,0 +1,23 @@
@if (StringAttributeBefore != null)
{
<div string="@StringAttributeBefore"
bool="@BoolAttributeBefore"
@attributes="@UnmatchedValues">
</div>
}
else
{
<div @attributes="@UnmatchedValues"
string="@StringAttributeAfter"
bool="@BoolAttributeAfter">
</div>
}
@code {
[Parameter] public string StringAttributeBefore { get; private set; }
[Parameter] public bool BoolAttributeBefore { get; private set; }
[Parameter] public string StringAttributeAfter { get; private set; }
[Parameter] public bool? BoolAttributeAfter { get; private set; }
[Parameter(CaptureUnmatchedValues = true)] public Dictionary<string, object> UnmatchedValues { get; private set; }
}

View File

@ -91,7 +91,7 @@
var invocations = new Dictionary<string, string>();
foreach (var interopResult in JavaScriptInterop.Invocations)
{
var interopResultValue = JsonSerializer.ToString(interopResult.Value, TestJsonSerializerOptionsProvider.Options);
var interopResultValue = JsonSerializer.Serialize(interopResult.Value, TestJsonSerializerOptionsProvider.Options);
invocations[interopResult.Key] = interopResultValue;
}

View File

@ -61,7 +61,7 @@
void Update()
{
renderContext.UpdateCount++;
parsedRootNode = JsonSerializer.Parse<KeyCasesTreeNode.Node>(modelJson, TestJsonSerializerOptionsProvider.Options);
parsedRootNode = JsonSerializer.Deserialize<KeyCasesTreeNode.Node>(modelJson, TestJsonSerializerOptionsProvider.Options);
}
public class RenderContext

View File

@ -13,7 +13,7 @@ Type here: <input @onkeypress=OnKeyPressed />
void OnKeyPressed(UIKeyboardEventArgs eventArgs)
{
Console.WriteLine(JsonSerializer.ToString(eventArgs));
Console.WriteLine(JsonSerializer.Serialize(eventArgs));
keysPressed.Add(eventArgs.Key);
}
}

View File

@ -93,7 +93,7 @@
void DumpEvent(UIMouseEventArgs e)
{
Console.WriteLine(JsonSerializer.ToString(e));
Console.WriteLine(JsonSerializer.Serialize(e));
}
void Clear()

View File

@ -28,7 +28,7 @@
void OnTouch(UITouchEventArgs e)
{
message += e.Type;
Console.WriteLine(JsonSerializer.ToString(e));
Console.WriteLine(JsonSerializer.Serialize(e));
StateHasChanged();
}

View File

@ -5,33 +5,39 @@
<title>Basic test app</title>
<base href="/subdir/" />
<link href="style.css" rel="stylesheet" />
<!-- Used by ExternalContentPackage -->
<link href="_content/TestContentPackage/styles.css" rel="stylesheet" />
</head>
<body>
<root>Loading...</root>
<root>Loading...</root>
<!-- Used for testing interop scenarios between JS and .NET -->
<script src="js/jsinteroptests.js"></script>
<!-- Used for testing interop scenarios between JS and .NET -->
<script src="js/jsinteroptests.js"></script>
<script>
// Used by ElementRefComponent
function setElementValue(element, newValue) {
element.value = newValue;
return element.value;
}
<script>
// Used by ElementRefComponent
function setElementValue(element, newValue) {
element.value = newValue;
return element.value;
}
function uriHelperNavigate() {
Blazor.navigateTo('/subdir/some-path');
}
function uriHelperNavigate() {
Blazor.navigateTo('/subdir/some-path');
}
(function () {
// Load either blazor.webassembly.js or blazor.server.js depending
// on the hash part of the URL. This is just to give a way for the
// test runner to make the selection.
var src = location.hash === '#server'
? 'blazor.server.js'
: 'blazor.webassembly.js';
document.write('<script src="_framework/' + src + '"><' + '/script>');
})();
</script>
(function () {
// Load either blazor.webassembly.js or blazor.server.js depending
// on the hash part of the URL. This is just to give a way for the
// test runner to make the selection.
var src = location.hash === '#server'
? 'blazor.server.js'
: 'blazor.webassembly.js';
document.write('<script src="_framework/' + src + '"><' + '/script>');
})();
</script>
<!-- Used by ExternalContentPackage -->
<script src="_content/TestContentPackage/prompt.js"></script>
</body>
</html>

View File

@ -93,13 +93,13 @@ namespace Ignitor
EventHandlerId = clickEventDescriptor.EventId,
EventArgsType = "mouse",
};
var serializedJson = JsonSerializer.ToString(mouseEventArgs, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
var serializedJson = JsonSerializer.Serialize(mouseEventArgs, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
var argsObject = new object[] { browserDescriptor, serializedJson };
var callId = "0";
var assemblyName = "Microsoft.AspNetCore.Components.Browser";
var methodIdentifier = "DispatchEvent";
var dotNetObjectId = 0;
var clickArgs = JsonSerializer.ToString(argsObject, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
var clickArgs = JsonSerializer.Serialize(argsObject, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
await connection.InvokeAsync("BeginInvokeDotNetFromJS", callId, assemblyName, methodIdentifier, dotNetObjectId, clickArgs);
}
}

View File

@ -4,19 +4,9 @@
<TargetFramework>netstandard2.0</TargetFramework>
<OutputType>library</OutputType>
<RazorLangVersion>3.0</RazorLangVersion>
<StaticWebAssetBasePath>_content/TestContentPackage</StaticWebAssetBasePath>
</PropertyGroup>
<ItemGroup>
<!-- .js files will be referenced via <script> tags -->
<EmbeddedResource Include="content\**\*.js" LogicalName="blazor:js:%(RecursiveDir)%(Filename)%(Extension)" />
<!-- .css files will be referenced via <link rel='Stylesheet'> tags -->
<EmbeddedResource Include="content\**\*.css" LogicalName="blazor:css:%(RecursiveDir)%(Filename)%(Extension)" />
<!-- Any other files will be included in the 'dist' output but without any tags referencing them -->
<EmbeddedResource Include="content\**" Exclude="**\*.js;**\*.css" LogicalName="blazor:file:%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.AspNetCore.Components" />
</ItemGroup>

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -19,6 +19,7 @@ namespace TestServer
.AddCommandLine(args)
.Build())
.UseStartup<TStartup>()
.UseStaticWebAssets()
.Build();
}
}

View File

@ -1,10 +1,7 @@
using BasicTestApp;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components.Server;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@ -63,6 +60,7 @@ namespace TestServer
// Mount the server-side Blazor app on /subdir
app.Map("/subdir", subdirApp =>
{
subdirApp.UseStaticFiles();
subdirApp.UseClientSideBlazorFiles<BasicTestApp.Startup>();
subdirApp.UseRouting();

View File

@ -211,7 +211,7 @@ namespace Microsoft.AspNetCore
{
if (ctx.HostingEnvironment.IsDevelopment())
{
StaticWebAssetsLoader.UseStaticWebAssets(ctx.HostingEnvironment);
StaticWebAssetsLoader.UseStaticWebAssets(ctx.HostingEnvironment, ctx.Configuration);
}
});
builder.UseKestrel((builderContext, options) =>

View File

@ -25,6 +25,8 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<!-- NuGet appends target framework to this value. Example: runtimes/win-x64/lib/netcoreapp3.0/ -->
<BuildOutputTargetFolder>runtimes/$(RuntimeIdentifier)/lib/</BuildOutputTargetFolder>
<!-- We still need the native path to these assets though for the RuntimeList.xml manifest -->
<ManagedAssetsPackagePath>$(BuildOutputTargetFolder)$(DefaultNetCoreTargetFramework)</ManagedAssetsPackagePath>
<!-- Target framework is not append to this because native assets to not have a target framework. -->
<NativeAssetsPackagePath>runtimes/$(RuntimeIdentifier)/native/</NativeAssetsPackagePath>
@ -457,6 +459,8 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<RepoTasks.CreateFrameworkListFile
Files="@(SharedFxContent)"
TargetFile="$(FrameworkListOutputPath)"
ManagedRoot="$(ManagedAssetsPackagePath)"
NativeRoot="$(NativeAssetsPackagePath)"
RootAttributes="@(FrameworkListRootAttributes)" />
<ItemGroup>

View File

@ -5,6 +5,10 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.CompilerServices;
using Newtonsoft.Json.Linq;
using Xunit;
using Xunit.Abstractions;
@ -24,6 +28,36 @@ namespace Microsoft.AspNetCore
_targetingPackRoot = Path.Combine(TestData.GetTestDataValue("TargetingPackLayoutRoot"), "packs", "Microsoft.AspNetCore.App.Ref", TestData.GetTestDataValue("TargetingPackVersion"));
}
[Fact]
public void AssembliesAreReferenceAssemblies()
{
IEnumerable<string> dlls = Directory.GetFiles(_targetingPackRoot, "*.dll", SearchOption.AllDirectories);
Assert.NotEmpty(dlls);
// Workaround https://github.com/aspnet/AspNetCore/issues/11206
dlls = dlls.Where(d => !d.Contains("System.IO.Pipelines"));
Assert.All(dlls, path =>
{
var assemblyName = AssemblyName.GetAssemblyName(path);
using var fileStream = File.OpenRead(path);
using var peReader = new PEReader(fileStream, PEStreamOptions.Default);
var reader = peReader.GetMetadataReader(MetadataReaderOptions.Default);
var assemblyDefinition = reader.GetAssemblyDefinition();
var hasRefAssemblyAttribute = assemblyDefinition.GetCustomAttributes().Any(attr =>
{
var attribute = reader.GetCustomAttribute(attr);
var attributeConstructor = reader.GetMemberReference((MemberReferenceHandle)attribute.Constructor);
var attributeType = reader.GetTypeReference((TypeReferenceHandle)attributeConstructor.Parent);
return reader.StringComparer.Equals(attributeType.Namespace, typeof(ReferenceAssemblyAttribute).Namespace)
&& reader.StringComparer.Equals(attributeType.Name, nameof(ReferenceAssemblyAttribute));
});
Assert.True(hasRefAssemblyAttribute, $"{path} should have {nameof(ReferenceAssemblyAttribute)}");
Assert.Equal(ProcessorArchitecture.None, assemblyName.ProcessorArchitecture);
});
}
[Fact]
public void PlatformManifestListsAllFiles()
{

View File

@ -121,6 +121,7 @@ namespace Microsoft.AspNetCore.Hosting
public static readonly string ServerUrlsKey;
public static readonly string ShutdownTimeoutKey;
public static readonly string StartupAssemblyKey;
public static readonly string StaticWebAssetsKey;
public static readonly string SuppressStatusMessagesKey;
public static readonly string WebRootKey;
}

View File

@ -21,5 +21,6 @@ namespace Microsoft.AspNetCore.Hosting
public static readonly string SuppressStatusMessagesKey = "suppressStatusMessages";
public static readonly string ShutdownTimeoutKey = "shutdownTimeoutSeconds";
public static readonly string StaticWebAssetsKey = "staticWebAssets";
}
}

View File

@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
public partial class StaticWebAssetsLoader
{
public StaticWebAssetsLoader() { }
public static void UseStaticWebAssets(Microsoft.AspNetCore.Hosting.IWebHostEnvironment environment) { }
public static void UseStaticWebAssets(Microsoft.AspNetCore.Hosting.IWebHostEnvironment environment, Microsoft.Extensions.Configuration.IConfiguration configuration) { }
}
}
namespace Microsoft.Extensions.Hosting

View File

@ -75,8 +75,6 @@ namespace Microsoft.AspNetCore.Hosting
options.HostingStartupExceptions = _hostingStartupErrors;
});
services.AddHostedService<GenericWebHostService>();
// REVIEW: This is bad since we don't own this type. Anybody could add one of these and it would mess things up
// We need to flow this differently
var listener = new DiagnosticListener("Microsoft.AspNetCore");

View File

@ -1,5 +1,6 @@
using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.Extensions.Hosting
{
@ -9,6 +10,7 @@ namespace Microsoft.Extensions.Hosting
{
var webhostBuilder = new GenericWebHostBuilder(builder);
configure(webhostBuilder);
builder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
return builder;
}
}

View File

@ -7,6 +7,7 @@ using System.IO;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders;
namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
@ -21,10 +22,11 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
/// <summary>
/// Configure the <see cref="IWebHostEnvironment"/> to use static web assets.
/// </summary>
/// <param name="environment"></param>
public static void UseStaticWebAssets(IWebHostEnvironment environment)
/// <param name="environment">The application <see cref="IWebHostEnvironment"/>.</param>
/// <param name="configuration">The host <see cref="IConfiguration"/>.</param>
public static void UseStaticWebAssets(IWebHostEnvironment environment, IConfiguration configuration)
{
using (var manifest = ResolveManifest(environment))
using (var manifest = ResolveManifest(environment, configuration))
{
if (manifest != null)
{
@ -54,13 +56,13 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
}
}
internal static Stream ResolveManifest(IWebHostEnvironment environment)
internal static Stream ResolveManifest(IWebHostEnvironment environment, IConfiguration configuration)
{
try
{
var assembly = Assembly.Load(environment.ApplicationName);
var filePath = Path.Combine(Path.GetDirectoryName(GetAssemblyLocation(assembly)), $"{environment.ApplicationName}.StaticWebAssets.xml");
var manifestPath = configuration.GetValue<string>(WebHostDefaults.StaticWebAssetsKey);
var filePath = manifestPath ?? ResolveRelativeToAssembly(environment);
if (File.Exists(filePath))
{
return File.OpenRead(filePath);
@ -79,6 +81,12 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
}
}
private static string ResolveRelativeToAssembly(IWebHostEnvironment environment)
{
var assembly = Assembly.Load(environment.ApplicationName);
return Path.Combine(Path.GetDirectoryName(GetAssemblyLocation(assembly)), $"{environment.ApplicationName}.StaticWebAssets.xml");
}
internal static string GetAssemblyLocation(Assembly assembly)
{
if (Uri.TryCreate(assembly.CodeBase, UriKind.Absolute, out var result) &&

View File

@ -189,7 +189,7 @@ namespace Microsoft.AspNetCore.Hosting
{
builder.ConfigureAppConfiguration((context, configBuilder) =>
{
StaticWebAssetsLoader.UseStaticWebAssets(context.HostingEnvironment);
StaticWebAssetsLoader.UseStaticWebAssets(context.HostingEnvironment, context.Configuration);
});
return builder;

View File

@ -23,6 +23,7 @@ namespace Microsoft.AspNetCore.Hosting.Tests.Fakes
// This is the only one that doesn't pass through
public IWebHost Build()
{
_hostBuilder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
return new GenericWebHost(_hostBuilder.Build());
}

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Threading;
using System.Threading.Channels;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Internal;
@ -185,7 +184,7 @@ namespace Microsoft.AspNetCore.Hosting
public async Task VerifyCountersFireWithCorrectValues()
{
// Arrange
var eventListener = new CounterListener(new[] {
var eventListener = new TestCounterListener(new[] {
"requests-per-second",
"total-requests",
"current-requests",
@ -207,6 +206,7 @@ namespace Microsoft.AspNetCore.Hosting
{ "EventCounterIntervalSec", "1" }
});
// Act & Assert
hostingEventSource.RequestStart("GET", "/");
Assert.Equal(1, await totalRequestValues.FirstOrDefault(v => v == 1));
@ -241,36 +241,5 @@ namespace Microsoft.AspNetCore.Hosting
{
return new HostingEventSource(Guid.NewGuid().ToString());
}
private class CounterListener : EventListener
{
private readonly Dictionary<string, Channel<double>> _counters = new Dictionary<string, Channel<double>>();
public CounterListener(string[] counterNames)
{
foreach (var item in counterNames)
{
_counters[item] = Channel.CreateUnbounded<double>();
}
}
public IAsyncEnumerable<double> GetCounterValues(string counterName, CancellationToken cancellationToken = default)
{
return _counters[counterName].Reader.ReadAllAsync(cancellationToken);
}
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
if (eventData.EventName == "EventCounters")
{
var payload = (IDictionary<string, object>)eventData.Payload[0];
var counter = (string)payload["Name"];
payload.TryGetValue("Increment", out var increment);
payload.TryGetValue("Mean", out var mean);
var writer = _counters[counter].Writer;
writer.TryWrite((double)(increment ?? mean));
}
}
}
}
}

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
@ -7,6 +7,7 @@
<ItemGroup>
<Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
<Compile Include="$(SharedSourceRoot)EventSource.Testing\TestEventListener.cs" />
<Compile Include="$(SharedSourceRoot)EventSource.Testing\TestCounterListener.cs" />
<Content Include="testroot\**\*" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
<Content Include="Microsoft.AspNetCore.Hosting.StaticWebAssets.xml" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

View File

@ -2,10 +2,13 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Xunit;
namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
@ -72,12 +75,39 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
};
// Act
var manifest = StaticWebAssetsLoader.ResolveManifest(environment);
var manifest = StaticWebAssetsLoader.ResolveManifest(environment, new ConfigurationBuilder().Build());
// Assert
Assert.Equal(expectedManifest, new StreamReader(manifest).ReadToEnd());
}
[Fact]
public void ResolveManifest_UsesConfigurationKey_WhenProvided()
{
// Arrange
var expectedManifest = @"<StaticWebAssets Version=""1.0"">
<ContentRoot Path=""/Path"" BasePath=""/BasePath"" />
</StaticWebAssets>
";
var path = Path.ChangeExtension(new Uri(typeof(StaticWebAssetsLoader).Assembly.CodeBase).LocalPath, ".StaticWebAssets.xml");
var environment = new HostingEnvironment()
{
ApplicationName = "NonExistingDll"
};
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string>() {
[WebHostDefaults.StaticWebAssetsKey] = path
}).Build();
// Act
var manifest = StaticWebAssetsLoader.ResolveManifest(environment, configuration);
// Assert
Assert.Equal(expectedManifest, new StreamReader(manifest).ReadToEnd());
}
private Stream CreateManifest(string manifestContent)
{
return new MemoryStream(Encoding.UTF8.GetBytes(manifestContent));

View File

@ -1271,6 +1271,80 @@ namespace Microsoft.AspNetCore.Hosting
Assert.True(service.StopCalled);
}
[Theory]
[MemberData(nameof(DefaultWebHostBuilders))]
public async Task HostedServicesStartedBeforeServer(IWebHostBuilder builder)
{
builder.Configure(app => { })
.ConfigureServices(services =>
{
services.AddSingleton<StartOrder>();
services.AddHostedService<MustBeStartedFirst>();
services.AddSingleton<IServer, ServerMustBeStartedSecond>();
});
using var host = builder.Build();
await host.StartAsync();
var ordering = host.Services.GetRequiredService<StartOrder>();
Assert.Equal(2, ordering.Order);
await host.StopAsync();
}
private class StartOrder
{
public int Order { get; set; }
}
private class MustBeStartedFirst : IHostedService
{
public MustBeStartedFirst(StartOrder ordering)
{
Ordering = ordering;
}
public StartOrder Ordering { get; }
public Task StartAsync(CancellationToken cancellationToken)
{
Assert.Equal(0, Ordering.Order);
Ordering.Order++;
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
private class ServerMustBeStartedSecond : IServer
{
public ServerMustBeStartedSecond(StartOrder ordering)
{
Ordering = ordering;
}
public StartOrder Ordering { get; }
public IFeatureCollection Features => null;
public Task StartAsync<TContext>(IHttpApplication<TContext> application, CancellationToken cancellationToken)
{
Assert.Equal(1, Ordering.Order);
Ordering.Order++;
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
public void Dispose()
{
}
}
private static void StaticConfigureMethod(IApplicationBuilder app) { }
private IWebHostBuilder CreateWebHostBuilder()

View File

@ -17,6 +17,7 @@ namespace Microsoft.AspNetCore.TestHost
public partial class RequestBuilder
{
public RequestBuilder(Microsoft.AspNetCore.TestHost.TestServer server, string path) { }
public Microsoft.AspNetCore.TestHost.TestServer TestServer { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
public Microsoft.AspNetCore.TestHost.RequestBuilder AddHeader(string name, string value) { throw null; }
public Microsoft.AspNetCore.TestHost.RequestBuilder And(System.Action<System.Net.Http.HttpRequestMessage> configure) { throw null; }
public System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> GetAsync() { throw null; }
@ -25,15 +26,16 @@ namespace Microsoft.AspNetCore.TestHost
}
public partial class TestServer : Microsoft.AspNetCore.Hosting.Server.IServer, System.IDisposable
{
public TestServer() { }
public TestServer(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) { }
public TestServer(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder, Microsoft.AspNetCore.Http.Features.IFeatureCollection featureCollection) { }
public TestServer(Microsoft.AspNetCore.Http.Features.IFeatureCollection featureCollection) { }
public TestServer(System.IServiceProvider services) { }
public TestServer(System.IServiceProvider services, Microsoft.AspNetCore.Http.Features.IFeatureCollection featureCollection) { }
public bool AllowSynchronousIO { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public System.Uri BaseAddress { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Http.Features.IFeatureCollection Features { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
public Microsoft.AspNetCore.Hosting.IWebHost Host { get { throw null; } }
public bool PreserveExecutionContext { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public System.IServiceProvider Services { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
public System.Net.Http.HttpClient CreateClient() { throw null; }
public System.Net.Http.HttpMessageHandler CreateHandler() { throw null; }
public Microsoft.AspNetCore.TestHost.RequestBuilder CreateRequest(string path) { throw null; }

View File

@ -64,7 +64,6 @@ namespace Microsoft.AspNetCore.TestHost
var contextBuilder = new HttpContextBuilder(_application, AllowSynchronousIO, PreserveExecutionContext);
Stream responseBody = null;
var requestContent = request.Content ?? new StreamContent(Stream.Null);
var body = await requestContent.ReadAsStreamAsync();
contextBuilder.Configure(context =>
@ -114,8 +113,6 @@ namespace Microsoft.AspNetCore.TestHost
body.Seek(0, SeekOrigin.Begin);
}
req.Body = new AsyncStreamWrapper(body, () => contextBuilder.AllowSynchronousIO);
responseBody = context.Response.Body;
});
var response = new HttpResponseMessage();
@ -138,7 +135,7 @@ namespace Microsoft.AspNetCore.TestHost
response.ReasonPhrase = httpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase;
response.RequestMessage = request;
response.Content = new StreamContent(responseBody);
response.Content = new StreamContent(httpContext.Response.Body);
foreach (var header in httpContext.Response.Headers)
{

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
@ -16,7 +17,8 @@ namespace Microsoft.AspNetCore.TestHost
private readonly HttpContext _httpContext;
private readonly TaskCompletionSource<HttpContext> _responseTcs = new TaskCompletionSource<HttpContext>(TaskCreationOptions.RunContinuationsAsynchronously);
private readonly ResponseStream _responseStream;
private readonly ResponseBodyReaderStream _responseReaderStream;
private readonly ResponseBodyPipeWriter _responsePipeWriter;
private readonly ResponseFeature _responseFeature;
private readonly RequestLifetimeFeature _requestLifetimeFeature = new RequestLifetimeFeature();
private readonly ResponseTrailersFeature _responseTrailersFeature = new ResponseTrailersFeature();
@ -37,14 +39,19 @@ namespace Microsoft.AspNetCore.TestHost
request.Protocol = "HTTP/1.1";
request.Method = HttpMethods.Get;
var pipe = new Pipe();
_responseReaderStream = new ResponseBodyReaderStream(pipe, AbortRequest, () => _responseReadCompleteCallback?.Invoke(_httpContext));
_responsePipeWriter = new ResponseBodyPipeWriter(pipe, ReturnResponseMessageAsync);
_responseFeature.Body = new ResponseBodyWriterStream(_responsePipeWriter, () => AllowSynchronousIO);
_responseFeature.BodySnapshot = _responseFeature.Body;
_responseFeature.BodyWriter = _responsePipeWriter;
_httpContext.Features.Set<IHttpBodyControlFeature>(this);
_httpContext.Features.Set<IHttpResponseFeature>(_responseFeature);
_httpContext.Features.Set<IHttpResponseStartFeature>(_responseFeature);
_httpContext.Features.Set<IHttpRequestLifetimeFeature>(_requestLifetimeFeature);
_httpContext.Features.Set<IHttpResponseTrailersFeature>(_responseTrailersFeature);
_responseStream = new ResponseStream(ReturnResponseMessageAsync, AbortRequest, () => AllowSynchronousIO, () => _responseReadCompleteCallback?.Invoke(_httpContext));
_responseFeature.Body = _responseStream;
_httpContext.Features.Set<IResponseBodyPipeFeature>(_responseFeature);
}
public bool AllowSynchronousIO { get; set; }
@ -119,14 +126,14 @@ namespace Microsoft.AspNetCore.TestHost
{
_requestLifetimeFeature.Abort();
}
_responseStream.CompleteWrites();
_responsePipeWriter.Complete();
}
internal async Task CompleteResponseAsync()
{
_pipelineFinished = true;
await ReturnResponseMessageAsync();
_responseStream.CompleteWrites();
_responsePipeWriter.Complete();
await _responseFeature.FireOnResponseCompletedAsync();
}
@ -155,6 +162,16 @@ namespace Microsoft.AspNetCore.TestHost
{
newFeatures[pair.Key] = pair.Value;
}
var serverResponseFeature = _httpContext.Features.Get<IHttpResponseFeature>();
// The client gets a deep copy of this so they can interact with the body stream independently of the server.
var clientResponseFeature = new HttpResponseFeature()
{
StatusCode = serverResponseFeature.StatusCode,
ReasonPhrase = serverResponseFeature.ReasonPhrase,
Headers = serverResponseFeature.Headers,
Body = _responseReaderStream
};
newFeatures.Set<IHttpResponseFeature>(clientResponseFeature);
_responseTcs.TrySetResult(new DefaultHttpContext(newFeatures));
}
}
@ -162,7 +179,8 @@ namespace Microsoft.AspNetCore.TestHost
internal void Abort(Exception exception)
{
_pipelineFinished = true;
_responseStream.Abort(exception);
_responsePipeWriter.Abort(exception);
_responseReaderStream.Abort(exception);
_responseTcs.TrySetException(exception);
}
}

View File

@ -13,7 +13,6 @@ namespace Microsoft.AspNetCore.TestHost
/// </summary>
public class RequestBuilder
{
private readonly TestServer _server;
private readonly HttpRequestMessage _req;
/// <summary>
@ -23,15 +22,15 @@ namespace Microsoft.AspNetCore.TestHost
/// <param name="path"></param>
public RequestBuilder(TestServer server, string path)
{
if (server == null)
{
throw new ArgumentNullException(nameof(server));
}
_server = server;
TestServer = server ?? throw new ArgumentNullException(nameof(server));
_req = new HttpRequestMessage(HttpMethod.Get, path);
}
/// <summary>
/// Gets the <see cref="TestServer"/> instance for which the request is being built.
/// </summary>
public TestServer TestServer { get; }
/// <summary>
/// Configure any HttpRequestMessage properties.
/// </summary>
@ -79,7 +78,7 @@ namespace Microsoft.AspNetCore.TestHost
public Task<HttpResponseMessage> SendAsync(string method)
{
_req.Method = new HttpMethod(method);
return _server.CreateClient().SendAsync(_req);
return TestServer.CreateClient().SendAsync(_req);
}
/// <summary>
@ -89,7 +88,7 @@ namespace Microsoft.AspNetCore.TestHost
public Task<HttpResponseMessage> GetAsync()
{
_req.Method = HttpMethod.Get;
return _server.CreateClient().SendAsync(_req);
return TestServer.CreateClient().SendAsync(_req);
}
/// <summary>
@ -99,7 +98,7 @@ namespace Microsoft.AspNetCore.TestHost
public Task<HttpResponseMessage> PostAsync()
{
_req.Method = HttpMethod.Post;
return _server.CreateClient().SendAsync(_req);
return TestServer.CreateClient().SendAsync(_req);
}
}
}

View File

@ -0,0 +1,107 @@
// 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.Diagnostics.Contracts;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features;
namespace Microsoft.AspNetCore.TestHost
{
internal class ResponseBodyPipeWriter : PipeWriter
{
private readonly Func<Task> _onFirstWriteAsync;
private readonly Pipe _pipe;
private bool _firstWrite;
private bool _complete;
internal ResponseBodyPipeWriter(Pipe pipe, Func<Task> onFirstWriteAsync)
{
_pipe = pipe ?? throw new ArgumentNullException(nameof(pipe));
_onFirstWriteAsync = onFirstWriteAsync ?? throw new ArgumentNullException(nameof(onFirstWriteAsync));
_firstWrite = true;
}
public override async ValueTask<FlushResult> FlushAsync(CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
CheckNotComplete();
await FirstWriteAsync();
return await _pipe.Writer.FlushAsync(cancellationToken);
}
private Task FirstWriteAsync()
{
if (_firstWrite)
{
_firstWrite = false;
return _onFirstWriteAsync();
}
return Task.CompletedTask;
}
internal void Abort(Exception innerException)
{
Contract.Requires(innerException != null);
_complete = true;
_pipe.Writer.Complete(new IOException(string.Empty, innerException));
}
internal void Complete()
{
if (_complete)
{
return;
}
// Throw for further writes, but not reads. Allow reads to drain the buffered data and then return 0 for further reads.
_complete = true;
_pipe.Writer.Complete();
}
private void CheckNotComplete()
{
if (_complete)
{
throw new IOException("The request was aborted or the pipeline has finished.");
}
}
public override void Complete(Exception exception = null)
{
// No-op in the non-error case
if (exception != null)
{
Abort(exception);
}
}
public override void CancelPendingFlush() => _pipe.Writer.CancelPendingFlush();
public override void OnReaderCompleted(Action<Exception, object> callback, object state)
=> _pipe.Writer.OnReaderCompleted(callback, state);
public override void Advance(int bytes)
{
CheckNotComplete();
_pipe.Writer.Advance(bytes);
}
public override Memory<byte> GetMemory(int sizeHint = 0)
{
CheckNotComplete();
return _pipe.Writer.GetMemory(sizeHint);
}
public override Span<byte> GetSpan(int sizeHint = 0)
{
CheckNotComplete();
return _pipe.Writer.GetSpan(sizeHint);
}
}
}

View File

@ -0,0 +1,146 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Buffers;
using System.Diagnostics.Contracts;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.TestHost
{
/// <summary>
/// The client's view of the response body.
/// </summary>
internal class ResponseBodyReaderStream : Stream
{
private bool _readerComplete;
private bool _aborted;
private Exception _abortException;
private readonly Action _abortRequest;
private readonly Action _readComplete;
private readonly Pipe _pipe;
internal ResponseBodyReaderStream(Pipe pipe, Action abortRequest, Action readComplete)
{
_pipe = pipe ?? throw new ArgumentNullException(nameof(pipe));
_abortRequest = abortRequest ?? throw new ArgumentNullException(nameof(abortRequest));
_readComplete = readComplete;
}
public override bool CanRead => true;
public override bool CanSeek => false;
public override bool CanWrite => false;
#region NotSupported
public override long Length => throw new NotSupportedException();
public override long Position
{
get => throw new NotSupportedException();
set => throw new NotSupportedException();
}
public override long Seek(long offset, SeekOrigin origin) => throw new NotSupportedException();
public override void SetLength(long value) => throw new NotSupportedException();
public override void Flush() => throw new NotSupportedException();
public override Task FlushAsync(CancellationToken cancellationToken) => throw new NotSupportedException();
// Write with count 0 will still trigger OnFirstWrite
public override void Write(byte[] buffer, int offset, int count) => throw new NotSupportedException();
public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) => throw new NotSupportedException();
#endregion NotSupported
public override int Read(byte[] buffer, int offset, int count)
{
return ReadAsync(buffer, offset, count, CancellationToken.None).GetAwaiter().GetResult();
}
public async override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
VerifyBuffer(buffer, offset, count);
CheckAborted();
if (_readerComplete)
{
return 0;
}
using var registration = cancellationToken.Register(Cancel);
var result = await _pipe.Reader.ReadAsync(cancellationToken);
if (result.Buffer.IsEmpty && result.IsCompleted)
{
_pipe.Reader.Complete();
_readComplete();
_readerComplete = true;
return 0;
}
var readableBuffer = result.Buffer;
var actual = Math.Min(readableBuffer.Length, count);
readableBuffer = readableBuffer.Slice(0, actual);
readableBuffer.CopyTo(new Span<byte>(buffer, offset, count));
_pipe.Reader.AdvanceTo(readableBuffer.End);
return (int)actual;
}
private static void VerifyBuffer(byte[] buffer, int offset, int count)
{
if (buffer == null)
{
throw new ArgumentNullException("buffer");
}
if (offset < 0 || offset > buffer.Length)
{
throw new ArgumentOutOfRangeException("offset", offset, string.Empty);
}
if (count <= 0 || count > buffer.Length - offset)
{
throw new ArgumentOutOfRangeException("count", count, string.Empty);
}
}
internal void Cancel()
{
_aborted = true;
_abortException = new OperationCanceledException();
_pipe.Writer.Complete(_abortException);
}
internal void Abort(Exception innerException)
{
Contract.Requires(innerException != null);
_aborted = true;
_abortException = innerException;
}
private void CheckAborted()
{
if (_aborted)
{
throw new IOException(string.Empty, _abortException);
}
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
_abortRequest();
}
base.Dispose(disposing);
}
}
}

View File

@ -0,0 +1,73 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.TestHost
{
internal class ResponseBodyWriterStream : Stream
{
private readonly ResponseBodyPipeWriter _responseWriter;
private readonly Func<bool> _allowSynchronousIO;
public ResponseBodyWriterStream(ResponseBodyPipeWriter responseWriter, Func<bool> allowSynchronousIO)
{
_responseWriter = responseWriter;
_allowSynchronousIO = allowSynchronousIO;
}
public override bool CanRead => false;
public override bool CanSeek => false;
public override bool CanWrite => true;
public override long Length => throw new NotSupportedException();
public override long Position { get => throw new NotSupportedException(); set => throw new NotSupportedException(); }
public override int Read(byte[] buffer, int offset, int count)
{
throw new NotSupportedException();
}
public override long Seek(long offset, SeekOrigin origin)
{
throw new NotSupportedException();
}
public override void SetLength(long value)
{
throw new NotSupportedException();
}
public override void Flush()
{
FlushAsync().GetAwaiter().GetResult();
}
public override async Task FlushAsync(CancellationToken cancellationToken)
{
await _responseWriter.FlushAsync(cancellationToken);
}
public override void Write(byte[] buffer, int offset, int count)
{
if (!_allowSynchronousIO())
{
throw new InvalidOperationException("Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true.");
}
// The Pipe Write method requires calling FlushAsync to notify the reader. Call WriteAsync instead.
WriteAsync(buffer, offset, count).GetAwaiter().GetResult();
}
public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
await _responseWriter.WriteAsync(new ReadOnlyMemory<byte>(buffer, offset, count), cancellationToken);
}
}
}

View File

@ -3,6 +3,7 @@
using System;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
@ -10,7 +11,7 @@ using Microsoft.AspNetCore.Http.Features;
namespace Microsoft.AspNetCore.TestHost
{
internal class ResponseFeature : IHttpResponseFeature, IHttpResponseStartFeature
internal class ResponseFeature : IHttpResponseFeature, IHttpResponseStartFeature, IResponseBodyPipeFeature
{
private readonly HeaderDictionary _headers = new HeaderDictionary();
private readonly Action<Exception> _abort;
@ -67,6 +68,30 @@ namespace Microsoft.AspNetCore.TestHost
public Stream Body { get; set; }
internal Stream BodySnapshot { get; set; }
internal PipeWriter BodyWriter { get; set; }
public PipeWriter Writer
{
get
{
if (!ReferenceEquals(BodySnapshot, Body))
{
BodySnapshot = Body;
BodyWriter = PipeWriter.Create(Body);
OnCompleted((self) =>
{
((PipeWriter)self).Complete();
return Task.CompletedTask;
}, BodyWriter);
}
return BodyWriter;
}
}
public bool HasStarted { get; set; }
public void OnStarting(Func<object, Task> callback, object state)

View File

@ -1,259 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Buffers;
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.TestHost
{
// This steam accepts writes from the server/app, buffers them internally, and returns the data via Reads
// when requested by the client.
internal class ResponseStream : Stream
{
private bool _complete;
private bool _readerComplete;
private bool _aborted;
private Exception _abortException;
private bool _firstWrite;
private readonly SemaphoreSlim _writeLock;
private readonly Func<Task> _onFirstWriteAsync;
private readonly Action _abortRequest;
private readonly Func<bool> _allowSynchronousIO;
private readonly Action _readComplete;
private readonly Pipe _pipe = new Pipe();
internal ResponseStream(Func<Task> onFirstWriteAsync, Action abortRequest, Func<bool> allowSynchronousIO, Action readComplete)
{
_onFirstWriteAsync = onFirstWriteAsync ?? throw new ArgumentNullException(nameof(onFirstWriteAsync));
_abortRequest = abortRequest ?? throw new ArgumentNullException(nameof(abortRequest));
_allowSynchronousIO = allowSynchronousIO ?? throw new ArgumentNullException(nameof(allowSynchronousIO));
_readComplete = readComplete;
_firstWrite = true;
_writeLock = new SemaphoreSlim(1, 1);
}
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return false; }
}
public override bool CanWrite
{
get { return true; }
}
#region NotSupported
public override long Length
{
get { throw new NotSupportedException(); }
}
public override long Position
{
get { throw new NotSupportedException(); }
set { throw new NotSupportedException(); }
}
public override long Seek(long offset, SeekOrigin origin)
{
throw new NotSupportedException();
}
public override void SetLength(long value)
{
throw new NotSupportedException();
}
#endregion NotSupported
public override void Flush()
{
FlushAsync().GetAwaiter().GetResult();
}
public override async Task FlushAsync(CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
CheckNotComplete();
await _writeLock.WaitAsync(cancellationToken);
try
{
await FirstWriteAsync();
await _pipe.Writer.FlushAsync(cancellationToken);
}
finally
{
_writeLock.Release();
}
}
public override int Read(byte[] buffer, int offset, int count)
{
return ReadAsync(buffer, offset, count, CancellationToken.None).GetAwaiter().GetResult();
}
public async override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
VerifyBuffer(buffer, offset, count, allowEmpty: false);
CheckAborted();
if (_readerComplete)
{
return 0;
}
var registration = cancellationToken.Register(Cancel);
try
{
var result = await _pipe.Reader.ReadAsync(cancellationToken);
if (result.Buffer.IsEmpty && result.IsCompleted)
{
_pipe.Reader.Complete();
_readComplete();
_readerComplete = true;
return 0;
}
var readableBuffer = result.Buffer;
var actual = Math.Min(readableBuffer.Length, count);
readableBuffer = readableBuffer.Slice(0, actual);
readableBuffer.CopyTo(new Span<byte>(buffer, offset, count));
_pipe.Reader.AdvanceTo(readableBuffer.End, readableBuffer.End);
return (int)actual;
}
finally
{
registration.Dispose();
}
}
// Called under write-lock.
private Task FirstWriteAsync()
{
if (_firstWrite)
{
_firstWrite = false;
return _onFirstWriteAsync();
}
return Task.FromResult(true);
}
// Write with count 0 will still trigger OnFirstWrite
public override void Write(byte[] buffer, int offset, int count)
{
if (!_allowSynchronousIO())
{
throw new InvalidOperationException("Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true.");
}
// The Pipe Write method requires calling FlushAsync to notify the reader. Call WriteAsync instead.
WriteAsync(buffer, offset, count).GetAwaiter().GetResult();
}
public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
VerifyBuffer(buffer, offset, count, allowEmpty: true);
CheckNotComplete();
await _writeLock.WaitAsync(cancellationToken);
try
{
await FirstWriteAsync();
await _pipe.Writer.WriteAsync(new ReadOnlyMemory<byte>(buffer, offset, count), cancellationToken);
}
finally
{
_writeLock.Release();
}
}
private static void VerifyBuffer(byte[] buffer, int offset, int count, bool allowEmpty)
{
if (buffer == null)
{
throw new ArgumentNullException("buffer");
}
if (offset < 0 || offset > buffer.Length)
{
throw new ArgumentOutOfRangeException("offset", offset, string.Empty);
}
if (count < 0 || count > buffer.Length - offset
|| (!allowEmpty && count == 0))
{
throw new ArgumentOutOfRangeException("count", count, string.Empty);
}
}
internal void Cancel()
{
_aborted = true;
_abortException = new OperationCanceledException();
_complete = true;
_pipe.Writer.Complete(_abortException);
}
internal void Abort(Exception innerException)
{
Contract.Requires(innerException != null);
_aborted = true;
_abortException = innerException;
_complete = true;
_pipe.Writer.Complete(new IOException(string.Empty, innerException));
}
internal void CompleteWrites()
{
// If HttpClient.Dispose gets called while HttpClient.SetTask...() is called
// there is a chance that this method will be called twice and hang on the lock
// to prevent this we can check if there is already a thread inside the lock
if (_complete)
{
return;
}
// Throw for further writes, but not reads. Allow reads to drain the buffered data and then return 0 for further reads.
_complete = true;
_pipe.Writer.Complete();
}
private void CheckAborted()
{
if (_aborted)
{
throw new IOException(string.Empty, _abortException);
}
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
_abortRequest();
}
base.Dispose(disposing);
}
private void CheckNotComplete()
{
if (_complete)
{
throw new IOException("The request was aborted or the pipeline has finished");
}
}
}
}

View File

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.AspNetCore.TestHost
{
@ -19,19 +20,22 @@ namespace Microsoft.AspNetCore.TestHost
private ApplicationWrapper _application;
/// <summary>
/// For use with IHostBuilder or IWebHostBuilder.
/// For use with IHostBuilder.
/// </summary>
public TestServer()
: this(new FeatureCollection())
/// <param name="services"></param>
public TestServer(IServiceProvider services)
: this(services, new FeatureCollection())
{
}
/// <summary>
/// For use with IHostBuilder or IWebHostBuilder.
/// For use with IHostBuilder.
/// </summary>
/// <param name="services"></param>
/// <param name="featureCollection"></param>
public TestServer(IFeatureCollection featureCollection)
public TestServer(IServiceProvider services, IFeatureCollection featureCollection)
{
Services = services ?? throw new ArgumentNullException(nameof(services));
Features = featureCollection ?? throw new ArgumentNullException(nameof(featureCollection));
}
@ -50,16 +54,19 @@ namespace Microsoft.AspNetCore.TestHost
/// <param name="builder"></param>
/// <param name="featureCollection"></param>
public TestServer(IWebHostBuilder builder, IFeatureCollection featureCollection)
: this(featureCollection)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
Features = featureCollection ?? throw new ArgumentNullException(nameof(featureCollection));
var host = builder.UseServer(this).Build();
host.StartAsync().GetAwaiter().GetResult();
_hostInstance = host;
Services = host.Services;
}
public Uri BaseAddress { get; set; } = new Uri("http://localhost/");
@ -73,6 +80,8 @@ namespace Microsoft.AspNetCore.TestHost
}
}
public IServiceProvider Services { get; }
public IFeatureCollection Features { get; }
/// <summary>

View File

@ -34,5 +34,19 @@ namespace Microsoft.AspNetCore.TestHost
Assert.Equal("Test/Value", request.Content.Headers.ContentType.ToString());
});
}
[Fact]
public void TestServer_PropertyShouldHoldTestServerInstance()
{
// Arrange
var builder = new WebHostBuilder().Configure(app => { });
var server = new TestServer(builder);
// Act
var requestBuilder = server.CreateRequest("/");
// Assert
Assert.Equal(server, requestBuilder.TestServer);
}
}
}

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