Merge branch 'master' into master
This commit is contained in:
commit
887872dac0
|
|
@ -56,5 +56,10 @@ Later on, this will be checked using this condition:
|
||||||
Microsoft.AspNetCore.AzureAppServices.SiteExtension;
|
Microsoft.AspNetCore.AzureAppServices.SiteExtension;
|
||||||
</PackagesInPatch>
|
</PackagesInPatch>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(VersionPrefix)' == '2.2.6' ">
|
||||||
|
<PackagesInPatch>
|
||||||
|
Microsoft.AspNetCore.Mvc.Api.Analyzers;
|
||||||
|
</PackagesInPatch>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -57,340 +57,340 @@
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
<Sha>b9c9b57de1ba41f75427db0a51b2e897d0354656</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App" Pinned="true">
|
<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>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
|
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Text.Json" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Text.Json" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview6-27730-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview6-27803-13" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>63abc77da6d99470caa5bfa0465afe244105e595</Sha>
|
<Sha>372355272004e08c035c61077f5d6ca4d8f9cd22</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview6-27730-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview6-27803-13" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>63abc77da6d99470caa5bfa0465afe244105e595</Sha>
|
<Sha>372355272004e08c035c61077f5d6ca4d8f9cd22</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview6-27730-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview6-27803-13" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>63abc77da6d99470caa5bfa0465afe244105e595</Sha>
|
<Sha>372355272004e08c035c61077f5d6ca4d8f9cd22</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
</ProductDependencies>
|
</ProductDependencies>
|
||||||
<ToolsetDependencies>
|
<ToolsetDependencies>
|
||||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview6.19303.8" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
|
<Sha>d47cae744ddfb625db8e391cecb261e4c3d7bb1c</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19302.2">
|
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19302.2">
|
||||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||||
|
|
@ -404,9 +404,9 @@
|
||||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||||
<Sha>e6a5d5f970bb872451c6310ae34eda31041fb552</Sha>
|
<Sha>e6a5d5f970bb872451c6310ae34eda31041fb552</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19303.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19304.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>6e92fcad99b6a6e882ac8dc5ad817b558f603597</Sha>
|
<Sha>04a5ac947976fc17e701ffd4cd406b589e14b1e5</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
</ToolsetDependencies>
|
</ToolsetDependencies>
|
||||||
</Dependencies>
|
</Dependencies>
|
||||||
|
|
|
||||||
|
|
@ -23,95 +23,95 @@
|
||||||
<!-- Packages from dotnet/arcade -->
|
<!-- Packages from dotnet/arcade -->
|
||||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19302.2</MicrosoftDotNetGenAPIPackageVersion>
|
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19302.2</MicrosoftDotNetGenAPIPackageVersion>
|
||||||
<!-- Packages from dotnet/core-setup -->
|
<!-- Packages from dotnet/core-setup -->
|
||||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27730-01</MicrosoftExtensionsDependencyModelPackageVersion>
|
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27803-13</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27730-01</MicrosoftNETCoreAppPackageVersion>
|
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27803-13</MicrosoftNETCoreAppPackageVersion>
|
||||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview6-27730-01</NETStandardLibraryRefPackageVersion>
|
<NETStandardLibraryRefPackageVersion>2.1.0-preview6-27803-13</NETStandardLibraryRefPackageVersion>
|
||||||
<!-- Packages from dotnet/corefx -->
|
<!-- Packages from dotnet/corefx -->
|
||||||
<MicrosoftCSharpPackageVersion>4.6.0-preview6.19279.8</MicrosoftCSharpPackageVersion>
|
<MicrosoftCSharpPackageVersion>4.6.0-preview6.19303.8</MicrosoftCSharpPackageVersion>
|
||||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview6.19279.8</MicrosoftWin32RegistryPackageVersion>
|
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview6.19303.8</MicrosoftWin32RegistryPackageVersion>
|
||||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview6.19279.8</SystemComponentModelAnnotationsPackageVersion>
|
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview6.19303.8</SystemComponentModelAnnotationsPackageVersion>
|
||||||
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
|
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
|
||||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview6.19279.8</SystemDiagnosticsEventLogPackageVersion>
|
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview6.19303.8</SystemDiagnosticsEventLogPackageVersion>
|
||||||
<SystemIOPipelinesPackageVersion>4.6.0-preview6.19279.8</SystemIOPipelinesPackageVersion>
|
<SystemIOPipelinesPackageVersion>4.6.0-preview6.19303.8</SystemIOPipelinesPackageVersion>
|
||||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview6.19279.8</SystemNetHttpWinHttpHandlerPackageVersion>
|
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview6.19303.8</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview6.19279.8</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview6.19303.8</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview6.19279.8</SystemReflectionMetadataPackageVersion>
|
<SystemReflectionMetadataPackageVersion>1.7.0-preview6.19303.8</SystemReflectionMetadataPackageVersion>
|
||||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview6.19279.8</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview6.19303.8</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview6.19279.8</SystemSecurityCryptographyCngPackageVersion>
|
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview6.19303.8</SystemSecurityCryptographyCngPackageVersion>
|
||||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview6.19279.8</SystemSecurityCryptographyPkcsPackageVersion>
|
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview6.19303.8</SystemSecurityCryptographyPkcsPackageVersion>
|
||||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview6.19279.8</SystemSecurityCryptographyXmlPackageVersion>
|
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview6.19303.8</SystemSecurityCryptographyXmlPackageVersion>
|
||||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview6.19279.8</SystemSecurityPermissionsPackageVersion>
|
<SystemSecurityPermissionsPackageVersion>4.6.0-preview6.19303.8</SystemSecurityPermissionsPackageVersion>
|
||||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview6.19279.8</SystemSecurityPrincipalWindowsPackageVersion>
|
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview6.19303.8</SystemSecurityPrincipalWindowsPackageVersion>
|
||||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview6.19279.8</SystemServiceProcessServiceControllerPackageVersion>
|
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview6.19303.8</SystemServiceProcessServiceControllerPackageVersion>
|
||||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview6.19279.8</SystemTextEncodingsWebPackageVersion>
|
<SystemTextEncodingsWebPackageVersion>4.6.0-preview6.19303.8</SystemTextEncodingsWebPackageVersion>
|
||||||
<SystemTextJsonPackageVersion>4.6.0-preview6.19279.8</SystemTextJsonPackageVersion>
|
<SystemTextJsonPackageVersion>4.6.0-preview6.19303.8</SystemTextJsonPackageVersion>
|
||||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview6.19279.8</SystemThreadingChannelsPackageVersion>
|
<SystemThreadingChannelsPackageVersion>4.6.0-preview6.19303.8</SystemThreadingChannelsPackageVersion>
|
||||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview6.19279.8</MicrosoftNETCorePlatformsPackageVersion>
|
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview6.19303.8</MicrosoftNETCorePlatformsPackageVersion>
|
||||||
<!-- Packages from aspnet/Blazor -->
|
<!-- Packages from aspnet/Blazor -->
|
||||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19303.2</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19303.2</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||||
<!-- Packages from aspnet/Extensions -->
|
<!-- Packages from aspnet/Extensions -->
|
||||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview6.19303.2</InternalAspNetCoreAnalyzersPackageVersion>
|
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview6.19304.2</InternalAspNetCoreAnalyzersPackageVersion>
|
||||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview6.19303.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview6.19304.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview6.19303.2</MicrosoftAspNetCoreTestingPackageVersion>
|
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview6.19304.2</MicrosoftAspNetCoreTestingPackageVersion>
|
||||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationPackageVersion>
|
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsHostingPackageVersion>
|
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsHostingPackageVersion>
|
||||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsHttpPackageVersion>
|
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsHttpPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLocalizationPackageVersion>
|
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingPackageVersion>
|
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsOptionsPackageVersion>
|
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview6.19303.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview6.19304.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview6.19303.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview6.19304.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview6.19303.2</MicrosoftJSInteropPackageVersion>
|
<MicrosoftJSInteropPackageVersion>3.0.0-preview6.19304.2</MicrosoftJSInteropPackageVersion>
|
||||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview6.19303.2</MonoWebAssemblyInteropPackageVersion>
|
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview6.19304.2</MonoWebAssemblyInteropPackageVersion>
|
||||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||||
<dotnetefPackageVersion>3.0.0-preview7.19303.12</dotnetefPackageVersion>
|
<dotnetefPackageVersion>3.0.0-preview7.19303.12</dotnetefPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview7.19303.12</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||||
|
|
@ -180,9 +180,9 @@
|
||||||
<BenchmarkDotNetPackageVersion>0.10.13</BenchmarkDotNetPackageVersion>
|
<BenchmarkDotNetPackageVersion>0.10.13</BenchmarkDotNetPackageVersion>
|
||||||
<CastleCorePackageVersion>4.2.1</CastleCorePackageVersion>
|
<CastleCorePackageVersion>4.2.1</CastleCorePackageVersion>
|
||||||
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
|
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
|
||||||
<GoogleProtobufPackageVersion>3.7.0</GoogleProtobufPackageVersion>
|
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
|
||||||
<GrpcAspNetCoreServerPackageVersion>0.1.21-dev201905010701</GrpcAspNetCoreServerPackageVersion>
|
<GrpcAspNetCoreServerPackageVersion>0.1.21-pre1</GrpcAspNetCoreServerPackageVersion>
|
||||||
<GrpcToolsPackageVersion>1.20.0-pre3</GrpcToolsPackageVersion>
|
<GrpcToolsPackageVersion>1.21.0</GrpcToolsPackageVersion>
|
||||||
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview3.4</IdentityServer4AspNetIdentityPackageVersion>
|
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview3.4</IdentityServer4AspNetIdentityPackageVersion>
|
||||||
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkPackageVersion>
|
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkPackageVersion>
|
||||||
<IdentityServer4PackageVersion>3.0.0-preview3.4</IdentityServer4PackageVersion>
|
<IdentityServer4PackageVersion>3.0.0-preview3.4</IdentityServer4PackageVersion>
|
||||||
|
|
|
||||||
|
|
@ -13,5 +13,9 @@
|
||||||
<assembly fullname="System">
|
<assembly fullname="System">
|
||||||
<!-- Without this, [Required(typeof(bool), "true", "true", ErrorMessage = "...")] fails -->
|
<!-- Without this, [Required(typeof(bool), "true", "true", ErrorMessage = "...")] fails -->
|
||||||
<type fullname="System.ComponentModel.BooleanConverter" />
|
<type fullname="System.ComponentModel.BooleanConverter" />
|
||||||
|
|
||||||
|
<!-- TypeConverters are only used through reflection. These are two built-in TypeConverters that are useful. -->
|
||||||
|
<type fullname="System.ComponentModel.GuidConverter" />
|
||||||
|
<type fullname="System.ComponentModel.TimeSpanConverter" />
|
||||||
</assembly>
|
</assembly>
|
||||||
</linker>
|
</linker>
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int> setter, int existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int> setter, int existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long> setter, long existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long> setter, long existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<bool?> setter, bool? existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<bool?> setter, bool? existingValue) { throw null; }
|
||||||
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime?> setter, System.DateTime? existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal?> setter, decimal? existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal?> setter, decimal? existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double?> setter, double? existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double?> setter, double? existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int?> setter, int? existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int?> setter, int? existingValue) { throw null; }
|
||||||
|
|
@ -162,7 +163,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float?> setter, float? existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float?> setter, float? existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float> setter, float existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float> setter, float existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<string> setter, string existingValue) { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<string> setter, string existingValue) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder<T>(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<T> setter, T existingValue) where T : struct, System.Enum { throw null; }
|
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.UIChangeEventArgs> CreateBinder<T>(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<T> setter, T existingValue) { throw null; }
|
||||||
}
|
}
|
||||||
public static partial class EventCallbackFactoryUIEventArgsExtensions
|
public static partial class EventCallbackFactoryUIEventArgsExtensions
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,27 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Components
|
namespace Microsoft.AspNetCore.Components
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Contains extension methods for two-way binding using <see cref="EventCallback"/>. For internal use only.
|
/// Contains extension methods for two-way binding using <see cref="EventCallback"/>. For internal use only.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
//
|
||||||
|
// NOTE: for number parsing, the HTML5 spec dictates that <input type="number"> the DOM will represent
|
||||||
|
// number values as floating point numbers using `.` as the period separator. This is NOT culture senstive.
|
||||||
|
// Put another way, the user might see `,` as their decimal separator, but the value available in events
|
||||||
|
// to JS code is always simpilar to what .NET parses with InvariantCulture.
|
||||||
|
//
|
||||||
|
// See: https://www.w3.org/TR/html5/sec-forms.html#number-state-typenumber
|
||||||
|
// See: https://www.w3.org/TR/html5/infrastructure.html#valid-floating-point-number
|
||||||
|
//
|
||||||
|
// For now we're not necessarily handling this correctly since we parse the same way for number and text.
|
||||||
public static class EventCallbackFactoryBinderExtensions
|
public static class EventCallbackFactoryBinderExtensions
|
||||||
{
|
{
|
||||||
private delegate bool BindConverter<T>(object obj, out T value);
|
private delegate bool BindConverter<T>(object obj, out T value);
|
||||||
|
|
@ -53,7 +67,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!int.TryParse(text, out var converted))
|
if (!int.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -72,7 +86,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!int.TryParse(text, out var converted))
|
if (!int.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -94,7 +108,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!long.TryParse(text, out var converted))
|
if (!long.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -113,7 +127,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!long.TryParse(text, out var converted))
|
if (!long.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -135,7 +149,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!float.TryParse(text, out var converted))
|
if (!float.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -154,7 +168,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!float.TryParse(text, out var converted))
|
if (!float.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -176,7 +190,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!double.TryParse(text, out var converted))
|
if (!double.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -195,7 +209,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!double.TryParse(text, out var converted))
|
if (!double.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -217,7 +231,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!decimal.TryParse(text, out var converted))
|
if (!decimal.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -236,7 +250,7 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!decimal.TryParse(text, out var converted))
|
if (!decimal.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -246,28 +260,83 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class EnumConverter<T> where T : struct, Enum
|
private static BindConverter<DateTime> ConvertToDateTime = ConvertToDateTimeCore;
|
||||||
|
private static BindConverter<DateTime?> ConvertToNullableDateTime = ConvertToNullableDateTimeCore;
|
||||||
|
|
||||||
|
private static bool ConvertToDateTimeCore(object obj, out DateTime value)
|
||||||
{
|
{
|
||||||
public static readonly BindConverter<T> Convert = ConvertCore;
|
var text = (string)obj;
|
||||||
|
if (string.IsNullOrEmpty(text))
|
||||||
public static bool ConvertCore(object obj, out T value)
|
|
||||||
{
|
{
|
||||||
var text = (string)obj;
|
value = default;
|
||||||
if (string.IsNullOrEmpty(text))
|
return false;
|
||||||
{
|
}
|
||||||
value = default;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Enum.TryParse<T>(text, out var converted))
|
if (!DateTime.TryParse(text, CultureInfo.CurrentCulture, DateTimeStyles.None, out var converted))
|
||||||
{
|
{
|
||||||
value = default;
|
value = default;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
value = converted;
|
value = converted;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ConvertToNullableDateTimeCore(object obj, out DateTime? value)
|
||||||
|
{
|
||||||
|
var text = (string)obj;
|
||||||
|
if (string.IsNullOrEmpty(text))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!DateTime.TryParse(text, CultureInfo.CurrentCulture, DateTimeStyles.None, out var converted))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = converted;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ConvertToEnum<T>(object obj, out T value) where T : struct, Enum
|
||||||
|
{
|
||||||
|
var text = (string)obj;
|
||||||
|
if (string.IsNullOrEmpty(text))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Enum.TryParse<T>(text, out var converted))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = converted;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ConvertToNullableEnum<T>(object obj, out Nullable<T> value) where T : struct, Enum
|
||||||
|
{
|
||||||
|
var text = (string)obj;
|
||||||
|
if (string.IsNullOrEmpty(text))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Enum.TryParse<T>(text, out var converted))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = converted;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -284,7 +353,6 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Action<string> setter,
|
Action<string> setter,
|
||||||
string existingValue)
|
string existingValue)
|
||||||
{
|
{
|
||||||
;
|
|
||||||
return CreateBinderCore<string>(factory, receiver, setter, ConvertToString);
|
return CreateBinderCore<string>(factory, receiver, setter, ConvertToString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -489,15 +557,6 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Action<decimal?> setter,
|
Action<decimal?> setter,
|
||||||
decimal? existingValue)
|
decimal? existingValue)
|
||||||
{
|
{
|
||||||
Func<object, decimal?> converter = (obj) =>
|
|
||||||
{
|
|
||||||
if (decimal.TryParse((string)obj, out var value))
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
return CreateBinderCore<decimal?>(factory, receiver, setter, ConvertToNullableDecimal);
|
return CreateBinderCore<decimal?>(factory, receiver, setter, ConvertToNullableDecimal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -515,28 +574,24 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Action<DateTime> setter,
|
Action<DateTime> setter,
|
||||||
DateTime existingValue)
|
DateTime existingValue)
|
||||||
{
|
{
|
||||||
// Avoiding CreateBinderCore so we can avoid an extra allocating lambda
|
return CreateBinderCore<DateTime>(factory, receiver, setter, ConvertToDateTime);
|
||||||
// when a format is used.
|
}
|
||||||
Action<UIChangeEventArgs> callback = (e) =>
|
|
||||||
{
|
|
||||||
DateTime value = default;
|
|
||||||
var converted = false;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
value = ConvertDateTime(e.Value, format: null);
|
|
||||||
converted = true;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// See comments in CreateBinderCore
|
/// <summary>
|
||||||
if (converted)
|
/// For internal use only.
|
||||||
{
|
/// </summary>
|
||||||
setter(value);
|
/// <param name="factory"></param>
|
||||||
}
|
/// <param name="receiver"></param>
|
||||||
};
|
/// <param name="setter"></param>
|
||||||
return factory.Create<UIChangeEventArgs>(receiver, callback);
|
/// <param name="existingValue"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static EventCallback<UIChangeEventArgs> CreateBinder(
|
||||||
|
this EventCallbackFactory factory,
|
||||||
|
object receiver,
|
||||||
|
Action<DateTime?> setter,
|
||||||
|
DateTime? existingValue)
|
||||||
|
{
|
||||||
|
return CreateBinderCore<DateTime?>(factory, receiver, setter, ConvertToNullableDateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -577,6 +632,23 @@ namespace Microsoft.AspNetCore.Components
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return factory.Create<UIChangeEventArgs>(receiver, callback);
|
return factory.Create<UIChangeEventArgs>(receiver, callback);
|
||||||
|
|
||||||
|
static DateTime ConvertDateTime(object obj, string format)
|
||||||
|
{
|
||||||
|
var text = (string)obj;
|
||||||
|
if (string.IsNullOrEmpty(text))
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
else if (format != null && DateTime.TryParseExact(text, format, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var value))
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return DateTime.Parse(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -592,26 +664,9 @@ namespace Microsoft.AspNetCore.Components
|
||||||
this EventCallbackFactory factory,
|
this EventCallbackFactory factory,
|
||||||
object receiver,
|
object receiver,
|
||||||
Action<T> setter,
|
Action<T> setter,
|
||||||
T existingValue) where T : struct, Enum
|
T existingValue)
|
||||||
{
|
{
|
||||||
return CreateBinderCore<T>(factory, receiver, setter, EnumConverter<T>.Convert);
|
return CreateBinderCore<T>(factory, receiver, setter, BinderConverterCache.Get<T>());
|
||||||
}
|
|
||||||
|
|
||||||
private static DateTime ConvertDateTime(object obj, string format)
|
|
||||||
{
|
|
||||||
var text = (string)obj;
|
|
||||||
if (string.IsNullOrEmpty(text))
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
else if (format != null && DateTime.TryParseExact(text, format, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var value))
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return DateTime.Parse(text);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static EventCallback<UIChangeEventArgs> CreateBinderCore<T>(
|
private static EventCallback<UIChangeEventArgs> CreateBinderCore<T>(
|
||||||
|
|
@ -642,5 +697,139 @@ namespace Microsoft.AspNetCore.Components
|
||||||
};
|
};
|
||||||
return factory.Create<UIChangeEventArgs>(receiver, callback);
|
return factory.Create<UIChangeEventArgs>(receiver, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We can't rely on generics + static to cache here unfortunately. That would require us to overload
|
||||||
|
// CreateBinder on T : struct AND T : class, which is not allowed.
|
||||||
|
private static class BinderConverterCache
|
||||||
|
{
|
||||||
|
private readonly static ConcurrentDictionary<Type, Delegate> _cache = new ConcurrentDictionary<Type, Delegate>();
|
||||||
|
|
||||||
|
private static MethodInfo _convertToEnum;
|
||||||
|
private static MethodInfo _convertToNullableEnum;
|
||||||
|
|
||||||
|
public static BindConverter<T> Get<T>()
|
||||||
|
{
|
||||||
|
if (!_cache.TryGetValue(typeof(T), out var converter))
|
||||||
|
{
|
||||||
|
// We need to replicate all of the primitive cases that we handle here so that they will behave the same way.
|
||||||
|
// The result will be cached.
|
||||||
|
if (typeof(T) == typeof(string))
|
||||||
|
{
|
||||||
|
converter = ConvertToString;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(bool))
|
||||||
|
{
|
||||||
|
converter = ConvertToBool;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(bool?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableBool;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(int))
|
||||||
|
{
|
||||||
|
converter = ConvertToInt;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(int?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableInt;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(long))
|
||||||
|
{
|
||||||
|
converter = ConvertToLong;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(long?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableLong;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(float))
|
||||||
|
{
|
||||||
|
converter = ConvertToFloat;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(float?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableFloat;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(double))
|
||||||
|
{
|
||||||
|
converter = ConvertToDouble;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(double?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableDouble;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(decimal))
|
||||||
|
{
|
||||||
|
converter = ConvertToDecimal;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(decimal?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableDecimal;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(DateTime))
|
||||||
|
{
|
||||||
|
converter = ConvertToDateTime;
|
||||||
|
}
|
||||||
|
else if (typeof(T) == typeof(DateTime?))
|
||||||
|
{
|
||||||
|
converter = ConvertToNullableDateTime;
|
||||||
|
}
|
||||||
|
else if (typeof(T).IsEnum)
|
||||||
|
{
|
||||||
|
// We have to deal invoke this dynamically to work around the type constraint on Enum.TryParse.
|
||||||
|
var method = _convertToEnum ??= typeof(EventCallbackFactoryBinderExtensions).GetMethod(nameof(ConvertToEnum), BindingFlags.NonPublic | BindingFlags.Static);
|
||||||
|
converter = method.MakeGenericMethod(typeof(T)).CreateDelegate(typeof(BindConverter<T>), target: null);
|
||||||
|
}
|
||||||
|
else if (Nullable.GetUnderlyingType(typeof(T)) is Type innerType && innerType.IsEnum)
|
||||||
|
{
|
||||||
|
// We have to deal invoke this dynamically to work around the type constraint on Enum.TryParse.
|
||||||
|
var method = _convertToNullableEnum ??= typeof(EventCallbackFactoryBinderExtensions).GetMethod(nameof(ConvertToNullableEnum), BindingFlags.NonPublic | BindingFlags.Static);
|
||||||
|
converter = method.MakeGenericMethod(innerType).CreateDelegate(typeof(BindConverter<T>), target: null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
converter = MakeTypeConverterConverter<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
_cache.TryAdd(typeof(T), converter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (BindConverter<T>)converter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BindConverter<T> MakeTypeConverterConverter<T>()
|
||||||
|
{
|
||||||
|
var typeConverter = TypeDescriptor.GetConverter(typeof(T));
|
||||||
|
if (typeConverter == null || !typeConverter.CanConvertFrom(typeof(string)))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(
|
||||||
|
$"The type '{typeof(T).FullName}' does not have an associated {typeof(TypeConverter).Name} that supports " +
|
||||||
|
$"conversion from a string. " +
|
||||||
|
$"Apply '{typeof(TypeConverterAttribute).Name}' to the type to register a converter.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ConvertWithTypeConverter;
|
||||||
|
|
||||||
|
bool ConvertWithTypeConverter(object obj, out T value)
|
||||||
|
{
|
||||||
|
var text = (string)obj;
|
||||||
|
if (string.IsNullOrEmpty(text))
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We intentionally close-over the TypeConverter to cache it. The TypeDescriptor infrastructure is slow.
|
||||||
|
var converted = typeConverter.ConvertFromString(context: null, CultureInfo.CurrentCulture, text);
|
||||||
|
if (converted == null)
|
||||||
|
{
|
||||||
|
value = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = (T)converted;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -344,6 +346,25 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Assert.Equal(1, component.Count);
|
Assert.Equal(1, component.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateBinder_NullableEnum()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var value = (AttributeTargets?)AttributeTargets.All;
|
||||||
|
var component = new EventCountingComponent();
|
||||||
|
Action<AttributeTargets?> setter = (_) => value = _;
|
||||||
|
|
||||||
|
var binder = EventCallback.Factory.CreateBinder(component, setter, value);
|
||||||
|
|
||||||
|
var expectedValue = AttributeTargets.Class;
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), });
|
||||||
|
|
||||||
|
Assert.Equal(expectedValue, value);
|
||||||
|
Assert.Equal(1, component.Count);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task CreateBinder_DateTime()
|
public async Task CreateBinder_DateTime()
|
||||||
{
|
{
|
||||||
|
|
@ -363,6 +384,26 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Assert.Equal(1, component.Count);
|
Assert.Equal(1, component.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateBinder_NullableDateTime()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var value = (DateTime?)DateTime.Now;
|
||||||
|
var component = new EventCountingComponent();
|
||||||
|
Action<DateTime?> setter = (_) => value = _;
|
||||||
|
|
||||||
|
var binder = EventCallback.Factory.CreateBinder(component, setter, value);
|
||||||
|
|
||||||
|
var expectedValue = new DateTime(2018, 3, 4, 1, 2, 3);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), });
|
||||||
|
|
||||||
|
Assert.Equal(expectedValue, value);
|
||||||
|
Assert.Equal(1, component.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For now format is only supported by this specific method.
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task CreateBinder_DateTime_Format()
|
public async Task CreateBinder_DateTime_Format()
|
||||||
{
|
{
|
||||||
|
|
@ -383,6 +424,80 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Assert.Equal(1, component.Count);
|
Assert.Equal(1, component.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This uses a type converter
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateBinder_Guid()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var value = Guid.NewGuid();
|
||||||
|
var component = new EventCountingComponent();
|
||||||
|
Action<Guid> setter = (_) => value = _;
|
||||||
|
|
||||||
|
var binder = EventCallback.Factory.CreateBinder(component, setter, value);
|
||||||
|
|
||||||
|
var expectedValue = Guid.NewGuid();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), });
|
||||||
|
|
||||||
|
Assert.Equal(expectedValue, value);
|
||||||
|
Assert.Equal(1, component.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This uses a type converter
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateBinder_NullableGuid()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var value = (Guid?)Guid.NewGuid();
|
||||||
|
var component = new EventCountingComponent();
|
||||||
|
Action<Guid?> setter = (_) => value = _;
|
||||||
|
|
||||||
|
var binder = EventCallback.Factory.CreateBinder(component, setter, value);
|
||||||
|
|
||||||
|
var expectedValue = Guid.NewGuid();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), });
|
||||||
|
|
||||||
|
Assert.Equal(expectedValue, value);
|
||||||
|
Assert.Equal(1, component.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateBinder_CustomTypeConverter()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var value = new SecretMessage() { Message = "A message", };
|
||||||
|
var component = new EventCountingComponent();
|
||||||
|
Action<SecretMessage> setter = (_) => value = _;
|
||||||
|
|
||||||
|
var binder = EventCallback.Factory.CreateBinder(component, setter, value);
|
||||||
|
|
||||||
|
var expectedValue = new SecretMessage() { Message = "TypeConverter may be old, but it still works!", };
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), });
|
||||||
|
|
||||||
|
Assert.Equal(expectedValue.Message, value.Message);
|
||||||
|
Assert.Equal(1, component.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateBinder_GenericWithoutTypeConverter_Throws()
|
||||||
|
{
|
||||||
|
var value = new ClassWithoutTypeConverter();
|
||||||
|
var component = new EventCountingComponent();
|
||||||
|
Action<ClassWithoutTypeConverter> setter = (_) => value = _;
|
||||||
|
|
||||||
|
var ex = Assert.Throws<InvalidOperationException>(() => EventCallback.Factory.CreateBinder(component, setter, value));
|
||||||
|
|
||||||
|
Assert.Equal(
|
||||||
|
$"The type '{typeof(ClassWithoutTypeConverter).FullName}' does not have an associated TypeConverter that supports conversion from a string. " +
|
||||||
|
$"Apply 'TypeConverterAttribute' to the type to register a converter.",
|
||||||
|
ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
private class EventCountingComponent : IComponent, IHandleEvent
|
private class EventCountingComponent : IComponent, IHandleEvent
|
||||||
{
|
{
|
||||||
public int Count;
|
public int Count;
|
||||||
|
|
@ -403,5 +518,42 @@ namespace Microsoft.AspNetCore.Components
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ClassWithoutTypeConverter
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[TypeConverter(typeof(SecretMessageTypeConverter))]
|
||||||
|
private class SecretMessage
|
||||||
|
{
|
||||||
|
public string Message { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SecretMessageTypeConverter : TypeConverter
|
||||||
|
{
|
||||||
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
|
||||||
|
{
|
||||||
|
if (sourceType == typeof(string))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
|
||||||
|
{
|
||||||
|
if (value is string message)
|
||||||
|
{
|
||||||
|
return new SecretMessage() { Message = message, };
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
using BasicTestApp;
|
using BasicTestApp;
|
||||||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
|
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
|
||||||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
||||||
|
|
@ -538,5 +539,48 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
||||||
Browser.Equal("0.011", () => boundValue.Text);
|
Browser.Equal("0.011", () => boundValue.Text);
|
||||||
Assert.Equal("0.011", mirrorValue.GetAttribute("value"));
|
Assert.Equal("0.011", mirrorValue.GetAttribute("value"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CanBindTextboxGenericInt()
|
||||||
|
{
|
||||||
|
var target = Browser.FindElement(By.Id("textbox-generic-int"));
|
||||||
|
var boundValue = Browser.FindElement(By.Id("textbox-generic-int-value"));
|
||||||
|
var mirrorValue = Browser.FindElement(By.Id("textbox-generic-int-mirror"));
|
||||||
|
Assert.Equal("-42", target.GetAttribute("value"));
|
||||||
|
Assert.Equal("-42", boundValue.Text);
|
||||||
|
Assert.Equal("-42", mirrorValue.GetAttribute("value"));
|
||||||
|
|
||||||
|
// Modify target; value is not updated because it's not convertable.
|
||||||
|
target.Clear();
|
||||||
|
Browser.Equal("-42", () => boundValue.Text);
|
||||||
|
Assert.Equal("-42", mirrorValue.GetAttribute("value"));
|
||||||
|
|
||||||
|
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||||
|
target.SendKeys("42\t");
|
||||||
|
Browser.Equal("42", () => boundValue.Text);
|
||||||
|
Assert.Equal("42", mirrorValue.GetAttribute("value"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CanBindTextboxGenericGuid()
|
||||||
|
{
|
||||||
|
var target = Browser.FindElement(By.Id("textbox-generic-guid"));
|
||||||
|
var boundValue = Browser.FindElement(By.Id("textbox-generic-guid-value"));
|
||||||
|
var mirrorValue = Browser.FindElement(By.Id("textbox-generic-guid-mirror"));
|
||||||
|
Assert.Equal("00000000-0000-0000-0000-000000000000", target.GetAttribute("value"));
|
||||||
|
Assert.Equal("00000000-0000-0000-0000-000000000000", boundValue.Text);
|
||||||
|
Assert.Equal("00000000-0000-0000-0000-000000000000", mirrorValue.GetAttribute("value"));
|
||||||
|
|
||||||
|
// Modify target; value is not updated because it's not convertable.
|
||||||
|
target.Clear();
|
||||||
|
Browser.Equal("00000000-0000-0000-0000-000000000000", () => boundValue.Text);
|
||||||
|
Assert.Equal("00000000-0000-0000-0000-000000000000", mirrorValue.GetAttribute("value"));
|
||||||
|
|
||||||
|
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||||
|
var newValue = Guid.NewGuid().ToString();
|
||||||
|
target.SendKeys(newValue + "\t");
|
||||||
|
Browser.Equal(newValue, () => boundValue.Text);
|
||||||
|
Assert.Equal(newValue, mirrorValue.GetAttribute("value"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,19 @@
|
||||||
<input id="textbox-nullable-decimal-invalid-mirror" @bind="textboxNullableDecimalInvalidValue" readonly />
|
<input id="textbox-nullable-decimal-invalid-mirror" @bind="textboxNullableDecimalInvalidValue" readonly />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Generic bind (int):
|
||||||
|
<BindGenericComponent Id="textbox-generic-int" @bind-Value="textboxGenericIntValue" />
|
||||||
|
<span id="textbox-generic-int-value">@textboxGenericIntValue</span>
|
||||||
|
<input id="textbox-generic-int-mirror" @bind="textboxGenericIntValue" readonly />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Generic bind (guid):
|
||||||
|
<BindGenericComponent Id="textbox-generic-guid" @bind-Value="textboxGenericGuidValue" />
|
||||||
|
<span id="textbox-generic-guid-value">@textboxGenericGuidValue</span>
|
||||||
|
<input id="textbox-generic-guid-mirror" @bind="textboxGenericGuidValue" readonly />
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2>Text Area</h2>
|
<h2>Text Area</h2>
|
||||||
<p>
|
<p>
|
||||||
Initially blank:
|
Initially blank:
|
||||||
|
|
@ -138,36 +151,39 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
string textboxInitiallyBlankValue = null;
|
string textboxInitiallyBlankValue = null;
|
||||||
string textboxInitiallyPopulatedValue = "Hello";
|
string textboxInitiallyPopulatedValue = "Hello";
|
||||||
|
|
||||||
string textAreaInitiallyBlankValue = null;
|
string textAreaInitiallyBlankValue = null;
|
||||||
string textAreaInitiallyPopulatedValue = "Hello";
|
string textAreaInitiallyPopulatedValue = "Hello";
|
||||||
|
|
||||||
bool? checkboxInitiallyNullValue = null;
|
bool? checkboxInitiallyNullValue = null;
|
||||||
bool checkboxInitiallyUncheckedValue = false;
|
bool checkboxInitiallyUncheckedValue = false;
|
||||||
bool checkboxInitiallyCheckedValue = true;
|
bool checkboxInitiallyCheckedValue = true;
|
||||||
|
|
||||||
int textboxIntValue = -42;
|
int textboxIntValue = -42;
|
||||||
int? textboxNullableIntValue = null;
|
int? textboxNullableIntValue = null;
|
||||||
long textboxLongValue = 3_000_000_000;
|
long textboxLongValue = 3_000_000_000;
|
||||||
long? textboxNullableLongValue = null;
|
long? textboxNullableLongValue = null;
|
||||||
float textboxFloatValue = 3.141f;
|
float textboxFloatValue = 3.141f;
|
||||||
float? textboxNullableFloatValue = null;
|
float? textboxNullableFloatValue = null;
|
||||||
double textboxDoubleValue = 3.14159265359d;
|
double textboxDoubleValue = 3.14159265359d;
|
||||||
double? textboxNullableDoubleValue = null;
|
double? textboxNullableDoubleValue = null;
|
||||||
decimal textboxDecimalValue = 0.0000000000000000000000000001M;
|
decimal textboxDecimalValue = 0.0000000000000000000000000001M;
|
||||||
decimal? textboxNullableDecimalValue = null;
|
decimal? textboxNullableDecimalValue = null;
|
||||||
decimal textboxDecimalInvalidValue = 0.0000000000000000000000000001M;
|
decimal textboxDecimalInvalidValue = 0.0000000000000000000000000001M;
|
||||||
decimal? textboxNullableDecimalInvalidValue = null;
|
decimal? textboxNullableDecimalInvalidValue = null;
|
||||||
|
|
||||||
bool includeFourthOption = false;
|
int textboxGenericIntValue = -42;
|
||||||
enum SelectableValue { First, Second, Third, Fourth }
|
Guid textboxGenericGuidValue = Guid.Empty;
|
||||||
SelectableValue selectValue = SelectableValue.Second;
|
|
||||||
|
|
||||||
void AddAndSelectNewSelectOption()
|
bool includeFourthOption = false;
|
||||||
{
|
enum SelectableValue { First, Second, Third, Fourth }
|
||||||
includeFourthOption = true;
|
SelectableValue selectValue = SelectableValue.Second;
|
||||||
selectValue = SelectableValue.Fourth;
|
|
||||||
}
|
void AddAndSelectNewSelectOption()
|
||||||
|
{
|
||||||
|
includeFourthOption = true;
|
||||||
|
selectValue = SelectableValue.Fourth;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
@typeparam TValue
|
||||||
|
|
||||||
|
<input id="@Id" type="text" value="@Value" @onchange="@(EventCallback.Factory.CreateBinder<TValue>(this, _ => ValueChanged.InvokeAsync(_), Value))" />
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter] string Id { get; set; }
|
||||||
|
[Parameter] TValue Value { get; set; }
|
||||||
|
[Parameter] EventCallback<TValue> ValueChanged { get; set; }
|
||||||
|
}
|
||||||
|
|
@ -28,6 +28,7 @@ namespace Microsoft.AspNetCore.Hosting.FunctionalTests
|
||||||
[ConditionalFact]
|
[ConditionalFact]
|
||||||
[OSSkipCondition(OperatingSystems.Windows)]
|
[OSSkipCondition(OperatingSystems.Windows)]
|
||||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||||
|
[Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2577", FlakyOn.All)]
|
||||||
public async Task ShutdownTestRun()
|
public async Task ShutdownTestRun()
|
||||||
{
|
{
|
||||||
await ExecuteShutdownTest(nameof(ShutdownTestRun), "Run");
|
await ExecuteShutdownTest(nameof(ShutdownTestRun), "Run");
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Testing;
|
using Microsoft.AspNetCore.Testing;
|
||||||
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
|
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
|
||||||
|
|
@ -343,6 +344,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[MemberData(nameof(ConvertibleTypeData))]
|
[MemberData(nameof(ConvertibleTypeData))]
|
||||||
|
[Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2626", FlakyOn.AzP.Linux)]
|
||||||
public async Task BindModel_ReturnsModel_IfAttemptedValueIsValid_FrenchThirtyTwoThousandPointOne(Type destinationType)
|
public async Task BindModel_ReturnsModel_IfAttemptedValueIsValid_FrenchThirtyTwoThousandPointOne(Type destinationType)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
|
||||||
protected abstract IJsonHelper GetJsonHelper();
|
protected abstract IJsonHelper GetJsonHelper();
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Serialize_EscapesHtmlByDefault()
|
public virtual void Serialize_EscapesHtmlByDefault()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var helper = GetJsonHelper();
|
var helper = GetJsonHelper();
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
using Microsoft.AspNetCore.Html;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Rendering
|
namespace Microsoft.AspNetCore.Mvc.Rendering
|
||||||
{
|
{
|
||||||
|
|
@ -13,5 +15,24 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
|
||||||
var options = new JsonOptions() { JsonSerializerOptions = { PropertyNamingPolicy = JsonNamingPolicy.CamelCase } };
|
var options = new JsonOptions() { JsonSerializerOptions = { PropertyNamingPolicy = JsonNamingPolicy.CamelCase } };
|
||||||
return new SystemTextJsonHelper(Options.Create(options));
|
return new SystemTextJsonHelper(Options.Create(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public override void Serialize_EscapesHtmlByDefault()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var helper = GetJsonHelper();
|
||||||
|
var obj = new
|
||||||
|
{
|
||||||
|
HTML = "<b>John Doe</b>"
|
||||||
|
};
|
||||||
|
var expectedOutput = "{\"html\":\"\\u003cb\\u003eJohn Doe\\u003c\\u002fb\\u003e\"}";
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = helper.Serialize(obj);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var htmlString = Assert.IsType<HtmlString>(result);
|
||||||
|
Assert.Equal(expectedOutput, htmlString.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
@using Microsoft.AspNetCore.Http.Features
|
|
||||||
|
|
||||||
@{
|
|
||||||
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
|
|
||||||
var showBanner = !consentFeature?.CanTrack ?? false;
|
|
||||||
var cookieString = consentFeature?.CreateConsentCookie();
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (showBanner)
|
|
||||||
{
|
|
||||||
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
|
|
||||||
Use this space to summarize your privacy and cookie use policy. <a class="alert-link" asp-page="/Privacy">Learn More</a>.
|
|
||||||
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
|
|
||||||
<span aria-hidden="true">Accept</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
(function () {
|
|
||||||
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
|
|
||||||
button.addEventListener("click", function (event) {
|
|
||||||
document.cookie = button.dataset.cookieString;
|
|
||||||
}, false);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
}
|
|
||||||
|
|
@ -34,13 +34,9 @@
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<div class="container">
|
<main role="main" class="pb-3">
|
||||||
<partial name="_CookieConsentPartial" />
|
|
||||||
<main role="main" class="pb-3">
|
|
||||||
@RenderBody()
|
@RenderBody()
|
||||||
</main>
|
</main>
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="border-top footer text-muted">
|
<footer class="border-top footer text-muted">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
© copyrightYear - Company.WebApplication1 - <a asp-area="" asp-page="/Privacy">Privacy</a>
|
© copyrightYear - Company.WebApplication1 - <a asp-area="" asp-page="/Privacy">Privacy</a>
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
|
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
|
||||||
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
|
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
|
||||||
|
|
@ -52,11 +52,6 @@ namespace Company.WebApplication1
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.Configure<CookiePolicyOptions>(options =>
|
|
||||||
{
|
|
||||||
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
|
|
||||||
options.CheckConsentNeeded = context => true;
|
|
||||||
});
|
|
||||||
|
|
||||||
#if (IndividualLocalAuth)
|
#if (IndividualLocalAuth)
|
||||||
services.AddDbContext<ApplicationDbContext>(options =>
|
services.AddDbContext<ApplicationDbContext>(options =>
|
||||||
|
|
@ -152,8 +147,6 @@ namespace Company.WebApplication1
|
||||||
#endif
|
#endif
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
|
|
||||||
app.UseCookiePolicy();
|
|
||||||
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
|
||||||
#if (OrganizationalAuth || IndividualAuth)
|
#if (OrganizationalAuth || IndividualAuth)
|
||||||
|
|
|
||||||
|
|
@ -52,11 +52,6 @@ namespace Company.WebApplication1
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.Configure<CookiePolicyOptions>(options =>
|
|
||||||
{
|
|
||||||
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
|
|
||||||
options.CheckConsentNeeded = context => true;
|
|
||||||
});
|
|
||||||
|
|
||||||
#if (IndividualLocalAuth)
|
#if (IndividualLocalAuth)
|
||||||
services.AddDbContext<ApplicationDbContext>(options =>
|
services.AddDbContext<ApplicationDbContext>(options =>
|
||||||
|
|
@ -153,8 +148,6 @@ namespace Company.WebApplication1
|
||||||
#endif
|
#endif
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
|
|
||||||
app.UseCookiePolicy();
|
|
||||||
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
|
||||||
#if (OrganizationalAuth || IndividualAuth)
|
#if (OrganizationalAuth || IndividualAuth)
|
||||||
|
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
@using Microsoft.AspNetCore.Http.Features
|
|
||||||
|
|
||||||
@{
|
|
||||||
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
|
|
||||||
var showBanner = !consentFeature?.CanTrack ?? false;
|
|
||||||
var cookieString = consentFeature?.CreateConsentCookie();
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (showBanner)
|
|
||||||
{
|
|
||||||
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
|
|
||||||
Use this space to summarize your privacy and cookie use policy. <a class="alert-link" asp-area="" asp-controller="Home" asp-action="Privacy">Learn More</a>.
|
|
||||||
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
|
|
||||||
<span aria-hidden="true">Accept</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
(function () {
|
|
||||||
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
|
|
||||||
button.addEventListener("click", function (event) {
|
|
||||||
document.cookie = button.dataset.cookieString;
|
|
||||||
}, false);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
}
|
|
||||||
|
|
@ -34,13 +34,9 @@
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<div class="container">
|
<main role="main" class="pb-3">
|
||||||
<partial name="_CookieConsentPartial" />
|
|
||||||
<main role="main" class="pb-3">
|
|
||||||
@RenderBody()
|
@RenderBody()
|
||||||
</main>
|
</main>
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="border-top footer text-muted">
|
<footer class="border-top footer text-muted">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
© copyrightYear - Company.WebApplication1 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
|
© copyrightYear - Company.WebApplication1 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
|
||||||
|
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
@using Microsoft.AspNetCore.Http.Features
|
|
||||||
|
|
||||||
@{
|
|
||||||
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
|
|
||||||
var showBanner = !consentFeature?.CanTrack ?? false;
|
|
||||||
var cookieString = consentFeature?.CreateConsentCookie();
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (showBanner)
|
|
||||||
{
|
|
||||||
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
|
|
||||||
Use this space to summarize your privacy and cookie use policy. <a class="alert-link" asp-page="/Privacy">Learn More</a>.
|
|
||||||
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
|
|
||||||
<span aria-hidden="true">Accept</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
(function () {
|
|
||||||
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
|
|
||||||
button.addEventListener("click", function (event) {
|
|
||||||
document.cookie = button.dataset.cookieString;
|
|
||||||
}, false);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
}
|
|
||||||
|
|
@ -30,13 +30,9 @@
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<div class="container">
|
<main role="main" class="pb-3">
|
||||||
<partial name="_CookieConsentPartial" />
|
|
||||||
<main role="main" class="pb-3">
|
|
||||||
@RenderBody()
|
@RenderBody()
|
||||||
</main>
|
</main>
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="border-top footer text-muted">
|
<footer class="border-top footer text-muted">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
© copyrightYear - Company.WebApplication1 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
|
© copyrightYear - Company.WebApplication1 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
"Pages/Privacy.cshtml.cs",
|
"Pages/Privacy.cshtml.cs",
|
||||||
"Pages/_ViewImports.cshtml",
|
"Pages/_ViewImports.cshtml",
|
||||||
"Pages/_ViewStart.cshtml",
|
"Pages/_ViewStart.cshtml",
|
||||||
"Pages/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Pages/Shared/_Layout.cshtml",
|
"Pages/Shared/_Layout.cshtml",
|
||||||
"Pages/Shared/_LoginPartial.cshtml",
|
"Pages/Shared/_LoginPartial.cshtml",
|
||||||
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -82,7 +81,6 @@
|
||||||
"Pages/Privacy.cshtml.cs",
|
"Pages/Privacy.cshtml.cs",
|
||||||
"Pages/_ViewImports.cshtml",
|
"Pages/_ViewImports.cshtml",
|
||||||
"Pages/_ViewStart.cshtml",
|
"Pages/_ViewStart.cshtml",
|
||||||
"Pages/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Pages/Shared/_Layout.cshtml",
|
"Pages/Shared/_Layout.cshtml",
|
||||||
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
"Properties/launchSettings.json",
|
"Properties/launchSettings.json",
|
||||||
|
|
@ -141,7 +139,6 @@
|
||||||
"Pages/Privacy.cshtml.cs",
|
"Pages/Privacy.cshtml.cs",
|
||||||
"Pages/_ViewImports.cshtml",
|
"Pages/_ViewImports.cshtml",
|
||||||
"Pages/_ViewStart.cshtml",
|
"Pages/_ViewStart.cshtml",
|
||||||
"Pages/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Pages/Shared/_Layout.cshtml",
|
"Pages/Shared/_Layout.cshtml",
|
||||||
"Pages/Shared/_LoginPartial.cshtml",
|
"Pages/Shared/_LoginPartial.cshtml",
|
||||||
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -201,7 +198,6 @@
|
||||||
"Pages/Privacy.cshtml.cs",
|
"Pages/Privacy.cshtml.cs",
|
||||||
"Pages/_ViewImports.cshtml",
|
"Pages/_ViewImports.cshtml",
|
||||||
"Pages/_ViewStart.cshtml",
|
"Pages/_ViewStart.cshtml",
|
||||||
"Pages/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Pages/Shared/_Layout.cshtml",
|
"Pages/Shared/_Layout.cshtml",
|
||||||
"Pages/Shared/_LoginPartial.cshtml",
|
"Pages/Shared/_LoginPartial.cshtml",
|
||||||
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -261,7 +257,6 @@
|
||||||
"Pages/Privacy.cshtml.cs",
|
"Pages/Privacy.cshtml.cs",
|
||||||
"Pages/_ViewImports.cshtml",
|
"Pages/_ViewImports.cshtml",
|
||||||
"Pages/_ViewStart.cshtml",
|
"Pages/_ViewStart.cshtml",
|
||||||
"Pages/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Pages/Shared/_Layout.cshtml",
|
"Pages/Shared/_Layout.cshtml",
|
||||||
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
"Properties/launchSettings.json",
|
"Properties/launchSettings.json",
|
||||||
|
|
@ -320,7 +315,6 @@
|
||||||
"Pages/Privacy.cshtml.cs",
|
"Pages/Privacy.cshtml.cs",
|
||||||
"Pages/_ViewImports.cshtml",
|
"Pages/_ViewImports.cshtml",
|
||||||
"Pages/_ViewStart.cshtml",
|
"Pages/_ViewStart.cshtml",
|
||||||
"Pages/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Pages/Shared/_Layout.cshtml",
|
"Pages/Shared/_Layout.cshtml",
|
||||||
"Pages/Shared/_LoginPartial.cshtml",
|
"Pages/Shared/_LoginPartial.cshtml",
|
||||||
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
"Pages/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -484,7 +478,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_LoginPartial.cshtml",
|
"Views/Shared/_LoginPartial.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -543,7 +536,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
"wwwroot/favicon.ico",
|
"wwwroot/favicon.ico",
|
||||||
|
|
@ -601,7 +593,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_LoginPartial.cshtml",
|
"Views/Shared/_LoginPartial.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -660,7 +651,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_LoginPartial.cshtml",
|
"Views/Shared/_LoginPartial.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -719,7 +709,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
"wwwroot/favicon.ico",
|
"wwwroot/favicon.ico",
|
||||||
|
|
@ -777,7 +766,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_LoginPartial.cshtml",
|
"Views/Shared/_LoginPartial.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
|
|
@ -836,7 +824,6 @@
|
||||||
"Views/Home/Index.cshtml",
|
"Views/Home/Index.cshtml",
|
||||||
"Views/Home/Privacy.cshtml",
|
"Views/Home/Privacy.cshtml",
|
||||||
"Views/Shared/Error.cshtml",
|
"Views/Shared/Error.cshtml",
|
||||||
"Views/Shared/_CookieConsentPartial.cshtml",
|
|
||||||
"Views/Shared/_Layout.cshtml",
|
"Views/Shared/_Layout.cshtml",
|
||||||
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
"Views/Shared/_ValidationScriptsPartial.cshtml",
|
||||||
"wwwroot/favicon.ico",
|
"wwwroot/favicon.ico",
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ void HostFxrErrorRedirector::HostFxrErrorRedirectorCallback(const WCHAR* message
|
||||||
m_writeFunction->Append(std::wstring(message) + L"\r\n");
|
m_writeFunction->Append(std::wstring(message) + L"\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HostFxr::Load()
|
void HostFxr::Load()
|
||||||
{
|
{
|
||||||
HMODULE hModule;
|
HMODULE hModule;
|
||||||
|
|
@ -43,9 +42,12 @@ void HostFxr::Load(HMODULE moduleHandle)
|
||||||
m_hHostFxrDll = moduleHandle;
|
m_hHostFxrDll = moduleHandle;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_hostfxr_main_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_main_fn>(moduleHandle, "hostfxr_main");
|
|
||||||
m_hostfxr_get_native_search_directories_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_get_native_search_directories_fn>(moduleHandle, "hostfxr_get_native_search_directories");
|
m_hostfxr_get_native_search_directories_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_get_native_search_directories_fn>(moduleHandle, "hostfxr_get_native_search_directories");
|
||||||
m_corehost_set_error_writer_fn = ModuleHelpers::GetKnownProcAddress<corehost_set_error_writer_fn>(moduleHandle, "hostfxr_set_error_writer", /* optional */ true);
|
m_corehost_set_error_writer_fn = ModuleHelpers::GetKnownProcAddress<corehost_set_error_writer_fn>(moduleHandle, "hostfxr_set_error_writer", /* optional */ true);
|
||||||
|
m_hostfxr_initialize_for_dotnet_commandline_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_initialize_for_dotnet_runtime_fn>(moduleHandle, "hostfxr_initialize_for_dotnet_command_line", /* optional */ true);
|
||||||
|
m_hostfxr_set_runtime_property_value_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_set_runtime_property_value_fn>(moduleHandle, "hostfxr_set_runtime_property_value", /* optional */ true);
|
||||||
|
m_hostfxr_run_app_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_run_app_fn>(moduleHandle, "hostfxr_run_app", /* optional */ true);
|
||||||
|
m_hostfxr_close_fn = ModuleHelpers::GetKnownProcAddress<hostfxr_close_fn>(moduleHandle, "hostfxr_close", /* optional */ true);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
|
@ -59,7 +61,6 @@ void HostFxr::Load(HMODULE moduleHandle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HostFxr::Load(const std::wstring& location)
|
void HostFxr::Load(const std::wstring& location)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
@ -87,7 +88,14 @@ void HostFxr::SetMain(hostfxr_main_fn hostfxr_main_fn)
|
||||||
|
|
||||||
int HostFxr::Main(DWORD argc, const PCWSTR* argv) const noexcept(false)
|
int HostFxr::Main(DWORD argc, const PCWSTR* argv) const noexcept(false)
|
||||||
{
|
{
|
||||||
return m_hostfxr_main_fn(argc, argv);
|
if (m_host_context_handle != nullptr && m_hostfxr_run_app_fn != nullptr)
|
||||||
|
{
|
||||||
|
return m_hostfxr_run_app_fn(m_host_context_handle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return m_hostfxr_main_fn(argc, argv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int HostFxr::GetNativeSearchDirectories(INT argc, const PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size) const noexcept
|
int HostFxr::GetNativeSearchDirectories(INT argc, const PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size) const noexcept
|
||||||
|
|
@ -99,3 +107,62 @@ HostFxrErrorRedirector HostFxr::RedirectOutput(RedirectionOutput* writer) const
|
||||||
{
|
{
|
||||||
return HostFxrErrorRedirector(m_corehost_set_error_writer_fn, writer);
|
return HostFxrErrorRedirector(m_corehost_set_error_writer_fn, writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int HostFxr::InitializeForApp(int argc, PCWSTR* argv, const std::wstring& dotnetExe) const noexcept
|
||||||
|
{
|
||||||
|
if (m_hostfxr_initialize_for_dotnet_commandline_fn == nullptr || m_hostfxr_main_fn != nullptr)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hostfxr_initialize_parameters params;
|
||||||
|
params.size = sizeof(hostfxr_initialize_parameters);
|
||||||
|
params.host_path = L"";
|
||||||
|
|
||||||
|
// Transformation occurs here rather than hostfxr arguments as hostfxr_get_native_directories still needs
|
||||||
|
// exe as the first argument.
|
||||||
|
if (!dotnetExe.empty())
|
||||||
|
{
|
||||||
|
// Portable application
|
||||||
|
// argv[0] = dotnet.exe
|
||||||
|
// argv[1] = app.dll
|
||||||
|
// argv[2] = rest of the args
|
||||||
|
|
||||||
|
std::filesystem::path dotnetExePath(dotnetExe);
|
||||||
|
auto dotnetFolderPath = dotnetExePath.parent_path();
|
||||||
|
params.dotnet_root = dotnetFolderPath.c_str();
|
||||||
|
|
||||||
|
RETURN_INT_IF_NOT_ZERO(m_hostfxr_initialize_for_dotnet_commandline_fn(argc - 1, &argv[1], ¶ms, &m_host_context_handle));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Standalone application
|
||||||
|
// argv[0] = app.exe
|
||||||
|
// argv[1] = rest of the args
|
||||||
|
params.dotnet_root = L"";
|
||||||
|
std::filesystem::path applicationPath(argv[0]);
|
||||||
|
applicationPath.replace_extension(".dll");
|
||||||
|
argv[0] = applicationPath.c_str();
|
||||||
|
|
||||||
|
RETURN_INT_IF_NOT_ZERO(m_hostfxr_initialize_for_dotnet_commandline_fn(argc, argv, ¶ms, &m_host_context_handle));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int HostFxr::SetRuntimePropertyValue(PCWSTR name, PCWSTR value) const noexcept
|
||||||
|
{
|
||||||
|
if (m_host_context_handle != nullptr && m_hostfxr_set_runtime_property_value_fn != nullptr)
|
||||||
|
{
|
||||||
|
return m_hostfxr_set_runtime_property_value_fn(m_host_context_handle, name, value);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostFxr::Close() const noexcept
|
||||||
|
{
|
||||||
|
if (m_host_context_handle != nullptr && m_hostfxr_close_fn != nullptr)
|
||||||
|
{
|
||||||
|
m_hostfxr_close_fn(m_host_context_handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,26 @@
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
#include "RedirectionOutput.h"
|
#include "RedirectionOutput.h"
|
||||||
|
|
||||||
|
struct hostfxr_initialize_parameters
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
PCWSTR host_path;
|
||||||
|
PCWSTR dotnet_root;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DOTNETCORE_STARTUP_HOOK L"STARTUP_HOOKS"
|
||||||
|
#define DOTNETCORE_USE_ENTRYPOINT_FILTER L"USE_ENTRYPOINT_FILTER"
|
||||||
|
#define DOTNETCORE_STACK_SIZE L"DEFAULT_STACK_SIZE"
|
||||||
|
#define ASPNETCORE_STARTUP_ASSEMBLY L"Microsoft.AspNetCore.Server.IIS"
|
||||||
|
|
||||||
typedef INT(*hostfxr_get_native_search_directories_fn) (INT argc, CONST PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size);
|
typedef INT(*hostfxr_get_native_search_directories_fn) (INT argc, CONST PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size);
|
||||||
typedef INT(*hostfxr_main_fn) (DWORD argc, CONST PCWSTR argv[]);
|
typedef INT(*hostfxr_main_fn) (DWORD argc, CONST PCWSTR argv[]);
|
||||||
typedef void(*corehost_error_writer_fn) (const WCHAR* message);
|
typedef void(*corehost_error_writer_fn) (const WCHAR* message);
|
||||||
typedef corehost_error_writer_fn(*corehost_set_error_writer_fn) (corehost_error_writer_fn error_writer);
|
typedef corehost_error_writer_fn(*corehost_set_error_writer_fn) (corehost_error_writer_fn error_writer);
|
||||||
|
typedef int(*hostfxr_initialize_for_dotnet_runtime_fn)(int argc, const PCWSTR* argv, hostfxr_initialize_parameters* parameters, void* const* host_context_handle);
|
||||||
|
typedef int(*hostfxr_set_runtime_property_value_fn)(void* host_context_handle, PCWSTR name, PCWSTR value);
|
||||||
|
typedef int(*hostfxr_run_app_fn)(void* host_context_handle);
|
||||||
|
typedef int(*hostfxr_close_fn)(void* hostfxr_context_handle);
|
||||||
|
|
||||||
struct ErrorContext
|
struct ErrorContext
|
||||||
{
|
{
|
||||||
|
|
@ -49,7 +65,8 @@ public:
|
||||||
corehost_set_error_writer_fn corehost_set_error_writer_fn) noexcept
|
corehost_set_error_writer_fn corehost_set_error_writer_fn) noexcept
|
||||||
: m_hostfxr_main_fn(hostfxr_main_fn),
|
: m_hostfxr_main_fn(hostfxr_main_fn),
|
||||||
m_hostfxr_get_native_search_directories_fn(hostfxr_get_native_search_directories_fn),
|
m_hostfxr_get_native_search_directories_fn(hostfxr_get_native_search_directories_fn),
|
||||||
m_corehost_set_error_writer_fn(corehost_set_error_writer_fn)
|
m_corehost_set_error_writer_fn(corehost_set_error_writer_fn),
|
||||||
|
m_host_context_handle(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,10 +83,18 @@ public:
|
||||||
int GetNativeSearchDirectories(INT argc, CONST PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size) const noexcept;
|
int GetNativeSearchDirectories(INT argc, CONST PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size) const noexcept;
|
||||||
|
|
||||||
HostFxrErrorRedirector RedirectOutput(RedirectionOutput* writer) const noexcept;
|
HostFxrErrorRedirector RedirectOutput(RedirectionOutput* writer) const noexcept;
|
||||||
|
int SetRuntimePropertyValue(PCWSTR name, PCWSTR value) const noexcept;
|
||||||
|
int InitializeForApp(int argc, PCWSTR* argv, const std::wstring& m_dotnetExeKnownLocation) const noexcept;
|
||||||
|
void Close() const noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HandleWrapper<ModuleHandleTraits> m_hHostFxrDll;
|
HandleWrapper<ModuleHandleTraits> m_hHostFxrDll;
|
||||||
hostfxr_main_fn m_hostfxr_main_fn;
|
hostfxr_main_fn m_hostfxr_main_fn;
|
||||||
hostfxr_get_native_search_directories_fn m_hostfxr_get_native_search_directories_fn;
|
hostfxr_get_native_search_directories_fn m_hostfxr_get_native_search_directories_fn;
|
||||||
|
hostfxr_initialize_for_dotnet_runtime_fn m_hostfxr_initialize_for_dotnet_commandline_fn;
|
||||||
|
hostfxr_set_runtime_property_value_fn m_hostfxr_set_runtime_property_value_fn;
|
||||||
|
hostfxr_run_app_fn m_hostfxr_run_app_fn;
|
||||||
corehost_set_error_writer_fn m_corehost_set_error_writer_fn;
|
corehost_set_error_writer_fn m_corehost_set_error_writer_fn;
|
||||||
|
hostfxr_close_fn m_hostfxr_close_fn;
|
||||||
|
void* m_host_context_handle;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,9 @@
|
||||||
#define SUCCEEDED_LOG(hr) SUCCEEDED(LOG_IF_FAILED(hr))
|
#define SUCCEEDED_LOG(hr) SUCCEEDED(LOG_IF_FAILED(hr))
|
||||||
#define FAILED_LOG(hr) FAILED(LOG_IF_FAILED(hr))
|
#define FAILED_LOG(hr) FAILED(LOG_IF_FAILED(hr))
|
||||||
|
|
||||||
|
#define RETURN_INT_IF_NOT_ZERO(val) do { if ((val) != 0) { return val; }} while (0, 0)
|
||||||
|
#define RETURN_IF_NOT_ZERO(val) do { if ((val) != 0) { return; }} while (0, 0)
|
||||||
|
|
||||||
inline thread_local IHttpTraceContext* g_traceContext;
|
inline thread_local IHttpTraceContext* g_traceContext;
|
||||||
|
|
||||||
__declspec(noinline) inline VOID TraceHRESULT(LOCATION_ARGUMENTS HRESULT hr)
|
__declspec(noinline) inline VOID TraceHRESULT(LOCATION_ARGUMENTS HRESULT hr)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ IN_PROCESS_APPLICATION::StopInternal(bool fServerInitiated)
|
||||||
VOID
|
VOID
|
||||||
IN_PROCESS_APPLICATION::StopClr()
|
IN_PROCESS_APPLICATION::StopClr()
|
||||||
{
|
{
|
||||||
// This has the state lock around it.
|
// This has the state lock around it.
|
||||||
LOG_INFO(L"Stopping CLR");
|
LOG_INFO(L"Stopping CLR");
|
||||||
|
|
||||||
if (!m_blockManagedCallbacks)
|
if (!m_blockManagedCallbacks)
|
||||||
|
|
@ -241,25 +241,19 @@ IN_PROCESS_APPLICATION::ExecuteApplication()
|
||||||
LOG_INFOF(L"Setting current directory to %s", this->QueryApplicationPhysicalPath().c_str());
|
LOG_INFOF(L"Setting current directory to %s", this->QueryApplicationPhysicalPath().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pConfig->QueryCallStartupHook())
|
auto startupReturnCode = context->m_hostFxr.InitializeForApp(context->m_argc, context->m_argv.get(), m_dotnetExeKnownLocation);
|
||||||
|
if (startupReturnCode != 0)
|
||||||
{
|
{
|
||||||
// Used to display developer exception page when there is an exception in main.
|
throw InvalidOperationException(format(L"Error occured when initializing inprocess application, Return code: 0x%x", startupReturnCode));
|
||||||
auto currentStartupHookEnv = Environment::GetEnvironmentVariableValue(DOTNETCORE_STARTUP_HOOK);
|
|
||||||
|
|
||||||
if (currentStartupHookEnv.has_value())
|
|
||||||
{
|
|
||||||
currentStartupHookEnv = currentStartupHookEnv.value() + L";" + ASPNETCORE_STARTUP_ASSEMBLY;
|
|
||||||
LOG_LAST_ERROR_IF(!SetEnvironmentVariable(DOTNETCORE_STARTUP_HOOK, currentStartupHookEnv.value().c_str()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_LAST_ERROR_IF(!SetEnvironmentVariable(DOTNETCORE_STARTUP_HOOK, ASPNETCORE_STARTUP_ASSEMBLY));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used to make .NET Runtime always log to event log when there is an unhandled exception.
|
if (m_pConfig->QueryCallStartupHook())
|
||||||
LOG_LAST_ERROR_IF(!SetEnvironmentVariable(L"COMPlus_UseEntryPointFilter", L"1"));
|
{
|
||||||
LOG_LAST_ERROR_IF(!SetEnvironmentVariable(L"COMPlus_DefaultStackSize", m_pConfig->QueryStackSize().c_str()));
|
RETURN_IF_NOT_ZERO(context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STARTUP_HOOK, ASPNETCORE_STARTUP_ASSEMBLY));
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_IF_NOT_ZERO(context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_USE_ENTRYPOINT_FILTER, L"1"));
|
||||||
|
RETURN_IF_NOT_ZERO(context->m_hostFxr.SetRuntimePropertyValue(DOTNETCORE_STACK_SIZE, m_pConfig->QueryStackSize().c_str()));
|
||||||
|
|
||||||
bool clrThreadExited;
|
bool clrThreadExited;
|
||||||
{
|
{
|
||||||
|
|
@ -434,6 +428,7 @@ IN_PROCESS_APPLICATION::ExecuteClr(const std::shared_ptr<ExecuteClrContext>& con
|
||||||
LOG_INFOF(L"Managed application exited with code %d", exitCode);
|
LOG_INFOF(L"Managed application exited with code %d", exitCode);
|
||||||
|
|
||||||
context->m_exitCode = exitCode;
|
context->m_exitCode = exitCode;
|
||||||
|
context->m_hostFxr.Close();
|
||||||
}
|
}
|
||||||
__except(GetExceptionCode() != 0)
|
__except(GetExceptionCode() != 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@ typedef BOOL(WINAPI * PFN_SHUTDOWN_HANDLER) (void* pvShutdownHandlerContext);
|
||||||
typedef REQUEST_NOTIFICATION_STATUS(WINAPI * PFN_ASYNC_COMPLETION_HANDLER)(void *pvManagedHttpContext, HRESULT hrCompletionStatus, DWORD cbCompletion);
|
typedef REQUEST_NOTIFICATION_STATUS(WINAPI * PFN_ASYNC_COMPLETION_HANDLER)(void *pvManagedHttpContext, HRESULT hrCompletionStatus, DWORD cbCompletion);
|
||||||
typedef void(WINAPI * PFN_REQUESTS_DRAINED_HANDLER) (void* pvShutdownHandlerContext);
|
typedef void(WINAPI * PFN_REQUESTS_DRAINED_HANDLER) (void* pvShutdownHandlerContext);
|
||||||
|
|
||||||
#define DOTNETCORE_STARTUP_HOOK L"DOTNET_STARTUP_HOOKS"
|
|
||||||
#define ASPNETCORE_STARTUP_ASSEMBLY L"Microsoft.AspNetCore.Server.IIS"
|
|
||||||
class IN_PROCESS_APPLICATION : public InProcessApplicationBase
|
class IN_PROCESS_APPLICATION : public InProcessApplicationBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,7 @@ namespace Microsoft.Extensions.Internal
|
||||||
}
|
}
|
||||||
|
|
||||||
// INotifyCompletion supplies a method matching "void OnCompleted(Action action)"
|
// INotifyCompletion supplies a method matching "void OnCompleted(Action action)"
|
||||||
var iNotifyCompletionMap = awaiterType
|
var onCompletedMethod = typeof(INotifyCompletion).GetRuntimeMethods().Single(m =>
|
||||||
.GetTypeInfo()
|
|
||||||
.GetRuntimeInterfaceMap(typeof(INotifyCompletion));
|
|
||||||
var onCompletedMethod = iNotifyCompletionMap.InterfaceMethods.Single(m =>
|
|
||||||
m.Name.Equals("OnCompleted", StringComparison.OrdinalIgnoreCase)
|
m.Name.Equals("OnCompleted", StringComparison.OrdinalIgnoreCase)
|
||||||
&& m.ReturnType == typeof(void)
|
&& m.ReturnType == typeof(void)
|
||||||
&& m.GetParameters().Length == 1
|
&& m.GetParameters().Length == 1
|
||||||
|
|
@ -89,10 +86,7 @@ namespace Microsoft.Extensions.Internal
|
||||||
if (implementsICriticalNotifyCompletion)
|
if (implementsICriticalNotifyCompletion)
|
||||||
{
|
{
|
||||||
// ICriticalNotifyCompletion supplies a method matching "void UnsafeOnCompleted(Action action)"
|
// ICriticalNotifyCompletion supplies a method matching "void UnsafeOnCompleted(Action action)"
|
||||||
var iCriticalNotifyCompletionMap = awaiterType
|
unsafeOnCompletedMethod = typeof(ICriticalNotifyCompletion).GetRuntimeMethods().Single(m =>
|
||||||
.GetTypeInfo()
|
|
||||||
.GetRuntimeInterfaceMap(typeof(ICriticalNotifyCompletion));
|
|
||||||
unsafeOnCompletedMethod = iCriticalNotifyCompletionMap.InterfaceMethods.Single(m =>
|
|
||||||
m.Name.Equals("UnsafeOnCompleted", StringComparison.OrdinalIgnoreCase)
|
m.Name.Equals("UnsafeOnCompleted", StringComparison.OrdinalIgnoreCase)
|
||||||
&& m.ReturnType == typeof(void)
|
&& m.ReturnType == typeof(void)
|
||||||
&& m.GetParameters().Length == 1
|
&& m.GetParameters().Length == 1
|
||||||
|
|
|
||||||
|
|
@ -457,7 +457,7 @@ describe("hubConnection", () => {
|
||||||
|
|
||||||
const complexObject = {
|
const complexObject = {
|
||||||
ByteArray: protocol.name === "json"
|
ByteArray: protocol.name === "json"
|
||||||
? new Array(0x68, 0x65, 0x6c, 0x6c, 0x6f)
|
? "aGVsbG8="
|
||||||
: new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x6f]),
|
: new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x6f]),
|
||||||
DateTime: protocol.name === "json"
|
DateTime: protocol.name === "json"
|
||||||
? "2002-04-01T10:20:15Z"
|
? "2002-04-01T10:20:15Z"
|
||||||
|
|
@ -499,7 +499,7 @@ describe("hubConnection", () => {
|
||||||
|
|
||||||
const complexObject = {
|
const complexObject = {
|
||||||
ByteArray: protocol.name === "json"
|
ByteArray: protocol.name === "json"
|
||||||
? new Array(0x1, 0x2, 0x3)
|
? "AQID"
|
||||||
: new Uint8Array([0x1, 0x2, 0x3]),
|
: new Uint8Array([0x1, 0x2, 0x3]),
|
||||||
DateTime: protocol.name === "json"
|
DateTime: protocol.name === "json"
|
||||||
? "2000-01-01T00:00:00Z"
|
? "2000-01-01T00:00:00Z"
|
||||||
|
|
|
||||||
|
|
@ -57,23 +57,6 @@ namespace Microsoft.AspNetCore.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove after https://github.com/dotnet/corefx/issues/33295 is done
|
|
||||||
public static void Skip(this ref Utf8JsonReader reader)
|
|
||||||
{
|
|
||||||
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
||||||
{
|
|
||||||
reader.Read();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reader.TokenType == JsonTokenType.StartObject || reader.TokenType == JsonTokenType.StartArray)
|
|
||||||
{
|
|
||||||
int depth = reader.CurrentDepth;
|
|
||||||
while (reader.Read() && depth < reader.CurrentDepth)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string ReadAsString(this ref Utf8JsonReader reader, string propertyName)
|
public static string ReadAsString(this ref Utf8JsonReader reader, string propertyName)
|
||||||
{
|
{
|
||||||
reader.Read();
|
reader.Read();
|
||||||
|
|
|
||||||
|
|
@ -105,32 +105,32 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
|
||||||
{
|
{
|
||||||
new JsonProtocolTestData("InvocationMessage_HasFloatArgument", new InvocationMessage(null, "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
new JsonProtocolTestData("InvocationMessage_HasFloatArgument", new InvocationMessage(null, "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
||||||
new JsonProtocolTestData("InvocationMessage_StringIsoDateArgument", new InvocationMessage("Method", new object[] { "2016-05-10T13:51:20+12:34" }), true, true, "{\"type\":1,\"target\":\"Method\",\"arguments\":[\"2016-05-10T13:51:20\\u002b12:34\"]}"),
|
new JsonProtocolTestData("InvocationMessage_StringIsoDateArgument", new InvocationMessage("Method", new object[] { "2016-05-10T13:51:20+12:34" }), true, true, "{\"type\":1,\"target\":\"Method\",\"arguments\":[\"2016-05-10T13:51:20\\u002b12:34\"]}"),
|
||||||
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnore", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnore", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueInclude", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueInclude", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("InvocationMessage_HasHeaders", AddHeaders(TestHeaders, new InvocationMessage("123", "Target", new object[] { 1, "Foo", 2.0f })), true, true, "{\"type\":1," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
new JsonProtocolTestData("InvocationMessage_HasHeaders", AddHeaders(TestHeaders, new InvocationMessage("123", "Target", new object[] { 1, "Foo", 2.0f })), true, true, "{\"type\":1," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
||||||
|
|
||||||
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnore", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnore", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnoreAndNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnoreAndNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueInclude", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueInclude", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("StreamItemMessage_HasFloatItem", new StreamItemMessage("123", 2.0f), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":2}"),
|
new JsonProtocolTestData("StreamItemMessage_HasFloatItem", new StreamItemMessage("123", 2.0f), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":2}"),
|
||||||
new JsonProtocolTestData("StreamItemMessage_HasHeaders", AddHeaders(TestHeaders, new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } })), true, false, "{\"type\":2," + SerializedHeaders + ",\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("StreamItemMessage_HasHeaders", AddHeaders(TestHeaders, new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } })), true, false, "{\"type\":2," + SerializedHeaders + ",\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}}"),
|
||||||
|
|
||||||
new JsonProtocolTestData("CompletionMessage_HasFloatResult", CompletionMessage.WithResult("123", 2.0f), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":2}"),
|
new JsonProtocolTestData("CompletionMessage_HasFloatResult", CompletionMessage.WithResult("123", 2.0f), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":2}"),
|
||||||
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIgnore", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIgnore", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIncludeAndNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIncludeAndNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueInclude", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}}"),
|
new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueInclude", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}}"),
|
||||||
new JsonProtocolTestData("CompletionMessage_HasErrorAndCamelCase", CompletionMessage.Empty("123"), true, true, "{\"type\":3,\"invocationId\":\"123\"}"),
|
new JsonProtocolTestData("CompletionMessage_HasErrorAndCamelCase", CompletionMessage.Empty("123"), true, true, "{\"type\":3,\"invocationId\":\"123\"}"),
|
||||||
|
|
||||||
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnore", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnore", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueInclude", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueInclude", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}]}"),
|
||||||
new JsonProtocolTestData("StreamInvocationMessage_HasFloatArgument", new StreamInvocationMessage("123", "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
new JsonProtocolTestData("StreamInvocationMessage_HasFloatArgument", new StreamInvocationMessage("123", "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
|
||||||
new JsonProtocolTestData("StreamInvocationMessage_HasHeaders", AddHeaders(TestHeaders, new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } })), true, false, "{\"type\":4," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}]}"),
|
new JsonProtocolTestData("StreamInvocationMessage_HasHeaders", AddHeaders(TestHeaders, new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } })), true, false, "{\"type\":4," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}]}"),
|
||||||
}.ToDictionary(t => t.Name);
|
}.ToDictionary(t => t.Name);
|
||||||
|
|
||||||
public static IEnumerable<object[]> CustomProtocolTestDataNames => CustomProtocolTestData.Keys.Select(name => new object[] { name });
|
public static IEnumerable<object[]> CustomProtocolTestDataNames => CustomProtocolTestData.Keys.Select(name => new object[] { name });
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue