зеркало из https://github.com/dotnet/aspnetcore.git
Merge branch 'master' into 10332-work
This commit is contained in:
Коммит
27b00fe95f
|
@ -328,7 +328,7 @@ jobs:
|
|||
agentOs: Windows
|
||||
isTestingJob: true
|
||||
buildScript: ./eng/scripts/cibuild.cmd
|
||||
buildArgs: -test -BuildNative "/p:SkipIISBackwardsCompatibilityTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISForwardsCompatibilityTests=true /p:RunTemplateTests=false /p:BuildSiteExtensions=false"
|
||||
buildArgs: -test -BuildNative "/p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false /p:BuildSiteExtensions=false"
|
||||
beforeBuild:
|
||||
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
|
||||
displayName: Setup IISExpress test certificates and schema
|
||||
|
|
|
@ -13,384 +13,384 @@
|
|||
<Uri>https://github.com/aspnet/Blazor</Uri>
|
||||
<Sha>9bc8036bf68fd159fffa56f93f8b2471bf96efd4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview7.19303.10">
|
||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview7.19304.5">
|
||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||
<Sha>6fcd12e60b3d828988cabdebb55d30397c21d0db</Sha>
|
||||
<Sha>1954d93d9091707fef3958e63fc39b20325696df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview7.19303.10">
|
||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview7.19304.5">
|
||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||
<Sha>6fcd12e60b3d828988cabdebb55d30397c21d0db</Sha>
|
||||
<Sha>1954d93d9091707fef3958e63fc39b20325696df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview7.19303.10">
|
||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview7.19304.5">
|
||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||
<Sha>6fcd12e60b3d828988cabdebb55d30397c21d0db</Sha>
|
||||
<Sha>1954d93d9091707fef3958e63fc39b20325696df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview7.19303.10">
|
||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview7.19304.5">
|
||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||
<Sha>6fcd12e60b3d828988cabdebb55d30397c21d0db</Sha>
|
||||
<Sha>1954d93d9091707fef3958e63fc39b20325696df</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="dotnet-ef" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="dotnet-ef" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview7.19303.12">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview7.19304.9">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||
<Sha>d09c10d233d284cd6406e04c31730c520c0e5cc5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App" Pinned="true">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Json" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Text.Json" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview6-27804-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview7-27803-11" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>fdf81c6faf7c7e0463d191a3a1d36c25c201e5cb</Sha>
|
||||
<Sha>c113140681cdb8224dffc2da8df3e2f9bcbdc4a0</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview6-27804-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview7-27803-11" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>fdf81c6faf7c7e0463d191a3a1d36c25c201e5cb</Sha>
|
||||
<Sha>c113140681cdb8224dffc2da8df3e2f9bcbdc4a0</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview6-27804-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview7-27803-11" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>fdf81c6faf7c7e0463d191a3a1d36c25c201e5cb</Sha>
|
||||
<Sha>c113140681cdb8224dffc2da8df3e2f9bcbdc4a0</Sha>
|
||||
</Dependency>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview7.19303.5" CoherentParentDependency="Microsoft.NETCore.App">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||
<Sha>55950a7c733de83f2efbafd3b5cad23e3ea6873a</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19302.2">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
|
@ -404,9 +404,9 @@
|
|||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>e6a5d5f970bb872451c6310ae34eda31041fb552</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19304.6" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview7.19304.12" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>54d51a340698b6883dd3e47be372c07e0acf75bc</Sha>
|
||||
<Sha>ef5d488c054c3aa850c29c10d851fcdc8a004eed</Sha>
|
||||
</Dependency>
|
||||
</ToolsetDependencies>
|
||||
</Dependencies>
|
||||
|
|
|
@ -23,108 +23,108 @@
|
|||
<!-- Packages from dotnet/arcade -->
|
||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19302.2</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<!-- Packages from dotnet/core-setup -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27804-01</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27804-01</MicrosoftNETCoreAppPackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview6-27804-01</NETStandardLibraryRefPackageVersion>
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview7-27803-11</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview7-27803-11</MicrosoftNETCoreAppPackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview7-27803-11</NETStandardLibraryRefPackageVersion>
|
||||
<!-- Packages from dotnet/corefx -->
|
||||
<MicrosoftCSharpPackageVersion>4.6.0-preview6.19303.8</MicrosoftCSharpPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview6.19303.8</MicrosoftWin32RegistryPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview6.19303.8</SystemComponentModelAnnotationsPackageVersion>
|
||||
<MicrosoftCSharpPackageVersion>4.6.0-preview7.19303.5</MicrosoftCSharpPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview7.19303.5</MicrosoftWin32RegistryPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview7.19303.5</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview6.19303.8</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview6.19303.8</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview6.19303.8</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview6.19303.8</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview6.19303.8</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview6.19303.8</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview6.19303.8</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview6.19303.8</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview6.19303.8</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview6.19303.8</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview6.19303.8</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview6.19303.8</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview6.19303.8</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>4.6.0-preview6.19303.8</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview6.19303.8</SystemThreadingChannelsPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview7.19303.5</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview7.19303.5</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview7.19303.5</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview7.19303.5</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview7.19303.5</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview7.19303.5</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview7.19303.5</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview7.19303.5</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview7.19303.5</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview7.19303.5</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview7.19303.5</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview7.19303.5</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview7.19303.5</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>4.6.0-preview7.19303.5</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview7.19303.5</SystemThreadingChannelsPackageVersion>
|
||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview6.19303.8</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview7.19303.5</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<!-- Packages from aspnet/Blazor -->
|
||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19303.2</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||
<!-- Packages from aspnet/Extensions -->
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview6.19304.6</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview6.19304.6</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview6.19304.6</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview6.19304.6</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview6.19304.6</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview6.19304.6</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview6.19304.6</MonoWebAssemblyInteropPackageVersion>
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview7.19304.12</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview7.19304.12</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview7.19304.12</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview7.19304.12</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview7.19304.12</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview7.19304.12</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview7.19304.12</MonoWebAssemblyInteropPackageVersion>
|
||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||
<dotnetefPackageVersion>3.0.0-preview7.19303.12</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<dotnetefPackageVersion>3.0.0-preview7.19304.9</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19304.9</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview7.19304.9</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview7.19304.9</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview7.19304.9</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview7.19304.9</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview7.19304.9</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview7.19303.10</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview7.19303.10</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview7.19303.10</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview7.19303.10</MicrosoftNETSdkRazorPackageVersion>
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview7.19304.5</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview7.19304.5</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview7.19304.5</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview7.19304.5</MicrosoftNETSdkRazorPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
|
||||
|
|
|
@ -12,9 +12,4 @@
|
|||
<_ProjectExtensionsWereImported>true</_ProjectExtensionsWereImported>
|
||||
<WixTargetsPath>$(WixInstallPath)\wix2010.targets</WixTargetsPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Workaround https://developercommunity.visualstudio.com/content/problem/434385/vs2019-preview-2-targetframeworkversion-or-platfor.html -->
|
||||
<PropertyGroup>
|
||||
<VCToolsVersion Condition = "'$(VCToolsVersion)' == ''" >14.16.27023</VCToolsVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -17,8 +17,6 @@
|
|||
"Microsoft.VisualStudio.Component.NuGet.BuildTools",
|
||||
"Microsoft.VisualStudio.Component.VC.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.VC.v141.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.v141.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.Windows10SDK.17134",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools",
|
||||
"Microsoft.VisualStudio.Workload.MSBuildTools",
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
|
||||
"Microsoft.VisualStudio.Component.VC.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.VC.v141.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.v141.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.Windows10SDK.17134",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NativeDesktop",
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
"requiredWorkloads": [
|
||||
"Microsoft.VisualStudio.Component.VC.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.VC.v141.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.v141.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.Windows10SDK.17134"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -145,7 +145,6 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
public static void Initialize(this Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnvironment, string contentRootPath, Microsoft.AspNetCore.Hosting.Internal.WebHostOptions options) { }
|
||||
public static void Initialize(this Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, string contentRootPath, Microsoft.AspNetCore.Hosting.Internal.WebHostOptions options) { }
|
||||
}
|
||||
[System.Diagnostics.Tracing.EventSourceAttribute(Name="Microsoft-AspNetCore-Hosting")]
|
||||
public sealed partial class HostingEventSource : System.Diagnostics.Tracing.EventSource
|
||||
{
|
||||
internal HostingEventSource() { }
|
||||
|
@ -154,6 +153,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
public void HostStart() { }
|
||||
[System.Diagnostics.Tracing.EventAttribute(2, Level=System.Diagnostics.Tracing.EventLevel.Informational)]
|
||||
public void HostStop() { }
|
||||
protected override void OnEventCommand(System.Diagnostics.Tracing.EventCommandEventArgs command) { }
|
||||
[System.Diagnostics.Tracing.EventAttribute(3, Level=System.Diagnostics.Tracing.EventLevel.Informational)]
|
||||
public void RequestStart(string method, string path) { }
|
||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)][System.Diagnostics.Tracing.EventAttribute(4, Level=System.Diagnostics.Tracing.EventLevel.Informational)]
|
||||
|
|
|
@ -136,10 +136,19 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
StopActivity(httpContext, activity, context.HasDiagnosticListener);
|
||||
}
|
||||
|
||||
if (context.EventLogEnabled && exception != null)
|
||||
if (context.EventLogEnabled)
|
||||
{
|
||||
// Non-inline
|
||||
HostingEventSource.Log.UnhandledException();
|
||||
if (exception != null)
|
||||
{
|
||||
// Non-inline
|
||||
HostingEventSource.Log.UnhandledException();
|
||||
}
|
||||
|
||||
// Count 500 as failed requests
|
||||
if (httpContext.Response.StatusCode >= 500)
|
||||
{
|
||||
HostingEventSource.Log.RequestFailed();
|
||||
}
|
||||
}
|
||||
|
||||
// Logging Scope is finshed with
|
||||
|
|
|
@ -1,17 +1,37 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.Tracing;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading;
|
||||
|
||||
namespace Microsoft.AspNetCore.Hosting.Internal
|
||||
{
|
||||
[EventSource(Name = "Microsoft-AspNetCore-Hosting")]
|
||||
public sealed class HostingEventSource : EventSource
|
||||
{
|
||||
public static readonly HostingEventSource Log = new HostingEventSource();
|
||||
|
||||
private HostingEventSource() { }
|
||||
private IncrementingPollingCounter _requestsPerSecondCounter;
|
||||
private PollingCounter _totalRequestsCounter;
|
||||
private PollingCounter _failedRequestsCounter;
|
||||
private PollingCounter _currentRequestsCounter;
|
||||
|
||||
private long _totalRequests;
|
||||
private long _currentRequests;
|
||||
private long _failedRequests;
|
||||
|
||||
internal HostingEventSource()
|
||||
: this("Microsoft.AspNetCore.Hosting")
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Used for testing
|
||||
internal HostingEventSource(string eventSourceName)
|
||||
: base(eventSourceName)
|
||||
{
|
||||
}
|
||||
|
||||
// NOTE
|
||||
// - The 'Start' and 'Stop' suffixes on the following event names have special meaning in EventSource. They
|
||||
|
@ -35,6 +55,8 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
[Event(3, Level = EventLevel.Informational)]
|
||||
public void RequestStart(string method, string path)
|
||||
{
|
||||
Interlocked.Increment(ref _totalRequests);
|
||||
Interlocked.Increment(ref _currentRequests);
|
||||
WriteEvent(3, method, path);
|
||||
}
|
||||
|
||||
|
@ -42,6 +64,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
[Event(4, Level = EventLevel.Informational)]
|
||||
public void RequestStop()
|
||||
{
|
||||
Interlocked.Decrement(ref _currentRequests);
|
||||
WriteEvent(4);
|
||||
}
|
||||
|
||||
|
@ -51,5 +74,40 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
{
|
||||
WriteEvent(5);
|
||||
}
|
||||
|
||||
internal void RequestFailed()
|
||||
{
|
||||
Interlocked.Increment(ref _failedRequests);
|
||||
}
|
||||
|
||||
protected override void OnEventCommand(EventCommandEventArgs command)
|
||||
{
|
||||
if (command.Command == EventCommand.Enable)
|
||||
{
|
||||
// This is the convention for initializing counters in the RuntimeEventSource (lazily on the first enable command).
|
||||
// They aren't disabled afterwards...
|
||||
|
||||
_requestsPerSecondCounter ??= new IncrementingPollingCounter("requests-per-second", this, () => _totalRequests)
|
||||
{
|
||||
DisplayName = "Request Rate",
|
||||
DisplayRateTimeScale = TimeSpan.FromSeconds(1)
|
||||
};
|
||||
|
||||
_totalRequestsCounter ??= new PollingCounter("total-requests", this, () => _totalRequests)
|
||||
{
|
||||
DisplayName = "Total Requests",
|
||||
};
|
||||
|
||||
_currentRequestsCounter ??= new PollingCounter("current-requests", this, () => _currentRequests)
|
||||
{
|
||||
DisplayName = "Current Requests"
|
||||
};
|
||||
|
||||
_failedRequestsCounter ??= new PollingCounter("failed-requests", this, () => _failedRequests)
|
||||
{
|
||||
DisplayName = "Failed Requests"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace System.Collections.Generic
|
||||
{
|
||||
internal static class AsyncEnumerableExtensions
|
||||
{
|
||||
public static async Task<T> FirstOrDefault<T>(this IAsyncEnumerator<T> values, Func<T, bool> filter)
|
||||
{
|
||||
while (await values.MoveNextAsync())
|
||||
{
|
||||
if (filter(values.Current))
|
||||
{
|
||||
return values.Current;
|
||||
}
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,8 +2,11 @@
|
|||
// 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.Tracing;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Channels;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
|
@ -17,16 +20,11 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
public void MatchesNameAndGuid()
|
||||
{
|
||||
// Arrange & Act
|
||||
var eventSourceType = typeof(WebHost).GetTypeInfo().Assembly.GetType(
|
||||
"Microsoft.AspNetCore.Hosting.Internal.HostingEventSource",
|
||||
throwOnError: true,
|
||||
ignoreCase: false);
|
||||
var eventSource = new HostingEventSource();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(eventSourceType);
|
||||
Assert.Equal("Microsoft-AspNetCore-Hosting", EventSource.GetName(eventSourceType));
|
||||
Assert.Equal(Guid.Parse("9e620d2a-55d4-5ade-deb7-c26046d245a8"), EventSource.GetGuid(eventSourceType));
|
||||
Assert.NotEmpty(EventSource.GenerateManifest(eventSourceType, "assemblyPathToIncludeInManifest"));
|
||||
Assert.Equal("Microsoft.AspNetCore.Hosting", eventSource.Name);
|
||||
Assert.Equal(Guid.Parse("9ded64a4-414c-5251-dcf7-1e4e20c15e70"), eventSource.Guid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -35,7 +33,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
// Arrange
|
||||
var expectedEventId = 1;
|
||||
var eventListener = new TestEventListener(expectedEventId);
|
||||
var hostingEventSource = HostingEventSource.Log;
|
||||
var hostingEventSource = GetHostingEventSource();
|
||||
eventListener.EnableEvents(hostingEventSource, EventLevel.Informational);
|
||||
|
||||
// Act
|
||||
|
@ -58,7 +56,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
// Arrange
|
||||
var expectedEventId = 2;
|
||||
var eventListener = new TestEventListener(expectedEventId);
|
||||
var hostingEventSource = HostingEventSource.Log;
|
||||
var hostingEventSource = GetHostingEventSource();
|
||||
eventListener.EnableEvents(hostingEventSource, EventLevel.Informational);
|
||||
|
||||
// Act
|
||||
|
@ -115,7 +113,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
// Arrange
|
||||
var expectedEventId = 3;
|
||||
var eventListener = new TestEventListener(expectedEventId);
|
||||
var hostingEventSource = HostingEventSource.Log;
|
||||
var hostingEventSource = GetHostingEventSource();
|
||||
eventListener.EnableEvents(hostingEventSource, EventLevel.Informational);
|
||||
|
||||
// Act
|
||||
|
@ -144,7 +142,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
// Arrange
|
||||
var expectedEventId = 4;
|
||||
var eventListener = new TestEventListener(expectedEventId);
|
||||
var hostingEventSource = HostingEventSource.Log;
|
||||
var hostingEventSource = GetHostingEventSource();
|
||||
eventListener.EnableEvents(hostingEventSource, EventLevel.Informational);
|
||||
|
||||
// Act
|
||||
|
@ -166,7 +164,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
// Arrange
|
||||
var expectedEventId = 5;
|
||||
var eventListener = new TestEventListener(expectedEventId);
|
||||
var hostingEventSource = HostingEventSource.Log;
|
||||
var hostingEventSource = GetHostingEventSource();
|
||||
eventListener.EnableEvents(hostingEventSource, EventLevel.Informational);
|
||||
|
||||
// Act
|
||||
|
@ -182,16 +180,65 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
Assert.Empty(eventData.Payload);
|
||||
}
|
||||
|
||||
private static Exception GetException()
|
||||
[Fact]
|
||||
public async Task VerifyCountersFireWithCorrectValues()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw new InvalidOperationException("An invalid operation has occurred");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ex;
|
||||
}
|
||||
// Arrange
|
||||
var eventListener = new CounterListener(new[] {
|
||||
"requests-per-second",
|
||||
"total-requests",
|
||||
"current-requests",
|
||||
"failed-requests"
|
||||
});
|
||||
|
||||
var hostingEventSource = GetHostingEventSource();
|
||||
|
||||
using var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5));
|
||||
|
||||
var rpsValues = eventListener.GetCounterValues("requests-per-second", timeoutTokenSource.Token).GetAsyncEnumerator();
|
||||
var totalRequestValues = eventListener.GetCounterValues("total-requests", timeoutTokenSource.Token).GetAsyncEnumerator();
|
||||
var currentRequestValues = eventListener.GetCounterValues("current-requests", timeoutTokenSource.Token).GetAsyncEnumerator();
|
||||
var failedRequestValues = eventListener.GetCounterValues("failed-requests", timeoutTokenSource.Token).GetAsyncEnumerator();
|
||||
|
||||
eventListener.EnableEvents(hostingEventSource, EventLevel.Informational, EventKeywords.None,
|
||||
new Dictionary<string, string>
|
||||
{
|
||||
{ "EventCounterIntervalSec", "1" }
|
||||
});
|
||||
|
||||
hostingEventSource.RequestStart("GET", "/");
|
||||
|
||||
Assert.Equal(1, await totalRequestValues.FirstOrDefault(v => v == 1));
|
||||
Assert.Equal(1, await rpsValues.FirstOrDefault(v => v == 1));
|
||||
Assert.Equal(1, await currentRequestValues.FirstOrDefault(v => v == 1));
|
||||
Assert.Equal(0, await failedRequestValues.FirstOrDefault(v => v == 0));
|
||||
|
||||
hostingEventSource.RequestStop();
|
||||
|
||||
Assert.Equal(1, await totalRequestValues.FirstOrDefault(v => v == 1));
|
||||
Assert.Equal(0, await rpsValues.FirstOrDefault(v => v == 0));
|
||||
Assert.Equal(0, await currentRequestValues.FirstOrDefault(v => v == 0));
|
||||
Assert.Equal(0, await failedRequestValues.FirstOrDefault(v => v == 0));
|
||||
|
||||
hostingEventSource.RequestStart("POST", "/");
|
||||
|
||||
Assert.Equal(2, await totalRequestValues.FirstOrDefault(v => v == 2));
|
||||
Assert.Equal(1, await rpsValues.FirstOrDefault(v => v == 1));
|
||||
Assert.Equal(1, await currentRequestValues.FirstOrDefault(v => v == 1));
|
||||
Assert.Equal(0, await failedRequestValues.FirstOrDefault(v => v == 0));
|
||||
|
||||
hostingEventSource.RequestFailed();
|
||||
hostingEventSource.RequestStop();
|
||||
|
||||
Assert.Equal(2, await totalRequestValues.FirstOrDefault(v => v == 2));
|
||||
Assert.Equal(0, await rpsValues.FirstOrDefault(v => v == 0));
|
||||
Assert.Equal(0, await currentRequestValues.FirstOrDefault(v => v == 0));
|
||||
Assert.Equal(1, await failedRequestValues.FirstOrDefault(v => v == 1));
|
||||
}
|
||||
|
||||
private static HostingEventSource GetHostingEventSource()
|
||||
{
|
||||
return new HostingEventSource(Guid.NewGuid().ToString());
|
||||
}
|
||||
|
||||
private class TestEventListener : EventListener
|
||||
|
@ -216,5 +263,36 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
<Reference Include="Microsoft.Extensions.Hosting" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
<Reference Include="System.Threading.Channels" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -312,8 +312,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
|||
throw new ArgumentNullException(nameof(user));
|
||||
}
|
||||
|
||||
// TODO: Fix once EF query works Issue #10668
|
||||
return (await UserClaims.Where(uc => uc.UserId.Equals(user.Id)).ToListAsync(cancellationToken)).Select(c => c.ToClaim()).ToList();
|
||||
return await UserClaims.Where(uc => uc.UserId.Equals(user.Id)).Select(c => c.ToClaim()).ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -445,8 +445,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
|||
throw new ArgumentNullException(nameof(user));
|
||||
}
|
||||
|
||||
// TODO: Fix once EF query works Issue #10668
|
||||
return (await UserClaims.Where(uc => uc.UserId.Equals(user.Id)).ToListAsync(cancellationToken)).Select(c => c.ToClaim()).ToList();
|
||||
return await UserClaims.Where(uc => uc.UserId.Equals(user.Id)).Select(c => c.ToClaim()).ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -29,9 +29,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanUpdateNameGuid()
|
||||
{
|
||||
using (var db = new CustomDbContext<Guid>(
|
||||
|
@ -54,9 +51,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanUpdateNameString()
|
||||
{
|
||||
using (var db = new CustomDbContext<string>(
|
||||
|
@ -79,9 +73,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanCreateUserInt()
|
||||
{
|
||||
using (var db = new CustomDbContext<int>(
|
||||
|
@ -102,9 +93,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanCreateUserIntViaSet()
|
||||
{
|
||||
using (var db = new CustomDbContext<int>(
|
||||
|
@ -126,9 +114,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanUpdateNameInt()
|
||||
{
|
||||
using (var db = new CustomDbContext<int>(
|
||||
|
@ -151,9 +136,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanUpdateNameIntWithSet()
|
||||
{
|
||||
using (var db = new CustomDbContext<int>(
|
||||
|
|
|
@ -44,11 +44,9 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
{
|
||||
var count = 0;
|
||||
|
||||
// TODO: Use new API once EF is updated. Issue #10671
|
||||
foreach (var property in context.Model.GetEntityTypes().Single(e => (string)e.FindAnnotation("Relational:TableName")?.Value == table).GetProperties())
|
||||
foreach (var property in context.Model.GetEntityTypes().Single(e => e.GetTableName() == table).GetProperties())
|
||||
{
|
||||
// TODO: Use new API once EF is updated. Issue #10671
|
||||
if (!columns.Contains((string)property.FindAnnotation("Relational:ColumnName")?.Value ?? property.Name))
|
||||
if (!columns.Contains(property.GetColumnName()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
public class DefaultPocoTest : IClassFixture<ScratchDatabaseFixture>
|
||||
{
|
||||
private readonly ApplicationBuilder _builder;
|
||||
private const string DatabaseName = nameof(DefaultPocoTest);
|
||||
|
||||
public DefaultPocoTest(ScratchDatabaseFixture fixture)
|
||||
{
|
||||
|
@ -42,9 +41,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task EnsureStartupUsageWorks()
|
||||
{
|
||||
var userStore = _builder.ApplicationServices.GetRequiredService<IUserStore<IdentityUser>>();
|
||||
|
|
|
@ -15,7 +15,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
public class MaxKeyLengthSchemaTest : IClassFixture<ScratchDatabaseFixture>
|
||||
{
|
||||
private readonly ApplicationBuilder _builder;
|
||||
private const string DatabaseName = nameof(MaxKeyLengthSchemaTest);
|
||||
|
||||
public MaxKeyLengthSchemaTest(ScratchDatabaseFixture fixture)
|
||||
{
|
||||
|
@ -49,9 +48,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public void EnsureDefaultSchema()
|
||||
{
|
||||
using (var scope = _builder.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
|
||||
<!-- These tests are broken in Azure Pipelines right now due to deadlocks in EFCore on machines with few CPU cores. -->
|
||||
<SkipTests Condition=" '$(BUILD_REASON)' == 'PullRequest' ">true</SkipTests>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Identity.Test;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
@ -73,9 +71,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public void EnsureDefaultSchema()
|
||||
{
|
||||
VerifyDefaultSchema(CreateContext());
|
||||
|
@ -107,9 +102,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task DeleteUserRemovesTokensTest()
|
||||
{
|
||||
// Need fail if not empty?
|
||||
|
@ -127,9 +119,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public void CanCreateUserUsingEF()
|
||||
{
|
||||
using (var db = CreateContext())
|
||||
|
@ -143,9 +132,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanCreateUsingManager()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -172,9 +158,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByIdTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
@ -191,9 +174,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByNameTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
@ -209,9 +189,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByLoginTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
@ -227,9 +204,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByEmailTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Identity.Test;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
@ -120,9 +118,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public void EnsureDefaultSchema()
|
||||
{
|
||||
VerifyDefaultSchema(CreateContext());
|
||||
|
@ -155,9 +150,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task DeleteRoleNonEmptySucceedsTest()
|
||||
{
|
||||
// Need fail if not empty?
|
||||
|
@ -183,9 +175,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task DeleteUserRemovesFromRoleTest()
|
||||
{
|
||||
// Need fail if not empty?
|
||||
|
@ -209,9 +198,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task DeleteUserRemovesTokensTest()
|
||||
{
|
||||
// Need fail if not empty?
|
||||
|
@ -229,9 +215,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public void CanCreateUserUsingEF()
|
||||
{
|
||||
using (var db = CreateContext())
|
||||
|
@ -245,9 +228,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanCreateUsingManager()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -281,9 +261,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByIdTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
@ -300,9 +277,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByNameTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
@ -318,9 +292,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByLoginTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
@ -336,9 +307,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task GetSecurityStampThrowsIfNull()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -350,9 +318,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task LoadFromDbFindByEmailTest()
|
||||
{
|
||||
var db = CreateContext();
|
||||
|
|
|
@ -16,7 +16,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
public class UserOnlyCustomContextTest : IClassFixture<ScratchDatabaseFixture>
|
||||
{
|
||||
private readonly ApplicationBuilder _builder;
|
||||
private const string DatabaseName = nameof(UserOnlyCustomContextTest);
|
||||
|
||||
public class CustomContext : DbContext
|
||||
{
|
||||
|
@ -87,9 +86,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task EnsureStartupUsageWorks()
|
||||
{
|
||||
var userStore = _builder.ApplicationServices.GetRequiredService<IUserStore<IdentityUser>>();
|
||||
|
|
|
@ -17,7 +17,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
public class UserOnlyTest : IClassFixture<ScratchDatabaseFixture>
|
||||
{
|
||||
private readonly ApplicationBuilder _builder;
|
||||
private const string DatabaseName = nameof(UserOnlyTest);
|
||||
|
||||
public class TestUserDbContext : IdentityUserContext<IdentityUser>
|
||||
{
|
||||
|
@ -49,9 +48,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task EnsureStartupUsageWorks()
|
||||
{
|
||||
var userStore = _builder.ApplicationServices.GetRequiredService<IUserStore<IdentityUser>>();
|
||||
|
@ -68,9 +64,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task FindByEmailThrowsWithTwoUsersWithSameEmail()
|
||||
{
|
||||
var userStore = _builder.ApplicationServices.GetRequiredService<IUserStore<IdentityUser>>();
|
||||
|
|
|
@ -7,7 +7,6 @@ using System.Linq.Expressions;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Identity.Test;
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
@ -30,9 +29,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public void CanCreateUserUsingEF()
|
||||
{
|
||||
using (var db = CreateContext())
|
||||
|
@ -167,9 +163,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task CanCreateUsingManager()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -180,9 +173,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task TwoUsersSamePasswordDifferentHash()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -195,9 +185,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task FindByEmailThrowsWithTwoUsersWithSameEmail()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -212,9 +199,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task AddUserToUnknownRoleFails()
|
||||
{
|
||||
var manager = CreateManager();
|
||||
|
@ -225,9 +209,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task ConcurrentUpdatesWillFail()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=D{Guid.NewGuid()}.db").Options;
|
||||
|
@ -259,9 +240,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task ConcurrentUpdatesWillFailWithDetachedUser()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=D{Guid.NewGuid()}.db").Options;
|
||||
|
@ -291,9 +269,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task DeleteAModifiedUserWillFail()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=D{Guid.NewGuid()}.db").Options;
|
||||
|
@ -324,9 +299,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task ConcurrentRoleUpdatesWillFail()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=D{Guid.NewGuid()}.db").Options;
|
||||
|
@ -358,9 +330,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task ConcurrentRoleUpdatesWillFailWithDetachedRole()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=D{Guid.NewGuid()}.db").Options;
|
||||
|
@ -391,9 +360,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.Mono)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
public async Task DeleteAModifiedRoleWillFail()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=D{Guid.NewGuid()}.db").Options;
|
||||
|
|
|
@ -979,7 +979,6 @@ namespace Microsoft.AspNetCore.Identity.Test
|
|||
[Fact]
|
||||
public async Task PasswordValidatorBlocksCreate()
|
||||
{
|
||||
// TODO: Can switch to Mock eventually
|
||||
var manager = MockHelpers.TestUserManager(new EmptyStore());
|
||||
manager.PasswordValidators.Clear();
|
||||
manager.PasswordValidators.Add(new BadPasswordValidator<PocoUser>(true));
|
||||
|
@ -990,7 +989,6 @@ namespace Microsoft.AspNetCore.Identity.Test
|
|||
[Fact]
|
||||
public async Task PasswordValidatorWithoutErrorsBlocksCreate()
|
||||
{
|
||||
// TODO: Can switch to Mock eventually
|
||||
var manager = MockHelpers.TestUserManager(new EmptyStore());
|
||||
manager.PasswordValidators.Clear();
|
||||
manager.PasswordValidators.Add(new BadPasswordValidator<PocoUser>());
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup>
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
<PropertyGroup>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
|
|
@ -212,12 +212,10 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual ObjectResult StatusCode([ActionResultStatusCode] int statusCode, [ActionResultObjectValue] object value)
|
||||
{
|
||||
var result = new ObjectResult(value)
|
||||
return new ObjectResult(value)
|
||||
{
|
||||
StatusCode = statusCode
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -270,13 +268,11 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual ContentResult Content(string content, MediaTypeHeaderValue contentType)
|
||||
{
|
||||
var result = new ContentResult
|
||||
return new ContentResult
|
||||
{
|
||||
Content = content,
|
||||
ContentType = contentType?.ToString()
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1772,9 +1768,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <returns>The created <see cref="UnprocessableEntityResult"/> for the response.</returns>
|
||||
[NonAction]
|
||||
public virtual UnprocessableEntityResult UnprocessableEntity()
|
||||
{
|
||||
return new UnprocessableEntityResult();
|
||||
}
|
||||
=> new UnprocessableEntityResult();
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="UnprocessableEntityObjectResult"/> that produces a <see cref="StatusCodes.Status422UnprocessableEntity"/> response.
|
||||
|
@ -1783,9 +1777,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <returns>The created <see cref="UnprocessableEntityObjectResult"/> for the response.</returns>
|
||||
[NonAction]
|
||||
public virtual UnprocessableEntityObjectResult UnprocessableEntity([ActionResultObjectValue] object error)
|
||||
{
|
||||
return new UnprocessableEntityObjectResult(error);
|
||||
}
|
||||
=> new UnprocessableEntityObjectResult(error);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="UnprocessableEntityObjectResult"/> that produces a <see cref="StatusCodes.Status422UnprocessableEntity"/> response.
|
||||
|
|
|
@ -41,12 +41,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
public PhysicalFileResult(string fileName, MediaTypeHeaderValue contentType)
|
||||
: base(contentType?.ToString())
|
||||
{
|
||||
if (fileName == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(fileName));
|
||||
}
|
||||
|
||||
FileName = fileName;
|
||||
FileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -55,15 +50,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
public string FileName
|
||||
{
|
||||
get => _fileName;
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(value));
|
||||
}
|
||||
|
||||
_fileName = value;
|
||||
}
|
||||
set => _fileName = value ?? throw new ArgumentNullException(nameof(value));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
|
|
@ -25,13 +25,8 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// </summary>
|
||||
/// <param name="type">The <see cref="Type"/> of object that is going to be written in the response.</param>
|
||||
public ProducesAttribute(Type type)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
Type = type;
|
||||
{
|
||||
Type = type ?? throw new ArgumentNullException(nameof(type));
|
||||
ContentTypes = new MediaTypeCollection();
|
||||
}
|
||||
|
||||
|
|
|
@ -29,12 +29,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <param name="statusCode">The HTTP response status code.</param>
|
||||
public ProducesResponseTypeAttribute(Type type, int statusCode)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
Type = type;
|
||||
Type = type ?? throw new ArgumentNullException(nameof(type));
|
||||
StatusCode = statusCode;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,12 +20,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <param name="template">The route template. May not be null.</param>
|
||||
public RouteAttribute(string template)
|
||||
{
|
||||
if (template == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(template));
|
||||
}
|
||||
|
||||
Template = template;
|
||||
Template = template ?? throw new ArgumentNullException(nameof(template));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
|
|
@ -30,12 +30,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <param name="type">The <see cref="Type"/> of filter to find.</param>
|
||||
public ServiceFilterAttribute(Type type)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
ServiceType = type;
|
||||
ServiceType = type ?? throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
|
|
@ -35,19 +35,9 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <param name="principal">The claims principal containing the user claims.</param>
|
||||
/// <param name="properties"><see cref="AuthenticationProperties"/> used to perform the sign-in operation.</param>
|
||||
public SignInResult(string authenticationScheme, ClaimsPrincipal principal, AuthenticationProperties properties)
|
||||
{
|
||||
if (authenticationScheme == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(authenticationScheme));
|
||||
}
|
||||
|
||||
if (principal == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(principal));
|
||||
}
|
||||
|
||||
AuthenticationScheme = authenticationScheme;
|
||||
Principal = principal;
|
||||
{
|
||||
AuthenticationScheme = authenticationScheme ?? throw new ArgumentNullException(nameof(authenticationScheme));
|
||||
Principal = principal ?? throw new ArgumentNullException(nameof(principal));
|
||||
Properties = properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -62,13 +62,8 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <param name="authenticationSchemes">The authentication scheme to use when signing out the user.</param>
|
||||
/// <param name="properties"><see cref="AuthenticationProperties"/> used to perform the sign-out operation.</param>
|
||||
public SignOutResult(IList<string> authenticationSchemes, AuthenticationProperties properties)
|
||||
{
|
||||
if (authenticationSchemes == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(authenticationSchemes));
|
||||
}
|
||||
|
||||
AuthenticationSchemes = authenticationSchemes;
|
||||
{
|
||||
AuthenticationSchemes = authenticationSchemes ?? throw new ArgumentNullException(nameof(authenticationSchemes));
|
||||
Properties = properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,12 +34,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// <param name="type">The <see cref="Type"/> of filter to create.</param>
|
||||
public TypeFilterAttribute(Type type)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
ImplementationType = type;
|
||||
ImplementationType = type ?? throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -43,12 +43,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
public VirtualFileResult(string fileName, MediaTypeHeaderValue contentType)
|
||||
: base(contentType?.ToString())
|
||||
{
|
||||
if (fileName == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(fileName));
|
||||
}
|
||||
|
||||
FileName = fileName;
|
||||
FileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -56,19 +51,8 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
/// </summary>
|
||||
public string FileName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fileName;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(value));
|
||||
}
|
||||
|
||||
_fileName = value;
|
||||
}
|
||||
get => _fileName;
|
||||
set => _fileName = value ?? throw new ArgumentNullException(nameof(value));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -53,7 +53,7 @@ export class LoginComponent implements OnInit {
|
|||
switch (result.status) {
|
||||
case AuthenticationResultStatus.Redirect:
|
||||
// We replace the location here so that in case the user hits the back
|
||||
// arrow from within the login page he doesn't get into an infinite
|
||||
// arrow from within the login page they don't get into an infinite
|
||||
// redirect loop.
|
||||
window.location.replace(result.redirectUrl);
|
||||
break;
|
||||
|
@ -120,7 +120,7 @@ export class LoginComponent implements OnInit {
|
|||
|
||||
private redirectToApiAuthorizationPath(apiAuthorizationPath: string) {
|
||||
// It's important that we do a replace here so that when the user hits the back arrow on the
|
||||
// browser he gets sent back to where it was on the app instead of to an endpoint on this
|
||||
// browser they get sent back to where it was on the app instead of to an endpoint on this
|
||||
// component.
|
||||
const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;
|
||||
window.location.replace(redirectUrl);
|
||||
|
|
|
@ -54,7 +54,7 @@ export class LogoutComponent implements OnInit {
|
|||
switch (result.status) {
|
||||
case AuthenticationResultStatus.Redirect:
|
||||
// We replace the location here so that in case the user hits the back
|
||||
// arrow from within the IdP he doesn't get into an infinite redirect loop.
|
||||
// arrow from within the IdP they don't get into an infinite redirect loop.
|
||||
window.location.replace(result.redirectUrl);
|
||||
break;
|
||||
case AuthenticationResultStatus.Success:
|
||||
|
|
|
@ -64,6 +64,7 @@ HandlerResolver::LoadRequestHandlerAssembly(const IHttpApplication &pApplication
|
|||
pConfiguration.QueryProcessPath(),
|
||||
pApplication.GetApplicationPhysicalPath(),
|
||||
pConfiguration.QueryArguments(),
|
||||
errorContext,
|
||||
options));
|
||||
|
||||
location = options->GetDotnetExeLocation();
|
||||
|
|
|
@ -196,6 +196,7 @@
|
|||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ErrorContext.h" />
|
||||
<ClInclude Include="PollingAppOfflineApplication.h" />
|
||||
<ClInclude Include="application.h" />
|
||||
<ClInclude Include="BindingInformation.h" />
|
||||
|
@ -245,7 +246,6 @@
|
|||
<ClCompile Include="file_utility.cpp" />
|
||||
<ClCompile Include="fx_ver.cpp" />
|
||||
<ClCompile Include="GlobalVersionUtility.cpp" />
|
||||
<ClCompile Include="HandleWrapper.cpp" />
|
||||
<ClCompile Include="HostFxr.cpp" />
|
||||
<ClCompile Include="HostFxrResolver.cpp" />
|
||||
<ClCompile Include="HostFxrResolutionResult.cpp" />
|
||||
|
@ -279,4 +279,4 @@
|
|||
<Import Project="..\..\build\native.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
struct ErrorContext
|
||||
{
|
||||
// TODO consider adding HRESULT here
|
||||
std::string detailedErrorContent;
|
||||
USHORT statusCode;
|
||||
USHORT subStatusCode;
|
||||
std::string generalErrorType;
|
||||
std::string errorReason;
|
||||
};
|
|
@ -1,8 +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.
|
||||
|
||||
#include "HandleWrapper.h"
|
||||
|
||||
// Workaround for VC++ bug https://developercommunity.visualstudio.com/content/problem/33928/constexpr-failing-on-nullptr-v141-compiler-regress.html
|
||||
const HANDLE InvalidHandleTraits::DefaultHandle = INVALID_HANDLE_VALUE;
|
||||
const HANDLE FindFileHandleTraits::DefaultHandle = INVALID_HANDLE_VALUE;
|
|
@ -9,7 +9,7 @@
|
|||
struct InvalidHandleTraits
|
||||
{
|
||||
using HandleType = HANDLE;
|
||||
static const HANDLE DefaultHandle;
|
||||
static constexpr HANDLE DefaultHandle = nullptr;
|
||||
static void Close(HANDLE handle) noexcept { CloseHandle(handle); }
|
||||
};
|
||||
|
||||
|
@ -23,7 +23,7 @@ struct NullHandleTraits
|
|||
struct FindFileHandleTraits
|
||||
{
|
||||
using HandleType = HANDLE;
|
||||
static const HANDLE DefaultHandle;
|
||||
static constexpr HANDLE DefaultHandle = nullptr;
|
||||
static void Close(HANDLE handle) noexcept { FindClose(handle); }
|
||||
};
|
||||
|
||||
|
@ -35,16 +35,16 @@ struct ModuleHandleTraits
|
|||
};
|
||||
|
||||
// Code analysis doesn't like nullptr usages via traits
|
||||
#pragma warning( push )
|
||||
#pragma warning ( disable : 26477 ) // disable Use 'nullptr' rather than 0 or NULL (es.47).
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 26477) // disable Use 'nullptr' rather than 0 or NULL (es.47).
|
||||
|
||||
template<typename traits>
|
||||
template <typename traits>
|
||||
class HandleWrapper
|
||||
{
|
||||
public:
|
||||
using HandleType = typename traits::HandleType;
|
||||
|
||||
HandleWrapper(HandleType handle = traits::DefaultHandle) noexcept : m_handle(handle) { }
|
||||
HandleWrapper(HandleType handle = traits::DefaultHandle) noexcept : m_handle(handle) {}
|
||||
~HandleWrapper()
|
||||
{
|
||||
if (m_handle != traits::DefaultHandle)
|
||||
|
@ -54,14 +54,14 @@ public:
|
|||
}
|
||||
|
||||
operator HandleType() noexcept { return m_handle; }
|
||||
HandleWrapper& operator =(HandleType value) noexcept
|
||||
HandleWrapper &operator=(HandleType value) noexcept
|
||||
{
|
||||
DBG_ASSERT(m_handle == traits::DefaultHandle);
|
||||
m_handle = value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
HandleType* operator&() noexcept { return &m_handle; }
|
||||
HandleType *operator&() noexcept { return &m_handle; }
|
||||
|
||||
HandleType release() noexcept
|
||||
{
|
||||
|
@ -74,4 +74,4 @@ private:
|
|||
HandleType m_handle;
|
||||
};
|
||||
|
||||
#pragma warning( pop )
|
||||
#pragma warning(pop)
|
||||
|
|
|
@ -28,16 +28,6 @@ typedef int(*hostfxr_set_runtime_property_value_fn)(void* host_context_handle, P
|
|||
typedef int(*hostfxr_run_app_fn)(void* host_context_handle);
|
||||
typedef int(*hostfxr_close_fn)(void* hostfxr_context_handle);
|
||||
|
||||
struct ErrorContext
|
||||
{
|
||||
// TODO consider adding HRESULT here
|
||||
std::string detailedErrorContent;
|
||||
USHORT statusCode;
|
||||
USHORT subStatusCode;
|
||||
std::string generalErrorType;
|
||||
std::string errorReason;
|
||||
};
|
||||
|
||||
class HostFxrErrorRedirector: NonCopyable
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -23,6 +23,7 @@ HRESULT HostFxrResolutionResult::Create(
|
|||
_In_ const std::wstring& pcwzProcessPath,
|
||||
_In_ const std::wstring& pcwzApplicationPhysicalPath,
|
||||
_In_ const std::wstring& pcwzArguments,
|
||||
_In_ ErrorContext& errorContext,
|
||||
_Out_ std::unique_ptr<HostFxrResolutionResult>& ppWrapper)
|
||||
{
|
||||
std::filesystem::path knownDotnetLocation;
|
||||
|
@ -42,7 +43,8 @@ HRESULT HostFxrResolutionResult::Create(
|
|||
pcwzArguments,
|
||||
hostFxrDllPath,
|
||||
knownDotnetLocation,
|
||||
arguments);
|
||||
arguments,
|
||||
errorContext);
|
||||
|
||||
LOG_INFOF(L"Parsed hostfxr options: dotnet location: '%ls' hostfxr path: '%ls' arguments:", knownDotnetLocation.c_str(), hostFxrDllPath.c_str());
|
||||
for (size_t i = 0; i < arguments.size(); i++)
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include "ErrorContext.h"
|
||||
|
||||
class HostFxrResolutionResult
|
||||
{
|
||||
public:
|
||||
|
@ -44,6 +46,7 @@ public:
|
|||
_In_ const std::wstring& pcwzProcessPath,
|
||||
_In_ const std::wstring& pcwzApplicationPhysicalPath,
|
||||
_In_ const std::wstring& pcwzArguments,
|
||||
_In_ ErrorContext& errorContext,
|
||||
_Out_ std::unique_ptr<HostFxrResolutionResult>& ppWrapper);
|
||||
|
||||
private:
|
||||
|
|
|
@ -21,7 +21,8 @@ HostFxrResolver::GetHostFxrParameters(
|
|||
const std::wstring &applicationArguments,
|
||||
fs::path &hostFxrDllPath,
|
||||
fs::path &dotnetExePath,
|
||||
std::vector<std::wstring> &arguments
|
||||
std::vector<std::wstring> &arguments,
|
||||
ErrorContext& errorContext
|
||||
)
|
||||
{
|
||||
LOG_INFOF(L"Resolving hostfxr parameters for application: '%ls' arguments: '%ls' path: '%ls'",
|
||||
|
@ -93,7 +94,13 @@ HostFxrResolver::GetHostFxrParameters(
|
|||
LOG_INFOF(L"Checking application.dll at '%ls'", applicationDllPath.c_str());
|
||||
if (!is_regular_file(applicationDllPath))
|
||||
{
|
||||
throw InvalidOperationException(format(L"Application .dll was not found at %s", applicationDllPath.c_str()));
|
||||
errorContext.subStatusCode = 38;
|
||||
errorContext.errorReason = "Application DLL not found. Confirm the application dll is present. Single-file deployments are not supported in IIS.";
|
||||
errorContext.generalErrorType = "ANCM Application DLL Not Found";
|
||||
errorContext.detailedErrorContent = format("Application DLL was not found at %s.", to_multi_byte_string(applicationDllPath, CP_UTF8).c_str());
|
||||
throw InvalidOperationException(
|
||||
format(L"Application DLL was not found at %s. Confirm the application dll is present. Single-file deployments are not supported in IIS.",
|
||||
applicationDllPath.c_str()));
|
||||
}
|
||||
|
||||
hostFxrDllPath = executablePath.parent_path() / "hostfxr.dll";
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
#include "ErrorContext.h"
|
||||
|
||||
#define READ_BUFFER_SIZE 4096
|
||||
|
||||
class HostFxrResolver
|
||||
|
@ -23,7 +25,8 @@ public:
|
|||
const std::wstring &applicationArguments,
|
||||
std::filesystem::path &hostFxrDllPath,
|
||||
std::filesystem::path &dotnetExePath,
|
||||
std::vector<std::wstring> &arguments
|
||||
std::vector<std::wstring> &arguments,
|
||||
ErrorContext& errorContext
|
||||
);
|
||||
|
||||
static
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
<ClCompile Include="ConfigUtilityTests.cpp" />
|
||||
<ClCompile Include="GlobalVersionTests.cpp" />
|
||||
<ClCompile Include="Helpers.cpp" />
|
||||
<ClCompile Include="hostfxr_utility_tests.cpp" />
|
||||
<ClCompile Include="inprocess_application_tests.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="StandardOutputRedirectionTest.cpp" />
|
||||
|
@ -187,4 +186,4 @@
|
|||
<PropertyGroup>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
|
@ -1,122 +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.
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <filesystem>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "HostFxrResolver.h"
|
||||
#include "Environment.h"
|
||||
|
||||
TEST(ParseHostFxrArguments, BasicHostFxrArguments)
|
||||
{
|
||||
std::vector<std::wstring> bstrArray;
|
||||
|
||||
HostFxrResolver::AppendArguments(
|
||||
L"exec \"test.dll\"", // args
|
||||
L"invalid", // physical path to application
|
||||
bstrArray); // args array.
|
||||
|
||||
EXPECT_EQ(2, bstrArray.size());
|
||||
ASSERT_STREQ(L"exec", bstrArray[0].c_str());
|
||||
ASSERT_STREQ(L"test.dll", bstrArray[1].c_str());
|
||||
}
|
||||
|
||||
TEST(ParseHostFxrArguments, NoExecProvided)
|
||||
{
|
||||
std::vector<std::wstring> bstrArray;
|
||||
|
||||
HostFxrResolver::AppendArguments(
|
||||
L"test.dll", // args
|
||||
L"ignored", // physical path to application
|
||||
bstrArray); // args array.
|
||||
|
||||
EXPECT_EQ(1, bstrArray.size());
|
||||
ASSERT_STREQ(L"test.dll", bstrArray[0].c_str());
|
||||
}
|
||||
|
||||
TEST(ParseHostFxrArguments, ConvertDllToAbsolutePath)
|
||||
{
|
||||
std::vector<std::wstring> bstrArray;
|
||||
// we need to use existing dll so let's use ntdll that we know exists everywhere
|
||||
auto system32 = Environment::ExpandEnvironmentVariables(L"%WINDIR%\\System32");
|
||||
HostFxrResolver::AppendArguments(
|
||||
L"exec \"ntdll.dll\"", // args
|
||||
system32, // physical path to application
|
||||
bstrArray, // args array.
|
||||
true); // expandDllPaths
|
||||
|
||||
EXPECT_EQ(2, bstrArray.size());
|
||||
ASSERT_STREQ(L"exec", bstrArray[0].c_str());
|
||||
ASSERT_STREQ((system32 + L"\\ntdll.dll").c_str(), bstrArray[1].c_str());
|
||||
}
|
||||
|
||||
TEST(ParseHostFxrArguments, ProvideNoArgs_InvalidArgs)
|
||||
{
|
||||
std::vector<std::wstring> bstrArray;
|
||||
std::filesystem::path struHostFxrDllLocation;
|
||||
std::filesystem::path struExeLocation;
|
||||
|
||||
EXPECT_THROW(HostFxrResolver::GetHostFxrParameters(
|
||||
L"dotnet", // processPath
|
||||
L"some\\path", // application physical path, ignored.
|
||||
L"", //arguments
|
||||
struHostFxrDllLocation,
|
||||
struExeLocation,
|
||||
bstrArray), // args array.
|
||||
InvalidOperationException);
|
||||
}
|
||||
|
||||
TEST(GetAbsolutePathToDotnetFromProgramFiles, BackupWorks)
|
||||
{
|
||||
STRU struAbsolutePathToDotnet;
|
||||
BOOL fDotnetInProgramFiles;
|
||||
BOOL is64Bit;
|
||||
BOOL fIsWow64 = FALSE;
|
||||
SYSTEM_INFO systemInfo;
|
||||
IsWow64Process(GetCurrentProcess(), &fIsWow64);
|
||||
if (fIsWow64)
|
||||
{
|
||||
is64Bit = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetNativeSystemInfo(&systemInfo);
|
||||
is64Bit = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64;
|
||||
}
|
||||
|
||||
if (is64Bit)
|
||||
{
|
||||
fDotnetInProgramFiles = std::filesystem::is_regular_file(L"C:/Program Files/dotnet/dotnet.exe");
|
||||
}
|
||||
else
|
||||
{
|
||||
fDotnetInProgramFiles = std::filesystem::is_regular_file(L"C:/Program Files (x86)/dotnet/dotnet.exe");
|
||||
}
|
||||
|
||||
auto dotnetPath = HostFxrResolver::GetAbsolutePathToDotnetFromProgramFiles();
|
||||
if (fDotnetInProgramFiles)
|
||||
{
|
||||
EXPECT_TRUE(dotnetPath.has_value());
|
||||
}
|
||||
else
|
||||
{
|
||||
EXPECT_FALSE(dotnetPath.has_value());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(GetHostFxrArguments, InvalidParams)
|
||||
{
|
||||
std::vector<std::wstring> bstrArray;
|
||||
std::filesystem::path struHostFxrDllLocation;
|
||||
std::filesystem::path struExeLocation;
|
||||
|
||||
EXPECT_THROW(HostFxrResolver::GetHostFxrParameters(
|
||||
L"bogus", // processPath
|
||||
L"", // application physical path, ignored.
|
||||
L"ignored", //arguments
|
||||
struHostFxrDllLocation,
|
||||
struExeLocation,
|
||||
bstrArray), // args array.
|
||||
InvalidOperationException);
|
||||
}
|
|
@ -195,6 +195,8 @@ IN_PROCESS_APPLICATION::ExecuteApplication()
|
|||
|
||||
auto context = std::make_shared<ExecuteClrContext>();
|
||||
|
||||
ErrorContext errorContext; // unused
|
||||
|
||||
if (s_fMainCallback == nullptr)
|
||||
{
|
||||
THROW_IF_FAILED(HostFxrResolutionResult::Create(
|
||||
|
@ -202,6 +204,7 @@ IN_PROCESS_APPLICATION::ExecuteApplication()
|
|||
m_pConfig->QueryProcessPath(),
|
||||
QueryApplicationPhysicalPath(),
|
||||
m_pConfig->QueryArguments(),
|
||||
errorContext,
|
||||
hostFxrResolutionResult
|
||||
));
|
||||
|
||||
|
|
|
@ -365,6 +365,24 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.InProcess
|
|||
EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindNativeDependencies(deploymentResult), Logger);
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
public async Task SingleExecutable_FailedToFindNativeDependencies()
|
||||
{
|
||||
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
|
||||
deploymentParameters.ApplicationType = ApplicationType.Standalone;
|
||||
var deploymentResult = await DeployAsync(deploymentParameters);
|
||||
|
||||
File.Delete(Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.dll"));
|
||||
if (DeployerSelector.HasNewShim)
|
||||
{
|
||||
await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "HTTP Error 500.38 - ANCM Application DLL Not Found");
|
||||
}
|
||||
else
|
||||
{
|
||||
await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
|
||||
}
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
public async Task TargedDifferenceSharedFramework_FailedToFindNativeDependenciesErrorInResponse()
|
||||
{
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
|
||||
public static string GetInProcessTestSitesName()
|
||||
{
|
||||
return DeployerSelector.IsForwardsCompatibilityTest ? "InProcessForwardsCompatWebSite" : "InProcessWebSite";
|
||||
return DeployerSelector.IsNewShimTest ? "InProcessNewShimWebSite" : "InProcessWebSite";
|
||||
}
|
||||
|
||||
public static async Task AssertStarts(this IISDeploymentResult deploymentResult, string path = "/HelloWorld")
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
public static class DeployerSelector
|
||||
{
|
||||
public static ServerType ServerType => ServerType.IIS;
|
||||
public static bool IsForwardsCompatibilityTest => false;
|
||||
public static bool IsNewShimTest => false;
|
||||
public static bool HasNewShim => true;
|
||||
public static bool HasNewHandler => true;
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Common.Tests\Common.Tests.csproj" />
|
||||
<ProjectReference Include="$(RepoRoot)src\Servers\IIS\IntegrationTesting.IIS\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj" />
|
||||
<ProjectReference Include="$(RepoRoot)src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj" />
|
||||
|
||||
<ProjectReference Include="..\testassets\InProcessWebSite\InProcessWebSite.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
public static class DeployerSelector
|
||||
{
|
||||
public static ServerType ServerType => ServerType.IIS;
|
||||
public static bool IsForwardsCompatibilityTest => false;
|
||||
public static bool IsNewShimTest => false;
|
||||
public static bool HasNewShim => false;
|
||||
public static bool HasNewHandler => true;
|
||||
}
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<TestGroupName>IISBackwardsCompatibility.FunctionalTests</TestGroupName>
|
||||
<TestGroupName>IISNewHandler.FunctionalTests</TestGroupName>
|
||||
<DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
|
||||
<SkipTests Condition=" '$(SkipIISBackwardsCompatibilityTests)' == 'true' ">true</SkipTests>
|
||||
<SkipTests Condition=" '$(SkipIISNewHandlerTests)' == 'true' ">true</SkipTests>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="../FunctionalTest.props" />
|
||||
|
@ -16,9 +16,6 @@
|
|||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Common.Tests\Common.Tests.csproj" />
|
||||
<ProjectReference Include="..\testassets\**\*.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\testassets\InProcessWebSite\InProcessWebSite.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
|
@ -39,11 +36,4 @@
|
|||
<Reference Include="System.Net.WebSockets.WebSocketProtocol" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="RemoveSourceOverride" BeforeTargets="_CopyOutOfDateSourceItemsToOutputDirectory">
|
||||
<ItemGroup>
|
||||
<SourceItemsToRemove Include="@(_SourceItemsToCopyToOutputDirectory)" Condition="$([System.String]::Copy(%(_SourceItemsToCopyToOutputDirectory.FullPath)).Contains('IIS\AspNetCoreModule')) == 'true'" />
|
||||
<_SourceItemsToCopyToOutputDirectory Remove="@(SourceItemsToRemove)" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
</Project>
|
|
@ -10,17 +10,17 @@ using Xunit.Sdk;
|
|||
namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
||||
{
|
||||
[Collection(IISTestSiteCollection.Name)]
|
||||
public class BackwardsCompatibilityTests : FixtureLoggedTest
|
||||
public class NewHandlerTests : FixtureLoggedTest
|
||||
{
|
||||
private readonly IISTestSiteFixture _fixture;
|
||||
|
||||
public BackwardsCompatibilityTests(IISTestSiteFixture fixture) : base(fixture)
|
||||
public NewHandlerTests(IISTestSiteFixture fixture) : base(fixture)
|
||||
{
|
||||
_fixture = fixture;
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
public async Task CheckBackwardsCompatibilityIsUsed()
|
||||
public async Task CheckNewHandlerIsUsed()
|
||||
{
|
||||
var response = await _fixture.Client.GetAsync("/HelloWorld");
|
||||
|
||||
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
|
||||
foreach (ProcessModule handle in handles)
|
||||
{
|
||||
if (handle.ModuleName == "aspnetcorev2.dll")
|
||||
if (handle.ModuleName == "aspnetcorev2.dll" || handle.ModuleName == "aspnetcorev2_outofprocess.dll")
|
||||
{
|
||||
Assert.Equal("12.2.18316.0", handle.FileVersionInfo.FileVersion);
|
||||
return;
|
|
@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
public static class DeployerSelector
|
||||
{
|
||||
public static ServerType ServerType => ServerType.IIS;
|
||||
public static bool IsForwardsCompatibilityTest => true;
|
||||
public static bool IsNewShimTest => true;
|
||||
public static bool HasNewShim => true;
|
||||
public static bool HasNewHandler => false;
|
||||
}
|
|
@ -10,17 +10,17 @@ using Xunit.Sdk;
|
|||
namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
||||
{
|
||||
[Collection(IISTestSiteCollection.Name)]
|
||||
public class ForwardsCompatibilityTests : FixtureLoggedTest
|
||||
public class NewShimTests : FixtureLoggedTest
|
||||
{
|
||||
private readonly IISTestSiteFixture _fixture;
|
||||
|
||||
public ForwardsCompatibilityTests(IISTestSiteFixture fixture) : base(fixture)
|
||||
public NewShimTests(IISTestSiteFixture fixture) : base(fixture)
|
||||
{
|
||||
_fixture = fixture;
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
public async Task CheckForwardsCompatibilityIsUsed()
|
||||
public async Task CheckNewShimIsUsed()
|
||||
{
|
||||
var response = await _fixture.Client.GetAsync("/HelloWorld");
|
||||
var handles = _fixture.DeploymentResult.HostProcess.Modules;
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<TestGroupName>IISForwardsCompatibility.FunctionalTests</TestGroupName>
|
||||
<TestGroupName>IISNewShim.FunctionalTests</TestGroupName>
|
||||
<DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
|
||||
<SkipTests Condition=" '$(SkipIISForwardsCompatibilityTests)' == 'true' ">true</SkipTests>
|
||||
<SkipTests Condition=" '$(SkipIISNewShimTests)' == 'true' ">true</SkipTests>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="../FunctionalTest.props" />
|
||||
|
@ -13,7 +13,7 @@
|
|||
<ProjectReference Include="..\Common.Tests\Common.Tests.csproj" />
|
||||
<ProjectReference Include="$(RepoRoot)src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj" />
|
||||
|
||||
<ProjectReference Include="..\testassets\InProcessForwardsCompatWebSite\InProcessForwardsCompatWebSite.csproj">
|
||||
<ProjectReference Include="..\testassets\InProcessNewShimWebSite\InProcessNewShimWebSite.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
|
|||
public static class DeployerSelector
|
||||
{
|
||||
public static ServerType ServerType => ServerType.IISExpress;
|
||||
public static bool IsForwardsCompatibilityTest => false;
|
||||
public static bool IsNewShimTest => false;
|
||||
public static bool HasNewShim => true;
|
||||
public static bool HasNewHandler => true;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<AssemblyName>InProcessWebSite</AssemblyName>
|
||||
<TestAssetOutputName>InProcessForwardsCompatWebSite</TestAssetOutputName>
|
||||
<TestAssetOutputName>InProcessNewShimWebSite</TestAssetOutputName>
|
||||
<DefineConstants>FORWARDCOMPAT</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
|
@ -63,9 +63,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Tests", "IIS\test\IIS.T
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Tests", "IIS\test\Common.Tests\Common.Tests.csproj", "{D17B7B35-5361-4A50-B499-E03E5C3CC095}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.BackwardsCompatibility.FunctionalTests", "IIS\test\IIS.BackwardsCompatibility.FunctionalTests\IIS.BackwardsCompatibility.FunctionalTests.csproj", "{582B07BC-73F4-4689-8557-B039298BD82C}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.NewHandler.FunctionalTests", "IIS\test\IIS.NewHandler.FunctionalTests\IIS.NewHandler.FunctionalTests.csproj", "{582B07BC-73F4-4689-8557-B039298BD82C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.ForwardsCompatibility.FunctionalTests", "IIS\test\IIS.ForwardsCompatibility.FunctionalTests\IIS.ForwardsCompatibility.FunctionalTests.csproj", "{D1EA5D99-28FD-4197-81DE-17098846B38B}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.NewShim.FunctionalTests", "IIS\test\IIS.NewShim.FunctionalTests\IIS.NewShim.FunctionalTests.csproj", "{D1EA5D99-28FD-4197-81DE-17098846B38B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestTasks", "IIS\test\testassets\TestTasks\TestTasks.csproj", "{2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}"
|
||||
EndProject
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
Condition="!Exists('$(AspNetCoreModuleV2ShimDll)') OR !Exists('$(AspNetCoreModuleV2OutOfProcessHandlerDll)')" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup Condition="'$(BuildIisNativeProjects)' == 'true' AND '$(VCTargetsPath)' != ''">
|
||||
<ItemGroup Condition="'$(BuildIisNativeProjects)' == 'true' AND '$(VCTargetsPath)' != '' AND '$(TestGroupName)' != 'IISNewHandler.FunctionalTests'">
|
||||
<NativeProjectReference Include="$(MSBuildThisFileDirectory)..\..\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" Platform="x64"/>
|
||||
<NativeProjectReference Include="$(MSBuildThisFileDirectory)..\..\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj" Platform="x64" />
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.HPack
|
||||
{
|
||||
|
@ -9,6 +10,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.HPack
|
|||
{
|
||||
public static bool Encode(int i, int n, Span<byte> buffer, out int length)
|
||||
{
|
||||
Debug.Assert(i >= 0);
|
||||
Debug.Assert(n >= 1 && n <= 8);
|
||||
|
||||
var j = 0;
|
||||
length = 0;
|
||||
|
||||
|
@ -37,7 +41,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.HPack
|
|||
{
|
||||
buffer[j++] = (byte)(i % 128 + 128);
|
||||
|
||||
if (j > buffer.Length)
|
||||
if (j >= buffer.Length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.HPack;
|
||||
using Xunit;
|
||||
|
@ -35,5 +37,55 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(IntegerCodecSamples))]
|
||||
public void EncodeSamples(int value, int bits, byte[] expectedResult)
|
||||
{
|
||||
Span<byte> actualResult = new byte[64];
|
||||
bool success = IntegerEncoder.Encode(value, bits, actualResult, out int bytesWritten);
|
||||
|
||||
Assert.True(success);
|
||||
Assert.Equal(expectedResult.Length, bytesWritten);
|
||||
Assert.True(actualResult.Slice(0, bytesWritten).SequenceEqual(expectedResult));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(IntegerCodecSamples))]
|
||||
public void EncodeSamplesWithShortBuffer(int value, int bits, byte[] expectedResult)
|
||||
{
|
||||
Span<byte> actualResult = new byte[expectedResult.Length - 1];
|
||||
bool success = IntegerEncoder.Encode(value, bits, actualResult, out int bytesWritten);
|
||||
|
||||
Assert.False(success);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(IntegerCodecSamples))]
|
||||
public void DecodeSamples(int expectedResult, int bits, byte[] encoded)
|
||||
{
|
||||
var integerDecoder = new IntegerDecoder();
|
||||
|
||||
bool finished = integerDecoder.BeginTryDecode(encoded[0], bits, out int actualResult);
|
||||
|
||||
int i = 1;
|
||||
for (; !finished && i < encoded.Length; ++i)
|
||||
{
|
||||
finished = integerDecoder.TryDecode(encoded[i], out actualResult);
|
||||
}
|
||||
|
||||
Assert.True(finished);
|
||||
Assert.Equal(encoded.Length, i);
|
||||
|
||||
Assert.Equal(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
// integer, prefix length, encoded
|
||||
public static IEnumerable<object[]> IntegerCodecSamples()
|
||||
{
|
||||
yield return new object[] { 10, 5, new byte[] { 0x0A } };
|
||||
yield return new object[] { 1337, 5, new byte[] { 0x1F, 0x9A, 0x0A } };
|
||||
yield return new object[] { 42, 8, new byte[] { 0x2A } };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,10 @@ namespace Microsoft.AspNetCore.Certificates.Generation
|
|||
private static readonly string MacOSTrustCertificateCommandLineArguments = "security add-trusted-cert -d -r trustRoot -k " + MacOSSystemKeyChain + " ";
|
||||
private const int UserCancelledErrorCode = 1223;
|
||||
|
||||
// Setting to 0 means we don't append the version byte,
|
||||
// which is what all machines currently have.
|
||||
public int AspNetHttpsCertificateVersion { get; set; } = 1;
|
||||
|
||||
public IList<X509Certificate2> ListCertificates(
|
||||
CertificatePurpose purpose,
|
||||
StoreName storeName,
|
||||
|
@ -83,7 +87,8 @@ namespace Microsoft.AspNetCore.Certificates.Generation
|
|||
var validCertificates = matchingCertificates
|
||||
.Where(c => c.NotBefore <= now &&
|
||||
now <= c.NotAfter &&
|
||||
(!requireExportable || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || IsExportable(c)))
|
||||
(!requireExportable || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || IsExportable(c))
|
||||
&& MatchesVersion(c))
|
||||
.ToArray();
|
||||
|
||||
var invalidCertificates = matchingCertificates.Except(validCertificates);
|
||||
|
@ -117,6 +122,25 @@ namespace Microsoft.AspNetCore.Certificates.Generation
|
|||
bool HasOid(X509Certificate2 certificate, string oid) =>
|
||||
certificate.Extensions.OfType<X509Extension>()
|
||||
.Any(e => string.Equals(oid, e.Oid.Value, StringComparison.Ordinal));
|
||||
|
||||
bool MatchesVersion(X509Certificate2 c)
|
||||
{
|
||||
var byteArray = c.Extensions.OfType<X509Extension>()
|
||||
.Where(e => string.Equals(AspNetHttpsOid, e.Oid.Value, StringComparison.Ordinal))
|
||||
.Single()
|
||||
.RawData;
|
||||
|
||||
if ((byteArray.Length == AspNetHttpsOidFriendlyName.Length && byteArray[0] == (byte)'A') || byteArray.Length == 0)
|
||||
{
|
||||
// No Version set, default to 0
|
||||
return 0 >= AspNetHttpsCertificateVersion;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Version is in the only byte of the byte array.
|
||||
return byteArray[0] >= AspNetHttpsCertificateVersion;
|
||||
}
|
||||
}
|
||||
#if !XPLAT
|
||||
bool IsExportable(X509Certificate2 c) =>
|
||||
((c.GetRSAPrivateKey() is RSACryptoServiceProvider rsaPrivateKey &&
|
||||
|
@ -171,10 +195,22 @@ namespace Microsoft.AspNetCore.Certificates.Generation
|
|||
pathLengthConstraint: 0,
|
||||
critical: true);
|
||||
|
||||
byte[] bytePayload;
|
||||
|
||||
if (AspNetHttpsCertificateVersion != 0)
|
||||
{
|
||||
bytePayload = new byte[1];
|
||||
bytePayload[0] = (byte)AspNetHttpsCertificateVersion;
|
||||
}
|
||||
else
|
||||
{
|
||||
bytePayload = Encoding.ASCII.GetBytes(AspNetHttpsOidFriendlyName);
|
||||
}
|
||||
|
||||
var aspNetHttpsExtension = new X509Extension(
|
||||
new AsnEncodedData(
|
||||
new Oid(AspNetHttpsOid, AspNetHttpsOidFriendlyName),
|
||||
Encoding.ASCII.GetBytes(AspNetHttpsOidFriendlyName)),
|
||||
bytePayload),
|
||||
critical: false);
|
||||
|
||||
extensions.Add(basicConstraints);
|
||||
|
@ -633,7 +669,7 @@ namespace Microsoft.AspNetCore.Certificates.Generation
|
|||
}
|
||||
}
|
||||
|
||||
public EnsureCertificateResult EnsureAspNetCoreHttpsDevelopmentCertificate(
|
||||
public DetailedEnsureCertificateResult EnsureAspNetCoreHttpsDevelopmentCertificate(
|
||||
DateTimeOffset notBefore,
|
||||
DateTimeOffset notAfter,
|
||||
string path = null,
|
||||
|
@ -645,109 +681,7 @@ namespace Microsoft.AspNetCore.Certificates.Generation
|
|||
return EnsureValidCertificateExists(notBefore, notAfter, CertificatePurpose.HTTPS, path, trust, includePrivateKey, password, subject);
|
||||
}
|
||||
|
||||
public EnsureCertificateResult EnsureValidCertificateExists(
|
||||
DateTimeOffset notBefore,
|
||||
DateTimeOffset notAfter,
|
||||
CertificatePurpose purpose,
|
||||
string path = null,
|
||||
bool trust = false,
|
||||
bool includePrivateKey = false,
|
||||
string password = null,
|
||||
string subjectOverride = null)
|
||||
{
|
||||
if (purpose == CertificatePurpose.All)
|
||||
{
|
||||
throw new ArgumentException("The certificate must have a specific purpose.");
|
||||
}
|
||||
|
||||
var certificates = ListCertificates(purpose, StoreName.My, StoreLocation.CurrentUser, isValid: true).Concat(
|
||||
ListCertificates(purpose, StoreName.My, StoreLocation.LocalMachine, isValid: true));
|
||||
|
||||
certificates = subjectOverride == null ? certificates : certificates.Where(c => c.Subject == subjectOverride);
|
||||
|
||||
var result = EnsureCertificateResult.Succeeded;
|
||||
|
||||
X509Certificate2 certificate = null;
|
||||
if (certificates.Count() > 0)
|
||||
{
|
||||
certificate = certificates.FirstOrDefault();
|
||||
result = EnsureCertificateResult.ValidCertificatePresent;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
switch (purpose)
|
||||
{
|
||||
case CertificatePurpose.All:
|
||||
throw new InvalidOperationException("The certificate must have a specific purpose.");
|
||||
case CertificatePurpose.HTTPS:
|
||||
certificate = CreateAspNetCoreHttpsDevelopmentCertificate(notBefore, notAfter, subjectOverride);
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException("The certificate must have a purpose.");
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return EnsureCertificateResult.ErrorCreatingTheCertificate;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
certificate = SaveCertificateInStore(certificate, StoreName.My, StoreLocation.CurrentUser);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return EnsureCertificateResult.ErrorSavingTheCertificateIntoTheCurrentUserPersonalStore;
|
||||
}
|
||||
}
|
||||
if (path != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ExportCertificate(certificate, path, includePrivateKey, password);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return EnsureCertificateResult.ErrorExportingTheCertificate;
|
||||
}
|
||||
}
|
||||
|
||||
if ((RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) && trust)
|
||||
{
|
||||
try
|
||||
{
|
||||
TrustCertificate(certificate);
|
||||
}
|
||||
catch (UserCancelledTrustException)
|
||||
{
|
||||
return EnsureCertificateResult.UserCancelledTrustStep;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return EnsureCertificateResult.FailedToTrustTheCertificate;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// This is just to avoid breaking changes across repos.
|
||||
// Will be renamed back to EnsureAspNetCoreHttpsDevelopmentCertificate once updates are made elsewhere.
|
||||
public DetailedEnsureCertificateResult EnsureAspNetCoreHttpsDevelopmentCertificate2(
|
||||
DateTimeOffset notBefore,
|
||||
DateTimeOffset notAfter,
|
||||
string path = null,
|
||||
bool trust = false,
|
||||
bool includePrivateKey = false,
|
||||
string password = null,
|
||||
string subject = LocalhostHttpsDistinguishedName)
|
||||
{
|
||||
return EnsureValidCertificateExists2(notBefore, notAfter, CertificatePurpose.HTTPS, path, trust, includePrivateKey, password, subject);
|
||||
}
|
||||
|
||||
public DetailedEnsureCertificateResult EnsureValidCertificateExists2(
|
||||
public DetailedEnsureCertificateResult EnsureValidCertificateExists(
|
||||
DateTimeOffset notBefore,
|
||||
DateTimeOffset notAfter,
|
||||
CertificatePurpose purpose,
|
||||
|
|
|
@ -15,19 +15,9 @@ namespace Microsoft.Extensions.Internal
|
|||
public PropertyActivator(
|
||||
PropertyInfo propertyInfo,
|
||||
Func<TContext, object> valueAccessor)
|
||||
{
|
||||
if (propertyInfo == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(propertyInfo));
|
||||
}
|
||||
|
||||
if (valueAccessor == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(valueAccessor));
|
||||
}
|
||||
|
||||
PropertyInfo = propertyInfo;
|
||||
_valueAccessor = valueAccessor;
|
||||
{
|
||||
PropertyInfo = propertyInfo ?? throw new ArgumentNullException(nameof(propertyInfo));
|
||||
_valueAccessor = valueAccessor ?? throw new ArgumentNullException(nameof(valueAccessor));
|
||||
_fastPropertySetter = PropertyHelper.MakeFastPropertySetter(propertyInfo);
|
||||
}
|
||||
|
||||
|
@ -107,4 +97,4 @@ namespace Microsoft.Extensions.Internal
|
|||
return properties.Select(createActivateInfo).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,13 +51,8 @@ namespace Microsoft.Extensions.Internal
|
|||
/// This constructor does not cache the helper. For caching, use <see cref="GetProperties(Type)"/>.
|
||||
/// </summary>
|
||||
public PropertyHelper(PropertyInfo property)
|
||||
{
|
||||
if (property == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(property));
|
||||
}
|
||||
|
||||
Property = property;
|
||||
{
|
||||
Property = property ?? throw new ArgumentNullException(nameof(property));
|
||||
Name = property.Name;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
// 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.
|
||||
|
||||
import { IReconnectPolicy } from "./IReconnectPolicy";
|
||||
import { IRetryPolicy, RetryContext } from "./IRetryPolicy";
|
||||
|
||||
// 0, 2, 10, 30 second delays before reconnect attempts.
|
||||
const DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];
|
||||
|
||||
/** @private */
|
||||
export class DefaultReconnectPolicy implements IReconnectPolicy {
|
||||
export class DefaultReconnectPolicy implements IRetryPolicy {
|
||||
private readonly retryDelays: Array<number | null>;
|
||||
|
||||
constructor(retryDelays?: number[]) {
|
||||
this.retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;
|
||||
}
|
||||
|
||||
public nextRetryDelayInMilliseconds(previousRetryCount: number): number | null {
|
||||
return this.retryDelays[previousRetryCount];
|
||||
public nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null {
|
||||
return this.retryDelays[retryContext.previousRetryCount];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import { HandshakeProtocol, HandshakeRequestMessage, HandshakeResponseMessage }
|
|||
import { IConnection } from "./IConnection";
|
||||
import { CancelInvocationMessage, CompletionMessage, IHubProtocol, InvocationMessage, MessageType, StreamInvocationMessage, StreamItemMessage } from "./IHubProtocol";
|
||||
import { ILogger, LogLevel } from "./ILogger";
|
||||
import { IReconnectPolicy } from "./IReconnectPolicy";
|
||||
import { IRetryPolicy } from "./IRetryPolicy";
|
||||
import { IStreamResult } from "./Stream";
|
||||
import { Subject } from "./Subject";
|
||||
import { Arg } from "./Utils";
|
||||
|
@ -32,7 +32,7 @@ export class HubConnection {
|
|||
private readonly cachedPingMessage: string | ArrayBuffer;
|
||||
private readonly connection: IConnection;
|
||||
private readonly logger: ILogger;
|
||||
private readonly reconnectPolicy?: IReconnectPolicy;
|
||||
private readonly reconnectPolicy?: IRetryPolicy;
|
||||
private protocol: IHubProtocol;
|
||||
private handshakeProtocol: HandshakeProtocol;
|
||||
private callbacks: { [invocationId: string]: (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => void };
|
||||
|
@ -81,11 +81,11 @@ export class HubConnection {
|
|||
// create method that can be used by HubConnectionBuilder. An "internal" constructor would just
|
||||
// be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a
|
||||
// public parameter-less constructor.
|
||||
public static create(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IReconnectPolicy): HubConnection {
|
||||
public static create(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IRetryPolicy): HubConnection {
|
||||
return new HubConnection(connection, logger, protocol, reconnectPolicy);
|
||||
}
|
||||
|
||||
private constructor(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IReconnectPolicy) {
|
||||
private constructor(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IRetryPolicy) {
|
||||
Arg.isRequired(connection, "connection");
|
||||
Arg.isRequired(logger, "logger");
|
||||
Arg.isRequired(protocol, "protocol");
|
||||
|
@ -666,11 +666,12 @@ export class HubConnection {
|
|||
private async reconnect(error?: Error) {
|
||||
const reconnectStartTime = Date.now();
|
||||
let previousReconnectAttempts = 0;
|
||||
let retryError = error !== undefined ? error : new Error("Attempting to reconnect due to a unknown error.");
|
||||
|
||||
let nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, 0);
|
||||
let nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, 0, retryError);
|
||||
|
||||
if (nextRetryDelay === null) {
|
||||
this.logger.log(LogLevel.Debug, "Connection not reconnecting because the IReconnectPolicy returned null on the first reconnect attempt.");
|
||||
this.logger.log(LogLevel.Debug, "Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.");
|
||||
this.completeClose(error);
|
||||
return;
|
||||
}
|
||||
|
@ -732,9 +733,10 @@ export class HubConnection {
|
|||
this.logger.log(LogLevel.Debug, "Connection left the reconnecting state during reconnect attempt. Done reconnecting.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime);
|
||||
retryError = e instanceof Error ? e : new Error(e.toString());
|
||||
nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);
|
||||
}
|
||||
}
|
||||
|
||||
this.logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);
|
||||
|
@ -742,11 +744,15 @@ export class HubConnection {
|
|||
this.completeClose();
|
||||
}
|
||||
|
||||
private getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number) {
|
||||
private getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number, retryReason: Error) {
|
||||
try {
|
||||
return this.reconnectPolicy!.nextRetryDelayInMilliseconds(previousRetryCount, elapsedMilliseconds);
|
||||
return this.reconnectPolicy!.nextRetryDelayInMilliseconds({
|
||||
elapsedMilliseconds,
|
||||
previousRetryCount,
|
||||
retryReason,
|
||||
});
|
||||
} catch (e) {
|
||||
this.logger.log(LogLevel.Error, `IReconnectPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);
|
||||
this.logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import { HubConnection } from "./HubConnection";
|
|||
import { IHttpConnectionOptions } from "./IHttpConnectionOptions";
|
||||
import { IHubProtocol } from "./IHubProtocol";
|
||||
import { ILogger, LogLevel } from "./ILogger";
|
||||
import { IReconnectPolicy } from "./IReconnectPolicy";
|
||||
import { IRetryPolicy } from "./IRetryPolicy";
|
||||
import { HttpTransportType } from "./ITransport";
|
||||
import { JsonHubProtocol } from "./JsonHubProtocol";
|
||||
import { NullLogger } from "./Loggers";
|
||||
|
@ -51,7 +51,7 @@ export class HubConnectionBuilder {
|
|||
|
||||
/** If defined, this indicates the client should automatically attempt to reconnect if the connection is lost. */
|
||||
/** @internal */
|
||||
public reconnectPolicy?: IReconnectPolicy;
|
||||
public reconnectPolicy?: IRetryPolicy;
|
||||
|
||||
/** Configures console logging for the {@link @aspnet/signalr.HubConnection}.
|
||||
*
|
||||
|
@ -164,10 +164,10 @@ export class HubConnectionBuilder {
|
|||
|
||||
/** Configures the {@link @aspnet/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.
|
||||
*
|
||||
* @param {IReconnectPolicy} reconnectPolicy An {@link @aspnet/signalR.IReconnectPolicy} that controls the timing and number of reconnect attempts.
|
||||
* @param {IRetryPolicy} reconnectPolicy An {@link @aspnet/signalR.IRetryPolicy} that controls the timing and number of reconnect attempts.
|
||||
*/
|
||||
public withAutomaticReconnect(reconnectPolicy: IReconnectPolicy): HubConnectionBuilder;
|
||||
public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IReconnectPolicy): HubConnectionBuilder {
|
||||
public withAutomaticReconnect(reconnectPolicy: IRetryPolicy): HubConnectionBuilder;
|
||||
public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IRetryPolicy): HubConnectionBuilder {
|
||||
if (this.reconnectPolicy) {
|
||||
throw new Error("A reconnectPolicy has already been set.");
|
||||
}
|
||||
|
|
|
@ -1,15 +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.
|
||||
|
||||
/** An abstraction that controls when the client attempts to reconnect and how many times it does so. */
|
||||
export interface IReconnectPolicy {
|
||||
/** Called after the transport loses the connection.
|
||||
*
|
||||
* @param {number} previousRetryCount The number of consecutive failed reconnect attempts so far.
|
||||
*
|
||||
* @param {number} elapsedMilliseconds The amount of time in milliseconds spent reconnecting so far.
|
||||
*
|
||||
* @returns {number | null} The amount of time in milliseconds to wait before the next reconnect attempt. `null` tells the client to stop retrying and close.
|
||||
*/
|
||||
nextRetryDelayInMilliseconds(previousRetryCount: number, elapsedMilliseconds: number): number | null;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// 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.
|
||||
|
||||
/** An abstraction that controls when the client attempts to reconnect and how many times it does so. */
|
||||
export interface IRetryPolicy {
|
||||
/** Called after the transport loses the connection.
|
||||
*
|
||||
* @param {RetryContext} retryContext Details related to the retry event to help determine how long to wait for the next retry.
|
||||
*
|
||||
* @returns {number | null} The amount of time in milliseconds to wait before the next retry. `null` tells the client to stop retrying.
|
||||
*/
|
||||
nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null;
|
||||
}
|
||||
|
||||
export interface RetryContext {
|
||||
/**
|
||||
* The number of consecutive failed tries so far.
|
||||
*/
|
||||
readonly previousRetryCount: number;
|
||||
|
||||
/**
|
||||
* The amount of time in milliseconds spent retrying so far.
|
||||
*/
|
||||
readonly elapsedMilliseconds: number;
|
||||
|
||||
/**
|
||||
* The error that forced the upcoming retry.
|
||||
*/
|
||||
readonly retryReason: Error;
|
||||
}
|
|
@ -21,4 +21,4 @@ export { IStreamSubscriber, IStreamResult, ISubscription } from "./Stream";
|
|||
export { NullLogger } from "./Loggers";
|
||||
export { JsonHubProtocol } from "./JsonHubProtocol";
|
||||
export { Subject } from "./Subject";
|
||||
export { IReconnectPolicy } from "./IReconnectPolicy";
|
||||
export { IRetryPolicy, RetryContext } from "./IRetryPolicy";
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
import { DefaultReconnectPolicy } from "../src/DefaultReconnectPolicy";
|
||||
import { HubConnection, HubConnectionState } from "../src/HubConnection";
|
||||
import { RetryContext } from "../src/IRetryPolicy";
|
||||
import { JsonHubProtocol } from "../src/JsonHubProtocol";
|
||||
|
||||
import { VerifyLogger } from "./Common";
|
||||
|
@ -46,15 +47,17 @@ describe("auto reconnect", () => {
|
|||
|
||||
let lastRetryCount = -1;
|
||||
let lastElapsedMs = -1;
|
||||
let retryReason = null;
|
||||
let onreconnectingCount = 0;
|
||||
let onreconnectedCount = 0;
|
||||
let closeCount = 0;
|
||||
|
||||
const connection = new TestConnection();
|
||||
const hubConnection = HubConnection.create(connection, logger, new JsonHubProtocol(), {
|
||||
nextRetryDelayInMilliseconds(previousRetryCount: number, elapsedMilliseconds: number) {
|
||||
lastRetryCount = previousRetryCount;
|
||||
lastElapsedMs = elapsedMilliseconds;
|
||||
nextRetryDelayInMilliseconds(retryContext: RetryContext) {
|
||||
lastRetryCount = retryContext.previousRetryCount;
|
||||
lastElapsedMs = retryContext.elapsedMilliseconds;
|
||||
retryReason = retryContext.retryReason;
|
||||
nextRetryDelayCalledPromise.resolve();
|
||||
return 0;
|
||||
},
|
||||
|
@ -81,8 +84,11 @@ describe("auto reconnect", () => {
|
|||
return promise;
|
||||
};
|
||||
|
||||
const oncloseError = new Error("Connection lost");
|
||||
const continueRetryingError = new Error("Reconnect attempt failed");
|
||||
|
||||
// Typically this would be called by the transport
|
||||
connection.onclose!(new Error("Connection lost"));
|
||||
connection.onclose!(oncloseError);
|
||||
|
||||
await nextRetryDelayCalledPromise;
|
||||
nextRetryDelayCalledPromise = new PromiseSource();
|
||||
|
@ -90,17 +96,19 @@ describe("auto reconnect", () => {
|
|||
expect(hubConnection.state).toBe(HubConnectionState.Reconnecting);
|
||||
expect(lastRetryCount).toBe(0);
|
||||
expect(lastElapsedMs).toBe(0);
|
||||
expect(retryReason).toBe(oncloseError);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(0);
|
||||
|
||||
// Make sure the the Promise is "handled" immediately upon rejection or else this test fails.
|
||||
continueRetryingPromise.catch(() => { });
|
||||
continueRetryingPromise.reject(new Error("Reconnect attempt failed"));
|
||||
continueRetryingPromise.reject(continueRetryingError);
|
||||
await nextRetryDelayCalledPromise;
|
||||
|
||||
expect(lastRetryCount).toBe(1);
|
||||
expect(lastElapsedMs).toBeGreaterThanOrEqual(0);
|
||||
expect(retryReason).toBe(continueRetryingError);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(0);
|
||||
|
@ -133,18 +141,20 @@ describe("auto reconnect", () => {
|
|||
|
||||
let lastRetryCount = -1;
|
||||
let lastElapsedMs = -1;
|
||||
let retryReason = null;
|
||||
let onreconnectingCount = 0;
|
||||
let onreconnectedCount = 0;
|
||||
let closeCount = 0;
|
||||
|
||||
const connection = new TestConnection();
|
||||
const hubConnection = HubConnection.create(connection, logger, new JsonHubProtocol(), {
|
||||
nextRetryDelayInMilliseconds(previousRetryCount: number, elapsedMilliseconds: number) {
|
||||
lastRetryCount = previousRetryCount;
|
||||
lastElapsedMs = elapsedMilliseconds;
|
||||
nextRetryDelayInMilliseconds(retryContext: RetryContext) {
|
||||
lastRetryCount = retryContext.previousRetryCount;
|
||||
lastElapsedMs = retryContext.elapsedMilliseconds;
|
||||
retryReason = retryContext.retryReason;
|
||||
nextRetryDelayCalledPromise.resolve();
|
||||
|
||||
return previousRetryCount === 0 ? 0 : null;
|
||||
return retryContext.previousRetryCount === 0 ? 0 : null;
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -163,12 +173,15 @@ describe("auto reconnect", () => {
|
|||
|
||||
await hubConnection.start();
|
||||
|
||||
const oncloseError = new Error("Connection lost");
|
||||
const startError = new Error("Reconnect attempt failed");
|
||||
|
||||
connection.start = () => {
|
||||
return Promise.reject("Reconnect attempt failed");
|
||||
throw startError;
|
||||
};
|
||||
|
||||
// Typically this would be called by the transport
|
||||
connection.onclose!(new Error("Connection lost"));
|
||||
connection.onclose!(oncloseError);
|
||||
|
||||
await nextRetryDelayCalledPromise;
|
||||
nextRetryDelayCalledPromise = new PromiseSource();
|
||||
|
@ -176,6 +189,7 @@ describe("auto reconnect", () => {
|
|||
expect(hubConnection.state).toBe(HubConnectionState.Reconnecting);
|
||||
expect(lastRetryCount).toBe(0);
|
||||
expect(lastElapsedMs).toBe(0);
|
||||
expect(retryReason).toBe(oncloseError);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(0);
|
||||
|
@ -185,6 +199,7 @@ describe("auto reconnect", () => {
|
|||
expect(hubConnection.state).toBe(HubConnectionState.Disconnected);
|
||||
expect(lastRetryCount).toBe(1);
|
||||
expect(lastElapsedMs).toBeGreaterThanOrEqual(0);
|
||||
expect(retryReason).toBe(startError);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(1);
|
||||
|
@ -198,15 +213,17 @@ describe("auto reconnect", () => {
|
|||
|
||||
let lastRetryCount = -1;
|
||||
let lastElapsedMs = -1;
|
||||
let retryReason = null;
|
||||
let onreconnectingCount = 0;
|
||||
let onreconnectedCount = 0;
|
||||
let closeCount = 0;
|
||||
|
||||
const connection = new TestConnection();
|
||||
const hubConnection = HubConnection.create(connection, logger, new JsonHubProtocol(), {
|
||||
nextRetryDelayInMilliseconds(previousRetryCount: number, elapsedMilliseconds: number) {
|
||||
lastRetryCount = previousRetryCount;
|
||||
lastElapsedMs = elapsedMilliseconds;
|
||||
nextRetryDelayInMilliseconds(retryContext: RetryContext) {
|
||||
lastRetryCount = retryContext.previousRetryCount;
|
||||
lastElapsedMs = retryContext.elapsedMilliseconds;
|
||||
retryReason = retryContext.retryReason;
|
||||
nextRetryDelayCalledPromise.resolve();
|
||||
return 0;
|
||||
},
|
||||
|
@ -227,8 +244,11 @@ describe("auto reconnect", () => {
|
|||
|
||||
await hubConnection.start();
|
||||
|
||||
const oncloseError = new Error("Connection lost 1");
|
||||
const oncloseError2 = new Error("Connection lost 2");
|
||||
|
||||
// Typically this would be called by the transport
|
||||
connection.onclose!(new Error("Connection lost"));
|
||||
connection.onclose!(oncloseError);
|
||||
|
||||
await nextRetryDelayCalledPromise;
|
||||
nextRetryDelayCalledPromise = new PromiseSource();
|
||||
|
@ -236,6 +256,7 @@ describe("auto reconnect", () => {
|
|||
expect(hubConnection.state).toBe(HubConnectionState.Reconnecting);
|
||||
expect(lastRetryCount).toBe(0);
|
||||
expect(lastElapsedMs).toBe(0);
|
||||
expect(retryReason).toBe(oncloseError);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(0);
|
||||
|
@ -250,13 +271,14 @@ describe("auto reconnect", () => {
|
|||
expect(onreconnectedCount).toBe(1);
|
||||
expect(closeCount).toBe(0);
|
||||
|
||||
connection.onclose!(new Error("Connection lost"));
|
||||
connection.onclose!(oncloseError2);
|
||||
|
||||
await nextRetryDelayCalledPromise;
|
||||
|
||||
expect(hubConnection.state).toBe(HubConnectionState.Reconnecting);
|
||||
expect(lastRetryCount).toBe(0);
|
||||
expect(lastElapsedMs).toBe(0);
|
||||
expect(retryReason).toBe(oncloseError2);
|
||||
expect(onreconnectingCount).toBe(2);
|
||||
expect(onreconnectedCount).toBe(1);
|
||||
expect(closeCount).toBe(0);
|
||||
|
@ -362,6 +384,7 @@ describe("auto reconnect", () => {
|
|||
let nextRetryDelayCalledPromise = new PromiseSource();
|
||||
|
||||
let lastRetryCount = 0;
|
||||
let retryReason = null;
|
||||
let onreconnectingCount = 0;
|
||||
let onreconnectedCount = 0;
|
||||
let closeCount = 0;
|
||||
|
@ -369,8 +392,9 @@ describe("auto reconnect", () => {
|
|||
// Disable autoHandshake in TestConnection
|
||||
const connection = new TestConnection(false);
|
||||
const hubConnection = HubConnection.create(connection, logger, new JsonHubProtocol(), {
|
||||
nextRetryDelayInMilliseconds(previousRetryCount: number) {
|
||||
lastRetryCount = previousRetryCount;
|
||||
nextRetryDelayInMilliseconds(retryContext: RetryContext) {
|
||||
lastRetryCount = retryContext.previousRetryCount;
|
||||
retryReason = retryContext.retryReason;
|
||||
nextRetryDelayCalledPromise.resolve();
|
||||
return 0;
|
||||
},
|
||||
|
@ -400,14 +424,18 @@ describe("auto reconnect", () => {
|
|||
return Promise.resolve();
|
||||
};
|
||||
|
||||
const oncloseError = new Error("Connection lost 1");
|
||||
const oncloseError2 = new Error("Connection lost 2");
|
||||
|
||||
// Typically this would be called by the transport
|
||||
connection.onclose!(new Error("Connection lost"));
|
||||
connection.onclose!(oncloseError);
|
||||
|
||||
await nextRetryDelayCalledPromise;
|
||||
nextRetryDelayCalledPromise = new PromiseSource();
|
||||
|
||||
expect(hubConnection.state).toBe(HubConnectionState.Reconnecting);
|
||||
expect(lastRetryCount).toBe(0);
|
||||
expect(retryReason).toBe(oncloseError);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(0);
|
||||
|
@ -416,12 +444,13 @@ describe("auto reconnect", () => {
|
|||
replacedStartCalledPromise = new PromiseSource();
|
||||
|
||||
// Fail underlying connection during reconnect during handshake
|
||||
connection.onclose!(new Error("Connection lost"));
|
||||
connection.onclose!(oncloseError2);
|
||||
|
||||
await nextRetryDelayCalledPromise;
|
||||
|
||||
expect(hubConnection.state).toBe(HubConnectionState.Reconnecting);
|
||||
expect(lastRetryCount).toBe(1);
|
||||
expect(retryReason).toBe(oncloseError2);
|
||||
expect(onreconnectingCount).toBe(1);
|
||||
expect(onreconnectedCount).toBe(0);
|
||||
expect(closeCount).toBe(0);
|
||||
|
@ -461,8 +490,8 @@ describe("auto reconnect", () => {
|
|||
// Disable autoHandshake in TestConnection
|
||||
const connection = new TestConnection(false);
|
||||
const hubConnection = HubConnection.create(connection, logger, new JsonHubProtocol(), {
|
||||
nextRetryDelayInMilliseconds(previousRetryCount: number) {
|
||||
lastRetryCount = previousRetryCount;
|
||||
nextRetryDelayInMilliseconds(retryContext: RetryContext) {
|
||||
lastRetryCount = retryContext.previousRetryCount;
|
||||
nextRetryDelayCalledPromise.resolve();
|
||||
return 0;
|
||||
},
|
||||
|
|
|
@ -322,7 +322,13 @@ describe("HubConnectionBuilder", () => {
|
|||
|
||||
let retryCount = 0;
|
||||
for (const delay of DEFAULT_RETRY_DELAYS_IN_MILLISECONDS) {
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryCount++, 0)).toBe(delay);
|
||||
const retryContext = {
|
||||
previousRetryCount: retryCount++,
|
||||
elapsedMilliseconds: 0,
|
||||
retryReason: new Error(),
|
||||
};
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryContext)).toBe(delay);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -333,23 +339,47 @@ describe("HubConnectionBuilder", () => {
|
|||
|
||||
let retryCount = 0;
|
||||
for (const delay of customRetryDelays) {
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryCount++, 0)).toBe(delay);
|
||||
const retryContext = {
|
||||
previousRetryCount: retryCount++,
|
||||
elapsedMilliseconds: 0,
|
||||
retryReason: new Error(),
|
||||
};
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryContext)).toBe(delay);
|
||||
}
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryCount, 0)).toBe(null);
|
||||
const retryContextFinal = {
|
||||
previousRetryCount: retryCount++,
|
||||
elapsedMilliseconds: 0,
|
||||
retryReason: new Error(),
|
||||
};
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryContextFinal)).toBe(null);
|
||||
});
|
||||
|
||||
it("withAutomaticReconnect uses a custom IReconnectPolicy when provided", () => {
|
||||
it("withAutomaticReconnect uses a custom IRetryPolicy when provided", () => {
|
||||
const customRetryDelays = [127, 0, 0, 1];
|
||||
const builder = new HubConnectionBuilder()
|
||||
.withAutomaticReconnect(new DefaultReconnectPolicy(customRetryDelays));
|
||||
|
||||
let retryCount = 0;
|
||||
for (const delay of customRetryDelays) {
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryCount++, 0)).toBe(delay);
|
||||
const retryContext = {
|
||||
previousRetryCount: retryCount++,
|
||||
elapsedMilliseconds: 0,
|
||||
retryReason: new Error(),
|
||||
};
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryContext)).toBe(delay);
|
||||
}
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryCount, 0)).toBe(null);
|
||||
const retryContextFinal = {
|
||||
previousRetryCount: retryCount++,
|
||||
elapsedMilliseconds: 0,
|
||||
retryReason: new Error(),
|
||||
};
|
||||
|
||||
expect(builder.reconnectPolicy!.nextRetryDelayInMilliseconds(retryContextFinal)).toBe(null);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -762,7 +762,7 @@ namespace Microsoft.AspNetCore.SignalR.Protocol
|
|||
options.IgnoreNullValues = false;
|
||||
options.IgnoreReadOnlyProperties = false;
|
||||
options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
|
||||
options.PropertyNameCaseInsensitive = false;
|
||||
options.PropertyNameCaseInsensitive = true;
|
||||
options.MaxDepth = 64;
|
||||
options.DictionaryKeyPolicy = null;
|
||||
options.DefaultBufferSize = 16 * 1024;
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace Microsoft.AspNetCore.SignalR
|
|||
public partial class MessagePackHubProtocolOptions
|
||||
{
|
||||
public MessagePackHubProtocolOptions() { }
|
||||
public System.Collections.Generic.IList<MessagePack.IFormatterResolver> FormatterResolvers { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public System.Collections.Generic.IList<MessagePack.IFormatterResolver> FormatterResolvers { get { throw null; } set { } }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.SignalR.Protocol
|
||||
|
|
|
@ -9,6 +9,25 @@ namespace Microsoft.AspNetCore.SignalR
|
|||
{
|
||||
public class MessagePackHubProtocolOptions
|
||||
{
|
||||
public IList<IFormatterResolver> FormatterResolvers { get; set; } = MessagePackHubProtocol.CreateDefaultFormatterResolvers();
|
||||
private IList<IFormatterResolver> _formatterResolvers;
|
||||
|
||||
public IList<IFormatterResolver> FormatterResolvers
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_formatterResolvers == null)
|
||||
{
|
||||
// The default set of resolvers trigger a static constructor that throws on AOT environments.
|
||||
// This gives users the chance to use an AOT friendly formatter.
|
||||
_formatterResolvers = MessagePackHubProtocol.CreateDefaultFormatterResolvers();
|
||||
}
|
||||
|
||||
return _formatterResolvers;
|
||||
}
|
||||
set
|
||||
{
|
||||
_formatterResolvers = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -101,6 +101,26 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
|
|||
Assert.Equal(expectedMessage, message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReadCaseInsensitivePropertiesByDefault()
|
||||
{
|
||||
var input = Frame("{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StrIngProp\":\"test\",\"DoublePrOp\":3.14159,\"IntProp\":43,\"DateTimeProp\":\"2019-06-03T22:00:00\",\"NuLLProp\":null,\"ByteARRProp\":\"AgQG\"}}");
|
||||
|
||||
var binder = new TestBinder(null, typeof(TemporaryCustomObject));
|
||||
var data = new ReadOnlySequence<byte>(Encoding.UTF8.GetBytes(input));
|
||||
JsonHubProtocol.TryParseMessage(ref data, binder, out var message);
|
||||
|
||||
var streamItemMessage = Assert.IsType<StreamItemMessage>(message);
|
||||
Assert.Equal(new TemporaryCustomObject()
|
||||
{
|
||||
ByteArrProp = new byte[] { 2, 4, 6 },
|
||||
IntProp = 43,
|
||||
DoubleProp = 3.14159,
|
||||
StringProp = "test",
|
||||
DateTimeProp = DateTime.Parse("6/3/2019 10:00:00 PM")
|
||||
}, streamItemMessage.Item);
|
||||
}
|
||||
|
||||
public static IDictionary<string, JsonProtocolTestData> CustomProtocolTestData => new[]
|
||||
{
|
||||
new JsonProtocolTestData("InvocationMessage_HasFloatArgument", new InvocationMessage(null, "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
// 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;
|
||||
using Microsoft.AspNetCore.SignalR.Client;
|
||||
|
@ -29,7 +28,9 @@ namespace ClientSample
|
|||
public static async Task<int> ExecuteAsync(string baseUrl)
|
||||
{
|
||||
var uri = baseUrl == null ? new Uri("net.tcp://127.0.0.1:9001") : new Uri(baseUrl);
|
||||
|
||||
Console.WriteLine("Connecting to {0}", uri);
|
||||
|
||||
var connectionBuilder = new HubConnectionBuilder()
|
||||
.ConfigureLogging(logging =>
|
||||
{
|
||||
|
@ -52,88 +53,91 @@ namespace ClientSample
|
|||
|
||||
connectionBuilder.WithAutomaticReconnect();
|
||||
|
||||
using var closedTokenSource = new CancellationTokenSource();
|
||||
var connection = connectionBuilder.Build();
|
||||
|
||||
Console.CancelKeyPress += (sender, a) =>
|
||||
try
|
||||
{
|
||||
a.Cancel = true;
|
||||
connection.DisposeAsync().GetAwaiter().GetResult();
|
||||
};
|
||||
|
||||
// Set up handler
|
||||
connection.On<string>("Send", Console.WriteLine);
|
||||
|
||||
CancellationTokenSource closedTokenSource = null;
|
||||
|
||||
connection.Closed += e =>
|
||||
{
|
||||
// This should never be null by the time this fires
|
||||
closedTokenSource.Cancel();
|
||||
|
||||
Console.WriteLine("Connection closed...");
|
||||
return Task.CompletedTask;
|
||||
};
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
// Dispose the previous token
|
||||
closedTokenSource?.Dispose();
|
||||
|
||||
// Create a new token for this run
|
||||
closedTokenSource = new CancellationTokenSource();
|
||||
|
||||
// Connect to the server
|
||||
} while (!await ConnectAsync(connection));
|
||||
|
||||
Console.WriteLine("Connected to {0}", uri);
|
||||
|
||||
// Handle the connected connection
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
Console.CancelKeyPress += (sender, a) =>
|
||||
{
|
||||
a.Cancel = true;
|
||||
closedTokenSource.Cancel();
|
||||
connection.StopAsync().GetAwaiter().GetResult();
|
||||
};
|
||||
|
||||
// Set up handler
|
||||
connection.On<string>("Send", Console.WriteLine);
|
||||
|
||||
connection.Closed += e =>
|
||||
{
|
||||
Console.WriteLine("Connection closed...");
|
||||
closedTokenSource.Cancel();
|
||||
return Task.CompletedTask;
|
||||
};
|
||||
|
||||
if (!await ConnectAsync(connection, closedTokenSource.Token))
|
||||
{
|
||||
Console.WriteLine("Failed to establish a connection to '{0}' because the CancelKeyPress event fired first. Exiting...", uri);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Console.WriteLine("Connected to {0}", uri);
|
||||
|
||||
// Handle the connected connection
|
||||
while (true)
|
||||
{
|
||||
// If the underlying connection closes while waiting for user input, the user will not observe
|
||||
// the connection close aside from "Connection closed..." being printed to the console. That's
|
||||
// because cancelling Console.ReadLine() is a royal pain.
|
||||
var line = Console.ReadLine();
|
||||
|
||||
if (line == null || closedTokenSource.Token.IsCancellationRequested)
|
||||
{
|
||||
Console.WriteLine("Exiting...");
|
||||
break;
|
||||
}
|
||||
|
||||
await connection.InvokeAsync<object>("Send", line);
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
{
|
||||
// We're shutting down the client
|
||||
break;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Send could have failed because the connection closed
|
||||
// Continue to loop because we should be reconnecting.
|
||||
Console.WriteLine(ex);
|
||||
try
|
||||
{
|
||||
await connection.InvokeAsync<object>("Send", line);
|
||||
}
|
||||
catch when (closedTokenSource.IsCancellationRequested)
|
||||
{
|
||||
// We're shutting down the client
|
||||
Console.WriteLine("Failed to send '{0}' because the CancelKeyPress event fired first. Exiting...", line);
|
||||
break;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Send could have failed because the connection closed
|
||||
// Continue to loop because we should be reconnecting.
|
||||
Console.WriteLine(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
await connection.StopAsync();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static async Task<bool> ConnectAsync(HubConnection connection)
|
||||
private static async Task<bool> ConnectAsync(HubConnection connection, CancellationToken token)
|
||||
{
|
||||
// Keep trying to until we can start
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
await connection.StartAsync();
|
||||
await connection.StartAsync(token);
|
||||
return true;
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
catch when (token.IsCancellationRequested)
|
||||
{
|
||||
// Client side killed the connection
|
||||
return false;
|
||||
}
|
||||
catch (Exception)
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Failed to connect, trying again in 5000(ms)");
|
||||
|
||||
|
|
|
@ -331,6 +331,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.FailedInvokingHubMethod(_logger, hubMethodInvocationMessage.Target, ex);
|
||||
await SendInvocationError(hubMethodInvocationMessage.InvocationId, connection,
|
||||
ErrorMessageHelper.BuildErrorMessage($"An unexpected error occurred invoking '{hubMethodInvocationMessage.Target}' on the server.", ex, _enableDetailedErrors));
|
||||
return;
|
||||
|
|
|
@ -859,10 +859,17 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
|||
[InlineData(nameof(MethodHub.MethodThatYieldsFailedTask), false)]
|
||||
public async Task HubMethodCanThrowOrYieldFailedTask(string methodName, bool detailedErrors)
|
||||
{
|
||||
var hasErrorLog = false;
|
||||
bool ExpectedErrors(WriteContext writeContext)
|
||||
{
|
||||
return writeContext.LoggerName == "Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher" &&
|
||||
var expected = writeContext.LoggerName == "Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher" &&
|
||||
writeContext.EventId.Name == "FailedInvokingHubMethod";
|
||||
if (expected)
|
||||
{
|
||||
hasErrorLog = true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
using (StartVerifiableLog(ExpectedErrors))
|
||||
|
@ -898,6 +905,8 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
|||
await connectionHandlerTask.OrTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
Assert.True(hasErrorLog);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
@ -7,17 +7,20 @@ using System.Linq;
|
|||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNetCore.Certificates.Generation.Tests
|
||||
{
|
||||
public class CertificateManagerTests
|
||||
public class CertificateManagerTests : IClassFixture<CertFixture>
|
||||
{
|
||||
public CertificateManagerTests(ITestOutputHelper output)
|
||||
private CertFixture _fixture;
|
||||
private CertificateManager _manager => _fixture.Manager;
|
||||
|
||||
public CertificateManagerTests(ITestOutputHelper output, CertFixture fixture)
|
||||
{
|
||||
_fixture = fixture;
|
||||
Output = output;
|
||||
}
|
||||
|
||||
|
@ -25,122 +28,31 @@ namespace Microsoft.AspNetCore.Certificates.Generation.Tests
|
|||
|
||||
public ITestOutputHelper Output { get; }
|
||||
|
||||
[Fact(Skip = "True")]
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate_CreatesACertificate_WhenThereAreNoHttpsCertificates()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Arrange
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
const string CertificateName = nameof(EnsureCreateHttpsCertificate_CreatesACertificate_WhenThereAreNoHttpsCertificates) + ".cer";
|
||||
var manager = new CertificateManager();
|
||||
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
}
|
||||
|
||||
// Act
|
||||
// Act
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
var result = manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), CertificateName, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(EnsureCertificateResult.Succeeded, result);
|
||||
Assert.True(File.Exists(CertificateName));
|
||||
|
||||
var exportedCertificate = new X509Certificate2(File.ReadAllBytes(CertificateName));
|
||||
Assert.NotNull(exportedCertificate);
|
||||
Assert.False(exportedCertificate.HasPrivateKey);
|
||||
|
||||
var httpsCertificates = manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false);
|
||||
var httpsCertificate = Assert.Single(httpsCertificates, c => c.Subject == TestCertificateSubject);
|
||||
Assert.True(httpsCertificate.HasPrivateKey);
|
||||
Assert.Equal(TestCertificateSubject, httpsCertificate.Subject);
|
||||
Assert.Equal(TestCertificateSubject, httpsCertificate.Issuer);
|
||||
Assert.Equal("sha256RSA", httpsCertificate.SignatureAlgorithm.FriendlyName);
|
||||
Assert.Equal("1.2.840.113549.1.1.11", httpsCertificate.SignatureAlgorithm.Value);
|
||||
|
||||
Assert.Equal(now.LocalDateTime, httpsCertificate.NotBefore);
|
||||
Assert.Equal(now.AddYears(1).LocalDateTime, httpsCertificate.NotAfter);
|
||||
Assert.Contains(
|
||||
httpsCertificate.Extensions.OfType<X509Extension>(),
|
||||
e => e is X509BasicConstraintsExtension basicConstraints &&
|
||||
basicConstraints.Critical == true &&
|
||||
basicConstraints.CertificateAuthority == false &&
|
||||
basicConstraints.HasPathLengthConstraint == false &&
|
||||
basicConstraints.PathLengthConstraint == 0);
|
||||
|
||||
Assert.Contains(
|
||||
httpsCertificate.Extensions.OfType<X509Extension>(),
|
||||
e => e is X509KeyUsageExtension keyUsage &&
|
||||
keyUsage.Critical == true &&
|
||||
keyUsage.KeyUsages == (X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature));
|
||||
|
||||
Assert.Contains(
|
||||
httpsCertificate.Extensions.OfType<X509Extension>(),
|
||||
e => e is X509EnhancedKeyUsageExtension enhancedKeyUsage &&
|
||||
enhancedKeyUsage.Critical == true &&
|
||||
enhancedKeyUsage.EnhancedKeyUsages.OfType<Oid>().Single() is Oid keyUsage &&
|
||||
keyUsage.Value == "1.3.6.1.5.5.7.3.1");
|
||||
|
||||
// Subject alternative name
|
||||
Assert.Contains(
|
||||
httpsCertificate.Extensions.OfType<X509Extension>(),
|
||||
e => e.Critical == true &&
|
||||
e.Oid.Value == "2.5.29.17");
|
||||
|
||||
// ASP.NET HTTPS Development certificate extension
|
||||
Assert.Contains(
|
||||
httpsCertificate.Extensions.OfType<X509Extension>(),
|
||||
e => e.Critical == false &&
|
||||
e.Oid.Value == "1.3.6.1.4.1.311.84.1.1" &&
|
||||
Encoding.ASCII.GetString(e.RawData) == "ASP.NET Core HTTPS development certificate");
|
||||
|
||||
Assert.Equal(httpsCertificate.GetCertHashString(), exportedCertificate.GetCertHashString());
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Output.WriteLine(e.Message);
|
||||
ListCertificates(Output);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate2_CreatesACertificate_WhenThereAreNoHttpsCertificates()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Arrange
|
||||
const string CertificateName = nameof(EnsureCreateHttpsCertificate_CreatesACertificate_WhenThereAreNoHttpsCertificates) + ".cer";
|
||||
var manager = new CertificateManager();
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
}
|
||||
|
||||
// Act
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
var result = manager.EnsureAspNetCoreHttpsDevelopmentCertificate2(now, now.AddYears(1), CertificateName, trust: false, subject: TestCertificateSubject);
|
||||
var result = _manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), CertificateName, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(EnsureCertificateResult.Succeeded, result.ResultCode);
|
||||
Assert.NotNull(result.Diagnostics);
|
||||
Assert.NotEmpty(result.Diagnostics.Messages);
|
||||
Assert.Empty(result.Diagnostics.Exceptions);
|
||||
|
||||
Assert.True(File.Exists(CertificateName));
|
||||
|
||||
var exportedCertificate = new X509Certificate2(File.ReadAllBytes(CertificateName));
|
||||
Assert.NotNull(exportedCertificate);
|
||||
Assert.False(exportedCertificate.HasPrivateKey);
|
||||
|
||||
var httpsCertificates = manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false);
|
||||
var httpsCertificates = _manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false);
|
||||
var httpsCertificate = Assert.Single(httpsCertificates, c => c.Subject == TestCertificateSubject);
|
||||
Assert.True(httpsCertificate.HasPrivateKey);
|
||||
Assert.Equal(TestCertificateSubject, httpsCertificate.Subject);
|
||||
|
@ -182,7 +94,7 @@ namespace Microsoft.AspNetCore.Certificates.Generation.Tests
|
|||
httpsCertificate.Extensions.OfType<X509Extension>(),
|
||||
e => e.Critical == false &&
|
||||
e.Oid.Value == "1.3.6.1.4.1.311.84.1.1" &&
|
||||
Encoding.ASCII.GetString(e.RawData) == "ASP.NET Core HTTPS development certificate");
|
||||
e.RawData[0] == _manager.AspNetHttpsCertificateVersion);
|
||||
|
||||
Assert.Equal(httpsCertificate.GetCertHashString(), exportedCertificate.GetCertHashString());
|
||||
|
||||
|
@ -211,32 +123,27 @@ namespace Microsoft.AspNetCore.Certificates.Generation.Tests
|
|||
}
|
||||
}
|
||||
|
||||
[Fact(Skip = "true")]
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate_DoesNotCreateACertificate_WhenThereIsAnExistingHttpsCertificates()
|
||||
{
|
||||
// Arrange
|
||||
const string CertificateName = nameof(EnsureCreateHttpsCertificate_DoesNotCreateACertificate_WhenThereIsAnExistingHttpsCertificates) + ".pfx";
|
||||
var certificatePassword = Guid.NewGuid().ToString();
|
||||
|
||||
var manager = new CertificateManager();
|
||||
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
}
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject);
|
||||
_manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
var httpsCertificate = manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false).Single(c => c.Subject == TestCertificateSubject);
|
||||
var httpsCertificate = _manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false).Single(c => c.Subject == TestCertificateSubject);
|
||||
|
||||
// Act
|
||||
var result = manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), CertificateName, trust: false, includePrivateKey: true, password: certificatePassword, subject: TestCertificateSubject);
|
||||
var result = _manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), CertificateName, trust: false, includePrivateKey: true, password: certificatePassword, subject: TestCertificateSubject);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(EnsureCertificateResult.ValidCertificatePresent, result);
|
||||
Assert.Equal(EnsureCertificateResult.ValidCertificatePresent, result.ResultCode);
|
||||
Assert.True(File.Exists(CertificateName));
|
||||
|
||||
var exportedCertificate = new X509Certificate2(File.ReadAllBytes(CertificateName), certificatePassword);
|
||||
|
@ -247,39 +154,125 @@ namespace Microsoft.AspNetCore.Certificates.Generation.Tests
|
|||
Assert.Equal(httpsCertificate.GetCertHashString(), exportedCertificate.GetCertHashString());
|
||||
}
|
||||
|
||||
[Fact(Skip = "Requires user interaction")]
|
||||
public void EnsureAspNetCoreHttpsDevelopmentCertificate_ReturnsCorrectResult_WhenUserCancelsTrustStepOnWindows()
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate_ReturnsExpiredCertificateIfVersionIsIncorrect()
|
||||
{
|
||||
var manager = new CertificateManager();
|
||||
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
}
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
var trustFailed = manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: true, subject: TestCertificateSubject);
|
||||
_manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
Assert.Equal(EnsureCertificateResult.UserCancelledTrustStep, trustFailed);
|
||||
_manager.AspNetHttpsCertificateVersion = 2;
|
||||
|
||||
var httpsCertificateList = _manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: true);
|
||||
Assert.Empty(httpsCertificateList);
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate_ReturnsExpiredCertificateForEmptyVersionField()
|
||||
{
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
_manager.AspNetHttpsCertificateVersion = 0;
|
||||
_manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
_manager.AspNetHttpsCertificateVersion = 1;
|
||||
|
||||
var httpsCertificateList = _manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: true);
|
||||
Assert.Empty(httpsCertificateList);
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate_ReturnsValidIfVersionIsZero()
|
||||
{
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
_manager.AspNetHttpsCertificateVersion = 0;
|
||||
_manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
var httpsCertificateList = _manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: true);
|
||||
Assert.NotEmpty(httpsCertificateList);
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/6721")]
|
||||
public void EnsureCreateHttpsCertificate_ReturnValidIfCertIsNewer()
|
||||
{
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
_manager.AspNetHttpsCertificateVersion = 2;
|
||||
_manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject);
|
||||
|
||||
_manager.AspNetHttpsCertificateVersion = 1;
|
||||
var httpsCertificateList = _manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: true);
|
||||
Assert.NotEmpty(httpsCertificateList);
|
||||
}
|
||||
|
||||
[Fact(Skip = "Requires user interaction")]
|
||||
public void EnsureAspNetCoreHttpsDevelopmentCertificate_ReturnsCorrectResult_WhenUserCancelsTrustStepOnWindows()
|
||||
{
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
var trustFailed = _manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: true, subject: TestCertificateSubject);
|
||||
|
||||
Assert.Equal(EnsureCertificateResult.UserCancelledTrustStep, trustFailed.ResultCode);
|
||||
}
|
||||
|
||||
[Fact(Skip = "Requires user interaction")]
|
||||
public void EnsureAspNetCoreHttpsDevelopmentCertificate_CanRemoveCertificates()
|
||||
{
|
||||
var manager = new CertificateManager();
|
||||
_fixture.CleanupCertificates();
|
||||
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset);
|
||||
manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: true, subject: TestCertificateSubject);
|
||||
_manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: true, subject: TestCertificateSubject);
|
||||
|
||||
manager.CleanupHttpsCertificates(TestCertificateSubject);
|
||||
_manager.CleanupHttpsCertificates(TestCertificateSubject);
|
||||
|
||||
Assert.Empty(manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false).Where(c => c.Subject == TestCertificateSubject));
|
||||
Assert.Empty(_manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false).Where(c => c.Subject == TestCertificateSubject));
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
Assert.Empty(manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, isValid: false).Where(c => c.Subject == TestCertificateSubject));
|
||||
Assert.Empty(_manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, isValid: false).Where(c => c.Subject == TestCertificateSubject));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class CertFixture : IDisposable
|
||||
{
|
||||
public const string TestCertificateSubject = "CN=aspnet.test";
|
||||
|
||||
public CertFixture()
|
||||
{
|
||||
Manager = new CertificateManager();
|
||||
|
||||
CleanupCertificates();
|
||||
}
|
||||
|
||||
internal CertificateManager Manager { get; set; }
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
CleanupCertificates();
|
||||
}
|
||||
|
||||
internal void CleanupCertificates()
|
||||
{
|
||||
Manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
Manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-watch", "dotnet-watc
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-watch.Tests", "dotnet-watch\test\dotnet-watch.Tests.csproj", "{63F7E822-D1E2-4C41-8ABF-60B9E3A9C54C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dev-certs", "dotnet-dev-certs\src\dotnet-dev-certs.csproj", "{0D6D5693-7E0C-4FE8-B4AA-21207B2650AA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat", "FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj", "{7BBDBDA2-299F-4C36-8338-23C525901DE0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests", "FirstRunCertGenerator\test\Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj", "{1EC6FA27-40A5-433F-8CA1-636E7ED8863E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -21,6 +27,18 @@ Global
|
|||
{63F7E822-D1E2-4C41-8ABF-60B9E3A9C54C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{63F7E822-D1E2-4C41-8ABF-60B9E3A9C54C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63F7E822-D1E2-4C41-8ABF-60B9E3A9C54C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0D6D5693-7E0C-4FE8-B4AA-21207B2650AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0D6D5693-7E0C-4FE8-B4AA-21207B2650AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0D6D5693-7E0C-4FE8-B4AA-21207B2650AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0D6D5693-7E0C-4FE8-B4AA-21207B2650AA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7BBDBDA2-299F-4C36-8338-23C525901DE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7BBDBDA2-299F-4C36-8338-23C525901DE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7BBDBDA2-299F-4C36-8338-23C525901DE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7BBDBDA2-299F-4C36-8338-23C525901DE0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1EC6FA27-40A5-433F-8CA1-636E7ED8863E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1EC6FA27-40A5-433F-8CA1-636E7ED8863E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1EC6FA27-40A5-433F-8CA1-636E7ED8863E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1EC6FA27-40A5-433F-8CA1-636E7ED8863E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
@ -81,6 +81,7 @@ namespace Microsoft.AspNetCore.DeveloperCertificates.Tools
|
|||
(check.HasValue() && (exportPath.HasValue() || password.HasValue() || clean.HasValue())))
|
||||
{
|
||||
reporter.Error(@"Incompatible set of flags. Sample usages
|
||||
'dotnet dev-certs https'
|
||||
'dotnet dev-certs https --clean'
|
||||
'dotnet dev-certs https --check --trust'
|
||||
'dotnet dev-certs https -ep ./certificate.pfx -p password --trust'");
|
||||
|
@ -133,7 +134,7 @@ namespace Microsoft.AspNetCore.DeveloperCertificates.Tools
|
|||
}
|
||||
|
||||
manager.CleanupHttpsCertificates();
|
||||
reporter.Verbose("HTTPS development certificates successfully removed from the machine.");
|
||||
reporter.Output("HTTPS development certificates successfully removed from the machine.");
|
||||
return Success;
|
||||
}
|
||||
catch(Exception e)
|
||||
|
@ -152,12 +153,12 @@ namespace Microsoft.AspNetCore.DeveloperCertificates.Tools
|
|||
var certificates = certificateManager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: true);
|
||||
if (certificates.Count == 0)
|
||||
{
|
||||
reporter.Verbose("No valid certificate found.");
|
||||
reporter.Output("No valid certificate found.");
|
||||
return ErrorNoValidCertificateFound;
|
||||
}
|
||||
else
|
||||
{
|
||||
reporter.Verbose("A valid certificate was found.");
|
||||
reporter.Output("A valid certificate was found.");
|
||||
}
|
||||
|
||||
if (trust != null && trust.HasValue())
|
||||
|
@ -166,13 +167,13 @@ namespace Microsoft.AspNetCore.DeveloperCertificates.Tools
|
|||
var trustedCertificates = certificateManager.ListCertificates(CertificatePurpose.HTTPS, store, StoreLocation.CurrentUser, isValid: true);
|
||||
if (!certificates.Any(c => certificateManager.IsTrusted(c)))
|
||||
{
|
||||
reporter.Verbose($@"The following certificates were found, but none of them is trusted:
|
||||
reporter.Output($@"The following certificates were found, but none of them is trusted:
|
||||
{string.Join(Environment.NewLine, certificates.Select(c => $"{c.Subject} - {c.Thumbprint}"))}");
|
||||
return ErrorCertificateNotTrusted;
|
||||
}
|
||||
else
|
||||
{
|
||||
reporter.Verbose("A trusted certificate was found.");
|
||||
reporter.Output("A trusted certificate was found.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -207,7 +208,9 @@ namespace Microsoft.AspNetCore.DeveloperCertificates.Tools
|
|||
password.HasValue(),
|
||||
password.Value());
|
||||
|
||||
switch (result)
|
||||
reporter.Verbose(string.Join(Environment.NewLine, result.Diagnostics.Messages));
|
||||
|
||||
switch (result.ResultCode)
|
||||
{
|
||||
case EnsureCertificateResult.Succeeded:
|
||||
reporter.Output("The HTTPS developer certificate was generated successfully.");
|
||||
|
|
Загрузка…
Ссылка в новой задаче