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:
commit
ff1065070c
|
|
@ -10,8 +10,8 @@ pr:
|
||||||
jobs:
|
jobs:
|
||||||
- template: jobs/default-build.yml
|
- template: jobs/default-build.yml
|
||||||
parameters:
|
parameters:
|
||||||
jobName: Helix
|
jobName: Helix_x64
|
||||||
jobDisplayName: 'Tests: Helix'
|
jobDisplayName: 'Tests: Helix x64'
|
||||||
agentOs: Windows
|
agentOs: Windows
|
||||||
timeoutInMinutes: 240
|
timeoutInMinutes: 240
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -25,3 +25,23 @@ jobs:
|
||||||
- name: Helix_logs
|
- name: Helix_logs
|
||||||
path: artifacts/log/
|
path: artifacts/log/
|
||||||
publishOnError: true
|
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
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,12 @@
|
||||||
<PackageBrandingVersion>$(VersionPrefix)</PackageBrandingVersion>
|
<PackageBrandingVersion>$(VersionPrefix)</PackageBrandingVersion>
|
||||||
<PackageBrandingVersion Condition=" '$(VersionSuffix)' != '' ">$(PackageBrandingVersion) $(BrandingVersionSuffix.Trim())</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=" '$(PackageVersion)' == '' ">$(Version)</PackageVersion>
|
||||||
|
<PackageVersion Condition=" '$(NoSemVer20)' == 'true' ">$(SiteExtensionPackageVersion)</PackageVersion>
|
||||||
<SharedFxVersion>$(PackageVersion)</SharedFxVersion>
|
<SharedFxVersion>$(PackageVersion)</SharedFxVersion>
|
||||||
|
|
||||||
<TargetingPackVersion>$(TargetingPackVersionPrefix)</TargetingPackVersion>
|
<TargetingPackVersion>$(TargetingPackVersionPrefix)</TargetingPackVersion>
|
||||||
|
|
@ -93,6 +98,10 @@
|
||||||
<BuildHelixPayload Condition="'$(BuildHelixPayload)' == '' AND '$(IsTestProject)' == 'true'">true</BuildHelixPayload>
|
<BuildHelixPayload Condition="'$(BuildHelixPayload)' == '' AND '$(IsTestProject)' == 'true'">true</BuildHelixPayload>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(Language)' == 'C#' AND '$(IsReferenceAssemblyProject)' == 'true'">
|
||||||
|
<Compile Include="$(SharedSourceRoot)ReferenceAssemblyInfo.cs" LinkBase="Properties" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<KnownFrameworkReference Update="Microsoft.NETCore.App">
|
<KnownFrameworkReference Update="Microsoft.NETCore.App">
|
||||||
<!-- Always update the 'latest version', whether the repo is servicing or not. -->
|
<!-- Always update the 'latest version', whether the repo is servicing or not. -->
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<packageSources>
|
<packageSources>
|
||||||
<clear />
|
<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="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" />
|
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||||
</packageSources>
|
</packageSources>
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@
|
||||||
<FileExtensionSignInfo Include=".nupkg" CertificateName="NuGet" />
|
<FileExtensionSignInfo Include=".nupkg" CertificateName="NuGet" />
|
||||||
<FileExtensionSignInfo Include=".vsix" CertificateName="VsixSHA2" />
|
<FileExtensionSignInfo Include=".vsix" CertificateName="VsixSHA2" />
|
||||||
<FileExtensionSignInfo Include=".zip" CertificateName="None" />
|
<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.
|
Use the PublicKeyToken of .NET assemblies to determine with authenticode cert to use.
|
||||||
|
|
|
||||||
|
|
@ -9,400 +9,400 @@
|
||||||
-->
|
-->
|
||||||
<Dependencies>
|
<Dependencies>
|
||||||
<ProductDependencies>
|
<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>
|
<Uri>https://github.com/aspnet/Blazor</Uri>
|
||||||
<Sha>8df334032840bda9221fe281890e88fb1de06845</Sha>
|
<Sha>10ac2538243650ab287ba9fafe6d05e30c40f9ae</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
|
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
|
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
|
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5e7c4e5e382a7e486d9416b711fcd65bae25808b</Sha>
|
<Sha>ff305c700f72e199c9a41ee43fdc21e7dfa7020c</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>507ef211ada34b69c600d02d202761fe7af7c07f</Sha>
|
<Sha>9e3b10d68188c9518cfc5bb3cb0050968adadd99</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64" Pinned="true">
|
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64" Pinned="true">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
|
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
|
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
|
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<!--
|
<!--
|
||||||
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
|
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
|
||||||
All Runtime.$rid packages should have the same version.
|
All Runtime.$rid packages should have the same version.
|
||||||
-->
|
-->
|
||||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="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>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
|
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>094b6111d3d8c90d1111db4d73fd9faa755d9413</Sha>
|
<Sha>ee0c7ead1a46f06f98aff9102b785f532b71da9c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
</ProductDependencies>
|
</ProductDependencies>
|
||||||
<ToolsetDependencies>
|
<ToolsetDependencies>
|
||||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>28efaabc4349d11a95f8f31eb932c84f207916ab</Sha>
|
<Sha>72da80db3fd14b84fefeef54ac0930c711f306f4</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19323.4">
|
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19323.4">
|
||||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||||
|
|
@ -416,9 +416,9 @@
|
||||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||||
<Sha>9946534da4f73e6242ca105f6798ab58119c9ab0</Sha>
|
<Sha>9946534da4f73e6242ca105f6798ab58119c9ab0</Sha>
|
||||||
</Dependency>
|
</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>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>42b3a303ba27594637de04c78aaf9f1c7af6e303</Sha>
|
<Sha>531db4e313e577192cdbca3931c4298b6db1e611</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
</ToolsetDependencies>
|
</ToolsetDependencies>
|
||||||
</Dependencies>
|
</Dependencies>
|
||||||
|
|
|
||||||
|
|
@ -54,110 +54,110 @@
|
||||||
<!-- Packages from dotnet/arcade -->
|
<!-- Packages from dotnet/arcade -->
|
||||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19323.4</MicrosoftDotNetGenAPIPackageVersion>
|
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19323.4</MicrosoftDotNetGenAPIPackageVersion>
|
||||||
<!-- Packages from dotnet/core-setup -->
|
<!-- Packages from dotnet/core-setup -->
|
||||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview7-27812-08</MicrosoftExtensionsDependencyModelPackageVersion>
|
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview7-27826-20</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||||
<MicrosoftNETCoreAppRefPackageVersion>3.0.0-preview7-27812-08</MicrosoftNETCoreAppRefPackageVersion>
|
<MicrosoftNETCoreAppRefPackageVersion>3.0.0-preview7-27826-20</MicrosoftNETCoreAppRefPackageVersion>
|
||||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.0.0-preview7-27812-08</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.0.0-preview7-27826-20</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview7-27812-08</NETStandardLibraryRefPackageVersion>
|
<NETStandardLibraryRefPackageVersion>2.1.0-preview7-27826-20</NETStandardLibraryRefPackageVersion>
|
||||||
<!-- Packages from dotnet/corefx -->
|
<!-- Packages from dotnet/corefx -->
|
||||||
<MicrosoftBclAsyncInterfacesPackageVersion>1.0.0-preview7.19312.3</MicrosoftBclAsyncInterfacesPackageVersion>
|
<MicrosoftBclAsyncInterfacesPackageVersion>1.0.0-preview7.19326.13</MicrosoftBclAsyncInterfacesPackageVersion>
|
||||||
<MicrosoftCSharpPackageVersion>4.6.0-preview7.19312.3</MicrosoftCSharpPackageVersion>
|
<MicrosoftCSharpPackageVersion>4.6.0-preview7.19326.13</MicrosoftCSharpPackageVersion>
|
||||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview7.19312.3</MicrosoftWin32RegistryPackageVersion>
|
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview7.19326.13</MicrosoftWin32RegistryPackageVersion>
|
||||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview7.19312.3</SystemComponentModelAnnotationsPackageVersion>
|
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview7.19326.13</SystemComponentModelAnnotationsPackageVersion>
|
||||||
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
|
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
|
||||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview7.19312.3</SystemDiagnosticsEventLogPackageVersion>
|
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview7.19326.13</SystemDiagnosticsEventLogPackageVersion>
|
||||||
<SystemIOPipelinesPackageVersion>4.6.0-preview7.19312.3</SystemIOPipelinesPackageVersion>
|
<SystemIOPipelinesPackageVersion>4.6.0-preview7.19326.13</SystemIOPipelinesPackageVersion>
|
||||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview7.19312.3</SystemNetHttpWinHttpHandlerPackageVersion>
|
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview7.19326.13</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview7.19312.3</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview7.19326.13</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview7.19312.3</SystemReflectionMetadataPackageVersion>
|
<SystemReflectionMetadataPackageVersion>1.7.0-preview7.19326.13</SystemReflectionMetadataPackageVersion>
|
||||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview7.19312.3</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview7.19326.13</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview7.19312.3</SystemSecurityCryptographyCngPackageVersion>
|
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview7.19326.13</SystemSecurityCryptographyCngPackageVersion>
|
||||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview7.19312.3</SystemSecurityCryptographyPkcsPackageVersion>
|
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview7.19326.13</SystemSecurityCryptographyPkcsPackageVersion>
|
||||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview7.19312.3</SystemSecurityCryptographyXmlPackageVersion>
|
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview7.19326.13</SystemSecurityCryptographyXmlPackageVersion>
|
||||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview7.19312.3</SystemSecurityPermissionsPackageVersion>
|
<SystemSecurityPermissionsPackageVersion>4.6.0-preview7.19326.13</SystemSecurityPermissionsPackageVersion>
|
||||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview7.19312.3</SystemSecurityPrincipalWindowsPackageVersion>
|
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview7.19326.13</SystemSecurityPrincipalWindowsPackageVersion>
|
||||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview7.19312.3</SystemServiceProcessServiceControllerPackageVersion>
|
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview7.19326.13</SystemServiceProcessServiceControllerPackageVersion>
|
||||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview7.19312.3</SystemTextEncodingsWebPackageVersion>
|
<SystemTextEncodingsWebPackageVersion>4.6.0-preview7.19326.13</SystemTextEncodingsWebPackageVersion>
|
||||||
<SystemTextJsonPackageVersion>4.6.0-preview7.19312.3</SystemTextJsonPackageVersion>
|
<SystemTextJsonPackageVersion>4.6.0-preview7.19326.13</SystemTextJsonPackageVersion>
|
||||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview7.19312.3</SystemThreadingChannelsPackageVersion>
|
<SystemThreadingChannelsPackageVersion>4.6.0-preview7.19326.13</SystemThreadingChannelsPackageVersion>
|
||||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview7.19312.3</MicrosoftNETCorePlatformsPackageVersion>
|
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview7.19326.13</MicrosoftNETCorePlatformsPackageVersion>
|
||||||
<!-- Packages from aspnet/Blazor -->
|
<!-- Packages from aspnet/Blazor -->
|
||||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19323.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19351.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||||
<!-- Packages from aspnet/Extensions -->
|
<!-- Packages from aspnet/Extensions -->
|
||||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview7.19312.4</InternalAspNetCoreAnalyzersPackageVersion>
|
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview7.19328.2</InternalAspNetCoreAnalyzersPackageVersion>
|
||||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview7.19312.4</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview7.19328.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview7.19312.4</MicrosoftAspNetCoreTestingPackageVersion>
|
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview7.19328.2</MicrosoftAspNetCoreTestingPackageVersion>
|
||||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingMemoryPackageVersion>
|
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationIniPackageVersion>
|
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationPackageVersion>
|
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHostingPackageVersion>
|
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHostingPackageVersion>
|
||||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsHttpPackageVersion>
|
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsHttpPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLocalizationPackageVersion>
|
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingConsolePackageVersion>
|
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingDebugPackageVersion>
|
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingPackageVersion>
|
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingTestingPackageVersion>
|
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsObjectPoolPackageVersion>
|
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsOptionsPackageVersion>
|
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsPrimitivesPackageVersion>
|
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview7.19312.4</MicrosoftExtensionsWebEncodersPackageVersion>
|
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview7.19328.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview7.19312.4</MicrosoftInternalExtensionsRefsPackageVersion>
|
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview7.19328.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview7.19312.4</MicrosoftJSInteropPackageVersion>
|
<MicrosoftJSInteropPackageVersion>3.0.0-preview7.19328.2</MicrosoftJSInteropPackageVersion>
|
||||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview7.19312.4</MonoWebAssemblyInteropPackageVersion>
|
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview7.19328.2</MonoWebAssemblyInteropPackageVersion>
|
||||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||||
<dotnetefPackageVersion>3.0.0-preview7.19313.2</dotnetefPackageVersion>
|
<dotnetefPackageVersion>3.0.0-preview7.19330.4</dotnetefPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview7.19313.2</MicrosoftEntityFrameworkCorePackageVersion>
|
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview7.19330.4</MicrosoftEntityFrameworkCorePackageVersion>
|
||||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview7.19321.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview7.19328.6</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview7.19321.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview7.19328.6</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview7.19321.2</MicrosoftCodeAnalysisRazorPackageVersion>
|
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview7.19328.6</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||||
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview7.19321.2</MicrosoftNETSdkRazorPackageVersion>
|
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview7.19328.6</MicrosoftNETSdkRazorPackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
|
|
@ -217,8 +217,7 @@
|
||||||
<CastleCorePackageVersion>4.2.1</CastleCorePackageVersion>
|
<CastleCorePackageVersion>4.2.1</CastleCorePackageVersion>
|
||||||
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
|
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
|
||||||
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
|
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
|
||||||
<GrpcAspNetCoreServerPackageVersion>0.1.21-pre1</GrpcAspNetCoreServerPackageVersion>
|
<GrpcAspNetCorePackageVersion>0.1.22-pre1</GrpcAspNetCorePackageVersion>
|
||||||
<GrpcToolsPackageVersion>1.21.0</GrpcToolsPackageVersion>
|
|
||||||
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview3.4</IdentityServer4AspNetIdentityPackageVersion>
|
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview3.4</IdentityServer4AspNetIdentityPackageVersion>
|
||||||
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkPackageVersion>
|
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkPackageVersion>
|
||||||
<IdentityServer4PackageVersion>3.0.0-preview3.4</IdentityServer4PackageVersion>
|
<IdentityServer4PackageVersion>3.0.0-preview3.4</IdentityServer4PackageVersion>
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@
|
||||||
<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
|
<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
<!-- Workaround for https://github.com/dotnet/arcade/issues/204 -->
|
<!-- Workaround for https://github.com/dotnet/arcade/issues/204 -->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Internal.AspNetCore.BuildTasks" PrivateAssets="All" Version="$(InternalAspNetCoreBuildTasksPackageVersion)" IsImplicitlyDefined="true" />
|
<PackageReference Include="Internal.AspNetCore.BuildTasks" PrivateAssets="All" Version="$(InternalAspNetCoreBuildTasksPackageVersion)" IsImplicitlyDefined="true" />
|
||||||
|
|
@ -58,4 +57,10 @@
|
||||||
</KnownFrameworkReference>
|
</KnownFrameworkReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Work around https://github.com/dotnet/cli/issues/11378. -->
|
||||||
|
<Target Name="_WorkaroundNetStandard" AfterTargets="ResolvePackageAssets">
|
||||||
|
<ItemGroup>
|
||||||
|
<TransitiveFrameworkReference Remove="NETStandard.Library" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -9,16 +9,18 @@ if type -P "node" &>/dev/null; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
node_version=$1
|
node_version=$1
|
||||||
|
arch=$2
|
||||||
osname=`uname -s`
|
osname=`uname -s`
|
||||||
echo $osname
|
|
||||||
if [ "$osname" = "Darwin" ]; then
|
if [ "$osname" = "Darwin" ]; then
|
||||||
platformarch='darwin-x64'
|
platformarch="darwin-$arch"
|
||||||
else
|
else
|
||||||
platformarch='linux-x64'
|
platformarch="linux-$arch"
|
||||||
fi
|
fi
|
||||||
|
echo "PlatformArch: $platformarch"
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
output_dir="$DIR/node"
|
output_dir="$DIR/node"
|
||||||
url="http://nodejs.org/dist/v$node_version/node-v$node_version-$platformarch.tar.gz"
|
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)"
|
tmp="$(mktemp -d -t install-node.XXXXXX)"
|
||||||
trap "rm -rf $tmp" EXIT
|
trap "rm -rf $tmp" EXIT
|
||||||
cd "$tmp"
|
cd "$tmp"
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,18 @@ set targetFrameworkIdentifier=%2
|
||||||
set sdkVersion=%3
|
set sdkVersion=%3
|
||||||
set runtimeVersion=%4
|
set runtimeVersion=%4
|
||||||
set helixQueue=%5
|
set helixQueue=%5
|
||||||
|
set arch=%6
|
||||||
|
|
||||||
set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk
|
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_SKIP_FIRST_TIME_EXPERIENCE=1
|
||||||
set DOTNET_MULTILEVEL_LOOKUP=0
|
set DOTNET_MULTILEVEL_LOOKUP=0
|
||||||
set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home
|
set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home
|
||||||
|
|
||||||
set PATH=%DOTNET_ROOT%;%PATH%;%HELIX_CORRELATION_PAYLOAD%\node\bin
|
set PATH=%DOTNET_ROOT%;%PATH%;%HELIX_CORRELATION_PAYLOAD%\node\bin
|
||||||
|
|
||||||
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 %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 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% -Runtime dotnet -Version %runtimeVersion% -InstallDir %DOTNET_ROOT%"
|
||||||
|
|
||||||
set HELIX=%helixQueue%
|
set HELIX=%helixQueue%
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<PropertyGroup Condition=" '$(ContinuousIntegrationBuild)' == 'true' ">
|
<PropertyGroup Condition=" '$(ContinuousIntegrationBuild)' == 'true' ">
|
||||||
<HelixType>ci</HelixType>
|
<HelixType>ci</HelixType>
|
||||||
<Creator>aspnetcore</Creator>
|
<Creator>aspnetcore</Creator>
|
||||||
<HelixBuild>$(BUILD_BUILDNUMBER).$(SYSTEM_JOBATTEMPT)</HelixBuild>
|
<HelixBuild>$(BUILD_BUILDNUMBER).$(TargetArchitecture).$(SYSTEM_JOBATTEMPT)</HelixBuild>
|
||||||
<WaitForWorkItemCompletion>true</WaitForWorkItemCompletion>
|
<WaitForWorkItemCompletion>true</WaitForWorkItemCompletion>
|
||||||
<EnableAzurePipelinesReporter>true</EnableAzurePipelinesReporter>
|
<EnableAzurePipelinesReporter>true</EnableAzurePipelinesReporter>
|
||||||
<FailOnMissionControlTestFailure>true</FailOnMissionControlTestFailure>
|
<FailOnMissionControlTestFailure>true</FailOnMissionControlTestFailure>
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,10 @@
|
||||||
<HelixAvailablePlatform Include="Windows" />
|
<HelixAvailablePlatform Include="Windows" />
|
||||||
<HelixAvailablePlatform Include="OSX" />
|
<HelixAvailablePlatform Include="OSX" />
|
||||||
<HelixAvailablePlatform Include="Linux" />
|
<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.10.Amd64.ClientRS4.VS2017.Open" Platform="Windows" />
|
||||||
<HelixAvailableTargetQueue Include="Windows.81.Amd64.Open" Platform="Windows" />
|
<HelixAvailableTargetQueue Include="Windows.81.Amd64.Open" Platform="Windows" />
|
||||||
<HelixAvailableTargetQueue Include="Windows.7.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="Debian.9.Amd64.Open" Platform="Linux" />
|
||||||
<HelixAvailableTargetQueue Include="Redhat.7.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" />
|
<HelixAvailableTargetQueue Include="(Fedora.28.Amd64.Open)Ubuntu.1604.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-28-helix-09ca40b-20190508143249" Platform="Linux" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<!-- TODO: re-enable Debian.9.Arm64.Open and Ubuntu.1804.Arm64.Open -->
|
<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>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(IsWindowsOnlyTest)' == 'true'">
|
<ItemGroup Condition="'$(IsWindowsOnlyTest)' == 'true'">
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'false'">
|
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'false'">
|
||||||
<HelixPreCommand Include="./installnode.sh $(NodeVersion)" />
|
<HelixPreCommand Include="./installnode.sh $(NodeVersion) $(TargetArchitecture)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'true'">
|
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'true'">
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<BuildHelixPayload Condition="'@(_HelixApplicableTargetQueue->Count())' == '0'">false</BuildHelixPayload>
|
<BuildHelixPayload Condition="'@(_HelixApplicableTargetQueue->Count())' == '0'">false</BuildHelixPayload>
|
||||||
|
<BuildHelixPayload Condition="'$(TargetArchitecture)' == 'arm64' AND '$(SkipHelixArm)' == 'true'">false</BuildHelixPayload>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_PublishHelixArchive" DependsOnTargets="Publish" >
|
<Target Name="_PublishHelixArchive" DependsOnTargets="Publish" >
|
||||||
|
|
@ -78,8 +78,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
|
||||||
<TestAssembly>$(TargetFileName)</TestAssembly>
|
<TestAssembly>$(TargetFileName)</TestAssembly>
|
||||||
<PreCommands>@(HelixPreCommand)</PreCommands>
|
<PreCommands>@(HelixPreCommand)</PreCommands>
|
||||||
<PostCommands>@(HelixPostCommand)</PostCommands>
|
<PostCommands>@(HelixPostCommand)</PostCommands>
|
||||||
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(TargetFrameworkIdentifier) $(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)</Command>
|
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture)</Command>
|
||||||
<Timeout>$(HelixTimeout)</Timeout>
|
<Timeout>$(HelixTimeout)</Timeout>
|
||||||
</HelixWorkItem>
|
</HelixWorkItem>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,11 @@
|
||||||
<_BackupPackageJson>$(IntermediateOutputPath)$(MSBuildProjectName).package.json.bak</_BackupPackageJson>
|
<_BackupPackageJson>$(IntermediateOutputPath)$(MSBuildProjectName).package.json.bak</_BackupPackageJson>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<TSFiles Include="$(MSBuildProjectDirectory)\*\*.ts" />
|
||||||
|
<TSFiles Include="$(MSBuildProjectDirectory)\package.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="_CheckForInvalidConfiguration">
|
<Target Name="_CheckForInvalidConfiguration">
|
||||||
<Error Text="Missing expected property: PackageId" Condition="'$(IsPackable)' != 'false' and '$(PackageId)' == ''" />
|
<Error Text="Missing expected property: PackageId" Condition="'$(IsPackable)' != 'false' and '$(PackageId)' == ''" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
@ -31,8 +36,14 @@
|
||||||
BuildInParallel="true" />
|
BuildInParallel="true" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="Build" DependsOnTargets="PrepareForBuild;ResolveProjectReferences">
|
<Target Name="Build" DependsOnTargets="PrepareForBuild;ResolveProjectReferences;_Build" />
|
||||||
<Yarn Command="run build" Condition="'$(IsBuildable)' != 'false'" StandardOutputImportance="High" StandardErrorImportance="High" />
|
|
||||||
|
<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>
|
</Target>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
<_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)">
|
<_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)">
|
||||||
<PackageId>$(PackageId)</PackageId>
|
<PackageId>$(PackageId)</PackageId>
|
||||||
<PackageVersion>$(PackageVersion)</PackageVersion>
|
<PackageVersion>$(PackageVersion)</PackageVersion>
|
||||||
|
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
|
||||||
<VersionVariableName>$(PackageId.Replace('.',''))PackageVersion</VersionVariableName>
|
<VersionVariableName>$(PackageId.Replace('.',''))PackageVersion</VersionVariableName>
|
||||||
</_ProjectPathWithVersion>
|
</_ProjectPathWithVersion>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -76,10 +76,6 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ProjectListFile>$(MSBuildThisFileDirectory)..\eng\ProjectReferences.props</ProjectListFile>
|
|
||||||
<RefsTargetFramework>$(TargetFrameworks)</RefsTargetFramework>
|
|
||||||
<RefsTargetFramework Condition="'$(RefsTargetFramework)' == ''">$(TargetFramework)</RefsTargetFramework>
|
|
||||||
|
|
||||||
<ReferencesContent>
|
<ReferencesContent>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
<ItemGroup Condition="'%24(TargetFramework)' == '$(TargetFramework)'">
|
<ItemGroup Condition="'%24(TargetFramework)' == '$(TargetFramework)'">
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@ namespace RepoTasks
|
||||||
[Required]
|
[Required]
|
||||||
public string TargetFile { get; set; }
|
public string TargetFile { get; set; }
|
||||||
|
|
||||||
|
public string ManagedRoot { get; set; } = "";
|
||||||
|
|
||||||
|
public string NativeRoot { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Extra attributes to place on the root node.
|
/// Extra attributes to place on the root node.
|
||||||
///
|
///
|
||||||
|
|
@ -46,7 +50,6 @@ namespace RepoTasks
|
||||||
{
|
{
|
||||||
Item = item,
|
Item = item,
|
||||||
Filename = Path.GetFileName(item.ItemSpec),
|
Filename = Path.GetFileName(item.ItemSpec),
|
||||||
TargetPath = item.GetMetadata("TargetPath"),
|
|
||||||
AssemblyName = FileUtilities.GetAssemblyName(item.ItemSpec),
|
AssemblyName = FileUtilities.GetAssemblyName(item.ItemSpec),
|
||||||
FileVersion = FileUtilities.GetFileVersion(item.ItemSpec),
|
FileVersion = FileUtilities.GetFileVersion(item.ItemSpec),
|
||||||
IsNative = item.GetMetadata("IsNativeImage") == "true",
|
IsNative = item.GetMetadata("IsNativeImage") == "true",
|
||||||
|
|
@ -55,15 +58,14 @@ namespace RepoTasks
|
||||||
.Where(f =>
|
.Where(f =>
|
||||||
!f.IsSymbolFile &&
|
!f.IsSymbolFile &&
|
||||||
(f.Filename.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || f.IsNative))
|
(f.Filename.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || f.IsNative))
|
||||||
.OrderBy(f => f.TargetPath, StringComparer.Ordinal)
|
.OrderBy(f => f.Filename, StringComparer.Ordinal))
|
||||||
.ThenBy(f => f.Filename, StringComparer.Ordinal))
|
|
||||||
{
|
{
|
||||||
var element = new XElement(
|
var element = new XElement(
|
||||||
"File",
|
"File",
|
||||||
new XAttribute("Type", f.IsNative ? "Native" : "Managed"),
|
new XAttribute("Type", f.IsNative ? "Native" : "Managed"),
|
||||||
new XAttribute(
|
new XAttribute(
|
||||||
"Path",
|
"Path",
|
||||||
Path.Combine(f.TargetPath, f.Filename).Replace('\\', '/')));
|
Path.Combine(f.IsNative ? NativeRoot : ManagedRoot, f.Filename).Replace('\\', '/')));
|
||||||
|
|
||||||
if (f.AssemblyName != null)
|
if (f.AssemblyName != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"sdk": {
|
"sdk": {
|
||||||
"version": "3.0.100-preview5-011568"
|
"version": "3.0.100-preview6-012264"
|
||||||
},
|
},
|
||||||
"tools": {
|
"tools": {
|
||||||
"dotnet": "3.0.100-preview5-011568",
|
"dotnet": "3.0.100-preview6-012264",
|
||||||
"runtimes": {
|
"runtimes": {
|
||||||
"dotnet/x64": [
|
"dotnet/x64": [
|
||||||
"$(MicrosoftNETCoreAppRuntimeVersion)"
|
"$(MicrosoftNETCoreAppRuntimeVersion)"
|
||||||
|
|
|
||||||
|
|
@ -284,8 +284,7 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
|
||||||
var ex = Assert.Throws<ArgumentNullException>(
|
var ex = Assert.Throws<ArgumentNullException>(
|
||||||
() => tokenProvider.TryValidateTokenSet(httpContext, null, fieldtoken, out message));
|
() => tokenProvider.TryValidateTokenSet(httpContext, null, fieldtoken, out message));
|
||||||
|
|
||||||
var trimmed = ex.Message.Substring(0, ex.Message.IndexOf(Environment.NewLine));
|
Assert.StartsWith(@"The required antiforgery cookie token must be provided.", ex.Message);
|
||||||
Assert.Equal(@"The required antiforgery cookie token must be provided.", trimmed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -307,8 +306,7 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
|
||||||
var ex = Assert.Throws<ArgumentNullException>(
|
var ex = Assert.Throws<ArgumentNullException>(
|
||||||
() => tokenProvider.TryValidateTokenSet(httpContext, cookieToken, null, out message));
|
() => tokenProvider.TryValidateTokenSet(httpContext, cookieToken, null, out message));
|
||||||
|
|
||||||
var trimmed = ex.Message.Substring(0, ex.Message.IndexOf(Environment.NewLine));
|
Assert.StartsWith("The required antiforgery request token must be provided.", ex.Message);
|
||||||
Assert.Equal("The required antiforgery request token must be provided.", trimmed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
<!-- Test asset publishing not working on arm64 https://github.com/aspnet/AspNetCore/issues/11205 -->
|
||||||
|
<SkipHelixArm>true</SkipHelixArm>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
|
||||||
"Blazor._internal.http.sendAsync",
|
"Blazor._internal.http.sendAsync",
|
||||||
id,
|
id,
|
||||||
request.Content == null ? null : await request.Content.ReadAsByteArrayAsync(),
|
request.Content == null ? null : await request.Content.ReadAsByteArrayAsync(),
|
||||||
JsonSerializer.ToString(options, JsonSerializerOptionsProvider.Options));
|
JsonSerializer.Serialize(options, JsonSerializerOptionsProvider.Options));
|
||||||
|
|
||||||
return await tcs.Task;
|
return await tcs.Task;
|
||||||
}
|
}
|
||||||
|
|
@ -100,7 +100,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
|
||||||
}
|
}
|
||||||
else
|
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 responseContent = responseBodyData == null ? null : new ByteArrayContent(responseBodyData);
|
||||||
var responseMessage = responseDescriptor.ToResponseMessage(responseContent);
|
var responseMessage = responseDescriptor.ToResponseMessage(responseContent);
|
||||||
tcs.SetResult(responseMessage);
|
tcs.SetResult(responseMessage);
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Blazor.Build
|
||||||
assemblyReferences,
|
assemblyReferences,
|
||||||
embeddedContent,
|
embeddedContent,
|
||||||
linkerEnabled);
|
linkerEnabled);
|
||||||
return JsonSerializer.ToString(data, JsonSerializerOptionsProvider.Options);
|
return JsonSerializer.Serialize(data, JsonSerializerOptionsProvider.Options);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetAssemblyEntryPoint(string assemblyPath)
|
private static string GetAssemblyEntryPoint(string assemblyPath)
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<RunCommand>dotnet</RunCommand>
|
<RunCommand>dotnet</RunCommand>
|
||||||
<_BlazorCliLocation>$(MSBuildThisFileDirectory)../../DevServer/src/bin/$(Configuration)/netcoreapp3.0/blazor-devserver.dll</_BlazorCliLocation>
|
<_BlazorCliLocation>$(MSBuildThisFileDirectory)../../DevServer/src/bin/$(Configuration)/netcoreapp3.0/blazor-devserver.dll</_BlazorCliLocation>
|
||||||
<RunArguments>exec "$(_BlazorCliLocation)" serve "$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)" $(AdditionalRunArguments)</RunArguments>
|
<RunArguments>exec "$(_BlazorCliLocation)" serve --applicationpath "$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)" $(AdditionalRunArguments)</RunArguments>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.Versioning;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.CommandLineUtils;
|
using Microsoft.Extensions.CommandLineUtils;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Blazor.DevServer.Commands
|
namespace Microsoft.AspNetCore.Blazor.DevServer.Commands
|
||||||
{
|
{
|
||||||
|
|
@ -23,28 +21,11 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Commands
|
||||||
|
|
||||||
HelpOption("-?|-h|--help");
|
HelpOption("-?|-h|--help");
|
||||||
|
|
||||||
ApplicationPath = new CommandArgument()
|
|
||||||
{
|
|
||||||
Description = "Path to the client application dll",
|
|
||||||
MultipleValues = false,
|
|
||||||
Name = "<PATH>",
|
|
||||||
ShowInHelpText = true
|
|
||||||
};
|
|
||||||
Arguments.Add(ApplicationPath);
|
|
||||||
|
|
||||||
OnExecute(Execute);
|
OnExecute(Execute);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommandArgument ApplicationPath { get; private set; }
|
|
||||||
|
|
||||||
private int Execute()
|
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();
|
Server.Program.BuildWebHost(RemainingArguments.ToArray()).Run();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
<Reference Include="Microsoft.AspNetCore.ResponseCompression" />
|
<Reference Include="Microsoft.AspNetCore.ResponseCompression" />
|
||||||
<Reference Include="Microsoft.AspNetCore" />
|
<Reference Include="Microsoft.AspNetCore" />
|
||||||
<Reference Include="Microsoft.Extensions.CommandLineUtils.Sources" />
|
<Reference Include="Microsoft.Extensions.CommandLineUtils.Sources" />
|
||||||
|
<Reference Include="Microsoft.Extensions.Hosting" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<!-- Pack settings -->
|
<!-- Pack settings -->
|
||||||
|
|
|
||||||
|
|
@ -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.
|
// 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.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Blazor.DevServer.Server
|
namespace Microsoft.AspNetCore.Blazor.DevServer.Server
|
||||||
{
|
{
|
||||||
|
|
@ -18,12 +25,24 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Intended for framework test use only.
|
/// Intended for framework test use only.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static IWebHost BuildWebHost(string[] args) =>
|
public static IHost BuildWebHost(string[] args) =>
|
||||||
WebHost.CreateDefaultBuilder(args)
|
Host.CreateDefaultBuilder(args)
|
||||||
.UseConfiguration(new ConfigurationBuilder()
|
.ConfigureHostConfiguration(cb => {
|
||||||
.AddCommandLine(args)
|
var applicationPath = args.SkipWhile(a => a != "--applicationpath").Skip(1).FirstOrDefault();
|
||||||
.Build())
|
var name = Path.ChangeExtension(applicationPath,".StaticWebAssets.xml");
|
||||||
.UseStartup<Startup>()
|
|
||||||
.Build();
|
if (name != null)
|
||||||
|
{
|
||||||
|
cb.AddInMemoryCollection(new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
[WebHostDefaults.StaticWebAssetsKey] = name
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.ConfigureWebHostDefaults(webBuilder =>
|
||||||
|
{
|
||||||
|
webBuilder.UseStaticWebAssets();
|
||||||
|
webBuilder.UseStartup<Startup>();
|
||||||
|
}).Build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,12 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
|
||||||
{
|
{
|
||||||
internal class Startup
|
internal class Startup
|
||||||
{
|
{
|
||||||
public static string ApplicationAssembly { get; set; }
|
public Startup(IConfiguration configuration)
|
||||||
|
{
|
||||||
|
Configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfiguration Configuration { get; }
|
||||||
|
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
|
|
@ -35,7 +40,7 @@ namespace Microsoft.AspNetCore.Blazor.DevServer.Server
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment environment, IConfiguration configuration)
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment environment, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
var applicationAssemblyFullPath = ResolveApplicationAssemblyFullPath(environment);
|
var applicationAssemblyFullPath = ResolveApplicationAssemblyFullPath();
|
||||||
|
|
||||||
app.UseDeveloperExceptionPage();
|
app.UseDeveloperExceptionPage();
|
||||||
app.UseResponseCompression();
|
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);
|
const string applicationPathKey = "applicationpath";
|
||||||
if (!File.Exists(applicationAssemblyFullPath))
|
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)
|
private static void EnableConfiguredPathbase(IApplicationBuilder app, IConfiguration configuration)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,6 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_BlazorDevServerDll>$(MSBuildThisFileDirectory)../tools/blazor-devserver.dll</_BlazorDevServerDll>
|
<_BlazorDevServerDll>$(MSBuildThisFileDirectory)../tools/blazor-devserver.dll</_BlazorDevServerDll>
|
||||||
<RunCommand>dotnet</RunCommand>
|
<RunCommand>dotnet</RunCommand>
|
||||||
<RunArguments>"$(_BlazorDevServerDll)" serve "$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)"</RunArguments>
|
<RunArguments>"$(_BlazorDevServerDll)" serve --applicationpath "$(MSBuildProjectDirectory)/$(OutputPath)$(TargetFileName)"</RunArguments>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
"$schema": "http://json.schemastore.org/vs-2017.3.host",
|
"$schema": "http://json.schemastore.org/vs-2017.3.host",
|
||||||
"name": {
|
"name": {
|
||||||
"text": "Blazor (ASP.NET Core hosted)",
|
"text": "Blazor (ASP.NET Core hosted)",
|
||||||
"package": "{0CD94836-1526-4E85-87D3-FB5274C5AFC9}",
|
|
||||||
"id": "1050"
|
"id": "1050"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<p>Current count: @currentCount</p>
|
<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 {
|
@code {
|
||||||
int currentCount = 0;
|
int currentCount = 0;
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,6 @@ else
|
||||||
|
|
||||||
protected override async Task OnInitAsync()
|
protected override async Task OnInitAsync()
|
||||||
{
|
{
|
||||||
forecasts = await Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecasts");
|
forecasts = await Http.GetJsonAsync<WeatherForecast[]>("weatherforecast");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<div class="top-row pl-4 navbar navbar-dark">
|
<div class="top-row pl-4 navbar navbar-dark">
|
||||||
<a class="navbar-brand" href="">BlazorHosted-CSharp</a>
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
|
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
|
||||||
<ul class="nav flex-column">
|
<ul class="nav flex-column">
|
||||||
<li class="nav-item px-3">
|
<li class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<span class="text-nowrap">
|
<span class="text-nowrap">
|
||||||
Please take our
|
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>
|
</span>
|
||||||
and tell us what you think.
|
and tell us what you think.
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,31 @@
|
||||||
using BlazorHosted_CSharp.Shared;
|
using BlazorHosted_CSharp.Shared;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace BlazorHosted_CSharp.Server.Controllers
|
namespace BlazorHosted_CSharp.Server.Controllers
|
||||||
{
|
{
|
||||||
[Route("api/[controller]")]
|
[ApiController]
|
||||||
public class SampleDataController : Controller
|
[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"
|
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
|
||||||
};
|
};
|
||||||
|
|
||||||
[HttpGet("[action]")]
|
private readonly ILogger<WeatherForecastController> logger;
|
||||||
public IEnumerable<WeatherForecast> WeatherForecasts()
|
|
||||||
|
public WeatherForecastController(ILogger<WeatherForecastController> logger)
|
||||||
|
{
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IEnumerable<WeatherForecast> Get()
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new Random();
|
||||||
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||||
|
|
@ -24,7 +33,8 @@ namespace BlazorHosted_CSharp.Server.Controllers
|
||||||
Date = DateTime.Now.AddDays(index),
|
Date = DateTime.Now.AddDays(index),
|
||||||
TemperatureC = rng.Next(-20, 55),
|
TemperatureC = rng.Next(-20, 55),
|
||||||
Summary = Summaries[rng.Next(Summaries.Length)]
|
Summary = Summaries[rng.Next(Summaries.Length)]
|
||||||
});
|
})
|
||||||
|
.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
"$schema": "http://json.schemastore.org/vs-2017.3.host",
|
"$schema": "http://json.schemastore.org/vs-2017.3.host",
|
||||||
"name": {
|
"name": {
|
||||||
"text": "Blazor (client-side)",
|
"text": "Blazor (client-side)",
|
||||||
"package": "{0CD94836-1526-4E85-87D3-FB5274C5AFC9}",
|
|
||||||
"id": "1050"
|
"id": "1050"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<p>Current count: @currentCount</p>
|
<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 {
|
@code {
|
||||||
int currentCount = 0;
|
int currentCount = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<div class="top-row pl-4 navbar navbar-dark">
|
<div class="top-row pl-4 navbar navbar-dark">
|
||||||
<a class="navbar-brand" href="">BlazorStandalone-CSharp</a>
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
|
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
|
||||||
<ul class="nav flex-column">
|
<ul class="nav flex-column">
|
||||||
<li class="nav-item px-3">
|
<li class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<span class="text-nowrap">
|
<span class="text-nowrap">
|
||||||
Please take our
|
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>
|
</span>
|
||||||
and tell us what you think.
|
and tell us what you think.
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@
|
||||||
<button id="serialize-small" @onclick=SerializeSmall>Serialize (small)</button>
|
<button id="serialize-small" @onclick=SerializeSmall>Serialize (small)</button>
|
||||||
<button id="serialize-large" @onclick=SerializeLarge>Serialize (large)</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)
|
@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>
|
<button id="deserialize-small" @onclick=DeserializeSmall>Deserialize (small)</button>
|
||||||
|
|
@ -33,8 +33,8 @@
|
||||||
|
|
||||||
protected override void OnInit()
|
protected override void OnInit()
|
||||||
{
|
{
|
||||||
smallOrgChartJson = JsonSerializer.ToString(smallOrgChart);
|
smallOrgChartJson = JsonSerializer.Serialize(smallOrgChart);
|
||||||
largeOrgChartJson = JsonSerializer.ToString(largeOrgChart);
|
largeOrgChartJson = JsonSerializer.Serialize(largeOrgChart);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnAfterRender()
|
protected override void OnAfterRender()
|
||||||
|
|
@ -51,10 +51,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeSmall()
|
void SerializeSmall()
|
||||||
=> serializedValue = JsonSerializer.ToString(smallOrgChart);
|
=> serializedValue = JsonSerializer.Serialize(smallOrgChart);
|
||||||
|
|
||||||
void SerializeLarge()
|
void SerializeLarge()
|
||||||
=> serializedValue = JsonSerializer.ToString(largeOrgChart);
|
=> serializedValue = JsonSerializer.Serialize(largeOrgChart);
|
||||||
|
|
||||||
void DeserializeSmall()
|
void DeserializeSmall()
|
||||||
=> numPeopleDeserialized = Deserialize(smallOrgChartJson);
|
=> numPeopleDeserialized = Deserialize(smallOrgChartJson);
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
|
|
||||||
static int Deserialize(string json)
|
static int Deserialize(string json)
|
||||||
{
|
{
|
||||||
var ceo = JsonSerializer.Parse<Person>(json);
|
var ceo = JsonSerializer.Deserialize<Person>(json);
|
||||||
return CountPeople(ceo);
|
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
|
|
@ -238,6 +238,17 @@ export class BrowserRenderer {
|
||||||
break;
|
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) {
|
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
|
// <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
|
// isn't yet a matching <option>. To maintain the expected behavior no matter the
|
||||||
// element insertion/update order, preserve the desired value separately so
|
// 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;
|
element[selectValuePropname] = value;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -330,10 +342,11 @@ export class BrowserRenderer {
|
||||||
element.removeAttribute('value');
|
element.removeAttribute('value');
|
||||||
}
|
}
|
||||||
// See above for why we have this special handling for <select>/<option>
|
// See above for why we have this special handling for <select>/<option>
|
||||||
const parentElement = element.parentElement;
|
// Note that this is only one of the two cases where we set the value on a <select>
|
||||||
if (parentElement && (selectValuePropname in parentElement) && parentElement[selectValuePropname] === value) {
|
const selectElem = this.findClosestAncestorSelectElement(element);
|
||||||
this.tryApplyValueProperty(batch, parentElement, attributeFrame);
|
if (selectElem && (selectValuePropname in selectElem) && selectElem[selectValuePropname] === value) {
|
||||||
delete parentElement[selectValuePropname];
|
this.tryApplyValueProperty(batch, selectElem, attributeFrame);
|
||||||
|
delete selectElem[selectValuePropname];
|
||||||
}
|
}
|
||||||
return true;
|
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 {
|
private insertFrameRange(batch: RenderBatch, componentId: number, parent: LogicalElement, childIndex: number, frames: ArrayValues<RenderTreeFrame>, startIndex: number, endIndexExcl: number): number {
|
||||||
const origChildIndex = childIndex;
|
const origChildIndex = childIndex;
|
||||||
for (let index = startIndex; index < endIndexExcl; index++) {
|
for (let index = startIndex; index < endIndexExcl; index++) {
|
||||||
|
|
|
||||||
|
|
@ -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"
|
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=
|
integrity sha1-TJkRMvMxV96TvDttuTz/yelkskE=
|
||||||
|
|
||||||
|
"@microsoft/signalr@link:../../SignalR/clients/ts/signalr":
|
||||||
|
version "0.0.0"
|
||||||
|
uid ""
|
||||||
|
|
||||||
"@types/emscripten@0.0.31":
|
"@types/emscripten@0.0.31":
|
||||||
version "0.0.31"
|
version "0.0.31"
|
||||||
resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-0.0.31.tgz#160817d1324e8b7049604d39ac47d85eeeedd597"
|
resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-0.0.31.tgz#160817d1324e8b7049604d39ac47d85eeeedd597"
|
||||||
|
|
|
||||||
|
|
@ -36,10 +36,10 @@ namespace Microsoft.AspNetCore.Components.Browser
|
||||||
{
|
{
|
||||||
if (fieldInfo.FieldValue is JsonElement attributeValueJsonElement)
|
if (fieldInfo.FieldValue is JsonElement attributeValueJsonElement)
|
||||||
{
|
{
|
||||||
switch (attributeValueJsonElement.Type)
|
switch (attributeValueJsonElement.ValueKind)
|
||||||
{
|
{
|
||||||
case JsonValueType.True:
|
case JsonValueKind.True:
|
||||||
case JsonValueType.False:
|
case JsonValueKind.False:
|
||||||
fieldInfo.FieldValue = attributeValueJsonElement.GetBoolean();
|
fieldInfo.FieldValue = attributeValueJsonElement.GetBoolean();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -90,23 +90,23 @@ namespace Microsoft.AspNetCore.Components.Browser
|
||||||
|
|
||||||
private static T Deserialize<T>(string eventArgsJson)
|
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)
|
private static UIChangeEventArgs DeserializeUIEventChangeArgs(string eventArgsJson)
|
||||||
{
|
{
|
||||||
var changeArgs = Deserialize<UIChangeEventArgs>(eventArgsJson);
|
var changeArgs = Deserialize<UIChangeEventArgs>(eventArgsJson);
|
||||||
var jsonElement = (JsonElement)changeArgs.Value;
|
var jsonElement = (JsonElement)changeArgs.Value;
|
||||||
switch (jsonElement.Type)
|
switch (jsonElement.ValueKind)
|
||||||
{
|
{
|
||||||
case JsonValueType.Null:
|
case JsonValueKind.Null:
|
||||||
changeArgs.Value = null;
|
changeArgs.Value = null;
|
||||||
break;
|
break;
|
||||||
case JsonValueType.String:
|
case JsonValueKind.String:
|
||||||
changeArgs.Value = jsonElement.GetString();
|
changeArgs.Value = jsonElement.GetString();
|
||||||
break;
|
break;
|
||||||
case JsonValueType.True:
|
case JsonValueKind.True:
|
||||||
case JsonValueType.False:
|
case JsonValueKind.False:
|
||||||
changeArgs.Value = jsonElement.GetBoolean();
|
changeArgs.Value = jsonElement.GetBoolean();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,21 @@ namespace Microsoft.AspNetCore.Components
|
||||||
public void Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
public void Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||||
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterCollection parameters) { throw null; }
|
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
|
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
|
namespace Microsoft.AspNetCore.Components.Routing
|
||||||
{
|
{
|
||||||
public partial class NavLink : Microsoft.AspNetCore.Components.IComponent, System.IDisposable
|
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; }}
|
public System.Reflection.Assembly AppAssembly { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
|
||||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||||
public Microsoft.AspNetCore.Components.RenderFragment NotFoundContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
|
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; }}
|
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 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 Configure(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||||
public void Dispose() { }
|
public void Dispose() { }
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri)
|
public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri)
|
||||||
{
|
{
|
||||||
var stringContent = await httpClient.GetStringAsync(requestUri);
|
var stringContent = await httpClient.GetStringAsync(requestUri);
|
||||||
return JsonSerializer.Parse<T>(stringContent, JsonSerializerOptionsProvider.Options);
|
return JsonSerializer.Deserialize<T>(stringContent, JsonSerializerOptionsProvider.Options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -95,7 +95,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
/// <returns>The response parsed as an object of the generic type.</returns>
|
/// <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)
|
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)
|
var response = await httpClient.SendAsync(new HttpRequestMessage(method, requestUri)
|
||||||
{
|
{
|
||||||
Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
|
Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
|
||||||
|
|
@ -112,7 +112,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var stringContent = await response.Content.ReadAsStringAsync();
|
var stringContent = await response.Content.ReadAsStringAsync();
|
||||||
return JsonSerializer.Parse<T>(stringContent, JsonSerializerOptionsProvider.Options);
|
return JsonSerializer.Deserialize<T>(stringContent, JsonSerializerOptionsProvider.Options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
||||||
{
|
{
|
||||||
Assert.Equal(httpMethod, req.Method);
|
Assert.Equal(httpMethod, req.Method);
|
||||||
Assert.Equal(TestUri, req.RequestUri.AbsoluteUri);
|
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
|
return CreateJsonResponse(HttpStatusCode.OK, new Person
|
||||||
{
|
{
|
||||||
Name = "Abc",
|
Name = "Abc",
|
||||||
|
|
@ -151,7 +151,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
||||||
{
|
{
|
||||||
Assert.Equal(httpMethod, req.Method);
|
Assert.Equal(httpMethod, req.Method);
|
||||||
Assert.Equal(TestUri, req.RequestUri.AbsoluteUri);
|
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);
|
return new HttpResponseMessage(HttpStatusCode.BadGateway);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
@ -165,7 +165,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
||||||
{
|
{
|
||||||
return new HttpResponseMessage(statusCode)
|
return new HttpResponseMessage(statusCode)
|
||||||
{
|
{
|
||||||
Content = new StringContent(JsonSerializer.ToString(content, _jsonSerializerOptions))
|
Content = new StringContent(JsonSerializer.Serialize(content, _jsonSerializerOptions))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -201,6 +201,10 @@ namespace Microsoft.AspNetCore.Components.Browser.Rendering
|
||||||
return;
|
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)
|
if (!PendingRenderBatches.TryDequeue(out var entry) || entry.BatchId != incomingBatchId)
|
||||||
{
|
{
|
||||||
HandleException(
|
HandleException(
|
||||||
|
|
|
||||||
|
|
@ -316,39 +316,6 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
||||||
Assert.False(registry.DisconnectedCircuits.TryGetValue(circuitHost.CircuitId, out _));
|
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]
|
[Fact]
|
||||||
public async Task DisconnectedCircuitIsRemovedAfterConfiguredTimeout()
|
public async Task DisconnectedCircuitIsRemovedAfterConfiguredTimeout()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System.Diagnostics;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
@ -16,12 +17,7 @@ namespace Microsoft.AspNetCore.Components.Server.Tests
|
||||||
public void MapBlazorHub_WiresUp_UnderlyingHub()
|
public void MapBlazorHub_WiresUp_UnderlyingHub()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var applicationBuilder = new ApplicationBuilder(
|
var applicationBuilder = CreateAppBuilder();
|
||||||
new ServiceCollection()
|
|
||||||
.AddLogging()
|
|
||||||
.AddSingleton(Mock.Of<IHostApplicationLifetime>())
|
|
||||||
.AddSignalR().Services
|
|
||||||
.AddServerSideBlazor().Services.BuildServiceProvider());
|
|
||||||
var called = false;
|
var called = false;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -40,12 +36,7 @@ namespace Microsoft.AspNetCore.Components.Server.Tests
|
||||||
public void MapBlazorHub_MostGeneralOverload_MapsUnderlyingHub()
|
public void MapBlazorHub_MostGeneralOverload_MapsUnderlyingHub()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var applicationBuilder = new ApplicationBuilder(
|
var applicationBuilder = CreateAppBuilder();
|
||||||
new ServiceCollection()
|
|
||||||
.AddLogging()
|
|
||||||
.AddSingleton(Mock.Of<IHostApplicationLifetime>())
|
|
||||||
.AddSignalR().Services
|
|
||||||
.AddServerSideBlazor().Services.BuildServiceProvider());
|
|
||||||
var called = false;
|
var called = false;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -59,5 +50,23 @@ namespace Microsoft.AspNetCore.Components.Server.Tests
|
||||||
// Assert
|
// Assert
|
||||||
Assert.True(called);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
@ECHO OFF
|
@ECHO OFF
|
||||||
SET RepoRoot=%~dp0..\..
|
SET RepoRoot=%~dp0..\..
|
||||||
%RepoRoot%\build.cmd -projects %~dp0**\*.*proj %*
|
%RepoRoot%\build.cmd -projects %~dp0**\*.*proj "/p:EnforceE2ETestPrerequisites=true" %*
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,4 @@ set -euo pipefail
|
||||||
|
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
repo_root="$DIR/../.."
|
repo_root="$DIR/../.."
|
||||||
"$repo_root/build.sh" --projects "$DIR/**/*.*proj" "$@"
|
"$repo_root/build.sh" --projects "$DIR/**/*.*proj" "/p:EnforceE2ETestPrerequisites=true" "$@"
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,13 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
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.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using DevHostServerProgram = Microsoft.AspNetCore.Blazor.DevServer.Server.Program;
|
using DevHostServerProgram = Microsoft.AspNetCore.Blazor.DevServer.Server.Program;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures
|
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",
|
"--urls", "http://127.0.0.1:0",
|
||||||
"--contentroot", ContentRoot,
|
"--contentroot", ContentRoot,
|
||||||
"--pathbase", PathBase
|
"--pathbase", PathBase,
|
||||||
|
"--applicationpath", typeof(TProgram).Assembly.Location,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Environment))
|
if (!string.IsNullOrEmpty(Environment))
|
||||||
|
|
@ -31,7 +38,29 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures
|
||||||
args.Add(Environment);
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,7 @@
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<TestGroupName>Components.E2ETests</TestGroupName>
|
<TestGroupName>Components.E2ETests</TestGroupName>
|
||||||
|
|
||||||
<!--
|
<SkipTests>true</SkipTests>
|
||||||
Temporarily disabled until this runs on macOS
|
|
||||||
-->
|
|
||||||
<SkipTests Condition="'$(SeleniumE2ETestsSupported)' != 'true'">true</SkipTests>
|
|
||||||
<!-- https://github.com/aspnet/AspNetCore/issues/6857 -->
|
<!-- https://github.com/aspnet/AspNetCore/issues/6857 -->
|
||||||
<BuildHelixPayload>false</BuildHelixPayload>
|
<BuildHelixPayload>false</BuildHelixPayload>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -214,6 +214,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
||||||
Assert.Equal("Fourth choice", target.SelectedOption.Text);
|
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]
|
[Fact]
|
||||||
public void CanBindTextboxInt()
|
public void CanBindTextboxInt()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -276,8 +276,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
||||||
{
|
{
|
||||||
var rootBefore = new Node(null, "root", before);
|
var rootBefore = new Node(null, "root", before);
|
||||||
var rootAfter = new Node(null, "root", after);
|
var rootAfter = new Node(null, "root", after);
|
||||||
var jsonBefore = JsonSerializer.ToString(rootBefore, TestJsonSerializerOptionsProvider.Options);
|
var jsonBefore = JsonSerializer.Serialize(rootBefore, TestJsonSerializerOptionsProvider.Options);
|
||||||
var jsonAfter = JsonSerializer.ToString(rootAfter, TestJsonSerializerOptionsProvider.Options);
|
var jsonAfter = JsonSerializer.Serialize(rootAfter, TestJsonSerializerOptionsProvider.Options);
|
||||||
|
|
||||||
var appElem = MountTestComponent<KeyCasesComponent>();
|
var appElem = MountTestComponent<KeyCasesComponent>();
|
||||||
var textbox = appElem.FindElement(By.TagName("textarea"));
|
var textbox = appElem.FindElement(By.TagName("textarea"));
|
||||||
|
|
@ -329,7 +329,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
||||||
{
|
{
|
||||||
var javascript = (IJavaScriptExecutor)Browser;
|
var javascript = (IJavaScriptExecutor)Browser;
|
||||||
javascript.ExecuteScript(
|
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
|
textAreaElementWithId.SendKeys(" "); // So it fires the change event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -145,18 +145,32 @@
|
||||||
<h2>Select</h2>
|
<h2>Select</h2>
|
||||||
<p>
|
<p>
|
||||||
<select id="select-box" @bind="selectValue">
|
<select id="select-box" @bind="selectValue">
|
||||||
<option value=@SelectableValue.First>First choice</option>
|
<optgroup label="Some choices"> <!-- Show it also works with optgroup -->
|
||||||
<option value=@SelectableValue.Second>Second choice</option>
|
<option value=@SelectableValue.First>First choice</option>
|
||||||
<option value=@SelectableValue.Third>Third choice</option>
|
<option value=@SelectableValue.Second>Second choice</option>
|
||||||
@if (includeFourthOption)
|
<option value=@SelectableValue.Third>Third choice</option>
|
||||||
{
|
@if (includeFourthOption)
|
||||||
<option value=@SelectableValue.Fourth>Fourth choice</option>
|
{
|
||||||
}
|
<option value=@SelectableValue.Fourth>Fourth choice</option>
|
||||||
|
}
|
||||||
|
</optgroup>
|
||||||
</select>
|
</select>
|
||||||
<span id="select-box-value">@selectValue</span>
|
<span id="select-box-value">@selectValue</span>
|
||||||
<button id="select-box-add-option" @onclick="AddAndSelectNewSelectOption">Add and select new item</button>
|
<button id="select-box-add-option" @onclick="AddAndSelectNewSelectOption">Add and select new item</button>
|
||||||
</p>
|
</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 {
|
@code {
|
||||||
string textboxInitiallyBlankValue = null;
|
string textboxInitiallyBlankValue = null;
|
||||||
string textboxInitiallyPopulatedValue = "Hello";
|
string textboxInitiallyPopulatedValue = "Hello";
|
||||||
|
|
@ -187,6 +201,7 @@ Guid textboxGenericGuidValue = Guid.Empty;
|
||||||
bool includeFourthOption = false;
|
bool includeFourthOption = false;
|
||||||
enum SelectableValue { First, Second, Third, Fourth }
|
enum SelectableValue { First, Second, Third, Fourth }
|
||||||
SelectableValue selectValue = SelectableValue.Second;
|
SelectableValue selectValue = SelectableValue.Second;
|
||||||
|
SelectableValue selectMarkupValue = SelectableValue.Second;
|
||||||
|
|
||||||
void AddAndSelectNewSelectOption()
|
void AddAndSelectNewSelectOption()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,12 @@
|
||||||
|
|
||||||
<div id="duplicate-on-element-override">
|
<div id="duplicate-on-element-override">
|
||||||
<DuplicateAttributesOnElementChildComponent
|
<DuplicateAttributesOnElementChildComponent
|
||||||
BoolAttributeBefore="true"
|
|
||||||
StringAttributeBefore="original-text"
|
|
||||||
UnmatchedValues="@elementValues"
|
UnmatchedValues="@elementValues"
|
||||||
BoolAttributeAfter="false"
|
BoolAttributeAfter="false"
|
||||||
StringAttributeAfter="other-text" />
|
StringAttributeAfter="other-text" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@functions {
|
@functions {
|
||||||
void SomeMethod()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Dictionary<string, object> elementValues = new Dictionary<string, object>()
|
Dictionary<string, object> elementValues = new Dictionary<string, object>()
|
||||||
{
|
{
|
||||||
{ "bool", true },
|
{ "bool", true },
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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; }
|
||||||
|
}
|
||||||
|
|
@ -91,7 +91,7 @@
|
||||||
var invocations = new Dictionary<string, string>();
|
var invocations = new Dictionary<string, string>();
|
||||||
foreach (var interopResult in JavaScriptInterop.Invocations)
|
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;
|
invocations[interopResult.Key] = interopResultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
renderContext.UpdateCount++;
|
renderContext.UpdateCount++;
|
||||||
parsedRootNode = JsonSerializer.Parse<KeyCasesTreeNode.Node>(modelJson, TestJsonSerializerOptionsProvider.Options);
|
parsedRootNode = JsonSerializer.Deserialize<KeyCasesTreeNode.Node>(modelJson, TestJsonSerializerOptionsProvider.Options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RenderContext
|
public class RenderContext
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ Type here: <input @onkeypress=OnKeyPressed />
|
||||||
|
|
||||||
void OnKeyPressed(UIKeyboardEventArgs eventArgs)
|
void OnKeyPressed(UIKeyboardEventArgs eventArgs)
|
||||||
{
|
{
|
||||||
Console.WriteLine(JsonSerializer.ToString(eventArgs));
|
Console.WriteLine(JsonSerializer.Serialize(eventArgs));
|
||||||
keysPressed.Add(eventArgs.Key);
|
keysPressed.Add(eventArgs.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@
|
||||||
|
|
||||||
void DumpEvent(UIMouseEventArgs e)
|
void DumpEvent(UIMouseEventArgs e)
|
||||||
{
|
{
|
||||||
Console.WriteLine(JsonSerializer.ToString(e));
|
Console.WriteLine(JsonSerializer.Serialize(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
void OnTouch(UITouchEventArgs e)
|
void OnTouch(UITouchEventArgs e)
|
||||||
{
|
{
|
||||||
message += e.Type;
|
message += e.Type;
|
||||||
Console.WriteLine(JsonSerializer.ToString(e));
|
Console.WriteLine(JsonSerializer.Serialize(e));
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,33 +5,39 @@
|
||||||
<title>Basic test app</title>
|
<title>Basic test app</title>
|
||||||
<base href="/subdir/" />
|
<base href="/subdir/" />
|
||||||
<link href="style.css" rel="stylesheet" />
|
<link href="style.css" rel="stylesheet" />
|
||||||
|
|
||||||
|
<!-- Used by ExternalContentPackage -->
|
||||||
|
<link href="_content/TestContentPackage/styles.css" rel="stylesheet" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<root>Loading...</root>
|
<root>Loading...</root>
|
||||||
|
|
||||||
<!-- Used for testing interop scenarios between JS and .NET -->
|
<!-- Used for testing interop scenarios between JS and .NET -->
|
||||||
<script src="js/jsinteroptests.js"></script>
|
<script src="js/jsinteroptests.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Used by ElementRefComponent
|
// Used by ElementRefComponent
|
||||||
function setElementValue(element, newValue) {
|
function setElementValue(element, newValue) {
|
||||||
element.value = newValue;
|
element.value = newValue;
|
||||||
return element.value;
|
return element.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
function uriHelperNavigate() {
|
function uriHelperNavigate() {
|
||||||
Blazor.navigateTo('/subdir/some-path');
|
Blazor.navigateTo('/subdir/some-path');
|
||||||
}
|
}
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
// Load either blazor.webassembly.js or blazor.server.js depending
|
// 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
|
// on the hash part of the URL. This is just to give a way for the
|
||||||
// test runner to make the selection.
|
// test runner to make the selection.
|
||||||
var src = location.hash === '#server'
|
var src = location.hash === '#server'
|
||||||
? 'blazor.server.js'
|
? 'blazor.server.js'
|
||||||
: 'blazor.webassembly.js';
|
: 'blazor.webassembly.js';
|
||||||
document.write('<script src="_framework/' + src + '"><' + '/script>');
|
document.write('<script src="_framework/' + src + '"><' + '/script>');
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- Used by ExternalContentPackage -->
|
||||||
|
<script src="_content/TestContentPackage/prompt.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -93,13 +93,13 @@ namespace Ignitor
|
||||||
EventHandlerId = clickEventDescriptor.EventId,
|
EventHandlerId = clickEventDescriptor.EventId,
|
||||||
EventArgsType = "mouse",
|
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 argsObject = new object[] { browserDescriptor, serializedJson };
|
||||||
var callId = "0";
|
var callId = "0";
|
||||||
var assemblyName = "Microsoft.AspNetCore.Components.Browser";
|
var assemblyName = "Microsoft.AspNetCore.Components.Browser";
|
||||||
var methodIdentifier = "DispatchEvent";
|
var methodIdentifier = "DispatchEvent";
|
||||||
var dotNetObjectId = 0;
|
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);
|
await connection.InvokeAsync("BeginInvokeDotNetFromJS", callId, assemblyName, methodIdentifier, dotNetObjectId, clickArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,9 @@
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<OutputType>library</OutputType>
|
<OutputType>library</OutputType>
|
||||||
<RazorLangVersion>3.0</RazorLangVersion>
|
<RazorLangVersion>3.0</RazorLangVersion>
|
||||||
|
<StaticWebAssetBasePath>_content/TestContentPackage</StaticWebAssetBasePath>
|
||||||
</PropertyGroup>
|
</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>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
|
@ -19,6 +19,7 @@ namespace TestServer
|
||||||
.AddCommandLine(args)
|
.AddCommandLine(args)
|
||||||
.Build())
|
.Build())
|
||||||
.UseStartup<TStartup>()
|
.UseStartup<TStartup>()
|
||||||
|
.UseStaticWebAssets()
|
||||||
.Build();
|
.Build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
using BasicTestApp;
|
using BasicTestApp;
|
||||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Components.Server;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
|
@ -63,6 +60,7 @@ namespace TestServer
|
||||||
// Mount the server-side Blazor app on /subdir
|
// Mount the server-side Blazor app on /subdir
|
||||||
app.Map("/subdir", subdirApp =>
|
app.Map("/subdir", subdirApp =>
|
||||||
{
|
{
|
||||||
|
subdirApp.UseStaticFiles();
|
||||||
subdirApp.UseClientSideBlazorFiles<BasicTestApp.Startup>();
|
subdirApp.UseClientSideBlazorFiles<BasicTestApp.Startup>();
|
||||||
|
|
||||||
subdirApp.UseRouting();
|
subdirApp.UseRouting();
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ namespace Microsoft.AspNetCore
|
||||||
{
|
{
|
||||||
if (ctx.HostingEnvironment.IsDevelopment())
|
if (ctx.HostingEnvironment.IsDevelopment())
|
||||||
{
|
{
|
||||||
StaticWebAssetsLoader.UseStaticWebAssets(ctx.HostingEnvironment);
|
StaticWebAssetsLoader.UseStaticWebAssets(ctx.HostingEnvironment, ctx.Configuration);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.UseKestrel((builderContext, options) =>
|
builder.UseKestrel((builderContext, options) =>
|
||||||
|
|
|
||||||
|
|
@ -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/ -->
|
<!-- NuGet appends target framework to this value. Example: runtimes/win-x64/lib/netcoreapp3.0/ -->
|
||||||
<BuildOutputTargetFolder>runtimes/$(RuntimeIdentifier)/lib/</BuildOutputTargetFolder>
|
<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. -->
|
<!-- Target framework is not append to this because native assets to not have a target framework. -->
|
||||||
<NativeAssetsPackagePath>runtimes/$(RuntimeIdentifier)/native/</NativeAssetsPackagePath>
|
<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
|
<RepoTasks.CreateFrameworkListFile
|
||||||
Files="@(SharedFxContent)"
|
Files="@(SharedFxContent)"
|
||||||
TargetFile="$(FrameworkListOutputPath)"
|
TargetFile="$(FrameworkListOutputPath)"
|
||||||
|
ManagedRoot="$(ManagedAssetsPackagePath)"
|
||||||
|
NativeRoot="$(NativeAssetsPackagePath)"
|
||||||
RootAttributes="@(FrameworkListRootAttributes)" />
|
RootAttributes="@(FrameworkListRootAttributes)" />
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,10 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Reflection.Metadata;
|
||||||
|
using System.Reflection.PortableExecutable;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
|
|
@ -24,6 +28,36 @@ namespace Microsoft.AspNetCore
|
||||||
_targetingPackRoot = Path.Combine(TestData.GetTestDataValue("TargetingPackLayoutRoot"), "packs", "Microsoft.AspNetCore.App.Ref", TestData.GetTestDataValue("TargetingPackVersion"));
|
_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]
|
[Fact]
|
||||||
public void PlatformManifestListsAllFiles()
|
public void PlatformManifestListsAllFiles()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
public static readonly string ServerUrlsKey;
|
public static readonly string ServerUrlsKey;
|
||||||
public static readonly string ShutdownTimeoutKey;
|
public static readonly string ShutdownTimeoutKey;
|
||||||
public static readonly string StartupAssemblyKey;
|
public static readonly string StartupAssemblyKey;
|
||||||
|
public static readonly string StaticWebAssetsKey;
|
||||||
public static readonly string SuppressStatusMessagesKey;
|
public static readonly string SuppressStatusMessagesKey;
|
||||||
public static readonly string WebRootKey;
|
public static readonly string WebRootKey;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,5 +21,6 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
public static readonly string SuppressStatusMessagesKey = "suppressStatusMessages";
|
public static readonly string SuppressStatusMessagesKey = "suppressStatusMessages";
|
||||||
|
|
||||||
public static readonly string ShutdownTimeoutKey = "shutdownTimeoutSeconds";
|
public static readonly string ShutdownTimeoutKey = "shutdownTimeoutSeconds";
|
||||||
|
public static readonly string StaticWebAssetsKey = "staticWebAssets";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
||||||
public partial class StaticWebAssetsLoader
|
public partial class StaticWebAssetsLoader
|
||||||
{
|
{
|
||||||
public 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
|
namespace Microsoft.Extensions.Hosting
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,6 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
options.HostingStartupExceptions = _hostingStartupErrors;
|
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
|
// 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
|
// We need to flow this differently
|
||||||
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Hosting
|
namespace Microsoft.Extensions.Hosting
|
||||||
{
|
{
|
||||||
|
|
@ -9,6 +10,7 @@ namespace Microsoft.Extensions.Hosting
|
||||||
{
|
{
|
||||||
var webhostBuilder = new GenericWebHostBuilder(builder);
|
var webhostBuilder = new GenericWebHostBuilder(builder);
|
||||||
configure(webhostBuilder);
|
configure(webhostBuilder);
|
||||||
|
builder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.FileProviders;
|
using Microsoft.Extensions.FileProviders;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
||||||
|
|
@ -21,10 +22,11 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Configure the <see cref="IWebHostEnvironment"/> to use static web assets.
|
/// Configure the <see cref="IWebHostEnvironment"/> to use static web assets.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="environment"></param>
|
/// <param name="environment">The application <see cref="IWebHostEnvironment"/>.</param>
|
||||||
public static void UseStaticWebAssets(IWebHostEnvironment environment)
|
/// <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)
|
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
|
try
|
||||||
{
|
{
|
||||||
|
var manifestPath = configuration.GetValue<string>(WebHostDefaults.StaticWebAssetsKey);
|
||||||
|
var filePath = manifestPath ?? ResolveRelativeToAssembly(environment);
|
||||||
|
|
||||||
var assembly = Assembly.Load(environment.ApplicationName);
|
|
||||||
var filePath = Path.Combine(Path.GetDirectoryName(GetAssemblyLocation(assembly)), $"{environment.ApplicationName}.StaticWebAssets.xml");
|
|
||||||
if (File.Exists(filePath))
|
if (File.Exists(filePath))
|
||||||
{
|
{
|
||||||
return File.OpenRead(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)
|
internal static string GetAssemblyLocation(Assembly assembly)
|
||||||
{
|
{
|
||||||
if (Uri.TryCreate(assembly.CodeBase, UriKind.Absolute, out var result) &&
|
if (Uri.TryCreate(assembly.CodeBase, UriKind.Absolute, out var result) &&
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
{
|
{
|
||||||
builder.ConfigureAppConfiguration((context, configBuilder) =>
|
builder.ConfigureAppConfiguration((context, configBuilder) =>
|
||||||
{
|
{
|
||||||
StaticWebAssetsLoader.UseStaticWebAssets(context.HostingEnvironment);
|
StaticWebAssetsLoader.UseStaticWebAssets(context.HostingEnvironment, context.Configuration);
|
||||||
});
|
});
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ namespace Microsoft.AspNetCore.Hosting.Tests.Fakes
|
||||||
// This is the only one that doesn't pass through
|
// This is the only one that doesn't pass through
|
||||||
public IWebHost Build()
|
public IWebHost Build()
|
||||||
{
|
{
|
||||||
|
_hostBuilder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
|
||||||
return new GenericWebHost(_hostBuilder.Build());
|
return new GenericWebHost(_hostBuilder.Build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.Tracing;
|
using System.Diagnostics.Tracing;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Channels;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Internal;
|
using Microsoft.AspNetCore.Internal;
|
||||||
|
|
@ -185,7 +184,7 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
public async Task VerifyCountersFireWithCorrectValues()
|
public async Task VerifyCountersFireWithCorrectValues()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var eventListener = new CounterListener(new[] {
|
var eventListener = new TestCounterListener(new[] {
|
||||||
"requests-per-second",
|
"requests-per-second",
|
||||||
"total-requests",
|
"total-requests",
|
||||||
"current-requests",
|
"current-requests",
|
||||||
|
|
@ -207,6 +206,7 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
{ "EventCounterIntervalSec", "1" }
|
{ "EventCounterIntervalSec", "1" }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
hostingEventSource.RequestStart("GET", "/");
|
hostingEventSource.RequestStart("GET", "/");
|
||||||
|
|
||||||
Assert.Equal(1, await totalRequestValues.FirstOrDefault(v => v == 1));
|
Assert.Equal(1, await totalRequestValues.FirstOrDefault(v => v == 1));
|
||||||
|
|
@ -241,36 +241,5 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
{
|
{
|
||||||
return new HostingEventSource(Guid.NewGuid().ToString());
|
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
|
<Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
|
||||||
<Compile Include="$(SharedSourceRoot)EventSource.Testing\TestEventListener.cs" />
|
<Compile Include="$(SharedSourceRoot)EventSource.Testing\TestEventListener.cs" />
|
||||||
|
<Compile Include="$(SharedSourceRoot)EventSource.Testing\TestCounterListener.cs" />
|
||||||
<Content Include="testroot\**\*" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
|
<Content Include="testroot\**\*" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
|
||||||
<Content Include="Microsoft.AspNetCore.Hosting.StaticWebAssets.xml" CopyToOutputDirectory="PreserveNewest" />
|
<Content Include="Microsoft.AspNetCore.Hosting.StaticWebAssets.xml" CopyToOutputDirectory="PreserveNewest" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,13 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.FileProviders;
|
using Microsoft.Extensions.FileProviders;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
||||||
|
|
@ -72,12 +75,39 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var manifest = StaticWebAssetsLoader.ResolveManifest(environment);
|
var manifest = StaticWebAssetsLoader.ResolveManifest(environment, new ConfigurationBuilder().Build());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedManifest, new StreamReader(manifest).ReadToEnd());
|
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)
|
private Stream CreateManifest(string manifestContent)
|
||||||
{
|
{
|
||||||
return new MemoryStream(Encoding.UTF8.GetBytes(manifestContent));
|
return new MemoryStream(Encoding.UTF8.GetBytes(manifestContent));
|
||||||
|
|
|
||||||
|
|
@ -1271,6 +1271,80 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
Assert.True(service.StopCalled);
|
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 static void StaticConfigureMethod(IApplicationBuilder app) { }
|
||||||
|
|
||||||
private IWebHostBuilder CreateWebHostBuilder()
|
private IWebHostBuilder CreateWebHostBuilder()
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
public partial class RequestBuilder
|
public partial class RequestBuilder
|
||||||
{
|
{
|
||||||
public RequestBuilder(Microsoft.AspNetCore.TestHost.TestServer server, string path) { }
|
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 AddHeader(string name, string value) { throw null; }
|
||||||
public Microsoft.AspNetCore.TestHost.RequestBuilder And(System.Action<System.Net.Http.HttpRequestMessage> configure) { 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; }
|
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 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) { }
|
||||||
public TestServer(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder, Microsoft.AspNetCore.Http.Features.IFeatureCollection featureCollection) { }
|
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 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 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.Http.Features.IFeatureCollection Features { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Hosting.IWebHost Host { 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 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.HttpClient CreateClient() { throw null; }
|
||||||
public System.Net.Http.HttpMessageHandler CreateHandler() { throw null; }
|
public System.Net.Http.HttpMessageHandler CreateHandler() { throw null; }
|
||||||
public Microsoft.AspNetCore.TestHost.RequestBuilder CreateRequest(string path) { throw null; }
|
public Microsoft.AspNetCore.TestHost.RequestBuilder CreateRequest(string path) { throw null; }
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,6 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
|
|
||||||
var contextBuilder = new HttpContextBuilder(_application, AllowSynchronousIO, PreserveExecutionContext);
|
var contextBuilder = new HttpContextBuilder(_application, AllowSynchronousIO, PreserveExecutionContext);
|
||||||
|
|
||||||
Stream responseBody = null;
|
|
||||||
var requestContent = request.Content ?? new StreamContent(Stream.Null);
|
var requestContent = request.Content ?? new StreamContent(Stream.Null);
|
||||||
var body = await requestContent.ReadAsStreamAsync();
|
var body = await requestContent.ReadAsStreamAsync();
|
||||||
contextBuilder.Configure(context =>
|
contextBuilder.Configure(context =>
|
||||||
|
|
@ -114,8 +113,6 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
body.Seek(0, SeekOrigin.Begin);
|
body.Seek(0, SeekOrigin.Begin);
|
||||||
}
|
}
|
||||||
req.Body = new AsyncStreamWrapper(body, () => contextBuilder.AllowSynchronousIO);
|
req.Body = new AsyncStreamWrapper(body, () => contextBuilder.AllowSynchronousIO);
|
||||||
|
|
||||||
responseBody = context.Response.Body;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var response = new HttpResponseMessage();
|
var response = new HttpResponseMessage();
|
||||||
|
|
@ -138,7 +135,7 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
response.ReasonPhrase = httpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase;
|
response.ReasonPhrase = httpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase;
|
||||||
response.RequestMessage = request;
|
response.RequestMessage = request;
|
||||||
|
|
||||||
response.Content = new StreamContent(responseBody);
|
response.Content = new StreamContent(httpContext.Response.Body);
|
||||||
|
|
||||||
foreach (var header in httpContext.Response.Headers)
|
foreach (var header in httpContext.Response.Headers)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.IO.Pipelines;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
@ -16,7 +17,8 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
private readonly HttpContext _httpContext;
|
private readonly HttpContext _httpContext;
|
||||||
|
|
||||||
private readonly TaskCompletionSource<HttpContext> _responseTcs = new TaskCompletionSource<HttpContext>(TaskCreationOptions.RunContinuationsAsynchronously);
|
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 ResponseFeature _responseFeature;
|
||||||
private readonly RequestLifetimeFeature _requestLifetimeFeature = new RequestLifetimeFeature();
|
private readonly RequestLifetimeFeature _requestLifetimeFeature = new RequestLifetimeFeature();
|
||||||
private readonly ResponseTrailersFeature _responseTrailersFeature = new ResponseTrailersFeature();
|
private readonly ResponseTrailersFeature _responseTrailersFeature = new ResponseTrailersFeature();
|
||||||
|
|
@ -37,14 +39,19 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
request.Protocol = "HTTP/1.1";
|
request.Protocol = "HTTP/1.1";
|
||||||
request.Method = HttpMethods.Get;
|
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<IHttpBodyControlFeature>(this);
|
||||||
_httpContext.Features.Set<IHttpResponseFeature>(_responseFeature);
|
_httpContext.Features.Set<IHttpResponseFeature>(_responseFeature);
|
||||||
_httpContext.Features.Set<IHttpResponseStartFeature>(_responseFeature);
|
_httpContext.Features.Set<IHttpResponseStartFeature>(_responseFeature);
|
||||||
_httpContext.Features.Set<IHttpRequestLifetimeFeature>(_requestLifetimeFeature);
|
_httpContext.Features.Set<IHttpRequestLifetimeFeature>(_requestLifetimeFeature);
|
||||||
_httpContext.Features.Set<IHttpResponseTrailersFeature>(_responseTrailersFeature);
|
_httpContext.Features.Set<IHttpResponseTrailersFeature>(_responseTrailersFeature);
|
||||||
|
_httpContext.Features.Set<IResponseBodyPipeFeature>(_responseFeature);
|
||||||
_responseStream = new ResponseStream(ReturnResponseMessageAsync, AbortRequest, () => AllowSynchronousIO, () => _responseReadCompleteCallback?.Invoke(_httpContext));
|
|
||||||
_responseFeature.Body = _responseStream;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AllowSynchronousIO { get; set; }
|
public bool AllowSynchronousIO { get; set; }
|
||||||
|
|
@ -119,14 +126,14 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
{
|
{
|
||||||
_requestLifetimeFeature.Abort();
|
_requestLifetimeFeature.Abort();
|
||||||
}
|
}
|
||||||
_responseStream.CompleteWrites();
|
_responsePipeWriter.Complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task CompleteResponseAsync()
|
internal async Task CompleteResponseAsync()
|
||||||
{
|
{
|
||||||
_pipelineFinished = true;
|
_pipelineFinished = true;
|
||||||
await ReturnResponseMessageAsync();
|
await ReturnResponseMessageAsync();
|
||||||
_responseStream.CompleteWrites();
|
_responsePipeWriter.Complete();
|
||||||
await _responseFeature.FireOnResponseCompletedAsync();
|
await _responseFeature.FireOnResponseCompletedAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -155,6 +162,16 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
{
|
{
|
||||||
newFeatures[pair.Key] = pair.Value;
|
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));
|
_responseTcs.TrySetResult(new DefaultHttpContext(newFeatures));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -162,7 +179,8 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
internal void Abort(Exception exception)
|
internal void Abort(Exception exception)
|
||||||
{
|
{
|
||||||
_pipelineFinished = true;
|
_pipelineFinished = true;
|
||||||
_responseStream.Abort(exception);
|
_responsePipeWriter.Abort(exception);
|
||||||
|
_responseReaderStream.Abort(exception);
|
||||||
_responseTcs.TrySetException(exception);
|
_responseTcs.TrySetException(exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class RequestBuilder
|
public class RequestBuilder
|
||||||
{
|
{
|
||||||
private readonly TestServer _server;
|
|
||||||
private readonly HttpRequestMessage _req;
|
private readonly HttpRequestMessage _req;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -23,15 +22,15 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
/// <param name="path"></param>
|
/// <param name="path"></param>
|
||||||
public RequestBuilder(TestServer server, string path)
|
public RequestBuilder(TestServer server, string path)
|
||||||
{
|
{
|
||||||
if (server == null)
|
TestServer = server ?? throw new ArgumentNullException(nameof(server));
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(server));
|
|
||||||
}
|
|
||||||
|
|
||||||
_server = server;
|
|
||||||
_req = new HttpRequestMessage(HttpMethod.Get, path);
|
_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>
|
/// <summary>
|
||||||
/// Configure any HttpRequestMessage properties.
|
/// Configure any HttpRequestMessage properties.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -79,7 +78,7 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
public Task<HttpResponseMessage> SendAsync(string method)
|
public Task<HttpResponseMessage> SendAsync(string method)
|
||||||
{
|
{
|
||||||
_req.Method = new HttpMethod(method);
|
_req.Method = new HttpMethod(method);
|
||||||
return _server.CreateClient().SendAsync(_req);
|
return TestServer.CreateClient().SendAsync(_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -89,7 +88,7 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
public Task<HttpResponseMessage> GetAsync()
|
public Task<HttpResponseMessage> GetAsync()
|
||||||
{
|
{
|
||||||
_req.Method = HttpMethod.Get;
|
_req.Method = HttpMethod.Get;
|
||||||
return _server.CreateClient().SendAsync(_req);
|
return TestServer.CreateClient().SendAsync(_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -99,7 +98,7 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
public Task<HttpResponseMessage> PostAsync()
|
public Task<HttpResponseMessage> PostAsync()
|
||||||
{
|
{
|
||||||
_req.Method = HttpMethod.Post;
|
_req.Method = HttpMethod.Post;
|
||||||
return _server.CreateClient().SendAsync(_req);
|
return TestServer.CreateClient().SendAsync(_req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Pipelines;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
@ -10,7 +11,7 @@ using Microsoft.AspNetCore.Http.Features;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.TestHost
|
namespace Microsoft.AspNetCore.TestHost
|
||||||
{
|
{
|
||||||
internal class ResponseFeature : IHttpResponseFeature, IHttpResponseStartFeature
|
internal class ResponseFeature : IHttpResponseFeature, IHttpResponseStartFeature, IResponseBodyPipeFeature
|
||||||
{
|
{
|
||||||
private readonly HeaderDictionary _headers = new HeaderDictionary();
|
private readonly HeaderDictionary _headers = new HeaderDictionary();
|
||||||
private readonly Action<Exception> _abort;
|
private readonly Action<Exception> _abort;
|
||||||
|
|
@ -67,6 +68,30 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
|
|
||||||
public Stream Body { get; set; }
|
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 bool HasStarted { get; set; }
|
||||||
|
|
||||||
public void OnStarting(Func<object, Task> callback, object state)
|
public void OnStarting(Func<object, Task> callback, object state)
|
||||||
|
|
|
||||||
|
|
@ -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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Hosting.Server;
|
using Microsoft.AspNetCore.Hosting.Server;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.TestHost
|
namespace Microsoft.AspNetCore.TestHost
|
||||||
{
|
{
|
||||||
|
|
@ -19,19 +20,22 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
private ApplicationWrapper _application;
|
private ApplicationWrapper _application;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For use with IHostBuilder or IWebHostBuilder.
|
/// For use with IHostBuilder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TestServer()
|
/// <param name="services"></param>
|
||||||
: this(new FeatureCollection())
|
public TestServer(IServiceProvider services)
|
||||||
|
: this(services, new FeatureCollection())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For use with IHostBuilder or IWebHostBuilder.
|
/// For use with IHostBuilder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="services"></param>
|
||||||
/// <param name="featureCollection"></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));
|
Features = featureCollection ?? throw new ArgumentNullException(nameof(featureCollection));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,16 +54,19 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
/// <param name="builder"></param>
|
/// <param name="builder"></param>
|
||||||
/// <param name="featureCollection"></param>
|
/// <param name="featureCollection"></param>
|
||||||
public TestServer(IWebHostBuilder builder, IFeatureCollection featureCollection)
|
public TestServer(IWebHostBuilder builder, IFeatureCollection featureCollection)
|
||||||
: this(featureCollection)
|
|
||||||
{
|
{
|
||||||
if (builder == null)
|
if (builder == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(builder));
|
throw new ArgumentNullException(nameof(builder));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Features = featureCollection ?? throw new ArgumentNullException(nameof(featureCollection));
|
||||||
|
|
||||||
var host = builder.UseServer(this).Build();
|
var host = builder.UseServer(this).Build();
|
||||||
host.StartAsync().GetAwaiter().GetResult();
|
host.StartAsync().GetAwaiter().GetResult();
|
||||||
_hostInstance = host;
|
_hostInstance = host;
|
||||||
|
|
||||||
|
Services = host.Services;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uri BaseAddress { get; set; } = new Uri("http://localhost/");
|
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; }
|
public IFeatureCollection Features { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -34,5 +34,19 @@ namespace Microsoft.AspNetCore.TestHost
|
||||||
Assert.Equal("Test/Value", request.Content.Headers.ContentType.ToString());
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
// 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.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.TestHost.Tests
|
||||||
|
{
|
||||||
|
public class ResponseBodyTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public async Task BodyWriter_GetMemoryAdvance_AutoCompleted()
|
||||||
|
{
|
||||||
|
var length = -1;
|
||||||
|
using var host = await CreateHost(httpContext =>
|
||||||
|
{
|
||||||
|
var writer = httpContext.Response.BodyWriter;
|
||||||
|
length = writer.GetMemory().Length;
|
||||||
|
writer.Advance(length);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
});
|
||||||
|
|
||||||
|
var response = await host.GetTestServer().CreateClient().GetAsync("/");
|
||||||
|
var bytes = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
Assert.Equal(length, bytes.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task BodyWriter_StartAsyncGetMemoryAdvance_AutoCompleted()
|
||||||
|
{
|
||||||
|
var length = -1;
|
||||||
|
using var host = await CreateHost(async httpContext =>
|
||||||
|
{
|
||||||
|
await httpContext.Response.StartAsync();
|
||||||
|
var writer = httpContext.Response.BodyWriter;
|
||||||
|
length = writer.GetMemory().Length;
|
||||||
|
writer.Advance(length);
|
||||||
|
});
|
||||||
|
|
||||||
|
var response = await host.GetTestServer().CreateClient().GetAsync("/");
|
||||||
|
var bytes = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
Assert.Equal(length, bytes.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task<IHost> CreateHost(RequestDelegate appDelegate)
|
||||||
|
{
|
||||||
|
return new HostBuilder()
|
||||||
|
.ConfigureWebHost(webBuilder =>
|
||||||
|
{
|
||||||
|
webBuilder
|
||||||
|
.UseTestServer()
|
||||||
|
.Configure(app =>
|
||||||
|
{
|
||||||
|
app.Run(appDelegate);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.StartAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue