Merge pull request #13019 from dotnet-maestro-bot/merge/release/3.0-to-master
[automated] Merge branch 'release/3.0' => 'master'
This commit is contained in:
commit
057ec9cfae
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
<!-- These projects use 'legacy' csproj, which is not supported by dotnet-msbuild. -->
|
||||
<ProjectToExclude Include="
|
||||
$(RepoRoot)src\Components\Blazor\BlazorExtension\src\Microsoft.VisualStudio.BlazorExtension.csproj;
|
||||
$(RepoRoot)src\Servers\HttpSys\samples\TestClient\TestClient.csproj;
|
||||
$(RepoRoot)src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj;
|
||||
"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
-->
|
||||
<Project>
|
||||
<ItemGroup>
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" ProjectPath="$(RepoRoot)src\Identity\ApiAuthorization.IdentityServer\src\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Identity.Specification.Tests" ProjectPath="$(RepoRoot)src\Identity\Specification.Tests\src\Microsoft.AspNetCore.Identity.Specification.Tests.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Web.Xdt.Extensions" ProjectPath="$(RepoRoot)src\SiteExtensions\Microsoft.Web.Xdt.Extensions\src\Microsoft.Web.Xdt.Extensions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DeveloperCertificates.XPlat" ProjectPath="$(RepoRoot)src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj" />
|
||||
|
|
@ -44,7 +45,6 @@
|
|||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Routing" ProjectPath="$(RepoRoot)src\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj" RefProjectPath="$(RepoRoot)src\Http\Routing\ref\Microsoft.AspNetCore.Routing.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.WebUtilities" ProjectPath="$(RepoRoot)src\Http\WebUtilities\src\Microsoft.AspNetCore.WebUtilities.csproj" RefProjectPath="$(RepoRoot)src\Http\WebUtilities\ref\Microsoft.AspNetCore.WebUtilities.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Html.Abstractions" ProjectPath="$(RepoRoot)src\Html\Abstractions\src\Microsoft.AspNetCore.Html.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Html\Abstractions\ref\Microsoft.AspNetCore.Html.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" ProjectPath="$(RepoRoot)src\Identity\ApiAuthorization.IdentityServer\src\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj" RefProjectPath="$(RepoRoot)src\Identity\ApiAuthorization.IdentityServer\ref\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Identity" ProjectPath="$(RepoRoot)src\Identity\Core\src\Microsoft.AspNetCore.Identity.csproj" RefProjectPath="$(RepoRoot)src\Identity\Core\ref\Microsoft.AspNetCore.Identity.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" ProjectPath="$(RepoRoot)src\Identity\EntityFrameworkCore\src\Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj" RefProjectPath="$(RepoRoot)src\Identity\EntityFrameworkCore\ref\Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Extensions.Identity.Core" ProjectPath="$(RepoRoot)src\Identity\Extensions.Core\src\Microsoft.Extensions.Identity.Core.csproj" RefProjectPath="$(RepoRoot)src\Identity\Extensions.Core\ref\Microsoft.Extensions.Identity.Core.csproj" />
|
||||
|
|
@ -131,10 +131,12 @@
|
|||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Core" ProjectPath="$(RepoRoot)src\SignalR\server\Core\src\Microsoft.AspNetCore.SignalR.Core.csproj" RefProjectPath="$(RepoRoot)src\SignalR\server\Core\ref\Microsoft.AspNetCore.SignalR.Core.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR" ProjectPath="$(RepoRoot)src\SignalR\server\SignalR\src\Microsoft.AspNetCore.SignalR.csproj" RefProjectPath="$(RepoRoot)src\SignalR\server\SignalR\ref\Microsoft.AspNetCore.SignalR.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" ProjectPath="$(RepoRoot)src\SignalR\server\StackExchangeRedis\src\Microsoft.AspNetCore.SignalR.StackExchangeRedis.csproj" RefProjectPath="$(RepoRoot)src\SignalR\server\StackExchangeRedis\ref\Microsoft.AspNetCore.SignalR.StackExchangeRedis.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Authorization" ProjectPath="$(RepoRoot)src\Components\Authorization\src\Microsoft.AspNetCore.Components.Authorization.csproj" RefProjectPath="$(RepoRoot)src\Components\Authorization\ref\Microsoft.AspNetCore.Components.Authorization.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor" ProjectPath="$(RepoRoot)src\Components\Blazor\Blazor\src\Microsoft.AspNetCore.Blazor.csproj" RefProjectPath="$(RepoRoot)src\Components\Blazor\Blazor\ref\Microsoft.AspNetCore.Blazor.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.HttpClient" ProjectPath="$(RepoRoot)src\Components\Blazor\Http\src\Microsoft.AspNetCore.Blazor.HttpClient.csproj" RefProjectPath="$(RepoRoot)src\Components\Blazor\Http\ref\Microsoft.AspNetCore.Blazor.HttpClient.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.Server" ProjectPath="$(RepoRoot)src\Components\Blazor\Server\src\Microsoft.AspNetCore.Blazor.Server.csproj" RefProjectPath="$(RepoRoot)src\Components\Blazor\Server\ref\Microsoft.AspNetCore.Blazor.Server.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components" ProjectPath="$(RepoRoot)src\Components\Components\src\Microsoft.AspNetCore.Components.csproj" RefProjectPath="$(RepoRoot)src\Components\Components\ref\Microsoft.AspNetCore.Components.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Forms" ProjectPath="$(RepoRoot)src\Components\Forms\src\Microsoft.AspNetCore.Components.Forms.csproj" RefProjectPath="$(RepoRoot)src\Components\Forms\ref\Microsoft.AspNetCore.Components.Forms.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Server" ProjectPath="$(RepoRoot)src\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj" RefProjectPath="$(RepoRoot)src\Components\Server\ref\Microsoft.AspNetCore.Components.Server.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Web" ProjectPath="$(RepoRoot)src\Components\Web\src\Microsoft.AspNetCore.Components.Web.csproj" RefProjectPath="$(RepoRoot)src\Components\Web\ref\Microsoft.AspNetCore.Components.Web.csproj" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
These compilation references are necessary to compile netstandard2.0 assemblies which are in the shared framework.
|
||||
This references are part of Microsoft.NETCore.App, so are listed here as references to be used during compilation only.
|
||||
-->
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'netstandard2.1'">
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or $(TargetFrameworks.Contains('netstandard2.0')) or '$(TargetFramework)' == 'netstandard2.1'">
|
||||
<_CompilationOnlyReference Include="Microsoft.Win32.Registry" />
|
||||
<_CompilationOnlyReference Include="System.Security.Cryptography.Cng" />
|
||||
<_CompilationOnlyReference Include="System.Security.Principal.Windows" />
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
These compilation references are necessary to workaround the mismatch of what is found in the ref pack for NETCore.App and what
|
||||
is actually present at runtime. See https://github.com/dotnet/corefx/issues/34906
|
||||
-->
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0' or $(TargetFrameworks.Contains('netcoreapp3.0'))">
|
||||
<_CompilationOnlyReference Include="Microsoft.Win32.Registry" />
|
||||
<_CompilationOnlyReference Include="System.Security.Cryptography.Cng" />
|
||||
<_CompilationOnlyReference Include="System.Security.Principal.Windows" />
|
||||
|
|
|
|||
|
|
@ -22,7 +22,9 @@
|
|||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Connections.Common" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Protocols.Json" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Common" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components.Authorization" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components.Forms" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components.Web" />
|
||||
|
||||
<!-- These assemblies are only in the shared framework -->
|
||||
|
|
|
|||
|
|
@ -29,412 +29,412 @@
|
|||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||
<Sha>448a88e86d20fd9315901f663318d64c9c6841bf</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="dotnet-ef" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="dotnet-ef" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview9.19405.13">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview9.19412.3">
|
||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||
<Sha>07ed34e80585ca9575ea0265921d42a203193b21</Sha>
|
||||
<Sha>e33237ee4210a27d16747aba8dd655cabc808922</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64" Pinned="true">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Drawing.Common" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Drawing.Common" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Json" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Text.Json" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Windows.Extensions" Version="4.6.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="System.Windows.Extensions" Version="4.6.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview8-28379-05" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview9-19410-12" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>d15a0adeb874801e7bfaa4fbbb306a2efa268497</Sha>
|
||||
<Sha>9408f55c19a0a9118a23b05f83200a3534dd9f7f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="3.0.0-preview8-28379-05" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="3.0.0-preview9-19410-12" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>d15a0adeb874801e7bfaa4fbbb306a2efa268497</Sha>
|
||||
<Sha>9408f55c19a0a9118a23b05f83200a3534dd9f7f</Sha>
|
||||
</Dependency>
|
||||
<!--
|
||||
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
|
||||
All Runtime.$rid packages should have the same version.
|
||||
-->
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="3.0.0-preview8-28379-05" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="3.0.0-preview9-19410-12" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>d15a0adeb874801e7bfaa4fbbb306a2efa268497</Sha>
|
||||
<Sha>9408f55c19a0a9118a23b05f83200a3534dd9f7f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview8-28379-05" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview9-19410-12" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||
<Sha>d15a0adeb874801e7bfaa4fbbb306a2efa268497</Sha>
|
||||
<Sha>9408f55c19a0a9118a23b05f83200a3534dd9f7f</Sha>
|
||||
</Dependency>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview8.19378.8" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview9.19409.17" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||
<Sha>80f411d58df8338ccd9430900b541a037a9cb383</Sha>
|
||||
<Sha>b82d2bc44424c8a99a1f0fc13202bdfd43e6f9f5</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19404.1">
|
||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19411.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>b1c2f33f0cef32d1df6e7f388017fd6761d3fcad</Sha>
|
||||
<Sha>a11024c8c22cc762011addafc30c653c938048f4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.19404.1">
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.19411.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>b1c2f33f0cef32d1df6e7f388017fd6761d3fcad</Sha>
|
||||
<Sha>a11024c8c22cc762011addafc30c653c938048f4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.19404.1">
|
||||
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.19411.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>b1c2f33f0cef32d1df6e7f388017fd6761d3fcad</Sha>
|
||||
<Sha>a11024c8c22cc762011addafc30c653c938048f4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview9.19405.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview9.19411.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||
<Sha>86469ee35cf718e0122f16f52b486303dcfbb1fe</Sha>
|
||||
<Sha>14c51735aa12343b7b0e53ae775990ab9c98c42f</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.3.0-beta3-19401-01" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.3.0-beta3-19409-05" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/roslyn</Uri>
|
||||
<Sha>e9b4c66fb2f26bca02d4a718c48c1c39e9963c9f</Sha>
|
||||
<Sha>ed92d532473db83c1db47b313ee1c1bd7520aa08</Sha>
|
||||
</Dependency>
|
||||
</ToolsetDependencies>
|
||||
</Dependencies>
|
||||
|
|
|
|||
|
|
@ -55,112 +55,112 @@
|
|||
-->
|
||||
<PropertyGroup Label="Automated">
|
||||
<!-- Packages from dotnet/arcade -->
|
||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19404.1</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19411.1</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<!-- Packages from dotnet/roslyn -->
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.3.0-beta3-19401-01</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.3.0-beta3-19409-05</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<!-- Packages from dotnet/core-setup -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview8-28379-05</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>3.0.0-preview8-28379-05</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.0.0-preview8-28379-05</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview8-28379-05</NETStandardLibraryRefPackageVersion>
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview9-19410-12</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>3.0.0-preview9-19410-12</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.0.0-preview9-19410-12</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0-preview9-19410-12</NETStandardLibraryRefPackageVersion>
|
||||
<!-- Packages from dotnet/corefx -->
|
||||
<MicrosoftBclAsyncInterfacesPackageVersion>1.0.0-preview8.19378.8</MicrosoftBclAsyncInterfacesPackageVersion>
|
||||
<MicrosoftCSharpPackageVersion>4.6.0-preview8.19378.8</MicrosoftCSharpPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview8.19378.8</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>4.6.0-preview8.19378.8</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview8.19378.8</SystemComponentModelAnnotationsPackageVersion>
|
||||
<MicrosoftBclAsyncInterfacesPackageVersion>1.0.0-preview9.19409.17</MicrosoftBclAsyncInterfacesPackageVersion>
|
||||
<MicrosoftCSharpPackageVersion>4.6.0-preview9.19409.17</MicrosoftCSharpPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview9.19409.17</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>4.6.0-preview9.19409.17</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview9.19409.17</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview8.19378.8</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>4.6.0-preview8.19378.8</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview8.19378.8</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview8.19378.8</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview8.19378.8</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview8.19378.8</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview8.19378.8</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview8.19378.8</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview8.19378.8</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview8.19378.8</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview8.19378.8</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview8.19378.8</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview8.19378.8</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview8.19378.8</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>4.6.0-preview8.19378.8</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview8.19378.8</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>4.6.0-preview8.19378.8</SystemWindowsExtensionsPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview9.19409.17</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>4.6.0-preview9.19409.17</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview9.19409.17</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview9.19409.17</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview9.19409.17</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview9.19409.17</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview9.19409.17</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview9.19409.17</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview9.19409.17</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview9.19409.17</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview9.19409.17</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview9.19409.17</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview9.19409.17</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview9.19409.17</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>4.6.0-preview9.19409.17</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview9.19409.17</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>4.6.0-preview9.19409.17</SystemWindowsExtensionsPackageVersion>
|
||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview8.19378.8</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview9.19409.17</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<!-- Packages from aspnet/Blazor -->
|
||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>5.0.0-alpha1.19405.2</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||
<!-- Packages from aspnet/Extensions -->
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview9.19405.2</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview9.19405.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview9.19405.2</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview9.19405.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview9.19405.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview9.19405.2</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview9.19405.2</MonoWebAssemblyInteropPackageVersion>
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview9.19411.2</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview9.19411.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview9.19411.2</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview9.19411.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview9.19411.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview9.19411.2</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview9.19411.2</MonoWebAssemblyInteropPackageVersion>
|
||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||
<dotnetefPackageVersion>3.0.0-preview9.19405.13</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview9.19405.13</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview9.19405.13</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview9.19405.13</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview9.19405.13</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview9.19405.13</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview9.19405.13</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<dotnetefPackageVersion>3.0.0-preview9.19412.3</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview9.19412.3</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview9.19412.3</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview9.19412.3</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview9.19412.3</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview9.19412.3</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview9.19412.3</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-alpha1.19407.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-alpha1.19407.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
|
|
@ -227,11 +227,11 @@
|
|||
<FSharpCorePackageVersion>4.2.1</FSharpCorePackageVersion>
|
||||
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
|
||||
<GrpcAspNetCorePackageVersion>0.1.22-pre3</GrpcAspNetCorePackageVersion>
|
||||
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview3.4</IdentityServer4AspNetIdentityPackageVersion>
|
||||
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkPackageVersion>
|
||||
<IdentityServer4PackageVersion>3.0.0-preview3.4</IdentityServer4PackageVersion>
|
||||
<IdentityServer4StoragePackageVersion>3.0.0-preview3.4</IdentityServer4StoragePackageVersion>
|
||||
<IdentityServer4EntityFrameworkStoragePackageVersion>3.0.0-preview3.4</IdentityServer4EntityFrameworkStoragePackageVersion>
|
||||
<IdentityServer4AspNetIdentityPackageVersion>3.0.0-preview7.33</IdentityServer4AspNetIdentityPackageVersion>
|
||||
<IdentityServer4EntityFrameworkPackageVersion>3.0.0-preview7.33</IdentityServer4EntityFrameworkPackageVersion>
|
||||
<IdentityServer4PackageVersion>3.0.0-preview7.33</IdentityServer4PackageVersion>
|
||||
<IdentityServer4StoragePackageVersion>3.0.0-preview7.33</IdentityServer4StoragePackageVersion>
|
||||
<IdentityServer4EntityFrameworkStoragePackageVersion>3.0.0-preview7.33</IdentityServer4EntityFrameworkStoragePackageVersion>
|
||||
<MessagePackPackageVersion>1.7.3.7</MessagePackPackageVersion>
|
||||
<MoqPackageVersion>4.10.0</MoqPackageVersion>
|
||||
<MonoCecilPackageVersion>0.10.1</MonoCecilPackageVersion>
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ jobs:
|
|||
displayName: Run SDL tool
|
||||
variables:
|
||||
- group: DotNet-VSTS-Bot
|
||||
pool:
|
||||
name: Hosted VS2017
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ stages:
|
|||
filePath: eng\common\sdk-task.ps1
|
||||
arguments: -task SigningValidation -restore -msbuildEngine dotnet
|
||||
/p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts'
|
||||
/p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt'
|
||||
/p:Configuration=Release
|
||||
|
||||
- ${{ if eq(parameters.enableSourceLinkValidation, 'true') }}:
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<HelixTimeout>00:30:00</HelixTimeout>
|
||||
<IsWindowsHelixQueue>false</IsWindowsHelixQueue>
|
||||
<IsWindowsHelixQueue Condition="$(HelixTargetQueue.Contains('Windows')) or $(HelixTargetQueue.Contains('windows'))">true</IsWindowsHelixQueue>
|
||||
<HelixTestName>$(MSBuildProjectName)/$(TargetFramework)</HelixTestName>
|
||||
<HelixTestName>$(MSBuildProjectName)-$(TargetFramework)</HelixTestName>
|
||||
<HelixUseArchive>false</HelixUseArchive>
|
||||
<LoggingTestingDisableFileLogging Condition="'$(IsHelixJob)' == 'true'">true</LoggingTestingDisableFileLogging>
|
||||
<NodeVersion>10.15.3</NodeVersion>
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'false'">
|
||||
<HelixPreCommand Include="./installnode.sh $(NodeVersion) $(TargetArchitecture)" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'true'">
|
||||
<HelixPreCommand Include="call RunPowershell.cmd InstallNode.ps1 $(NodeVersion) %25HELIX_CORRELATION_PAYLOAD%25\node\bin || exit /b 1" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
},
|
||||
"msbuild-sdks": {
|
||||
"Yarn.MSBuild": "1.15.2",
|
||||
"Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19404.1",
|
||||
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19404.1"
|
||||
"Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19411.1",
|
||||
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19411.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
<!-- This file is automatically generated. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.Authorization.netstandard2.0.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.Authorization.netcoreapp3.0.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public partial class AuthenticationState
|
||||
{
|
||||
public AuthenticationState(System.Security.Claims.ClaimsPrincipal user) { }
|
||||
public System.Security.Claims.ClaimsPrincipal User { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public delegate void AuthenticationStateChangedHandler(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> task);
|
||||
public abstract partial class AuthenticationStateProvider
|
||||
{
|
||||
protected AuthenticationStateProvider() { }
|
||||
public event Microsoft.AspNetCore.Components.Authorization.AuthenticationStateChangedHandler AuthenticationStateChanged { add { } remove { } }
|
||||
public abstract System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> GetAuthenticationStateAsync();
|
||||
protected void NotifyAuthenticationStateChanged(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> task) { }
|
||||
}
|
||||
public sealed partial class AuthorizeRouteView : Microsoft.AspNetCore.Components.RouteView
|
||||
{
|
||||
public AuthorizeRouteView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void Render(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
}
|
||||
public partial class AuthorizeView : Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore
|
||||
{
|
||||
public AuthorizeView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Policy { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Roles { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override Microsoft.AspNetCore.Authorization.IAuthorizeData[] GetAuthorizeData() { throw null; }
|
||||
}
|
||||
public abstract partial class AuthorizeViewCore : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
protected AuthorizeViewCore() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> Authorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public object Resource { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected abstract Microsoft.AspNetCore.Authorization.IAuthorizeData[] GetAuthorizeData();
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute]
|
||||
protected override System.Threading.Tasks.Task OnParametersSetAsync() { throw null; }
|
||||
}
|
||||
public partial class CascadingAuthenticationState : Microsoft.AspNetCore.Components.ComponentBase, System.IDisposable
|
||||
{
|
||||
public CascadingAuthenticationState() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected override void OnInitialized() { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
}
|
||||
public partial interface IHostEnvironmentAuthenticationStateProvider
|
||||
{
|
||||
void SetAuthenticationState(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> authenticationStateTask);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public partial class AuthenticationState
|
||||
{
|
||||
public AuthenticationState(System.Security.Claims.ClaimsPrincipal user) { }
|
||||
public System.Security.Claims.ClaimsPrincipal User { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public delegate void AuthenticationStateChangedHandler(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> task);
|
||||
public abstract partial class AuthenticationStateProvider
|
||||
{
|
||||
protected AuthenticationStateProvider() { }
|
||||
public event Microsoft.AspNetCore.Components.Authorization.AuthenticationStateChangedHandler AuthenticationStateChanged { add { } remove { } }
|
||||
public abstract System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> GetAuthenticationStateAsync();
|
||||
protected void NotifyAuthenticationStateChanged(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> task) { }
|
||||
}
|
||||
public sealed partial class AuthorizeRouteView : Microsoft.AspNetCore.Components.RouteView
|
||||
{
|
||||
public AuthorizeRouteView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void Render(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
}
|
||||
public partial class AuthorizeView : Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore
|
||||
{
|
||||
public AuthorizeView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Policy { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Roles { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override Microsoft.AspNetCore.Authorization.IAuthorizeData[] GetAuthorizeData() { throw null; }
|
||||
}
|
||||
public abstract partial class AuthorizeViewCore : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
protected AuthorizeViewCore() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> Authorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public object Resource { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected abstract Microsoft.AspNetCore.Authorization.IAuthorizeData[] GetAuthorizeData();
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute]
|
||||
protected override System.Threading.Tasks.Task OnParametersSetAsync() { throw null; }
|
||||
}
|
||||
public partial class CascadingAuthenticationState : Microsoft.AspNetCore.Components.ComponentBase, System.IDisposable
|
||||
{
|
||||
public CascadingAuthenticationState() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected override void OnInitialized() { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
}
|
||||
public partial interface IHostEnvironmentAuthenticationStateProvider
|
||||
{
|
||||
void SetAuthenticationState(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> authenticationStateTask);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,10 +4,9 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Auth
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
internal static class AttributeAuthorizeDataCache
|
||||
{
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
using System;
|
||||
using System.Security.Claims;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides information about the currently authenticated user, if any.
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides information about the authentication state of the current user.
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
using System;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
// This is so the AuthorizeView can avoid implementing IAuthorizeData (even privately)
|
||||
internal class AuthorizeDataAdapter : IAuthorizeData
|
||||
|
|
@ -3,10 +3,9 @@
|
|||
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Auth;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Combines the behaviors of <see cref="AuthorizeView"/> and <see cref="RouteView"/>,
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Displays differing content depending on the user's authorization status.
|
||||
|
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// A base class for components that display differing content depending on the user's authorization status.
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
@namespace Microsoft.AspNetCore.Components
|
||||
@implements IDisposable
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// An interface implemented by <see cref="AuthenticationStateProvider"/> classes that can receive authentication
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Razor">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
|
||||
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' == 'true'">netcoreapp3.0</TargetFrameworks>
|
||||
<IsAspNetCoreApp>true</IsAspNetCoreApp>
|
||||
<Description>Authentication and authorization support for Blazor applications.</Description>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<IsShippingPackage>true</IsShippingPackage>
|
||||
<RazorLangVersion>3.0</RazorLangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -12,7 +12,7 @@ using Microsoft.AspNetCore.Components.Test.Helpers;
|
|||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class AuthorizeRouteViewTest
|
||||
{
|
||||
|
|
@ -16,7 +16,7 @@ using Microsoft.AspNetCore.Components.Test.Helpers;
|
|||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class AuthorizeViewTest
|
||||
{
|
||||
|
|
@ -12,7 +12,7 @@ using Microsoft.AspNetCore.Components.Test.Helpers;
|
|||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class CascadingAuthenticationStateTest
|
||||
{
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<RootNamespace>Microsoft.AspNetCore.Components.Authorization</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Authorization" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(ComponentsSharedSourceRoot)test\**\*.cs" LinkBase="Helpers" />
|
||||
<Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestAuthenticationStateProvider : AuthenticationStateProvider
|
||||
{
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestAuthorizationPolicyProvider : IAuthorizationPolicyProvider
|
||||
{
|
||||
|
|
@ -7,7 +7,7 @@ using System.Security.Claims;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestAuthorizationService : IAuthorizationService
|
||||
{
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
using System.Security.Principal;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestIdentity : IIdentity
|
||||
{
|
||||
|
|
@ -7,5 +7,6 @@
|
|||
<Compile Include="Microsoft.AspNetCore.Blazor.netstandard2.0.cs" />
|
||||
<Reference Include="Mono.WebAssembly.Interop" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Web" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -106,6 +106,8 @@ namespace Microsoft.AspNetCore.Blazor.Hosting
|
|||
});
|
||||
|
||||
// Needed for authorization
|
||||
// However, since authorization isn't on by default, we could consider removing these and
|
||||
// having a separate services.AddBlazorAuthorization() call that brings in the required services.
|
||||
services.AddOptions();
|
||||
services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(WebAssemblyConsoleLogger<>)));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
<ItemGroup>
|
||||
<Reference Include="Mono.WebAssembly.Interop" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Web" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -1,56 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using Microsoft.VisualStudio.Shell;
|
||||
|
||||
namespace Microsoft.VisualStudio.BlazorExtension
|
||||
{
|
||||
public class AboutDialogInfoAttribute : RegistrationAttribute
|
||||
{
|
||||
private readonly string _detailsId;
|
||||
private readonly string _name;
|
||||
private readonly string _nameId;
|
||||
private readonly string _packageGuid;
|
||||
|
||||
// nameId and detailsId are resource IDs, they should start with #
|
||||
public AboutDialogInfoAttribute(string packageGuid, string name, string nameId, string detailsId)
|
||||
{
|
||||
_packageGuid = packageGuid;
|
||||
_name = name;
|
||||
_nameId = nameId;
|
||||
_detailsId = detailsId;
|
||||
}
|
||||
|
||||
private string GetKeyName()
|
||||
{
|
||||
return "InstalledProducts\\" + _name;
|
||||
}
|
||||
|
||||
public override void Register(RegistrationContext context)
|
||||
{
|
||||
var version = typeof(AboutDialogInfoAttribute).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
|
||||
|
||||
using (var key = context.CreateKey(GetKeyName()))
|
||||
{
|
||||
key.SetValue(null, _nameId);
|
||||
key.SetValue("Package", Guid.Parse(_packageGuid).ToString("B"));
|
||||
key.SetValue("ProductDetails", _detailsId);
|
||||
key.SetValue("UseInterface", false);
|
||||
key.SetValue("UseVSProductID", false);
|
||||
|
||||
if (version != null)
|
||||
{
|
||||
key.SetValue("PID", version);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Unregister(RegistrationContext context)
|
||||
{
|
||||
context.RemoveKey(GetKeyName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,147 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.IO.Pipes;
|
||||
using System.Security.AccessControl;
|
||||
using System.Security.Principal;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Package = Microsoft.VisualStudio.Shell.Package;
|
||||
using ThreadHelper = Microsoft.VisualStudio.Shell.ThreadHelper;
|
||||
|
||||
namespace Microsoft.VisualStudio.BlazorExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// The counterpart to VSForWindowsRebuildService.cs in the Blazor.Server project.
|
||||
/// Listens for named pipe connections and rebuilds projects on request.
|
||||
/// </summary>
|
||||
internal class AutoRebuildService
|
||||
{
|
||||
private const int _protocolVersion = 1;
|
||||
private readonly BuildEventsWatcher _buildEventsWatcher;
|
||||
private readonly string _pipeName;
|
||||
|
||||
public AutoRebuildService(BuildEventsWatcher buildEventsWatcher)
|
||||
{
|
||||
_buildEventsWatcher = buildEventsWatcher ?? throw new ArgumentNullException(nameof(buildEventsWatcher));
|
||||
_pipeName = $"BlazorAutoRebuild\\{Process.GetCurrentProcess().Id}";
|
||||
}
|
||||
|
||||
public void Listen()
|
||||
{
|
||||
_ = AddBuildServiceNamedPipeServerAsync();
|
||||
}
|
||||
|
||||
private Task AddBuildServiceNamedPipeServerAsync()
|
||||
{
|
||||
return Task.Factory.StartNew(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var identity = WindowsIdentity.GetCurrent();
|
||||
var identifier = identity.Owner;
|
||||
var security = new PipeSecurity();
|
||||
|
||||
// Restrict access to just this account.
|
||||
var rule = new PipeAccessRule(identifier, PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow);
|
||||
security.AddAccessRule(rule);
|
||||
security.SetOwner(identifier);
|
||||
|
||||
// And our current elevation level
|
||||
var principal = new WindowsPrincipal(identity);
|
||||
var isServerElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
|
||||
using (var serverPipe = new NamedPipeServerStream(
|
||||
_pipeName,
|
||||
PipeDirection.InOut,
|
||||
NamedPipeServerStream.MaxAllowedServerInstances,
|
||||
PipeTransmissionMode.Byte,
|
||||
PipeOptions.Asynchronous | PipeOptions.WriteThrough,
|
||||
0x10000, // 64k input buffer
|
||||
0x10000, // 64k output buffer
|
||||
security,
|
||||
HandleInheritability.None))
|
||||
{
|
||||
// As soon as we receive a connection, spin up another background
|
||||
// listener to wait for the next connection
|
||||
await serverPipe.WaitForConnectionAsync();
|
||||
_ = AddBuildServiceNamedPipeServerAsync();
|
||||
|
||||
await HandleRequestAsync(serverPipe, isServerElevated);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await AttemptLogErrorAsync(
|
||||
$"Error in Blazor AutoRebuildService:\n{ex.Message}\n{ex.StackTrace}");
|
||||
}
|
||||
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
|
||||
}
|
||||
|
||||
private async Task HandleRequestAsync(NamedPipeServerStream stream, bool isServerElevated)
|
||||
{
|
||||
// Protocol:
|
||||
// 1. Send a "protocol version" number to the client
|
||||
// 2. Receive the project path from the client
|
||||
// If it is the special string "abort", gracefully disconnect and end
|
||||
// This is to allow for mismatches between server and client protocol version
|
||||
// 3. Receive the "if not built since" timestamp from the client
|
||||
// 4. Perform the build, then send back the success/failure result flag
|
||||
// Keep in sync with VSForWindowsRebuildService.cs in the Blazor.Server project
|
||||
// In the future we may extend this to getting back build error details
|
||||
await stream.WriteIntAsync(_protocolVersion);
|
||||
var projectPath = await stream.ReadStringAsync();
|
||||
|
||||
// We can't do the security check for elevation until we read from the stream.
|
||||
if (isServerElevated != IsClientElevated(stream))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (projectPath.Equals("abort", StringComparison.Ordinal))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var allowExistingBuildsSince = await stream.ReadDateTimeAsync();
|
||||
var buildResult = await _buildEventsWatcher.PerformBuildAsync(projectPath, allowExistingBuildsSince);
|
||||
await stream.WriteBoolAsync(buildResult);
|
||||
}
|
||||
|
||||
private async Task AttemptLogErrorAsync(string message)
|
||||
{
|
||||
if (!ThreadHelper.CheckAccess())
|
||||
{
|
||||
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
||||
}
|
||||
|
||||
var outputWindow = (IVsOutputWindow)Package.GetGlobalService(typeof(SVsOutputWindow));
|
||||
if (outputWindow != null)
|
||||
{
|
||||
outputWindow.GetPane(VSConstants.OutputWindowPaneGuid.BuildOutputPane_guid, out var pane);
|
||||
if (pane != null)
|
||||
{
|
||||
pane.OutputString(message);
|
||||
pane.Activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool? IsClientElevated(NamedPipeServerStream stream)
|
||||
{
|
||||
bool? isClientElevated = null;
|
||||
stream.RunAsClient(() =>
|
||||
{
|
||||
var identity = WindowsIdentity.GetCurrent(ifImpersonating: true);
|
||||
var principal = new WindowsPrincipal(identity);
|
||||
isClientElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
});
|
||||
|
||||
return isClientElevated;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,184 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.Shell;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
|
||||
namespace Microsoft.VisualStudio.BlazorExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Watches for Blazor project build events, starts new builds, and tracks builds in progress.
|
||||
/// </summary>
|
||||
internal class BuildEventsWatcher : IVsUpdateSolutionEvents2
|
||||
{
|
||||
private const string BlazorProjectCapability = "Blazor";
|
||||
private readonly IVsSolution _vsSolution;
|
||||
private readonly IVsSolutionBuildManager _vsBuildManager;
|
||||
private readonly object mostRecentBuildInfosLock = new object();
|
||||
private readonly Dictionary<string, BuildInfo> mostRecentBuildInfos
|
||||
= new Dictionary<string, BuildInfo>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
public BuildEventsWatcher(IVsSolution vsSolution, IVsSolutionBuildManager vsBuildManager)
|
||||
{
|
||||
_vsSolution = vsSolution ?? throw new ArgumentNullException(nameof(vsSolution));
|
||||
_vsBuildManager = vsBuildManager ?? throw new ArgumentNullException(nameof(vsBuildManager));
|
||||
}
|
||||
|
||||
public Task<bool> PerformBuildAsync(string projectPath, DateTime allowExistingBuildsSince)
|
||||
{
|
||||
BuildInfo newBuildInfo;
|
||||
|
||||
lock (mostRecentBuildInfosLock)
|
||||
{
|
||||
if (mostRecentBuildInfos.TryGetValue(projectPath, out var existingInfo))
|
||||
{
|
||||
// If there's a build in progress, we'll join that even if it was started
|
||||
// before allowExistingBuildsSince, because it's too messy to cancel
|
||||
// in-progress builds. On rare occasions if the user is editing files while
|
||||
// a build is in progress they *might* see a not-latest build when they
|
||||
// reload, but then they just have to reload again.
|
||||
var acceptBuild = !existingInfo.TaskCompletionSource.Task.IsCompleted
|
||||
|| existingInfo.StartTime > allowExistingBuildsSince;
|
||||
if (acceptBuild)
|
||||
{
|
||||
return existingInfo.TaskCompletionSource.Task;
|
||||
}
|
||||
}
|
||||
|
||||
// We're going to start a new build now. Track the BuildInfo for it even
|
||||
// before it starts so other incoming build requests can join it.
|
||||
mostRecentBuildInfos[projectPath] = newBuildInfo = new BuildInfo();
|
||||
}
|
||||
|
||||
return PerformNewBuildAsync(projectPath, newBuildInfo);
|
||||
}
|
||||
|
||||
public int UpdateSolution_Begin(ref int pfCancelUpdate)
|
||||
=> VSConstants.S_OK;
|
||||
|
||||
public int UpdateSolution_Done(int fSucceeded, int fModified, int fCancelCommand)
|
||||
=> VSConstants.S_OK;
|
||||
|
||||
public int UpdateSolution_StartUpdate(ref int pfCancelUpdate)
|
||||
=> VSConstants.S_OK;
|
||||
|
||||
public int UpdateSolution_Cancel()
|
||||
=> VSConstants.S_OK;
|
||||
|
||||
public int OnActiveProjectCfgChange(IVsHierarchy pIVsHierarchy)
|
||||
=> VSConstants.S_OK;
|
||||
|
||||
public int UpdateProjectCfg_Begin(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, ref int pfCancel)
|
||||
{
|
||||
ThreadHelper.ThrowIfNotOnUIThread();
|
||||
|
||||
if (IsBlazorProject(pHierProj))
|
||||
{
|
||||
// This method runs both for manually-invoked builds and for builds triggered automatically
|
||||
// by PerformNewBuildAsync(). In the case where it's a manually-invoked build, make sure
|
||||
// there's an in-progress BuildInfo so that if there are further builds requests while the
|
||||
// build is still in progress we can join them onto this existing build.
|
||||
|
||||
var projectPath = GetProjectPath(pHierProj);
|
||||
lock (mostRecentBuildInfosLock)
|
||||
{
|
||||
var hasBuildInProgress =
|
||||
mostRecentBuildInfos.TryGetValue(projectPath, out var existingInfo)
|
||||
&& !existingInfo.TaskCompletionSource.Task.IsCompleted;
|
||||
if (!hasBuildInProgress)
|
||||
{
|
||||
mostRecentBuildInfos[projectPath] = new BuildInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return VSConstants.S_OK;
|
||||
}
|
||||
|
||||
public int UpdateProjectCfg_Done(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, int fSuccess, int fCancel)
|
||||
{
|
||||
ThreadHelper.ThrowIfNotOnUIThread();
|
||||
|
||||
if (IsBlazorProject(pHierProj))
|
||||
{
|
||||
var buildResult = fSuccess == 1;
|
||||
var projectPath = GetProjectPath(pHierProj);
|
||||
|
||||
// Mark pending build info as completed
|
||||
BuildInfo foundInfo = null;
|
||||
lock (mostRecentBuildInfosLock)
|
||||
{
|
||||
mostRecentBuildInfos.TryGetValue(projectPath, out foundInfo);
|
||||
}
|
||||
if (foundInfo != null)
|
||||
{
|
||||
foundInfo.TaskCompletionSource.TrySetResult(buildResult);
|
||||
}
|
||||
}
|
||||
|
||||
return VSConstants.S_OK;
|
||||
}
|
||||
|
||||
private async Task<bool> PerformNewBuildAsync(string projectPath, BuildInfo buildInfo)
|
||||
{
|
||||
// Switch to the UI thread and request the build
|
||||
var didStartBuild = await ThreadHelper.JoinableTaskFactory.RunAsync(async delegate
|
||||
{
|
||||
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
||||
|
||||
var hr = _vsSolution.GetProjectOfUniqueName(projectPath, out var hierarchy);
|
||||
if (hr != VSConstants.S_OK)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
hr = _vsBuildManager.StartSimpleUpdateProjectConfiguration(
|
||||
hierarchy,
|
||||
/* not used */ null,
|
||||
/* not used */ null,
|
||||
(uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
|
||||
/* other flags */ 0,
|
||||
/* suppress dialogs */ 1);
|
||||
if (hr != VSConstants.S_OK)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
if (!didStartBuild)
|
||||
{
|
||||
// Since the build didn't start, make sure nobody's waiting for it
|
||||
buildInfo.TaskCompletionSource.TrySetResult(false);
|
||||
}
|
||||
|
||||
return await buildInfo.TaskCompletionSource.Task;
|
||||
}
|
||||
|
||||
private static bool IsBlazorProject(IVsHierarchy pHierProj)
|
||||
=> pHierProj.IsCapabilityMatch(BlazorProjectCapability);
|
||||
|
||||
private static string GetProjectPath(IVsHierarchy pHierProj)
|
||||
{
|
||||
ThreadHelper.ThrowIfNotOnUIThread();
|
||||
ErrorHandler.ThrowOnFailure(((IVsProject)pHierProj).GetMkDocument((uint)VSConstants.VSITEMID.Root, out var projectPath), VSConstants.E_NOTIMPL);
|
||||
return projectPath;
|
||||
}
|
||||
|
||||
class BuildInfo
|
||||
{
|
||||
public DateTime StartTime { get; }
|
||||
public TaskCompletionSource<bool> TaskCompletionSource { get; }
|
||||
|
||||
public BuildInfo()
|
||||
{
|
||||
StartTime = DateTime.Now;
|
||||
TaskCompletionSource = new TaskCompletionSource<bool>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.VisualStudio.BlazorExtension
|
||||
{
|
||||
internal static class StreamProtocolExtensions
|
||||
{
|
||||
public static async Task<string> ReadStringAsync(this Stream stream)
|
||||
{
|
||||
var length = BitConverter.ToInt32(await ReadBytesAsync(stream, 4), 0);
|
||||
var utf8Bytes = await ReadBytesAsync(stream, length);
|
||||
return Encoding.UTF8.GetString(utf8Bytes);
|
||||
}
|
||||
|
||||
public static async Task<DateTime> ReadDateTimeAsync(this Stream stream)
|
||||
{
|
||||
var ticksBytes = await ReadBytesAsync(stream, 8);
|
||||
var ticks = BitConverter.ToInt64(ticksBytes, 0);
|
||||
return new DateTime(ticks);
|
||||
}
|
||||
|
||||
public static async Task WriteBoolAsync(this Stream stream, bool value)
|
||||
{
|
||||
var byteVal = value ? (byte)1 : (byte)0;
|
||||
await stream.WriteAsync(new[] { byteVal }, 0, 1);
|
||||
}
|
||||
|
||||
public static async Task WriteIntAsync(this Stream stream, int value)
|
||||
{
|
||||
await stream.WriteAsync(BitConverter.GetBytes(value), 0, 4);
|
||||
}
|
||||
|
||||
private static async Task<byte[]> ReadBytesAsync(Stream stream, int exactLength)
|
||||
{
|
||||
var buf = new byte[exactLength];
|
||||
var bytesRead = 0;
|
||||
while (bytesRead < exactLength)
|
||||
{
|
||||
bytesRead += await stream.ReadAsync(buf, bytesRead, exactLength - bytesRead);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.Shell;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using Task = System.Threading.Tasks.Task;
|
||||
|
||||
namespace Microsoft.VisualStudio.BlazorExtension
|
||||
{
|
||||
// We mainly have a package so we can have an "About" dialog entry.
|
||||
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
|
||||
[AboutDialogInfo(PackageGuidString, "ASP.NET Core Blazor Language Services", "#110", "112")]
|
||||
[Guid(BlazorPackage.PackageGuidString)]
|
||||
[ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)]
|
||||
public sealed class BlazorPackage : AsyncPackage
|
||||
{
|
||||
public const string PackageGuidString = "d9fe04bc-57a7-4107-915e-3a5c2f9e19fb";
|
||||
|
||||
protected async override Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
|
||||
{
|
||||
await base.InitializeAsync(cancellationToken, progress);
|
||||
|
||||
await JoinableTaskFactory.SwitchToMainThreadAsync();
|
||||
|
||||
// Create build watcher. No need to unadvise, as this only happens once anyway.
|
||||
var solution = (IVsSolution)await GetServiceAsync(typeof(IVsSolution));
|
||||
var buildManager = (IVsSolutionBuildManager)await GetServiceAsync(typeof(SVsSolutionBuildManager));
|
||||
|
||||
// According to the docs, this can happen if VS shuts down while our package is loading.
|
||||
if (solution == null || buildManager == null)
|
||||
{
|
||||
var buildWatcher = new BuildEventsWatcher(solution, buildManager);
|
||||
var hr = buildManager.AdviseUpdateSolutionEvents(buildWatcher, out var cookie);
|
||||
Marshal.ThrowExceptionForHR(hr);
|
||||
|
||||
new AutoRebuildService(buildWatcher).Listen();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[$RootKey$\Languages\CodeExpansions\CSharp\Paths]
|
||||
"Blazor"="$PackageFolder$\CodeSnippets\Blazor"
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
|
||||
<CodeSnippet Format="1.0.0">
|
||||
<Header>
|
||||
<Title>para</Title>
|
||||
<Shortcut>para</Shortcut>
|
||||
<Description>Code snippet for an automatically implemented parameter for Blazor</Description>
|
||||
<Author>Microsoft</Author>
|
||||
<SnippetTypes>
|
||||
<SnippetType>Expansion</SnippetType>
|
||||
</SnippetTypes>
|
||||
</Header>
|
||||
<Snippet>
|
||||
<Declarations>
|
||||
<Literal>
|
||||
<ID>type</ID>
|
||||
<ToolTip>Parameter type</ToolTip>
|
||||
<Default>int</Default>
|
||||
</Literal>
|
||||
<Literal>
|
||||
<ID>property</ID>
|
||||
<ToolTip>Parameter name</ToolTip>
|
||||
<Default>MyParameter</Default>
|
||||
</Literal>
|
||||
</Declarations>
|
||||
<Code Language="csharp">
|
||||
<![CDATA[[Parameter] protected $type$ $property$ { get; set; }$end$]]>
|
||||
</Code>
|
||||
</Snippet>
|
||||
</CodeSnippet>
|
||||
</CodeSnippets>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.9 KiB |
|
|
@ -1,148 +0,0 @@
|
|||
<Project>
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
|
||||
<!-- Use the same experimental hive as Roslyn and Razor. This makes it easy to mix private builds. -->
|
||||
<VSSDKTargetPlatformRegRootSuffix>RoslynDev</VSSDKTargetPlatformRegRootSuffix>
|
||||
|
||||
<!--
|
||||
Mark the VSIX as a per-computer install (not-per-user). Putting a component "in the box"
|
||||
requires this, and trying to change it after doing a release has lot of problems.
|
||||
-->
|
||||
<ExtensionInstallationRoot>CommonExtensions</ExtensionInstallationRoot>
|
||||
<ExtensionInstallationFolder>Microsoft\Blazor</ExtensionInstallationFolder>
|
||||
|
||||
<!-- This should be set as true if we're ever building the VSIX for inclusion by the VS installer. -->
|
||||
<IsProductComponent>false</IsProductComponent>
|
||||
|
||||
<!-- Update the VSToolsPath to ensure VSIX builds -->
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<!-- Other projects should not reference this assembly. It is only meaning to be used in Visual Studio. -->
|
||||
<IsProjectReferenceProvider>false</IsProjectReferenceProvider>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
<UseCodebase>true</UseCodebase>
|
||||
<GeneratePkgDefFile>true</GeneratePkgDefFile>
|
||||
<DeployProjectOutput Condition="'$(ContinuousIntegrationBuild)' == 'true'">false</DeployProjectOutput>
|
||||
<DisablePackageReferenceRestrictions>true</DisablePackageReferenceRestrictions>
|
||||
|
||||
<!-- The Resources.resx is a embedded resource -->
|
||||
<GenerateResxSource>false</GenerateResxSource>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
Since the VSSDK doeesn't support SDK-based projects, we have to use the long/verbose version.
|
||||
|
||||
This section has all of the things we need to customize to the VSIX correctly. Everything outside
|
||||
this section is just standard "old-csproj" boilerplate.
|
||||
|
||||
BEGIN INTERESTING STUFF
|
||||
-->
|
||||
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
Include this assembly in the VSIX but not its symbols, except when installing it to the experimental
|
||||
instance.
|
||||
-->
|
||||
<IncludeAssemblyInVSIXContainer>true</IncludeAssemblyInVSIXContainer>
|
||||
<IncludeDebugSymbolsInVSIXContainer>false</IncludeDebugSymbolsInVSIXContainer>
|
||||
<IncludeDebugSymbolsInLocalVSIXDeployment>true</IncludeDebugSymbolsInLocalVSIXDeployment>
|
||||
<!--
|
||||
Always include assemblies and symbols in the output directory.
|
||||
-->
|
||||
<CopyBuildOutputToOutputDirectory>true</CopyBuildOutputToOutputDirectory>
|
||||
<CopyOutputSymbolsToOutputDirectory>true</CopyOutputSymbolsToOutputDirectory>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="PreCreateVsixContainer" BeforeTargets="GetVsixSourceItems" Condition="'$(TargetOsName)' == 'win' AND '$(TargetArchitecture)' != 'arm'">
|
||||
<ItemGroup>
|
||||
<_TemplatePackage Include="$(ArtifactsShippingPackagesDir)Microsoft.AspNetCore.Blazor.Templates.*.nupkg" />
|
||||
</ItemGroup>
|
||||
|
||||
<Error Text="No template files found." Condition="@(_TemplatePackage->Count()) == 0" />
|
||||
|
||||
<ItemGroup>
|
||||
<VSIXSourceItem Include="@(_TemplatePackage)">
|
||||
<VSIXSubPath>ProjectTemplates\</VSIXSubPath>
|
||||
</VSIXSourceItem>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
<!--
|
||||
This is needed to support our infrastructure's automatic upload of symbols to the symbol server
|
||||
for debugging.
|
||||
|
||||
The official build will set $(SymbolsPublishDir) and provide an additional place where the symbols
|
||||
ought to be copied for publishing. This will noop otherwise.
|
||||
-->
|
||||
<Target Name="CopySymbolsToOutput" AfterTargets="Build" Condition="'$(SymbolsPublishDir)' != ''">
|
||||
<Copy SourceFiles="$(OutDir)$(AssemblyName).pdb" DestinationFolder="$(SymbolsPublishDir)" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="CodeSnippets.pkgdef" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
|
||||
<Content Include="Templates.pkgdef" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
|
||||
<Content Include="CodeSnippets\Blazor\para.snippet" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
|
||||
<Content Include="Content\WebConfiguration.png" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
|
||||
<Content Include="Resources\BlazorPackage.ico" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
|
||||
|
||||
<Content Include="..\..\..\THIRD-PARTY-NOTICES.txt" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true">
|
||||
<Link>Content\THIRD-PARTY-NOTICES.txt</Link>
|
||||
</Content>
|
||||
<Content Include="$(RepoRoot)LICENSE.txt" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true">
|
||||
<Link>Content\LICENSE.txt</Link>
|
||||
</Content>
|
||||
|
||||
<None Include="source.extension.vsixmanifest" SubType="Designer" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference
|
||||
Include="..\..\Templates\src\Microsoft.AspNetCore.Blazor.Templates.csproj"
|
||||
ReferenceOutputAssembly="false"
|
||||
Private="false"
|
||||
Targets="Build;Pack" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Shell.15.0" Version="15.7.27703" />
|
||||
<PackageReference Include="StreamJsonRpc" Version="1.5.43" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Resources are a little bit special in a VSIX -->
|
||||
<PropertyGroup>
|
||||
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Resources.resx">
|
||||
<MergeWithCTO>true</MergeWithCTO>
|
||||
<ManifestResourceName>VSPackage</ManifestResourceName>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
|
||||
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
|
||||
|
||||
<!-- These need to be set after Sdk.targets because $(VersionSuffixDateStamp) is empty before Sdk.targets is evaluated. -->
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
Following VS convention of using the VS release # as a convention for the vsix version.
|
||||
|
||||
VS needs this build number to be parsable by System.Version, so it can't have any letters or a - which
|
||||
is used by our build system.
|
||||
-->
|
||||
<VsixVersion Condition="'$(VersionSuffixDateStamp)' != ''">16.0.$(VersionSuffixDateStamp).$(VersionSuffixBuildOfTheDay)</VsixVersion>
|
||||
<!-- For local development, set this 42 so its always higher than officil builds. -->
|
||||
<VsixVersion Condition="'$(VersionSuffixDateStamp)' == ''">42.42.42.4242424</VsixVersion>
|
||||
<InformationalVersion>$(VsixVersion)</InformationalVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -1,132 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="110" xml:space="preserve">
|
||||
<value>ASP.NET Core Blazor Language Services</value>
|
||||
<comment>About dialog title</comment>
|
||||
</data>
|
||||
<data name="112" xml:space="preserve">
|
||||
<value>Provides Visual Studio support for ASP.NET Core Blazor</value>
|
||||
<comment>About dialog description</comment>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="400" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>Resources\BlazorPackage.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 418 KiB |
|
|
@ -1,2 +0,0 @@
|
|||
[$RootKey$\TemplateEngine\Templates\Blazor\0.8.0]
|
||||
"InstalledPath"="$PackageFolder$\ProjectTemplates"
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
|
||||
<Metadata>
|
||||
<Identity Id="Microsoft.VisualStudio.BlazorExtension" Version="|%CurrentProject%;GetVsixVersion|" Language="en-US" Publisher="Microsoft" />
|
||||
<DisplayName>Blazor</DisplayName>
|
||||
<Description xml:space="preserve">Provides Visual Studio support for Blazor</Description>
|
||||
<License>Content\LICENSE.txt</License>
|
||||
<PackageId>Microsoft.VisualStudio.BlazorExtension</PackageId>
|
||||
<GettingStartedGuide>https://go.microsoft.com/fwlink/?linkid=870449</GettingStartedGuide>
|
||||
<ReleaseNotes>https://go.microsoft.com/fwlink/?linkid=870448</ReleaseNotes>
|
||||
<Icon>Content\WebConfiguration.png</Icon>
|
||||
<PreviewImage>Content\WebConfiguration.png</PreviewImage>
|
||||
</Metadata>
|
||||
<Installation AllUsers="true">
|
||||
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[16.2,)" />
|
||||
</Installation>
|
||||
<Assets>
|
||||
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
|
||||
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="File" Path="Templates.pkgdef" />
|
||||
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="File" Path="CodeSnippets.pkgdef" />
|
||||
</Assets>
|
||||
<Prerequisites>
|
||||
<Prerequisite Id="Microsoft.VisualStudio.Component.Web" Version="[16.0,)" DisplayName="ASP.NET and web development tools" />
|
||||
</Prerequisites>
|
||||
</PackageManifest>
|
||||
|
|
@ -322,8 +322,7 @@ namespace WsProxy {
|
|||
name = method.Name,
|
||||
startLocation = method.StartLocation.ToJObject (),
|
||||
endLocation = method.EndLocation.ToJObject (),
|
||||
}},
|
||||
@this = new { }
|
||||
}}
|
||||
}));
|
||||
|
||||
++frame_id;
|
||||
|
|
@ -485,11 +484,11 @@ namespace WsProxy {
|
|||
var values = res.Value? ["result"]? ["value"]?.Values<JObject> ().ToArray ();
|
||||
|
||||
var var_list = new List<JObject> ();
|
||||
|
||||
int i = 0;
|
||||
// Trying to inspect the stack frame for DotNetDispatcher::InvokeSynchronously
|
||||
// results in a "Memory access out of bounds", causing 'values' to be null,
|
||||
// so skip returning variable values in that case.
|
||||
for (int i = 0; values != null && i < vars.Length; ++i) {
|
||||
while (values != null && i < var_ids.Length && i < values.Length) {
|
||||
var value = values [i] ["value"];
|
||||
if (((string)value ["description"]) == null)
|
||||
value ["description"] = value ["value"]?.ToString();
|
||||
|
|
@ -498,12 +497,24 @@ namespace WsProxy {
|
|||
name = vars [i].Name,
|
||||
value = values [i] ["value"]
|
||||
}));
|
||||
i++;
|
||||
}
|
||||
//Async methods are special in the way that local variables can be lifted to generated class fields
|
||||
//value of "this" comes here either
|
||||
while (i < values.Length) {
|
||||
String name = values [i] ["name"].ToString ();
|
||||
|
||||
if (name.IndexOf (">", StringComparison.Ordinal) > 0)
|
||||
name = name.Substring (1, name.IndexOf (">", StringComparison.Ordinal) - 1);
|
||||
var_list.Add (JObject.FromObject (new {
|
||||
name = name,
|
||||
value = values [i+1] ["value"]
|
||||
}));
|
||||
i = i + 2;
|
||||
}
|
||||
o = JObject.FromObject (new {
|
||||
result = var_list
|
||||
});
|
||||
|
||||
SendResponse (msg_id, Result.Ok (o), token);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
Hello, world!
|
||||
|
||||
@code {
|
||||
protected override void OnAfterRender()
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
BenchmarkEvent.Send(JSRuntime, "Rendered index.cshtml");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
largeOrgChartJson = JsonSerializer.Serialize(largeOrgChart);
|
||||
}
|
||||
|
||||
protected override void OnAfterRender()
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
BenchmarkEvent.Send(JSRuntime, "Finished JSON processing");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ Number of items: <input id="num-items" type="number" @bind=numItems />
|
|||
show = true;
|
||||
}
|
||||
|
||||
protected override void OnAfterRender()
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
BenchmarkEvent.Send(JSRuntime, "Finished rendering list");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -201,8 +201,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Ne
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.JsonPatch", "..\Features\JsonPatch\src\Microsoft.AspNetCore.JsonPatch.csproj", "{DC47C40A-FC38-44E4-94A4-ADE794E76309}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.BlazorExtension", "blazor\BlazorExtension\src\Microsoft.VisualStudio.BlazorExtension.csproj", "{9088E4E4-B855-457F-AE9E-D86709A5E1F4}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BB236B66-28C0-49DD-9CD4-C4673CD4E7B4}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\..\.editorconfig = ..\..\.editorconfig
|
||||
|
|
@ -226,6 +224,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Tests", "Web\test\Microsoft.AspNetCore.Components.Web.Tests.csproj", "{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authorization", "Authorization", "{08791FEE-761D-40EF-B701-1D31FD1E6E53}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Authorization", "Authorization\src\Microsoft.AspNetCore.Components.Authorization.csproj", "{956F540A-3CDA-4913-9373-1A4E8A93BDD8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Authorization.Tests", "Authorization\test\Microsoft.AspNetCore.Components.Authorization.Tests.csproj", "{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forms", "Forms", "{B0EEB429-4C8C-42AA-8822-3058E7DBC98F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Forms", "Forms\src\Microsoft.AspNetCore.Components.Forms.csproj", "{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Forms.Tests", "Forms\test\Microsoft.AspNetCore.Components.Forms.Tests.csproj", "{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -1316,18 +1326,6 @@ Global
|
|||
{DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x64.ActiveCfg = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x64.Build.0 = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x86.ActiveCfg = Debug|Any CPU
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x86.Build.0 = Debug|Any CPU
|
||||
{ED210157-461B-45BB-9D86-B81A62792C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ED210157-461B-45BB-9D86-B81A62792C30}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ED210157-461B-45BB-9D86-B81A62792C30}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -1436,6 +1434,54 @@ Global
|
|||
{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x86.Build.0 = Release|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Release|x64.Build.0 = Release|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88}.Release|x86.Build.0 = Release|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED}.Release|x86.Build.0 = Release|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Release|x64.Build.0 = Release|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
@ -1533,7 +1579,6 @@ Global
|
|||
{3FAF725B-A628-4531-9F61-499660CD4347} = {2FC10057-7A0A-4E34-8302-879925BC0102}
|
||||
{04262990-929C-42BF-85A9-21C25FA95617} = {2FC10057-7A0A-4E34-8302-879925BC0102}
|
||||
{DC47C40A-FC38-44E4-94A4-ADE794E76309} = {2FC10057-7A0A-4E34-8302-879925BC0102}
|
||||
{9088E4E4-B855-457F-AE9E-D86709A5E1F4} = {7260DED9-22A9-4E9D-92F4-5E8A4404DEAF}
|
||||
{ED210157-461B-45BB-9D86-B81A62792C30} = {2FC10057-7A0A-4E34-8302-879925BC0102}
|
||||
{DA137BD4-F7F1-4D53-855F-5EC40CEA36B0} = {2FC10057-7A0A-4E34-8302-879925BC0102}
|
||||
{0CDAB70B-71DC-43BE-ACB7-AD2EE3541FFB} = {2FC10057-7A0A-4E34-8302-879925BC0102}
|
||||
|
|
@ -1543,6 +1588,10 @@ Global
|
|||
{74D21785-2FAB-4266-B7C4-E311EC8EE0DF} = {7260DED9-22A9-4E9D-92F4-5E8A4404DEAF}
|
||||
{E4C01A3F-D3C1-4639-A6A9-930E918843DD} = {7260DED9-22A9-4E9D-92F4-5E8A4404DEAF}
|
||||
{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684} = {A27FF193-195B-4474-8E6C-840B2E339373}
|
||||
{956F540A-3CDA-4913-9373-1A4E8A93BDD8} = {08791FEE-761D-40EF-B701-1D31FD1E6E53}
|
||||
{B13CDE69-ED22-4664-AAD7-686ED8CD5E88} = {08791FEE-761D-40EF-B701-1D31FD1E6E53}
|
||||
{A5C132FB-1E03-4DA9-8D05-80755ED1D0ED} = {B0EEB429-4C8C-42AA-8822-3058E7DBC98F}
|
||||
{173D84A3-0F37-480F-AC0F-7E2DBBE32B28} = {B0EEB429-4C8C-42AA-8822-3058E7DBC98F}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {CC3C47E1-AD1A-4619-9CD3-E08A0148E5CE}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,18 @@
|
|||
<!-- This file is automatically generated. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0</TargetFrameworks>
|
||||
<TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.netstandard2.0.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<Reference Include="Microsoft.JSInterop" />
|
||||
<Reference Include="System.ComponentModel.Annotations" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.netcoreapp3.0.cs" />
|
||||
<Reference Include="Microsoft.JSInterop" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,530 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
public static partial class BindConverter
|
||||
{
|
||||
public static bool FormatValue(bool value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTime value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTime value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTimeOffset value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTimeOffset value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(decimal value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(double value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(int value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(long value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static bool? FormatValue(bool? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTimeOffset? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTimeOffset? value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTime? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(System.DateTime? value, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(decimal? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(double? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(int? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(long? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(float? value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(float value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static string FormatValue(string value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static object FormatValue<T>(T value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static bool TryConvertToBool(object obj, System.Globalization.CultureInfo culture, out bool value) { throw null; }
|
||||
public static bool TryConvertToDateTime(object obj, System.Globalization.CultureInfo culture, out System.DateTime value) { throw null; }
|
||||
public static bool TryConvertToDateTime(object obj, System.Globalization.CultureInfo culture, string format, out System.DateTime value) { throw null; }
|
||||
public static bool TryConvertToDateTimeOffset(object obj, System.Globalization.CultureInfo culture, out System.DateTimeOffset value) { throw null; }
|
||||
public static bool TryConvertToDateTimeOffset(object obj, System.Globalization.CultureInfo culture, string format, out System.DateTimeOffset value) { throw null; }
|
||||
public static bool TryConvertToDecimal(object obj, System.Globalization.CultureInfo culture, out decimal value) { throw null; }
|
||||
public static bool TryConvertToDouble(object obj, System.Globalization.CultureInfo culture, out double value) { throw null; }
|
||||
public static bool TryConvertToFloat(object obj, System.Globalization.CultureInfo culture, out float value) { throw null; }
|
||||
public static bool TryConvertToInt(object obj, System.Globalization.CultureInfo culture, out int value) { throw null; }
|
||||
public static bool TryConvertToLong(object obj, System.Globalization.CultureInfo culture, out long value) { throw null; }
|
||||
public static bool TryConvertToNullableBool(object obj, System.Globalization.CultureInfo culture, out bool? value) { throw null; }
|
||||
public static bool TryConvertToNullableDateTime(object obj, System.Globalization.CultureInfo culture, out System.DateTime? value) { throw null; }
|
||||
public static bool TryConvertToNullableDateTime(object obj, System.Globalization.CultureInfo culture, string format, out System.DateTime? value) { throw null; }
|
||||
public static bool TryConvertToNullableDateTimeOffset(object obj, System.Globalization.CultureInfo culture, out System.DateTimeOffset? value) { throw null; }
|
||||
public static bool TryConvertToNullableDateTimeOffset(object obj, System.Globalization.CultureInfo culture, string format, out System.DateTimeOffset? value) { throw null; }
|
||||
public static bool TryConvertToNullableDecimal(object obj, System.Globalization.CultureInfo culture, out decimal? value) { throw null; }
|
||||
public static bool TryConvertToNullableDouble(object obj, System.Globalization.CultureInfo culture, out double? value) { throw null; }
|
||||
public static bool TryConvertToNullableFloat(object obj, System.Globalization.CultureInfo culture, out float? value) { throw null; }
|
||||
public static bool TryConvertToNullableInt(object obj, System.Globalization.CultureInfo culture, out int? value) { throw null; }
|
||||
public static bool TryConvertToNullableLong(object obj, System.Globalization.CultureInfo culture, out long? value) { throw null; }
|
||||
public static bool TryConvertToString(object obj, System.Globalization.CultureInfo culture, out string value) { throw null; }
|
||||
public static bool TryConvertTo<T>(object obj, System.Globalization.CultureInfo culture, out T value) { throw null; }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
|
||||
public sealed partial class CascadingParameterAttribute : System.Attribute
|
||||
{
|
||||
public CascadingParameterAttribute() { }
|
||||
public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
public partial class CascadingValue<TValue> : Microsoft.AspNetCore.Components.IComponent
|
||||
{
|
||||
public CascadingValue() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public bool IsFixed { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public TValue Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) { throw null; }
|
||||
}
|
||||
public partial class ChangeEventArgs : System.EventArgs
|
||||
{
|
||||
public ChangeEventArgs() { }
|
||||
public object Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
public abstract partial class ComponentBase : Microsoft.AspNetCore.Components.IComponent, Microsoft.AspNetCore.Components.IHandleAfterRender, Microsoft.AspNetCore.Components.IHandleEvent
|
||||
{
|
||||
public ComponentBase() { }
|
||||
protected virtual void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected System.Threading.Tasks.Task InvokeAsync(System.Action workItem) { throw null; }
|
||||
protected System.Threading.Tasks.Task InvokeAsync(System.Func<System.Threading.Tasks.Task> workItem) { throw null; }
|
||||
void Microsoft.AspNetCore.Components.IComponent.Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||
System.Threading.Tasks.Task Microsoft.AspNetCore.Components.IHandleAfterRender.OnAfterRenderAsync() { throw null; }
|
||||
System.Threading.Tasks.Task Microsoft.AspNetCore.Components.IHandleEvent.HandleEventAsync(Microsoft.AspNetCore.Components.EventCallbackWorkItem callback, object arg) { throw null; }
|
||||
protected virtual void OnAfterRender(bool firstRender) { }
|
||||
protected virtual System.Threading.Tasks.Task OnAfterRenderAsync(bool firstRender) { throw null; }
|
||||
protected virtual void OnInitialized() { }
|
||||
protected virtual System.Threading.Tasks.Task OnInitializedAsync() { throw null; }
|
||||
protected virtual void OnParametersSet() { }
|
||||
protected virtual System.Threading.Tasks.Task OnParametersSetAsync() { throw null; }
|
||||
public virtual System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) { throw null; }
|
||||
protected virtual bool ShouldRender() { throw null; }
|
||||
protected void StateHasChanged() { }
|
||||
}
|
||||
public abstract partial class Dispatcher
|
||||
{
|
||||
protected Dispatcher() { }
|
||||
public abstract bool CheckAccess();
|
||||
public static Microsoft.AspNetCore.Components.Dispatcher CreateDefault() { throw null; }
|
||||
public abstract System.Threading.Tasks.Task InvokeAsync(System.Action workItem);
|
||||
public abstract System.Threading.Tasks.Task InvokeAsync(System.Func<System.Threading.Tasks.Task> workItem);
|
||||
public abstract System.Threading.Tasks.Task<TResult> InvokeAsync<TResult>(System.Func<System.Threading.Tasks.Task<TResult>> workItem);
|
||||
public abstract System.Threading.Tasks.Task<TResult> InvokeAsync<TResult>(System.Func<TResult> workItem);
|
||||
protected void OnUnhandledException(System.UnhandledExceptionEventArgs e) { }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct ElementReference
|
||||
{
|
||||
private readonly object _dummy;
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct EventCallback
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public static readonly Microsoft.AspNetCore.Components.EventCallback Empty;
|
||||
public static readonly Microsoft.AspNetCore.Components.EventCallbackFactory Factory;
|
||||
public EventCallback(Microsoft.AspNetCore.Components.IHandleEvent receiver, System.MulticastDelegate @delegate) { throw null; }
|
||||
public bool HasDelegate { get { throw null; } }
|
||||
public System.Threading.Tasks.Task InvokeAsync(object arg) { throw null; }
|
||||
}
|
||||
public sealed partial class EventCallbackFactory
|
||||
{
|
||||
public EventCallbackFactory() { }
|
||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
public Microsoft.AspNetCore.Components.EventCallback Create(object receiver, Microsoft.AspNetCore.Components.EventCallback callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback Create(object receiver, System.Action callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback Create(object receiver, System.Action<object> callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback Create(object receiver, System.Func<object, System.Threading.Tasks.Task> callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback Create(object receiver, System.Func<System.Threading.Tasks.Task> callback) { throw null; }
|
||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> CreateInferred<TValue>(object receiver, System.Action<TValue> callback, TValue value) { throw null; }
|
||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> CreateInferred<TValue>(object receiver, System.Func<TValue, System.Threading.Tasks.Task> callback, TValue value) { throw null; }
|
||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> Create<TValue>(object receiver, Microsoft.AspNetCore.Components.EventCallback callback) { throw null; }
|
||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> Create<TValue>(object receiver, Microsoft.AspNetCore.Components.EventCallback<TValue> callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> Create<TValue>(object receiver, System.Action callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> Create<TValue>(object receiver, System.Action<TValue> callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> Create<TValue>(object receiver, System.Func<System.Threading.Tasks.Task> callback) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.EventCallback<TValue> Create<TValue>(object receiver, System.Func<TValue, System.Threading.Tasks.Task> callback) { throw null; }
|
||||
}
|
||||
public static partial class EventCallbackFactoryBinderExtensions
|
||||
{
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<bool> setter, bool existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTimeOffset> setter, System.DateTimeOffset existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTimeOffset> setter, System.DateTimeOffset existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime> setter, System.DateTime existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime> setter, System.DateTime existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal> setter, decimal existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double> setter, double existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int> setter, int existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long> setter, long existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<bool?> setter, bool? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTimeOffset?> setter, System.DateTimeOffset? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTimeOffset?> setter, System.DateTimeOffset? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime?> setter, System.DateTime? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.DateTime?> setter, System.DateTime? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<decimal?> setter, decimal? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<double?> setter, double? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<int?> setter, int? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<long?> setter, long? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float?> setter, float? existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<float> setter, float existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<string> setter, string existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> CreateBinder<T>(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<T> setter, T existingValue, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
}
|
||||
public static partial class EventCallbackFactoryEventArgsExtensions
|
||||
{
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<Microsoft.AspNetCore.Components.ChangeEventArgs> callback) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<System.EventArgs> Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action<System.EventArgs> callback) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.ChangeEventArgs> Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Func<Microsoft.AspNetCore.Components.ChangeEventArgs, System.Threading.Tasks.Task> callback) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<System.EventArgs> Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Func<System.EventArgs, System.Threading.Tasks.Task> callback) { throw null; }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct EventCallbackWorkItem
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public static readonly Microsoft.AspNetCore.Components.EventCallbackWorkItem Empty;
|
||||
public EventCallbackWorkItem(System.MulticastDelegate @delegate) { throw null; }
|
||||
public System.Threading.Tasks.Task InvokeAsync(object arg) { throw null; }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct EventCallback<TValue>
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public static readonly Microsoft.AspNetCore.Components.EventCallback<TValue> Empty;
|
||||
public EventCallback(Microsoft.AspNetCore.Components.IHandleEvent receiver, System.MulticastDelegate @delegate) { throw null; }
|
||||
public bool HasDelegate { get { throw null; } }
|
||||
public System.Threading.Tasks.Task InvokeAsync(TValue arg) { throw null; }
|
||||
}
|
||||
public partial interface IComponent
|
||||
{
|
||||
void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle);
|
||||
System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters);
|
||||
}
|
||||
public partial interface IComponentContext
|
||||
{
|
||||
bool IsConnected { get; }
|
||||
}
|
||||
public partial interface IHandleAfterRender
|
||||
{
|
||||
System.Threading.Tasks.Task OnAfterRenderAsync();
|
||||
}
|
||||
public partial interface IHandleEvent
|
||||
{
|
||||
System.Threading.Tasks.Task HandleEventAsync(Microsoft.AspNetCore.Components.EventCallbackWorkItem item, object arg);
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
|
||||
public sealed partial class InjectAttribute : System.Attribute
|
||||
{
|
||||
public InjectAttribute() { }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Class, AllowMultiple=false, Inherited=true)]
|
||||
public sealed partial class LayoutAttribute : System.Attribute
|
||||
{
|
||||
public LayoutAttribute(System.Type layoutType) { }
|
||||
public System.Type LayoutType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public abstract partial class LayoutComponentBase : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
protected LayoutComponentBase() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Body { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
public partial class LayoutView : Microsoft.AspNetCore.Components.IComponent
|
||||
{
|
||||
public LayoutView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public System.Type Layout { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) { throw null; }
|
||||
}
|
||||
public sealed partial class LocationChangeException : System.Exception
|
||||
{
|
||||
public LocationChangeException(string message, System.Exception innerException) { }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct MarkupString
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public MarkupString(string value) { throw null; }
|
||||
public string Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public static explicit operator Microsoft.AspNetCore.Components.MarkupString (string value) { throw null; }
|
||||
public override string ToString() { throw null; }
|
||||
}
|
||||
public partial class NavigationException : System.Exception
|
||||
{
|
||||
public NavigationException(string uri) { }
|
||||
public string Location { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public abstract partial class NavigationManager
|
||||
{
|
||||
protected NavigationManager() { }
|
||||
public string BaseUri { get { throw null; } protected set { } }
|
||||
public string Uri { get { throw null; } protected set { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Routing.LocationChangedEventArgs> LocationChanged { add { } remove { } }
|
||||
protected virtual void EnsureInitialized() { }
|
||||
protected void Initialize(string baseUri, string uri) { }
|
||||
public void NavigateTo(string uri, bool forceLoad = false) { }
|
||||
protected abstract void NavigateToCore(string uri, bool forceLoad);
|
||||
protected void NotifyLocationChanged(bool isInterceptedLink) { }
|
||||
public System.Uri ToAbsoluteUri(string relativeUri) { throw null; }
|
||||
public string ToBaseRelativePath(string uri) { throw null; }
|
||||
}
|
||||
public abstract partial class OwningComponentBase : Microsoft.AspNetCore.Components.ComponentBase, System.IDisposable
|
||||
{
|
||||
protected OwningComponentBase() { }
|
||||
protected bool IsDisposed { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
protected System.IServiceProvider ScopedServices { get { throw null; } }
|
||||
protected virtual void Dispose(bool disposing) { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
}
|
||||
public abstract partial class OwningComponentBase<TService> : Microsoft.AspNetCore.Components.OwningComponentBase, System.IDisposable
|
||||
{
|
||||
protected OwningComponentBase() { }
|
||||
protected TService Service { get { throw null; } }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
|
||||
public sealed partial class ParameterAttribute : System.Attribute
|
||||
{
|
||||
public ParameterAttribute() { }
|
||||
public bool CaptureUnmatchedValues { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct ParameterValue
|
||||
{
|
||||
private readonly object _dummy;
|
||||
private readonly int _dummyPrimitive;
|
||||
public bool Cascading { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public object Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct ParameterView
|
||||
{
|
||||
private readonly object _dummy;
|
||||
private readonly int _dummyPrimitive;
|
||||
public static Microsoft.AspNetCore.Components.ParameterView Empty { get { throw null; } }
|
||||
public static Microsoft.AspNetCore.Components.ParameterView FromDictionary(System.Collections.Generic.IDictionary<string, object> parameters) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.ParameterView.Enumerator GetEnumerator() { throw null; }
|
||||
public TValue GetValueOrDefault<TValue>(string parameterName) { throw null; }
|
||||
public TValue GetValueOrDefault<TValue>(string parameterName, TValue defaultValue) { throw null; }
|
||||
public void SetParameterProperties(object target) { }
|
||||
public System.Collections.Generic.IReadOnlyDictionary<string, object> ToDictionary() { throw null; }
|
||||
public bool TryGetValue<TValue>(string parameterName, out TValue result) { throw null; }
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public partial struct Enumerator
|
||||
{
|
||||
private object _dummy;
|
||||
private int _dummyPrimitive;
|
||||
public Microsoft.AspNetCore.Components.ParameterValue Current { get { throw null; } }
|
||||
public bool MoveNext() { throw null; }
|
||||
}
|
||||
}
|
||||
public delegate void RenderFragment(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder);
|
||||
public delegate Microsoft.AspNetCore.Components.RenderFragment RenderFragment<TValue>(TValue value);
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct RenderHandle
|
||||
{
|
||||
private readonly object _dummy;
|
||||
private readonly int _dummyPrimitive;
|
||||
public Microsoft.AspNetCore.Components.Dispatcher Dispatcher { get { throw null; } }
|
||||
public bool IsInitialized { get { throw null; } }
|
||||
public void Render(Microsoft.AspNetCore.Components.RenderFragment renderFragment) { }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Class, AllowMultiple=true, Inherited=false)]
|
||||
public sealed partial class RouteAttribute : System.Attribute
|
||||
{
|
||||
public RouteAttribute(string template) { }
|
||||
public string Template { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public sealed partial class RouteData
|
||||
{
|
||||
public RouteData(System.Type pageType, System.Collections.Generic.IReadOnlyDictionary<string, object> routeValues) { }
|
||||
public System.Type PageType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Collections.Generic.IReadOnlyDictionary<string, object> RouteValues { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class RouteView : Microsoft.AspNetCore.Components.IComponent
|
||||
{
|
||||
public RouteView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public System.Type DefaultLayout { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RouteData RouteData { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||
protected virtual void Render(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) { throw null; }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.CompilerServices
|
||||
{
|
||||
public static partial class RuntimeHelpers
|
||||
{
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<T> CreateInferredEventCallback<T>(object receiver, System.Action<T> callback, T value) { throw null; }
|
||||
public static Microsoft.AspNetCore.Components.EventCallback<T> CreateInferredEventCallback<T>(object receiver, System.Func<T, System.Threading.Tasks.Task> callback, T value) { throw null; }
|
||||
public static T TypeCheck<T>(T value) { throw null; }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.Rendering
|
||||
{
|
||||
public partial class EventFieldInfo
|
||||
{
|
||||
public EventFieldInfo() { }
|
||||
public int ComponentId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public object FieldValue { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct RenderBatch
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<int> DisposedComponentIDs { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<ulong> DisposedEventHandlerIDs { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame> ReferenceFrames { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiff> UpdatedComponents { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public abstract partial class Renderer : System.IDisposable
|
||||
{
|
||||
public Renderer(System.IServiceProvider serviceProvider, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) { }
|
||||
public abstract Microsoft.AspNetCore.Components.Dispatcher Dispatcher { get; }
|
||||
public event System.UnhandledExceptionEventHandler UnhandledSynchronizationException { add { } remove { } }
|
||||
protected internal int AssignRootComponentId(Microsoft.AspNetCore.Components.IComponent component) { throw null; }
|
||||
public virtual System.Threading.Tasks.Task DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.Rendering.EventFieldInfo fieldInfo, System.EventArgs eventArgs) { throw null; }
|
||||
public void Dispose() { }
|
||||
protected virtual void Dispose(bool disposing) { }
|
||||
protected Microsoft.AspNetCore.Components.RenderTree.ArrayRange<Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame> GetCurrentRenderTreeFrames(int componentId) { throw null; }
|
||||
protected abstract void HandleException(System.Exception exception);
|
||||
protected Microsoft.AspNetCore.Components.IComponent InstantiateComponent(System.Type componentType) { throw null; }
|
||||
protected virtual void ProcessPendingRender() { }
|
||||
protected System.Threading.Tasks.Task RenderRootComponentAsync(int componentId) { throw null; }
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute]
|
||||
protected System.Threading.Tasks.Task RenderRootComponentAsync(int componentId, Microsoft.AspNetCore.Components.ParameterView initialParameters) { throw null; }
|
||||
protected abstract System.Threading.Tasks.Task UpdateDisplayAsync(in Microsoft.AspNetCore.Components.Rendering.RenderBatch renderBatch);
|
||||
}
|
||||
public sealed partial class RenderTreeBuilder : System.IDisposable
|
||||
{
|
||||
public RenderTreeBuilder() { }
|
||||
public void AddAttribute(int sequence, in Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame frame) { }
|
||||
public void AddAttribute(int sequence, string name, Microsoft.AspNetCore.Components.EventCallback value) { }
|
||||
public void AddAttribute(int sequence, string name, bool value) { }
|
||||
public void AddAttribute(int sequence, string name, System.MulticastDelegate value) { }
|
||||
public void AddAttribute(int sequence, string name, object value) { }
|
||||
public void AddAttribute(int sequence, string name, string value) { }
|
||||
public void AddAttribute<TArgument>(int sequence, string name, Microsoft.AspNetCore.Components.EventCallback<TArgument> value) { }
|
||||
public void AddComponentReferenceCapture(int sequence, System.Action<object> componentReferenceCaptureAction) { }
|
||||
public void AddContent(int sequence, Microsoft.AspNetCore.Components.MarkupString markupContent) { }
|
||||
public void AddContent(int sequence, Microsoft.AspNetCore.Components.RenderFragment fragment) { }
|
||||
public void AddContent(int sequence, object textContent) { }
|
||||
public void AddContent(int sequence, string textContent) { }
|
||||
public void AddContent<TValue>(int sequence, Microsoft.AspNetCore.Components.RenderFragment<TValue> fragment, TValue value) { }
|
||||
public void AddElementReferenceCapture(int sequence, System.Action<Microsoft.AspNetCore.Components.ElementReference> elementReferenceCaptureAction) { }
|
||||
public void AddMarkupContent(int sequence, string markupContent) { }
|
||||
public void AddMultipleAttributes(int sequence, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) { }
|
||||
public void Clear() { }
|
||||
public void CloseComponent() { }
|
||||
public void CloseElement() { }
|
||||
public void CloseRegion() { }
|
||||
public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame> GetFrames() { throw null; }
|
||||
public void OpenComponent(int sequence, System.Type componentType) { }
|
||||
public void OpenComponent<TComponent>(int sequence) where TComponent : Microsoft.AspNetCore.Components.IComponent { }
|
||||
public void OpenElement(int sequence, string elementName) { }
|
||||
public void OpenRegion(int sequence) { }
|
||||
public void SetKey(object value) { }
|
||||
public void SetUpdatesAttributeName(string updatesAttributeName) { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.RenderTree
|
||||
{
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct ArrayBuilderSegment<T> : System.Collections.Generic.IEnumerable<T>, System.Collections.IEnumerable
|
||||
{
|
||||
private readonly object _dummy;
|
||||
private readonly int _dummyPrimitive;
|
||||
public T[] Array { get { throw null; } }
|
||||
public int Count { get { throw null; } }
|
||||
public T this[int index] { get { throw null; } }
|
||||
public int Offset { get { throw null; } }
|
||||
System.Collections.Generic.IEnumerator<T> System.Collections.Generic.IEnumerable<T>.GetEnumerator() { throw null; }
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct ArrayRange<T>
|
||||
{
|
||||
public readonly T[] Array;
|
||||
public readonly int Count;
|
||||
public ArrayRange(T[] array, int count) { throw null; }
|
||||
public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<T> Clone() { throw null; }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct RenderTreeDiff
|
||||
{
|
||||
public readonly int ComponentId;
|
||||
public readonly Microsoft.AspNetCore.Components.RenderTree.ArrayBuilderSegment<Microsoft.AspNetCore.Components.RenderTree.RenderTreeEdit> Edits;
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)]
|
||||
public readonly partial struct RenderTreeEdit
|
||||
{
|
||||
[System.Runtime.InteropServices.FieldOffsetAttribute(8)]
|
||||
public readonly int MoveToSiblingIndex;
|
||||
[System.Runtime.InteropServices.FieldOffsetAttribute(8)]
|
||||
public readonly int ReferenceFrameIndex;
|
||||
[System.Runtime.InteropServices.FieldOffsetAttribute(16)]
|
||||
public readonly string RemovedAttributeName;
|
||||
[System.Runtime.InteropServices.FieldOffsetAttribute(4)]
|
||||
public readonly int SiblingIndex;
|
||||
[System.Runtime.InteropServices.FieldOffsetAttribute(0)]
|
||||
public readonly Microsoft.AspNetCore.Components.RenderTree.RenderTreeEditType Type;
|
||||
}
|
||||
public enum RenderTreeEditType
|
||||
{
|
||||
PrependFrame = 1,
|
||||
RemoveFrame = 2,
|
||||
SetAttribute = 3,
|
||||
RemoveAttribute = 4,
|
||||
UpdateText = 5,
|
||||
StepIn = 6,
|
||||
StepOut = 7,
|
||||
UpdateMarkup = 8,
|
||||
PermutationListEntry = 9,
|
||||
PermutationListEnd = 10,
|
||||
}
|
||||
public enum RenderTreeFrameType : short
|
||||
{
|
||||
None = (short)0,
|
||||
Element = (short)1,
|
||||
Text = (short)2,
|
||||
Attribute = (short)3,
|
||||
Component = (short)4,
|
||||
Region = (short)5,
|
||||
ElementReferenceCapture = (short)6,
|
||||
ComponentReferenceCapture = (short)7,
|
||||
Markup = (short)8,
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.Routing
|
||||
{
|
||||
public partial interface IHostEnvironmentNavigationManager
|
||||
{
|
||||
void Initialize(string baseUri, string uri);
|
||||
}
|
||||
public partial interface INavigationInterception
|
||||
{
|
||||
System.Threading.Tasks.Task EnableNavigationInterceptionAsync();
|
||||
}
|
||||
public partial class LocationChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public LocationChangedEventArgs(string location, bool isNavigationIntercepted) { }
|
||||
public bool IsNavigationIntercepted { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Location { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class Router : Microsoft.AspNetCore.Components.IComponent, Microsoft.AspNetCore.Components.IHandleAfterRender, System.IDisposable
|
||||
{
|
||||
public Router() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public System.Reflection.Assembly AppAssembly { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.RouteData> Found { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment NotFound { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||
public void Dispose() { }
|
||||
System.Threading.Tasks.Task Microsoft.AspNetCore.Components.IHandleAfterRender.OnAfterRenderAsync() { throw null; }
|
||||
public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) { throw null; }
|
||||
}
|
||||
}
|
||||
|
|
@ -3,55 +3,6 @@
|
|||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
public partial class AuthenticationState
|
||||
{
|
||||
public AuthenticationState(System.Security.Claims.ClaimsPrincipal user) { }
|
||||
public System.Security.Claims.ClaimsPrincipal User { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public delegate void AuthenticationStateChangedHandler(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.AuthenticationState> task);
|
||||
public abstract partial class AuthenticationStateProvider
|
||||
{
|
||||
protected AuthenticationStateProvider() { }
|
||||
public event Microsoft.AspNetCore.Components.AuthenticationStateChangedHandler AuthenticationStateChanged { add { } remove { } }
|
||||
public abstract System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.AuthenticationState> GetAuthenticationStateAsync();
|
||||
protected void NotifyAuthenticationStateChanged(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.AuthenticationState> task) { }
|
||||
}
|
||||
public sealed partial class AuthorizeRouteView : Microsoft.AspNetCore.Components.RouteView
|
||||
{
|
||||
public AuthorizeRouteView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.AuthenticationState> NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void Render(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
}
|
||||
public partial class AuthorizeView : Microsoft.AspNetCore.Components.AuthorizeViewCore
|
||||
{
|
||||
public AuthorizeView() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Policy { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public string Roles { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override Microsoft.AspNetCore.Authorization.IAuthorizeData[] GetAuthorizeData() { throw null; }
|
||||
}
|
||||
public abstract partial class AuthorizeViewCore : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
protected AuthorizeViewCore() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.AuthenticationState> Authorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.AuthenticationState> ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.AuthenticationState> NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public object Resource { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected abstract Microsoft.AspNetCore.Authorization.IAuthorizeData[] GetAuthorizeData();
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute]
|
||||
protected override System.Threading.Tasks.Task OnParametersSetAsync() { throw null; }
|
||||
}
|
||||
public static partial class BindConverter
|
||||
{
|
||||
public static bool FormatValue(bool value, System.Globalization.CultureInfo culture = null) { throw null; }
|
||||
|
|
@ -99,15 +50,6 @@ namespace Microsoft.AspNetCore.Components
|
|||
public static bool TryConvertToString(object obj, System.Globalization.CultureInfo culture, out string value) { throw null; }
|
||||
public static bool TryConvertTo<T>(object obj, System.Globalization.CultureInfo culture, out T value) { throw null; }
|
||||
}
|
||||
public partial class CascadingAuthenticationState : Microsoft.AspNetCore.Components.ComponentBase, System.IDisposable
|
||||
{
|
||||
public CascadingAuthenticationState() { }
|
||||
[Microsoft.AspNetCore.Components.ParameterAttribute]
|
||||
public Microsoft.AspNetCore.Components.RenderFragment ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { }
|
||||
protected override void OnInitialized() { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
|
||||
public sealed partial class CascadingParameterAttribute : System.Attribute
|
||||
{
|
||||
|
|
@ -142,8 +84,8 @@ namespace Microsoft.AspNetCore.Components
|
|||
void Microsoft.AspNetCore.Components.IComponent.Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { }
|
||||
System.Threading.Tasks.Task Microsoft.AspNetCore.Components.IHandleAfterRender.OnAfterRenderAsync() { throw null; }
|
||||
System.Threading.Tasks.Task Microsoft.AspNetCore.Components.IHandleEvent.HandleEventAsync(Microsoft.AspNetCore.Components.EventCallbackWorkItem callback, object arg) { throw null; }
|
||||
protected virtual void OnAfterRender() { }
|
||||
protected virtual System.Threading.Tasks.Task OnAfterRenderAsync() { throw null; }
|
||||
protected virtual void OnAfterRender(bool firstRender) { }
|
||||
protected virtual System.Threading.Tasks.Task OnAfterRenderAsync(bool firstRender) { throw null; }
|
||||
protected virtual void OnInitialized() { }
|
||||
protected virtual System.Threading.Tasks.Task OnInitializedAsync() { throw null; }
|
||||
protected virtual void OnParametersSet() { }
|
||||
|
|
@ -266,10 +208,6 @@ namespace Microsoft.AspNetCore.Components
|
|||
{
|
||||
System.Threading.Tasks.Task HandleEventAsync(Microsoft.AspNetCore.Components.EventCallbackWorkItem item, object arg);
|
||||
}
|
||||
public partial interface IHostEnvironmentAuthenticationStateProvider
|
||||
{
|
||||
void SetAuthenticationState(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.AuthenticationState> authenticationStateTask);
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
|
||||
public sealed partial class InjectAttribute : System.Attribute
|
||||
{
|
||||
|
|
@ -423,104 +361,14 @@ namespace Microsoft.AspNetCore.Components.CompilerServices
|
|||
public static T TypeCheck<T>(T value) { throw null; }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
public partial class DataAnnotationsValidator : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
public DataAnnotationsValidator() { }
|
||||
protected override void OnInitialized() { }
|
||||
}
|
||||
public sealed partial class EditContext
|
||||
{
|
||||
public EditContext(object model) { }
|
||||
public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.FieldChangedEventArgs> OnFieldChanged { add { } remove { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs> OnValidationRequested { add { } remove { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs> OnValidationStateChanged { add { } remove { } }
|
||||
public Microsoft.AspNetCore.Components.Forms.FieldIdentifier Field(string fieldName) { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages() { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages(Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages(System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
|
||||
public bool IsModified() { throw null; }
|
||||
public bool IsModified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
|
||||
public bool IsModified(System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
|
||||
public void MarkAsUnmodified() { }
|
||||
public void MarkAsUnmodified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void NotifyFieldChanged(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void NotifyValidationStateChanged() { }
|
||||
public bool Validate() { throw null; }
|
||||
}
|
||||
public static partial class EditContextDataAnnotationsExtensions
|
||||
{
|
||||
public static Microsoft.AspNetCore.Components.Forms.EditContext AddDataAnnotationsValidation(this Microsoft.AspNetCore.Components.Forms.EditContext editContext) { throw null; }
|
||||
}
|
||||
public sealed partial class FieldChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public FieldChangedEventArgs(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct FieldIdentifier : System.IEquatable<Microsoft.AspNetCore.Components.Forms.FieldIdentifier>
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public FieldIdentifier(object model, string fieldName) { throw null; }
|
||||
public string FieldName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public static Microsoft.AspNetCore.Components.Forms.FieldIdentifier Create<TField>(System.Linq.Expressions.Expression<System.Func<TField>> accessor) { throw null; }
|
||||
public bool Equals(Microsoft.AspNetCore.Components.Forms.FieldIdentifier otherIdentifier) { throw null; }
|
||||
public override bool Equals(object obj) { throw null; }
|
||||
public override int GetHashCode() { throw null; }
|
||||
}
|
||||
public sealed partial class ValidationMessageStore
|
||||
{
|
||||
public ValidationMessageStore(Microsoft.AspNetCore.Components.Forms.EditContext editContext) { }
|
||||
public System.Collections.Generic.IEnumerable<string> this[Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier] { get { throw null; } }
|
||||
public System.Collections.Generic.IEnumerable<string> this[System.Linq.Expressions.Expression<System.Func<object>> accessor] { get { throw null; } }
|
||||
public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, System.Collections.Generic.IEnumerable<string> messages) { }
|
||||
public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, string message) { }
|
||||
public void Add(System.Linq.Expressions.Expression<System.Func<object>> accessor, System.Collections.Generic.IEnumerable<string> messages) { }
|
||||
public void Add(System.Linq.Expressions.Expression<System.Func<object>> accessor, string message) { }
|
||||
public void Clear() { }
|
||||
public void Clear(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void Clear(System.Linq.Expressions.Expression<System.Func<object>> accessor) { }
|
||||
}
|
||||
public sealed partial class ValidationRequestedEventArgs : System.EventArgs
|
||||
{
|
||||
public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs Empty;
|
||||
public ValidationRequestedEventArgs() { }
|
||||
}
|
||||
public sealed partial class ValidationStateChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs Empty;
|
||||
public ValidationStateChangedEventArgs() { }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.Rendering
|
||||
{
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct ComponentRenderedText
|
||||
{
|
||||
private readonly object _dummy;
|
||||
private readonly int _dummyPrimitive;
|
||||
public int ComponentId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Collections.Generic.IEnumerable<string> Tokens { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class EventFieldInfo
|
||||
{
|
||||
public EventFieldInfo() { }
|
||||
public int ComponentId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
public object FieldValue { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
public partial class HtmlRenderer : Microsoft.AspNetCore.Components.Rendering.Renderer
|
||||
{
|
||||
public HtmlRenderer(System.IServiceProvider serviceProvider, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Func<string, string> htmlEncoder) : base (default(System.IServiceProvider), default(Microsoft.Extensions.Logging.ILoggerFactory)) { }
|
||||
public override Microsoft.AspNetCore.Components.Dispatcher Dispatcher { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
protected override void HandleException(System.Exception exception) { }
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute]
|
||||
public System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Rendering.ComponentRenderedText> RenderComponentAsync(System.Type componentType, Microsoft.AspNetCore.Components.ParameterView initialParameters) { throw null; }
|
||||
public System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Rendering.ComponentRenderedText> RenderComponentAsync<TComponent>(Microsoft.AspNetCore.Components.ParameterView initialParameters) where TComponent : Microsoft.AspNetCore.Components.IComponent { throw null; }
|
||||
protected override System.Threading.Tasks.Task UpdateDisplayAsync(in Microsoft.AspNetCore.Components.Rendering.RenderBatch renderBatch) { throw null; }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct RenderBatch
|
||||
{
|
||||
|
|
@ -539,6 +387,7 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
public virtual System.Threading.Tasks.Task DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.Rendering.EventFieldInfo fieldInfo, System.EventArgs eventArgs) { throw null; }
|
||||
public void Dispose() { }
|
||||
protected virtual void Dispose(bool disposing) { }
|
||||
protected Microsoft.AspNetCore.Components.RenderTree.ArrayRange<Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame> GetCurrentRenderTreeFrames(int componentId) { throw null; }
|
||||
protected abstract void HandleException(System.Exception exception);
|
||||
protected Microsoft.AspNetCore.Components.IComponent InstantiateComponent(System.Type componentType) { throw null; }
|
||||
protected virtual void ProcessPendingRender() { }
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ namespace Microsoft.AspNetCore.Components
|
|||
private bool _initialized;
|
||||
private bool _hasNeverRendered = true;
|
||||
private bool _hasPendingQueuedRender;
|
||||
private bool _hasCalledOnAfterRender;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="ComponentBase"/>.
|
||||
|
|
@ -129,7 +130,17 @@ namespace Microsoft.AspNetCore.Components
|
|||
/// <summary>
|
||||
/// Method invoked after each time the component has been rendered.
|
||||
/// </summary>
|
||||
protected virtual void OnAfterRender()
|
||||
/// <param name="firstRender">
|
||||
/// Set to <c>true</c> if this is the first time <see cref="OnAfterRender(bool)"/> has been invoked
|
||||
/// on this component instance; otherwise <c>false</c>.
|
||||
/// </param>
|
||||
/// <remarks>
|
||||
/// The <see cref="OnAfterRender(bool)"/> and <see cref="OnAfterRenderAsync(bool)"/> lifecycle methods
|
||||
/// are useful for performing interop, or interacting with values recieved from <c>@ref</c>.
|
||||
/// Use the <paramref name="firstRender"/> parameter to ensure that initialization work is only performed
|
||||
/// once.
|
||||
/// </remarks>
|
||||
protected virtual void OnAfterRender(bool firstRender)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -138,8 +149,18 @@ namespace Microsoft.AspNetCore.Components
|
|||
/// not automatically re-render after the completion of any returned <see cref="Task"/>, because
|
||||
/// that would cause an infinite render loop.
|
||||
/// </summary>
|
||||
/// <param name="firstRender">
|
||||
/// Set to <c>true</c> if this is the first time <see cref="OnAfterRender(bool)"/> has been invoked
|
||||
/// on this component instance; otherwise <c>false</c>.
|
||||
/// </param>
|
||||
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
|
||||
protected virtual Task OnAfterRenderAsync()
|
||||
/// <remarks>
|
||||
/// The <see cref="OnAfterRender(bool)"/> and <see cref="OnAfterRenderAsync(bool)"/> lifecycle methods
|
||||
/// are useful for performing interop, or interacting with values recieved from <c>@ref</c>.
|
||||
/// Use the <paramref name="firstRender"/> parameter to ensure that initialization work is only performed
|
||||
/// once.
|
||||
/// </remarks>
|
||||
protected virtual Task OnAfterRenderAsync(bool firstRender)
|
||||
=> Task.CompletedTask;
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -298,9 +319,12 @@ namespace Microsoft.AspNetCore.Components
|
|||
|
||||
Task IHandleAfterRender.OnAfterRenderAsync()
|
||||
{
|
||||
OnAfterRender();
|
||||
var firstRender = !_hasCalledOnAfterRender;
|
||||
_hasCalledOnAfterRender |= true;
|
||||
|
||||
return OnAfterRenderAsync();
|
||||
OnAfterRender(firstRender);
|
||||
|
||||
return OnAfterRenderAsync(firstRender);
|
||||
|
||||
// Note that we don't call StateHasChanged to trigger a render after
|
||||
// handling this, because that would be an infinite loop. The only
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Razor">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
|
||||
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' == 'true'">netcoreapp3.0</TargetFrameworks>
|
||||
<Description>Components feature for ASP.NET Core.</Description>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<IsShippingPackage>true</IsShippingPackage>
|
||||
<IsAspNetCoreApp>true</IsAspNetCoreApp>
|
||||
<RazorLangVersion>3.0</RazorLangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -15,9 +15,9 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<Reference Include="Microsoft.JSInterop" />
|
||||
<Reference Include="System.ComponentModel.Annotations" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="_GetNuspecDependencyPackageVersions">
|
||||
|
|
@ -34,15 +34,17 @@
|
|||
|
||||
<!-- Pack settings -->
|
||||
<PropertyGroup>
|
||||
<NuspecFile>Microsoft.AspNetCore.Components.nuspec</NuspecFile>
|
||||
<NuspecFile>Microsoft.AspNetCore.Components.multitarget.nuspec</NuspecFile>
|
||||
<NuspecFile Condition="'$(DotNetBuildFromSource)' == 'true'">Microsoft.AspNetCore.Components.netcoreapp3.0.nuspec</NuspecFile>
|
||||
<GenerateNuspecDependsOn>$(GenerateNuspecDependsOn);_GetNuspecDependencyPackageVersions</GenerateNuspecDependsOn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<NuspecProperty Include="jsInteropPackageVersion=$(MicrosoftJSInteropPackageVersion)" />
|
||||
<NuspecProperty Include="systemComponentModelAnnotationsPackageVersion=$(SystemComponentModelAnnotationsPackageVersion)" />
|
||||
<NuspecProperty Include="outputPath=$(OutputPath)" />
|
||||
<NuspecProperty Include="assemblyName=$(AssemblyName)" />
|
||||
<NuspecProperty Condition="'$(DotNetBuildFromSource)' != 'true'" Include="systemComponentModelAnnotationsPackageVersion=$(SystemComponentModelAnnotationsPackageVersion)" />
|
||||
<NuspecProperty Include="OutputBinary=$(MSBuildProjectDirectory)\$(OutputPath)**\$(AssemblyName).dll" />
|
||||
<NuspecProperty Include="OutputSymbol=$(MSBuildProjectDirectory)\$(OutputPath)**\$(AssemblyName).pdb" />
|
||||
<NuspecProperty Include="OutputDocumentation=$(MSBuildProjectDirectory)\$(OutputPath)**\$(AssemblyName).xml" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -9,12 +9,17 @@
|
|||
<dependency id="Microsoft.JSInterop" version="$jsInteropPackageVersion$" exclude="Build,Analyzers" />
|
||||
<dependency id="System.ComponentModel.Annotations" version="$systemComponentModelAnnotationsPackageVersion$" exclude="Build,Analyzers" />
|
||||
</group>
|
||||
<group targetFramework=".NETCoreApp3.0">
|
||||
<dependency id="Microsoft.AspNetCore.Components.Analyzers" version="$componentAnalyzerPackageVersion$" />
|
||||
<dependency id="Microsoft.AspNetCore.Authorization" version="$authorizationPackageVersion$" exclude="Build,Analyzers" />
|
||||
<dependency id="Microsoft.JSInterop" version="$jsInteropPackageVersion$" exclude="Build,Analyzers" />
|
||||
</group>
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="$outputPath$$assemblyName$.dll" target="lib\netstandard2.0\$assemblyname$.dll" />
|
||||
<file src="$outputPath$$assemblyName$.xml" target="lib\netstandard2.0\$assemblyname$.xml" />
|
||||
<file src="$outputPath$$assemblyName$.pdb" target="lib\netstandard2.0\$assemblyname$.pdb" />
|
||||
<file src="$OutputBinary$" target="lib\" />
|
||||
<file src="$OutputDocumentation$" target="lib\" />
|
||||
<file src="$OutputSymbol$" target="lib\" />
|
||||
<file src="..\..\THIRD-PARTY-NOTICES.txt" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
||||
<metadata>
|
||||
$CommonMetadataElements$
|
||||
<dependencies>
|
||||
<group targetFramework=".NETCoreApp3.0">
|
||||
<dependency id="Microsoft.AspNetCore.Components.Analyzers" version="$componentAnalyzerPackageVersion$" />
|
||||
<dependency id="Microsoft.AspNetCore.Authorization" version="$authorizationPackageVersion$" exclude="Build,Analyzers" />
|
||||
<dependency id="Microsoft.JSInterop" version="$jsInteropPackageVersion$" exclude="Build,Analyzers" />
|
||||
</group>
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="$OutputBinary$" target="lib\" />
|
||||
<file src="$OutputDocumentation$" target="lib\" />
|
||||
<file src="$OutputSymbol$" target="lib\" />
|
||||
<file src="..\..\THIRD-PARTY-NOTICES.txt" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Blazor.Build.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Web.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Authorization.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Forms.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Performance, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Server.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Web.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Ignitor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Ignitor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Rendering
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents the result of rendering a component into static html.
|
||||
/// </summary>
|
||||
public readonly struct ComponentRenderedText
|
||||
{
|
||||
internal ComponentRenderedText(int componentId, IEnumerable<string> tokens)
|
||||
{
|
||||
ComponentId = componentId;
|
||||
Tokens = tokens;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the id associated with the component.
|
||||
/// </summary>
|
||||
public int ComponentId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sequence of tokens that when concatenated represent the html for the rendered component.
|
||||
/// </summary>
|
||||
public IEnumerable<string> Tokens { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -75,16 +75,24 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
batchBuilder.UpdatedComponentDiffs.Append(diff);
|
||||
}
|
||||
|
||||
public void DisposeInBatch(RenderBatchBuilder batchBuilder)
|
||||
public bool TryDisposeInBatch(RenderBatchBuilder batchBuilder, out Exception exception)
|
||||
{
|
||||
_componentWasDisposed = true;
|
||||
exception = null;
|
||||
|
||||
// TODO: Handle components throwing during dispose. Shouldn't break the whole render batch.
|
||||
if (Component is IDisposable disposable)
|
||||
try
|
||||
{
|
||||
disposable.Dispose();
|
||||
if (Component is IDisposable disposable)
|
||||
{
|
||||
disposable.Dispose();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// We don't expect these things to throw.
|
||||
RenderTreeDiffBuilder.DisposeFrames(batchBuilder, CurrentRenderTree.GetFrames());
|
||||
|
||||
if (_hasAnyCascadingParameterSubscriptions)
|
||||
|
|
@ -93,13 +101,27 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
}
|
||||
|
||||
DisposeBuffers();
|
||||
|
||||
return exception == null;
|
||||
}
|
||||
|
||||
// Callers expect this method to always return a faulted task.
|
||||
public Task NotifyRenderCompletedAsync()
|
||||
{
|
||||
if (Component is IHandleAfterRender handlerAfterRender)
|
||||
{
|
||||
return handlerAfterRender.OnAfterRenderAsync();
|
||||
try
|
||||
{
|
||||
return handlerAfterRender.OnAfterRenderAsync();
|
||||
}
|
||||
catch (OperationCanceledException cex)
|
||||
{
|
||||
return Task.FromCanceled(cex.CancellationToken);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Task.FromException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
private bool _isBatchInProgress;
|
||||
private ulong _lastEventHandlerId;
|
||||
private List<Task> _pendingTasks;
|
||||
private bool _disposed;
|
||||
|
||||
/// <summary>
|
||||
/// Allows the caller to handle exceptions from the SynchronizationContext when one is available.
|
||||
|
|
@ -93,7 +94,7 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
/// </summary>
|
||||
/// <param name="componentId">The id for the component.</param>
|
||||
/// <returns>The <see cref="RenderTreeBuilder"/> representing the current render tree.</returns>
|
||||
private protected ArrayRange<RenderTreeFrame> GetCurrentRenderTreeFrames(int componentId) => GetRequiredComponentState(componentId).CurrentRenderTree.GetFrames();
|
||||
protected ArrayRange<RenderTreeFrame> GetCurrentRenderTreeFrames(int componentId) => GetRequiredComponentState(componentId).CurrentRenderTree.GetFrames();
|
||||
|
||||
/// <summary>
|
||||
/// Performs the first render for a root component, waiting for this component and all
|
||||
|
|
@ -403,6 +404,11 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
/// </summary>
|
||||
protected virtual void ProcessPendingRender()
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
throw new ObjectDisposedException(nameof(Renderer), "Cannot process pending renders after the renderer has been disposed.");
|
||||
}
|
||||
|
||||
ProcessRenderQueue();
|
||||
}
|
||||
|
||||
|
|
@ -587,16 +593,31 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
Log.RenderingComponent(_logger, componentState);
|
||||
componentState.RenderIntoBatch(_batchBuilder, renderQueueEntry.RenderFragment);
|
||||
|
||||
List<Exception> exceptions = null;
|
||||
|
||||
// Process disposal queue now in case it causes further component renders to be enqueued
|
||||
while (_batchBuilder.ComponentDisposalQueue.Count > 0)
|
||||
{
|
||||
var disposeComponentId = _batchBuilder.ComponentDisposalQueue.Dequeue();
|
||||
var disposeComponentState = GetRequiredComponentState(disposeComponentId);
|
||||
Log.DisposingComponent(_logger, disposeComponentState);
|
||||
disposeComponentState.DisposeInBatch(_batchBuilder);
|
||||
if (!disposeComponentState.TryDisposeInBatch(_batchBuilder, out var exception))
|
||||
{
|
||||
exceptions ??= new List<Exception>();
|
||||
exceptions.Add(exception);
|
||||
}
|
||||
_componentStateById.Remove(disposeComponentId);
|
||||
_batchBuilder.DisposedComponentIds.Append(disposeComponentId);
|
||||
}
|
||||
|
||||
if (exceptions?.Count > 1)
|
||||
{
|
||||
HandleException(new AggregateException("Exceptions were encountered while disposing components.", exceptions));
|
||||
}
|
||||
else if (exceptions?.Count == 1)
|
||||
{
|
||||
HandleException(exceptions[0]);
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveEventHandlerIds(ArrayRange<ulong> eventHandlerIds, Task afterTaskIgnoreErrors)
|
||||
|
|
@ -681,6 +702,11 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
/// <param name="disposing"><see langword="true"/> if this method is being invoked by <see cref="IDisposable.Dispose"/>, otherwise <see langword="false"/>.</param>
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
_disposed = true;
|
||||
|
||||
// It's important that we handle all exceptions here before reporting any of them.
|
||||
// This way we can dispose all components before an error handler kicks in.
|
||||
List<Exception> exceptions = null;
|
||||
foreach (var componentState in _componentStateById.Values)
|
||||
{
|
||||
Log.DisposingComponent(_logger, componentState);
|
||||
|
|
@ -693,11 +719,22 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
|||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
HandleException(exception);
|
||||
exceptions ??= new List<Exception>();
|
||||
exceptions.Add(exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_batchBuilder.Dispose();
|
||||
_componentStateById.Clear(); // So we know they were all disposed
|
||||
_batchBuilder.Dispose();
|
||||
|
||||
if (exceptions?.Count > 1)
|
||||
{
|
||||
HandleException(new AggregateException("Exceptions were encountered while disposing components.", exceptions));
|
||||
}
|
||||
else if (exceptions?.Count == 1)
|
||||
{
|
||||
HandleException(exceptions[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection.Metadata.Ecma335;
|
||||
using System.Runtime.ExceptionServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
|
@ -261,6 +263,98 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
Assert.Equal(2, renderer.Batches.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RunsOnAfterRender_AfterRenderingCompletes()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer();
|
||||
var component = new TestComponent() { Counter = 1 };
|
||||
|
||||
var onAfterRenderCompleted = false;
|
||||
component.OnAfterRenderLogic = (c, firstRender) =>
|
||||
{
|
||||
Assert.True(firstRender);
|
||||
Assert.Single(renderer.Batches);
|
||||
onAfterRenderCompleted = true;
|
||||
};
|
||||
|
||||
// Act
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
var renderTask = renderer.RenderRootComponentAsync(componentId);
|
||||
|
||||
// Assert
|
||||
await renderTask;
|
||||
Assert.True(onAfterRenderCompleted);
|
||||
|
||||
// Component should not be rendered again. OnAfterRender doesn't do that.
|
||||
Assert.Single(renderer.Batches);
|
||||
|
||||
// Act: Render again!
|
||||
onAfterRenderCompleted = false;
|
||||
component.OnAfterRenderLogic = (c, firstRender) =>
|
||||
{
|
||||
Assert.False(firstRender);
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
onAfterRenderCompleted = true;
|
||||
};
|
||||
|
||||
renderTask = renderer.RenderRootComponentAsync(componentId);
|
||||
|
||||
// Assert
|
||||
Assert.True(onAfterRenderCompleted);
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
await renderTask;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RunsOnAfterRenderAsync_AfterRenderingCompletes()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer();
|
||||
var component = new TestComponent() { Counter = 1 };
|
||||
|
||||
var onAfterRenderCompleted = false;
|
||||
var tcs = new TaskCompletionSource<object>();
|
||||
component.OnAfterRenderAsyncLogic = async (c, firstRender) =>
|
||||
{
|
||||
Assert.True(firstRender);
|
||||
Assert.Single(renderer.Batches);
|
||||
onAfterRenderCompleted = true;
|
||||
await tcs.Task;
|
||||
};
|
||||
|
||||
// Act
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
var renderTask = renderer.RenderRootComponentAsync(componentId);
|
||||
|
||||
// Assert
|
||||
tcs.SetResult(null);
|
||||
await renderTask;
|
||||
Assert.True(onAfterRenderCompleted);
|
||||
|
||||
// Component should not be rendered again. OnAfterRenderAsync doesn't do that.
|
||||
Assert.Single(renderer.Batches);
|
||||
|
||||
// Act: Render again!
|
||||
onAfterRenderCompleted = false;
|
||||
tcs = new TaskCompletionSource<object>();
|
||||
component.OnAfterRenderAsyncLogic = async (c, firstRender) =>
|
||||
{
|
||||
Assert.False(firstRender);
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
onAfterRenderCompleted = true;
|
||||
await tcs.Task;
|
||||
};
|
||||
|
||||
renderTask = renderer.RenderRootComponentAsync(componentId);
|
||||
|
||||
// Assert
|
||||
tcs.SetResult(null);
|
||||
await renderTask;
|
||||
Assert.True(onAfterRenderCompleted);
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DoesNotRenderAfterOnInitAsyncTaskIsCancelledUsingCancellationToken()
|
||||
{
|
||||
|
|
@ -386,6 +480,10 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
|
||||
public bool RunsBaseOnParametersSetAsync { get; set; } = true;
|
||||
|
||||
public bool RunsBaseOnAfterRender { get; set; } = true;
|
||||
|
||||
public bool RunsBaseOnAfterRenderAsync { get; set; } = true;
|
||||
|
||||
public Action<TestComponent> OnInitLogic { get; set; }
|
||||
|
||||
public Func<TestComponent, Task> OnInitAsyncLogic { get; set; }
|
||||
|
|
@ -394,6 +492,10 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
|
||||
public Func<TestComponent, Task> OnParametersSetAsyncLogic { get; set; }
|
||||
|
||||
public Action<TestComponent, bool> OnAfterRenderLogic { get; set; }
|
||||
|
||||
public Func<TestComponent, bool, Task> OnAfterRenderAsyncLogic { get; set; }
|
||||
|
||||
public int Counter { get; set; }
|
||||
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
|
|
@ -448,6 +550,32 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
await OnParametersSetAsyncLogic(this);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
if (RunsBaseOnAfterRender)
|
||||
{
|
||||
base.OnAfterRender(firstRender);
|
||||
}
|
||||
|
||||
if (OnAfterRenderLogic != null)
|
||||
{
|
||||
OnAfterRenderLogic(this, firstRender);
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (RunsBaseOnAfterRenderAsync)
|
||||
{
|
||||
await base.OnAfterRenderAsync(firstRender);
|
||||
}
|
||||
|
||||
if (OnAfterRenderAsyncLogic != null)
|
||||
{
|
||||
await OnAfterRenderAsyncLogic(this, firstRender);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2046,6 +2046,127 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
Assert.Equal(2, renderer.Batches.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RenderBatch_HandlesExceptionsFromAllDisposedComponents()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer { ShouldHandleExceptions = true };
|
||||
var exception1 = new Exception();
|
||||
var exception2 = new Exception();
|
||||
|
||||
var firstRender = true;
|
||||
var component = new TestComponent(builder =>
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
builder.AddContent(0, "Hello");
|
||||
builder.OpenComponent<DisposableComponent>(1);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => throw exception1));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<DisposableComponent>(2);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => throw exception2));
|
||||
builder.CloseComponent();
|
||||
}
|
||||
});
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
component.TriggerRender();
|
||||
|
||||
// Act: Second render
|
||||
firstRender = false;
|
||||
component.TriggerRender();
|
||||
|
||||
// Assert: Applicable children are included in disposal list
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
Assert.Equal(new[] { 1, 2 }, renderer.Batches[1].DisposedComponentIDs);
|
||||
|
||||
// Outer component is still alive and not disposed.
|
||||
Assert.False(component.Disposed);
|
||||
var aex = Assert.IsType<AggregateException>(Assert.Single(renderer.HandledExceptions));
|
||||
Assert.Contains(exception1, aex.InnerExceptions);
|
||||
Assert.Contains(exception2, aex.InnerExceptions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RenderBatch_DoesNotDisposeComponentMultipleTimes()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer { ShouldHandleExceptions = true };
|
||||
var exception1 = new Exception();
|
||||
var exception2 = new Exception();
|
||||
|
||||
var count1 = 0;
|
||||
var count2 = 0;
|
||||
var count3 = 0;
|
||||
var count4 = 0;
|
||||
var count5 = 0;
|
||||
|
||||
var firstRender = true;
|
||||
var component = new TestComponent(builder =>
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
builder.AddContent(0, "Hello");
|
||||
builder.OpenComponent<DisposableComponent>(1);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => { count1++; }));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<DisposableComponent>(2);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => { count2++; throw exception1; }));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<DisposableComponent>(3);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => { count3++; }));
|
||||
builder.CloseComponent();
|
||||
}
|
||||
|
||||
builder.OpenComponent<DisposableComponent>(4);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => { count4++; throw exception2; }));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<DisposableComponent>(5);
|
||||
builder.AddAttribute(1, nameof(DisposableComponent.DisposeAction), (Action)(() => { count5++; }));
|
||||
builder.CloseComponent();
|
||||
});
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
component.TriggerRender();
|
||||
|
||||
// Act: Second render
|
||||
firstRender = false;
|
||||
component.TriggerRender();
|
||||
|
||||
// Assert: Applicable children are included in disposal list
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
Assert.Equal(new[] { 1, 2, 3 }, renderer.Batches[1].DisposedComponentIDs);
|
||||
|
||||
// Components "disposed" in the batch were all disposed, components that are still live were not disposed
|
||||
Assert.Equal(1, count1);
|
||||
Assert.Equal(1, count2);
|
||||
Assert.Equal(1, count3);
|
||||
Assert.Equal(0, count4);
|
||||
Assert.Equal(0, count5);
|
||||
|
||||
// Outer component is still alive and not disposed.
|
||||
Assert.False(component.Disposed);
|
||||
var ex = Assert.IsType<Exception>(Assert.Single(renderer.HandledExceptions));
|
||||
Assert.Same(exception1, ex);
|
||||
|
||||
// Act: Dispose renderer
|
||||
renderer.Dispose();
|
||||
|
||||
Assert.Equal(2, renderer.HandledExceptions.Count);
|
||||
ex = renderer.HandledExceptions[1];
|
||||
Assert.Same(exception2, ex);
|
||||
|
||||
// Assert: Everything was disposed once.
|
||||
Assert.Equal(1, count1);
|
||||
Assert.Equal(1, count2);
|
||||
Assert.Equal(1, count3);
|
||||
Assert.Equal(1, count4);
|
||||
Assert.Equal(1, count5);
|
||||
Assert.True(component.Disposed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DisposesEventHandlersWhenAttributeValueChanged()
|
||||
{
|
||||
|
|
@ -2431,7 +2552,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
.ComponentId;
|
||||
var origEventHandlerId = renderer.Batches.Single()
|
||||
.ReferenceFrames
|
||||
.Where(f => f.FrameType == RenderTreeFrameType.Attribute && f.AttributeName == "onclick")
|
||||
.Where(f => f.FrameType == RenderTreeFrameType.Attribute && f.AttributeName == "onmycustomevent")
|
||||
.Single(f => f.AttributeEventHandlerId != 0)
|
||||
.AttributeEventHandlerId;
|
||||
|
||||
|
|
@ -3059,7 +3180,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExceptionsThrownFromHandleAfterRender_AreHandled()
|
||||
public async Task ExceptionsThrownFromHandleAfterRender_Sync_AreHandled()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer { ShouldHandleExceptions = true };
|
||||
|
|
@ -3078,7 +3199,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsync,
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncSync,
|
||||
EventAction = () =>
|
||||
{
|
||||
throw exception;
|
||||
|
|
@ -3089,12 +3210,11 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsync,
|
||||
EventAction = async () =>
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncSync,
|
||||
EventAction = () =>
|
||||
{
|
||||
await Task.Yield();
|
||||
taskCompletionSource.TrySetResult(0);
|
||||
return (1, NestedAsyncComponent.EventType.OnAfterRenderAsync);
|
||||
return Task.FromResult((1, NestedAsyncComponent.EventType.OnAfterRenderAsyncSync));
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -3113,6 +3233,137 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
Assert.Same(exception, Assert.Single(renderer.HandledExceptions).GetBaseException());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExceptionsThrownFromHandleAfterRender_Async_AreHandled()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer { ShouldHandleExceptions = true };
|
||||
var component = new NestedAsyncComponent();
|
||||
var exception = new InvalidTimeZoneException();
|
||||
|
||||
var taskCompletionSource = new TaskCompletionSource<int>();
|
||||
|
||||
// Act/Assert
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
var renderTask = renderer.RenderRootComponentAsync(componentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
[nameof(NestedAsyncComponent.EventActions)] = new Dictionary<int, IList<NestedAsyncComponent.ExecutionAction>>
|
||||
{
|
||||
[0] = new[]
|
||||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncAsync,
|
||||
EventAction = async () =>
|
||||
{
|
||||
await Task.Yield();
|
||||
throw exception;
|
||||
},
|
||||
}
|
||||
},
|
||||
[1] = new[]
|
||||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncAsync,
|
||||
EventAction = async () =>
|
||||
{
|
||||
await Task.Yield();
|
||||
taskCompletionSource.TrySetResult(0);
|
||||
return (1, NestedAsyncComponent.EventType.OnAfterRenderAsyncAsync);
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
[nameof(NestedAsyncComponent.WhatToRender)] = new Dictionary<int, Func<NestedAsyncComponent, RenderFragment>>
|
||||
{
|
||||
[0] = CreateRenderFactory(new[] { 1 }),
|
||||
[1] = CreateRenderFactory(Array.Empty<int>()),
|
||||
},
|
||||
}));
|
||||
|
||||
Assert.True(renderTask.IsCompletedSuccessfully);
|
||||
|
||||
// OnAfterRenderAsync happens in the background. Make it more predictable, by gating it until we're ready to capture exceptions.
|
||||
await taskCompletionSource.Task.TimeoutAfter(TimeSpan.FromSeconds(10));
|
||||
Assert.Same(exception, Assert.Single(renderer.HandledExceptions).GetBaseException());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExceptionThrownFromConstructor()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer { ShouldHandleExceptions = true };
|
||||
var component = new TestComponent(builder =>
|
||||
{
|
||||
builder.OpenComponent<ConstructorThrowingComponent>(0);
|
||||
builder.CloseComponent();
|
||||
});
|
||||
|
||||
// Act/Assert
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
var renderTask = renderer.RenderRootComponentAsync(componentId);
|
||||
|
||||
await renderTask;
|
||||
Assert.True(renderTask.IsCompletedSuccessfully);
|
||||
Assert.Same(ConstructorThrowingComponent.Exception, Assert.Single(renderer.HandledExceptions).GetBaseException());
|
||||
}
|
||||
|
||||
private class ConstructorThrowingComponent : IComponent
|
||||
{
|
||||
public static readonly Exception Exception = new InvalidTimeZoneException();
|
||||
|
||||
public ConstructorThrowingComponent()
|
||||
{
|
||||
throw Exception;
|
||||
}
|
||||
|
||||
public void Attach(RenderHandle renderHandle)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExceptionThrownFromAttach()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer { ShouldHandleExceptions = true };
|
||||
var component = new TestComponent(builder =>
|
||||
{
|
||||
builder.OpenComponent<AttachThrowingComponent>(0);
|
||||
builder.CloseComponent();
|
||||
});
|
||||
|
||||
// Act/Assert
|
||||
var componentId = renderer.AssignRootComponentId(component);
|
||||
var renderTask = renderer.RenderRootComponentAsync(componentId);
|
||||
|
||||
await renderTask;
|
||||
Assert.True(renderTask.IsCompletedSuccessfully);
|
||||
Assert.Same(AttachThrowingComponent.Exception, Assert.Single(renderer.HandledExceptions).GetBaseException());
|
||||
}
|
||||
|
||||
private class AttachThrowingComponent : IComponent
|
||||
{
|
||||
public static readonly Exception Exception = new InvalidTimeZoneException();
|
||||
|
||||
public void Attach(RenderHandle renderHandle)
|
||||
{
|
||||
throw Exception;
|
||||
}
|
||||
|
||||
public Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SynchronousCancelledTasks_HandleAfterRender_Works()
|
||||
{
|
||||
|
|
@ -3132,7 +3383,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsync,
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncAsync,
|
||||
EventAction = () => tcs.Task,
|
||||
}
|
||||
},
|
||||
|
|
@ -3166,7 +3417,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsync,
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncAsync,
|
||||
EventAction = () => tcs.Task,
|
||||
}
|
||||
},
|
||||
|
|
@ -3203,7 +3454,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
new NestedAsyncComponent.ExecutionAction
|
||||
{
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsync,
|
||||
Event = NestedAsyncComponent.EventType.OnAfterRenderAsyncSync,
|
||||
EventAction = () =>
|
||||
{
|
||||
taskCompletionSource.TrySetResult(0);
|
||||
|
|
@ -3239,6 +3490,41 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
Assert.True(component.Disposed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisposingRenderer_RejectsAttemptsToStartMoreRenderBatches()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer();
|
||||
renderer.Dispose();
|
||||
|
||||
// Act/Assert
|
||||
var ex = Assert.Throws<ObjectDisposedException>(() => renderer.ProcessPendingRender());
|
||||
Assert.Contains("Cannot process pending renders after the renderer has been disposed.", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenRendererIsDisposed_ComponentRenderRequestsAreSkipped()
|
||||
{
|
||||
// The important point of this is that user code in components may continue to call
|
||||
// StateHasChanged (e.g., after an async task completion), and we don't want that to
|
||||
// show up as an error. In general, components should skip rendering after disposal.
|
||||
// This test shows that we don't add any new entries to the render queue after disposal.
|
||||
// There's a different test showing that if the render queue entry was already added
|
||||
// before a component got individually disposed, that render queue entry gets skipped.
|
||||
|
||||
// Arrange
|
||||
var renderer = new TestRenderer();
|
||||
var component = new DisposableComponent();
|
||||
renderer.AssignRootComponentId(component);
|
||||
|
||||
// Act
|
||||
renderer.Dispose();
|
||||
component.TriggerRender();
|
||||
|
||||
// Assert: no exception, no batch produced
|
||||
Assert.Empty(renderer.Batches);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisposingRenderer_DisposesNestedComponents()
|
||||
{
|
||||
|
|
@ -3291,9 +3577,9 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
|
||||
// All components must be disposed even if some throw as part of being diposed.
|
||||
Assert.True(component.Disposed);
|
||||
Assert.Equal(2, renderer.HandledExceptions.Count);
|
||||
Assert.Contains(exception1, renderer.HandledExceptions);
|
||||
Assert.Contains(exception2, renderer.HandledExceptions);
|
||||
var aex = Assert.IsType<AggregateException>(Assert.Single(renderer.HandledExceptions));
|
||||
Assert.Contains(exception1, aex.InnerExceptions);
|
||||
Assert.Contains(exception2, aex.InnerExceptions);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -3685,7 +3971,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
=> _renderHandle.Render(builder =>
|
||||
{
|
||||
builder.OpenElement(0, "my button");
|
||||
builder.AddAttribute(1, "my click handler", new Action<EventArgs>(eventArgs => OnClick(eventArgs)));
|
||||
builder.AddAttribute(1, "onmycustomevent", EventCallback.Factory.Create(this, eventArgs => OnClick(eventArgs)));
|
||||
builder.CloseElement();
|
||||
});
|
||||
}
|
||||
|
|
@ -3941,6 +4227,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
if (TryGetEntry(EventType.OnInit, out var entry))
|
||||
{
|
||||
var result = entry.EventAction();
|
||||
Assert.True(result.IsCompleted, "Task must complete synchronously.");
|
||||
LogResult(result.Result);
|
||||
}
|
||||
}
|
||||
|
|
@ -3949,8 +4236,9 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
if (TryGetEntry(EventType.OnInitAsyncSync, out var entrySync))
|
||||
{
|
||||
var result = await entrySync.EventAction();
|
||||
LogResult(result);
|
||||
var result = entrySync.EventAction();
|
||||
Assert.True(result.IsCompleted, "Task must complete synchronously.");
|
||||
LogResult(result.Result);
|
||||
}
|
||||
else if (TryGetEntry(EventType.OnInitAsyncAsync, out var entryAsync))
|
||||
{
|
||||
|
|
@ -3964,6 +4252,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
if (TryGetEntry(EventType.OnParametersSet, out var entry))
|
||||
{
|
||||
var result = entry.EventAction();
|
||||
Assert.True(result.IsCompleted, "Task must complete synchronously.");
|
||||
LogResult(result.Result);
|
||||
}
|
||||
base.OnParametersSet();
|
||||
|
|
@ -3973,10 +4262,9 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
{
|
||||
if (TryGetEntry(EventType.OnParametersSetAsyncSync, out var entrySync))
|
||||
{
|
||||
var result = await entrySync.EventAction();
|
||||
LogResult(result);
|
||||
|
||||
await entrySync.EventAction();
|
||||
var result = entrySync.EventAction();
|
||||
Assert.True(result.IsCompleted, "Task must complete synchronously.");
|
||||
LogResult(result.Result);
|
||||
}
|
||||
else if (TryGetEntry(EventType.OnParametersSetAsyncAsync, out var entryAsync))
|
||||
{
|
||||
|
|
@ -3991,11 +4279,17 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
renderFactory(this)(builder);
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync()
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (TryGetEntry(EventType.OnAfterRenderAsync, out var entry))
|
||||
if (TryGetEntry(EventType.OnAfterRenderAsyncSync, out var entrySync))
|
||||
{
|
||||
var result = await entry.EventAction();
|
||||
var result = entrySync.EventAction();
|
||||
Assert.True(result.IsCompleted, "Task must complete synchronously.");
|
||||
LogResult(result.Result);
|
||||
}
|
||||
if (TryGetEntry(EventType.OnAfterRenderAsyncAsync, out var entryAsync))
|
||||
{
|
||||
var result = await entryAsync.EventAction();
|
||||
LogResult(result);
|
||||
}
|
||||
}
|
||||
|
|
@ -4054,7 +4348,8 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
OnParametersSet,
|
||||
OnParametersSetAsyncSync,
|
||||
OnParametersSetAsyncAsync,
|
||||
OnAfterRenderAsync,
|
||||
OnAfterRenderAsyncSync,
|
||||
OnAfterRenderAsyncAsync,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
|
|
@ -261,6 +262,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree
|
|||
Assert.Single(ArrayPool.ReturnedBuffers);
|
||||
var returnedBuffer = Assert.Single(ArrayPool.ReturnedBuffers);
|
||||
Assert.Same(buffer, returnedBuffer);
|
||||
Assert.NotSame(builder.Buffer, buffer); // Prevents use after free
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -281,6 +283,21 @@ namespace Microsoft.AspNetCore.Components.RenderTree
|
|||
Assert.Same(buffer, returnedBuffer);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Dispose_ThrowsOnReuse()
|
||||
{
|
||||
// Arrange
|
||||
var builder = CreateArrayBuilder();
|
||||
builder.Append(1);
|
||||
var buffer = builder.Buffer;
|
||||
|
||||
builder.Dispose();
|
||||
Assert.Single(ArrayPool.ReturnedBuffers);
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<ObjectDisposedException>(() => builder.Append(1));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UnusedBufferIsReturned_OnResize()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Rendering
|
||||
{
|
||||
public class HtmlRendererTests : HtmlRendererTestBase
|
||||
{
|
||||
protected override HtmlRenderer GetHtmlRenderer(IServiceProvider serviceProvider)
|
||||
{
|
||||
return new HtmlRenderer(serviceProvider, NullLoggerFactory.Instance, _encoder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,8 @@
|
|||
"projects": [
|
||||
"Analyzers\\src\\Microsoft.AspNetCore.Components.Analyzers.csproj",
|
||||
"Analyzers\\test\\Microsoft.AspNetCore.Components.Analyzers.Tests.csproj",
|
||||
"Authorization\\src\\Microsoft.AspNetCore.Components.Authorization.csproj",
|
||||
"Authorization\\test\\Microsoft.AspNetCore.Components.Authorization.Tests.csproj",
|
||||
"Blazor\\Blazor\\src\\Microsoft.AspNetCore.Blazor.csproj",
|
||||
"Blazor\\Blazor\\test\\Microsoft.AspNetCore.Blazor.Tests.csproj",
|
||||
"Blazor\\Build\\src\\Microsoft.AspNetCore.Blazor.Build.csproj",
|
||||
|
|
@ -19,6 +21,8 @@
|
|||
"Blazor\\testassets\\MonoSanityClient\\MonoSanityClient.csproj",
|
||||
"Blazor\\testassets\\MonoSanity\\MonoSanity.csproj",
|
||||
"Blazor\\testassets\\StandaloneApp\\StandaloneApp.csproj",
|
||||
"Forms\\src\\Microsoft.AspNetCore.Components.Forms.csproj",
|
||||
"Forms\\test\\Microsoft.AspNetCore.Components.Forms.Tests.csproj",
|
||||
"Web\\src\\Microsoft.AspNetCore.Components.Web.csproj",
|
||||
"Web\\test\\Microsoft.AspNetCore.Components.Web.Tests.csproj",
|
||||
"Components\\perf\\Microsoft.AspNetCore.Components.Performance.csproj",
|
||||
|
|
@ -26,7 +30,6 @@
|
|||
"Components\\test\\Microsoft.AspNetCore.Components.Tests.csproj",
|
||||
"Server\\src\\Microsoft.AspNetCore.Components.Server.csproj",
|
||||
"Server\\test\\Microsoft.AspNetCore.Components.Server.Tests.csproj",
|
||||
"blazor\\BlazorExtension\\src\\Microsoft.VisualStudio.BlazorExtension.csproj",
|
||||
"test\\E2ETest\\Microsoft.AspNetCore.Components.E2ETests.csproj",
|
||||
"test\\testassets\\BasicTestApp\\BasicTestApp.csproj",
|
||||
"test\\testassets\\ComponentsApp.App\\ComponentsApp.App.csproj",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
<!-- This file is automatically generated. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.Forms.netstandard2.0.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="System.ComponentModel.Annotations" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.Forms.netcoreapp3.0.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
public partial class DataAnnotationsValidator : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
public DataAnnotationsValidator() { }
|
||||
protected override void OnInitialized() { }
|
||||
}
|
||||
public sealed partial class EditContext
|
||||
{
|
||||
public EditContext(object model) { }
|
||||
public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.FieldChangedEventArgs> OnFieldChanged { add { } remove { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs> OnValidationRequested { add { } remove { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs> OnValidationStateChanged { add { } remove { } }
|
||||
public Microsoft.AspNetCore.Components.Forms.FieldIdentifier Field(string fieldName) { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages() { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages(Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages(System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
|
||||
public bool IsModified() { throw null; }
|
||||
public bool IsModified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
|
||||
public bool IsModified(System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
|
||||
public void MarkAsUnmodified() { }
|
||||
public void MarkAsUnmodified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void NotifyFieldChanged(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void NotifyValidationStateChanged() { }
|
||||
public bool Validate() { throw null; }
|
||||
}
|
||||
public static partial class EditContextDataAnnotationsExtensions
|
||||
{
|
||||
public static Microsoft.AspNetCore.Components.Forms.EditContext AddDataAnnotationsValidation(this Microsoft.AspNetCore.Components.Forms.EditContext editContext) { throw null; }
|
||||
}
|
||||
public sealed partial class FieldChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public FieldChangedEventArgs(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct FieldIdentifier : System.IEquatable<Microsoft.AspNetCore.Components.Forms.FieldIdentifier>
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public FieldIdentifier(object model, string fieldName) { throw null; }
|
||||
public string FieldName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public static Microsoft.AspNetCore.Components.Forms.FieldIdentifier Create<TField>(System.Linq.Expressions.Expression<System.Func<TField>> accessor) { throw null; }
|
||||
public bool Equals(Microsoft.AspNetCore.Components.Forms.FieldIdentifier otherIdentifier) { throw null; }
|
||||
public override bool Equals(object obj) { throw null; }
|
||||
public override int GetHashCode() { throw null; }
|
||||
}
|
||||
public sealed partial class ValidationMessageStore
|
||||
{
|
||||
public ValidationMessageStore(Microsoft.AspNetCore.Components.Forms.EditContext editContext) { }
|
||||
public System.Collections.Generic.IEnumerable<string> this[Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier] { get { throw null; } }
|
||||
public System.Collections.Generic.IEnumerable<string> this[System.Linq.Expressions.Expression<System.Func<object>> accessor] { get { throw null; } }
|
||||
public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, System.Collections.Generic.IEnumerable<string> messages) { }
|
||||
public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, string message) { }
|
||||
public void Add(System.Linq.Expressions.Expression<System.Func<object>> accessor, System.Collections.Generic.IEnumerable<string> messages) { }
|
||||
public void Add(System.Linq.Expressions.Expression<System.Func<object>> accessor, string message) { }
|
||||
public void Clear() { }
|
||||
public void Clear(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void Clear(System.Linq.Expressions.Expression<System.Func<object>> accessor) { }
|
||||
}
|
||||
public sealed partial class ValidationRequestedEventArgs : System.EventArgs
|
||||
{
|
||||
public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs Empty;
|
||||
public ValidationRequestedEventArgs() { }
|
||||
}
|
||||
public sealed partial class ValidationStateChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs Empty;
|
||||
public ValidationStateChangedEventArgs() { }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
public partial class DataAnnotationsValidator : Microsoft.AspNetCore.Components.ComponentBase
|
||||
{
|
||||
public DataAnnotationsValidator() { }
|
||||
protected override void OnInitialized() { }
|
||||
}
|
||||
public sealed partial class EditContext
|
||||
{
|
||||
public EditContext(object model) { }
|
||||
public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.FieldChangedEventArgs> OnFieldChanged { add { } remove { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs> OnValidationRequested { add { } remove { } }
|
||||
public event System.EventHandler<Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs> OnValidationStateChanged { add { } remove { } }
|
||||
public Microsoft.AspNetCore.Components.Forms.FieldIdentifier Field(string fieldName) { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages() { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages(Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
|
||||
public System.Collections.Generic.IEnumerable<string> GetValidationMessages(System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
|
||||
public bool IsModified() { throw null; }
|
||||
public bool IsModified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
|
||||
public bool IsModified(System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
|
||||
public void MarkAsUnmodified() { }
|
||||
public void MarkAsUnmodified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void NotifyFieldChanged(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void NotifyValidationStateChanged() { }
|
||||
public bool Validate() { throw null; }
|
||||
}
|
||||
public static partial class EditContextDataAnnotationsExtensions
|
||||
{
|
||||
public static Microsoft.AspNetCore.Components.Forms.EditContext AddDataAnnotationsValidation(this Microsoft.AspNetCore.Components.Forms.EditContext editContext) { throw null; }
|
||||
}
|
||||
public sealed partial class FieldChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public FieldChangedEventArgs(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
||||
public readonly partial struct FieldIdentifier : System.IEquatable<Microsoft.AspNetCore.Components.Forms.FieldIdentifier>
|
||||
{
|
||||
private readonly object _dummy;
|
||||
public FieldIdentifier(object model, string fieldName) { throw null; }
|
||||
public string FieldName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public static Microsoft.AspNetCore.Components.Forms.FieldIdentifier Create<TField>(System.Linq.Expressions.Expression<System.Func<TField>> accessor) { throw null; }
|
||||
public bool Equals(Microsoft.AspNetCore.Components.Forms.FieldIdentifier otherIdentifier) { throw null; }
|
||||
public override bool Equals(object obj) { throw null; }
|
||||
public override int GetHashCode() { throw null; }
|
||||
}
|
||||
public sealed partial class ValidationMessageStore
|
||||
{
|
||||
public ValidationMessageStore(Microsoft.AspNetCore.Components.Forms.EditContext editContext) { }
|
||||
public System.Collections.Generic.IEnumerable<string> this[Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier] { get { throw null; } }
|
||||
public System.Collections.Generic.IEnumerable<string> this[System.Linq.Expressions.Expression<System.Func<object>> accessor] { get { throw null; } }
|
||||
public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, System.Collections.Generic.IEnumerable<string> messages) { }
|
||||
public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, string message) { }
|
||||
public void Add(System.Linq.Expressions.Expression<System.Func<object>> accessor, System.Collections.Generic.IEnumerable<string> messages) { }
|
||||
public void Add(System.Linq.Expressions.Expression<System.Func<object>> accessor, string message) { }
|
||||
public void Clear() { }
|
||||
public void Clear(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { }
|
||||
public void Clear(System.Linq.Expressions.Expression<System.Func<object>> accessor) { }
|
||||
}
|
||||
public sealed partial class ValidationRequestedEventArgs : System.EventArgs
|
||||
{
|
||||
public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs Empty;
|
||||
public ValidationRequestedEventArgs() { }
|
||||
}
|
||||
public sealed partial class ValidationStateChangedEventArgs : System.EventArgs
|
||||
{
|
||||
public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs Empty;
|
||||
public ValidationStateChangedEventArgs() { }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
|
||||
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' == 'true'">netcoreapp3.0</TargetFrameworks>
|
||||
<IsAspNetCoreApp>true</IsAspNetCoreApp>
|
||||
<Description>Forms and validation support for Blazor applications.</Description>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<IsShippingPackage>true</IsShippingPackage>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'" >
|
||||
<Reference Include="System.ComponentModel.Annotations" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<RootNamespace>Microsoft.AspNetCore.Components.Forms</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Forms" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(ComponentsSharedSourceRoot)test\**\*.cs" LinkBase="Helpers" />
|
||||
<Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.Server.netcoreapp3.0.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Authorization" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Web" />
|
||||
<Reference Include="Microsoft.AspNetCore.DataProtection" />
|
||||
<Reference Include="Microsoft.AspNetCore.SignalR" />
|
||||
|
|
|
|||
|
|
@ -41,13 +41,13 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
protected abstract System.TimeSpan RevalidationInterval { get; }
|
||||
protected virtual void Dispose(bool disposing) { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
protected abstract System.Threading.Tasks.Task<bool> ValidateAuthenticationStateAsync(Microsoft.AspNetCore.Components.AuthenticationState authenticationState, System.Threading.CancellationToken cancellationToken);
|
||||
protected abstract System.Threading.Tasks.Task<bool> ValidateAuthenticationStateAsync(Microsoft.AspNetCore.Components.Authorization.AuthenticationState authenticationState, System.Threading.CancellationToken cancellationToken);
|
||||
}
|
||||
public partial class ServerAuthenticationStateProvider : Microsoft.AspNetCore.Components.AuthenticationStateProvider, Microsoft.AspNetCore.Components.IHostEnvironmentAuthenticationStateProvider
|
||||
public partial class ServerAuthenticationStateProvider : Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider, Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider
|
||||
{
|
||||
public ServerAuthenticationStateProvider() { }
|
||||
public override System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.AuthenticationState> GetAuthenticationStateAsync() { throw null; }
|
||||
public void SetAuthenticationState(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.AuthenticationState> authenticationStateTask) { }
|
||||
public override System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> GetAuthenticationStateAsync() { throw null; }
|
||||
public void SetAuthenticationState(System.Threading.Tasks.Task<Microsoft.AspNetCore.Components.Authorization.AuthenticationState> authenticationStateTask) { }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.AspNetCore.Components.Server.Circuits
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
{
|
||||
try
|
||||
{
|
||||
await Registry.Terminate(circuitId);
|
||||
await Registry.TerminateAsync(circuitId);
|
||||
Log.CircuitTerminatedGracefully(Logger, circuitId);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Server.Circuits
|
||||
{
|
||||
// Used to isolate a circuit from a CircuitHost.
|
||||
//
|
||||
// We can't refer to Hub.Items from a CircuitHost - but we want need to be
|
||||
// able to break the link between Hub.Items and a CircuitHost.
|
||||
internal class CircuitHandle
|
||||
{
|
||||
public CircuitHost CircuitHost { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -6,8 +6,10 @@ using System.Collections.Generic;
|
|||
using System.Security.Claims;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.Rendering;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.JSInterop;
|
||||
|
|
@ -18,9 +20,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
{
|
||||
private readonly SemaphoreSlim HandlerLock = new SemaphoreSlim(1);
|
||||
private readonly IServiceScope _scope;
|
||||
private readonly CircuitOptions _options;
|
||||
private readonly CircuitHandler[] _circuitHandlers;
|
||||
private readonly ILogger _logger;
|
||||
private bool _initialized;
|
||||
private bool _disposed;
|
||||
|
||||
/// <summary>
|
||||
/// Sets the current <see cref="Circuits.Circuit"/>.
|
||||
|
|
@ -42,11 +46,18 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
JSInterop.JSRuntime.SetCurrentJSRuntime(circuitHost.JSRuntime);
|
||||
}
|
||||
|
||||
// This event is fired when there's an unrecoverable exception coming from the circuit, and
|
||||
// it need so be torn down. The registry listens to this even so that the circuit can
|
||||
// be torn down even when a client is not connected.
|
||||
//
|
||||
// We don't expect the registry to do anything with the exception. We only provide it here
|
||||
// for testability.
|
||||
public event UnhandledExceptionEventHandler UnhandledException;
|
||||
|
||||
public CircuitHost(
|
||||
string circuitId,
|
||||
IServiceScope scope,
|
||||
CircuitOptions options,
|
||||
CircuitClientProxy client,
|
||||
RemoteRenderer renderer,
|
||||
IReadOnlyList<ComponentDescriptor> descriptors,
|
||||
|
|
@ -54,23 +65,28 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
CircuitHandler[] circuitHandlers,
|
||||
ILogger logger)
|
||||
{
|
||||
CircuitId = circuitId;
|
||||
CircuitId = circuitId ?? throw new ArgumentNullException(nameof(circuitId));
|
||||
|
||||
_scope = scope ?? throw new ArgumentNullException(nameof(scope));
|
||||
Client = client;
|
||||
Descriptors = descriptors ?? throw new ArgumentNullException(nameof(descriptors));
|
||||
_options = options ?? throw new ArgumentNullException(nameof(options));
|
||||
Client = client ?? throw new ArgumentNullException(nameof(client));
|
||||
Renderer = renderer ?? throw new ArgumentNullException(nameof(renderer));
|
||||
Descriptors = descriptors ?? throw new ArgumentNullException(nameof(descriptors));
|
||||
JSRuntime = jsRuntime ?? throw new ArgumentNullException(nameof(jsRuntime));
|
||||
_logger = logger;
|
||||
_circuitHandlers = circuitHandlers ?? throw new ArgumentNullException(nameof(circuitHandlers));
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
|
||||
Services = scope.ServiceProvider;
|
||||
|
||||
Circuit = new Circuit(this);
|
||||
_circuitHandlers = circuitHandlers;
|
||||
Handle = new CircuitHandle() { CircuitHost = this, };
|
||||
|
||||
Renderer.UnhandledException += Renderer_UnhandledException;
|
||||
Renderer.UnhandledSynchronizationException += SynchronizationContext_UnhandledException;
|
||||
}
|
||||
|
||||
public CircuitHandle Handle { get; }
|
||||
|
||||
public string CircuitId { get; }
|
||||
|
||||
public Circuit Circuit { get; }
|
||||
|
|
@ -85,88 +101,19 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
public IServiceProvider Services { get; }
|
||||
|
||||
public void SetCircuitUser(ClaimsPrincipal user)
|
||||
// InitializeAsync is used in a fire-and-forget context, so it's responsible for its own
|
||||
// error handling.
|
||||
public Task InitializeAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var authenticationStateProvider = Services.GetService<AuthenticationStateProvider>() as IHostEnvironmentAuthenticationStateProvider;
|
||||
if (authenticationStateProvider != null)
|
||||
Log.InitializationStarted(_logger);
|
||||
|
||||
return Renderer.Dispatcher.InvokeAsync(async () =>
|
||||
{
|
||||
var authenticationState = new AuthenticationState(user);
|
||||
authenticationStateProvider.SetAuthenticationState(Task.FromResult(authenticationState));
|
||||
}
|
||||
}
|
||||
|
||||
internal void SendPendingBatches()
|
||||
{
|
||||
// Dispatch any buffered renders we accumulated during a disconnect.
|
||||
// Note that while the rendering is async, we cannot await it here. The Task returned by ProcessBufferedRenderBatches relies on
|
||||
// OnRenderCompleted to be invoked to complete, and SignalR does not allow concurrent hub method invocations.
|
||||
_ = Renderer.Dispatcher.InvokeAsync(() => Renderer.ProcessBufferedRenderBatches());
|
||||
}
|
||||
|
||||
public async Task EndInvokeJSFromDotNet(long asyncCall, bool succeded, string arguments)
|
||||
{
|
||||
try
|
||||
{
|
||||
AssertInitialized();
|
||||
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
if (_initialized)
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
if (!succeded)
|
||||
{
|
||||
// We can log the arguments here because it is simply the JS error with the call stack.
|
||||
Log.EndInvokeJSFailed(_logger, asyncCall, arguments);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.EndInvokeJSSucceeded(_logger, asyncCall);
|
||||
}
|
||||
throw new InvalidOperationException("The circuit host is already initialized.");
|
||||
}
|
||||
|
||||
DotNetDispatcher.EndInvoke(arguments);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.EndInvokeDispatchException(_logger, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DispatchEvent(string eventDescriptorJson, string eventArgsJson)
|
||||
{
|
||||
WebEventData webEventData;
|
||||
try
|
||||
{
|
||||
AssertInitialized();
|
||||
webEventData = WebEventData.Parse(eventDescriptorJson, eventArgsJson);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.DispatchEventFailedToParseEventData(_logger, ex);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
return Renderer.DispatchEventAsync(
|
||||
webEventData.EventHandlerId,
|
||||
webEventData.EventFieldInfo,
|
||||
webEventData.EventArgs);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.DispatchEventFailedToDispatchEvent(_logger, webEventData.EventHandlerId.ToString(), ex);
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
}
|
||||
|
||||
public async Task InitializeAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await Renderer.Dispatcher.InvokeAsync(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
|
|
@ -185,92 +132,117 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
var (componentType, domElementSelector) = Descriptors[i];
|
||||
await Renderer.AddComponentAsync(componentType, domElementSelector);
|
||||
}
|
||||
|
||||
Log.InitializationSucceeded(_logger);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// We have to handle all our own errors here, because the upstream caller
|
||||
// has to fire-and-forget this
|
||||
Renderer_UnhandledException(this, ex);
|
||||
// Report errors asynchronously. InitializeAsync is designed not to throw.
|
||||
Log.InitializationFailed(_logger, ex);
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public async Task BeginInvokeDotNetFromJS(string callId, string assemblyName, string methodIdentifier, long dotNetObjectId, string argsJson)
|
||||
// We handle errors in DisposeAsync because there's no real value in letting it propagate.
|
||||
// We run user code here (CircuitHandlers) and it's reasonable to expect some might throw, however,
|
||||
// there isn't anything better to do than log when one of these exceptions happens - because the
|
||||
// client is already gone.
|
||||
public async ValueTask DisposeAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
AssertInitialized();
|
||||
Log.DisposeStarted(_logger, CircuitId);
|
||||
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
Log.BeginInvokeDotNet(_logger, callId, assemblyName, methodIdentifier, dotNetObjectId);
|
||||
DotNetDispatcher.BeginInvoke(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
await Renderer.Dispatcher.InvokeAsync(async () =>
|
||||
{
|
||||
// We don't expect any of this code to actually throw, because DotNetDispatcher.BeginInvoke doesn't throw
|
||||
// however, we still want this to get logged if we do.
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
}
|
||||
|
||||
public async Task OnLocationChangedAsync(string uri, bool intercepted)
|
||||
{
|
||||
try
|
||||
{
|
||||
AssertInitialized();
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
Log.LocationChange(_logger, CircuitId, uri);
|
||||
var navigationManager = (RemoteNavigationManager)Services.GetRequiredService<NavigationManager>();
|
||||
navigationManager.NotifyLocationChanged(uri, intercepted);
|
||||
Log.LocationChangeSucceeded(_logger, CircuitId, uri);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// It's up to the NavigationManager implementation to validate the URI.
|
||||
//
|
||||
// Note that it's also possible that setting the URI could cause a failure in code that listens
|
||||
// to NavigationManager.LocationChanged.
|
||||
//
|
||||
// In either case, a well-behaved client will not send invalid URIs, and we don't really
|
||||
// want to continue processing with the circuit if setting the URI failed inside application
|
||||
// code. The safest thing to do is consider it a critical failure since URI is global state,
|
||||
// and a failure means that an update to global state was partially applied.
|
||||
Log.LocationChangeFailed(_logger, CircuitId, uri, ex);
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
if (_disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure that no hub or connection can refer to this circuit anymore now that it's shutting down.
|
||||
Handle.CircuitHost = null;
|
||||
_disposed = true;
|
||||
|
||||
try
|
||||
{
|
||||
await OnConnectionDownAsync(CancellationToken.None);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Individual exceptions logged as part of OnConnectionDownAsync - nothing to do here
|
||||
// since we're already shutting down.
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await OnCircuitDownAsync(CancellationToken.None);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Individual exceptions logged as part of OnCircuitDownAsync - nothing to do here
|
||||
// since we're already shutting down.
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Renderer.Dispose();
|
||||
_scope.Dispose();
|
||||
Log.DisposeSucceeded(_logger, CircuitId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.DisposeFailed(_logger, CircuitId, ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Note: we log exceptions and re-throw while running handlers, because there may be multiple
|
||||
// exceptions.
|
||||
private async Task OnCircuitOpenedAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
Log.CircuitOpened(_logger, Circuit.Id);
|
||||
|
||||
for (var i = 0; i < _circuitHandlers.Length; i++)
|
||||
await HandlerLock.WaitAsync(cancellationToken);
|
||||
|
||||
try
|
||||
{
|
||||
var circuitHandler = _circuitHandlers[i];
|
||||
try
|
||||
List<Exception> exceptions = null;
|
||||
|
||||
for (var i = 0; i < _circuitHandlers.Length; i++)
|
||||
{
|
||||
await circuitHandler.OnCircuitOpenedAsync(Circuit, cancellationToken);
|
||||
var circuitHandler = _circuitHandlers[i];
|
||||
try
|
||||
{
|
||||
await circuitHandler.OnCircuitOpenedAsync(Circuit, cancellationToken);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.CircuitHandlerFailed(_logger, circuitHandler, nameof(CircuitHandler.OnCircuitOpenedAsync), ex);
|
||||
exceptions ??= new List<Exception>();
|
||||
exceptions.Add(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
if (exceptions != null)
|
||||
{
|
||||
OnHandlerError(circuitHandler, nameof(CircuitHandler.OnCircuitOpenedAsync), ex);
|
||||
throw new AggregateException("Encountered exceptions while executing circuit handlers.", exceptions);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
HandlerLock.Release();
|
||||
}
|
||||
}
|
||||
|
||||
public async Task OnConnectionUpAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
Log.ConnectionUp(_logger, Circuit.Id, Client.ConnectionId);
|
||||
|
||||
await HandlerLock.WaitAsync(cancellationToken);
|
||||
|
||||
try
|
||||
{
|
||||
await HandlerLock.WaitAsync(cancellationToken);
|
||||
List<Exception> exceptions = null;
|
||||
|
||||
for (var i = 0; i < _circuitHandlers.Length; i++)
|
||||
{
|
||||
|
|
@ -281,9 +253,16 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnHandlerError(circuitHandler, nameof(CircuitHandler.OnConnectionUpAsync), ex);
|
||||
Log.CircuitHandlerFailed(_logger, circuitHandler, nameof(CircuitHandler.OnConnectionUpAsync), ex);
|
||||
exceptions ??= new List<Exception>();
|
||||
exceptions.Add(ex);
|
||||
}
|
||||
}
|
||||
|
||||
if (exceptions != null)
|
||||
{
|
||||
throw new AggregateException("Encountered exceptions while executing circuit handlers.", exceptions);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
@ -295,9 +274,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
{
|
||||
Log.ConnectionDown(_logger, Circuit.Id, Client.ConnectionId);
|
||||
|
||||
await HandlerLock.WaitAsync(cancellationToken);
|
||||
|
||||
try
|
||||
{
|
||||
await HandlerLock.WaitAsync(cancellationToken);
|
||||
List<Exception> exceptions = null;
|
||||
|
||||
for (var i = 0; i < _circuitHandlers.Length; i++)
|
||||
{
|
||||
|
|
@ -308,9 +289,16 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnHandlerError(circuitHandler, nameof(CircuitHandler.OnConnectionDownAsync), ex);
|
||||
Log.CircuitHandlerFailed(_logger, circuitHandler, nameof(CircuitHandler.OnConnectionDownAsync), ex);
|
||||
exceptions ??= new List<Exception>();
|
||||
exceptions.Add(ex);
|
||||
}
|
||||
}
|
||||
|
||||
if (exceptions != null)
|
||||
{
|
||||
throw new AggregateException("Encountered exceptions while executing circuit handlers.", exceptions);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
@ -318,46 +306,229 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
}
|
||||
|
||||
protected virtual void OnHandlerError(CircuitHandler circuitHandler, string handlerMethod, Exception ex)
|
||||
{
|
||||
Log.UnhandledExceptionInvokingCircuitHandler(_logger, circuitHandler, handlerMethod, ex);
|
||||
}
|
||||
|
||||
private async Task OnCircuitDownAsync()
|
||||
private async Task OnCircuitDownAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
Log.CircuitClosed(_logger, Circuit.Id);
|
||||
|
||||
for (var i = 0; i < _circuitHandlers.Length; i++)
|
||||
await HandlerLock.WaitAsync(cancellationToken);
|
||||
|
||||
try
|
||||
{
|
||||
var circuitHandler = _circuitHandlers[i];
|
||||
try
|
||||
List<Exception> exceptions = null;
|
||||
|
||||
for (var i = 0; i < _circuitHandlers.Length; i++)
|
||||
{
|
||||
await circuitHandler.OnCircuitClosedAsync(Circuit, default);
|
||||
var circuitHandler = _circuitHandlers[i];
|
||||
try
|
||||
{
|
||||
await circuitHandler.OnCircuitClosedAsync(Circuit, cancellationToken);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.CircuitHandlerFailed(_logger, circuitHandler, nameof(CircuitHandler.OnCircuitClosedAsync), ex);
|
||||
exceptions ??= new List<Exception>();
|
||||
exceptions.Add(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
if (exceptions != null)
|
||||
{
|
||||
OnHandlerError(circuitHandler, nameof(CircuitHandler.OnCircuitClosedAsync), ex);
|
||||
throw new AggregateException("Encountered exceptions while executing circuit handlers.", exceptions);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
HandlerLock.Release();
|
||||
}
|
||||
}
|
||||
|
||||
public async ValueTask DisposeAsync()
|
||||
// BeginInvokeDotNetFromJS is used in a fire-and-forget context, so it's responsible for its own
|
||||
// error handling.
|
||||
public async Task BeginInvokeDotNetFromJS(string callId, string assemblyName, string methodIdentifier, long dotNetObjectId, string argsJson)
|
||||
{
|
||||
Log.DisposingCircuit(_logger, CircuitId);
|
||||
AssertInitialized();
|
||||
AssertNotDisposed();
|
||||
|
||||
await Renderer.Dispatcher.InvokeAsync(async () =>
|
||||
try
|
||||
{
|
||||
try
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
await OnConnectionDownAsync(CancellationToken.None);
|
||||
await OnCircuitDownAsync();
|
||||
}
|
||||
finally
|
||||
SetCurrentCircuitHost(this);
|
||||
Log.BeginInvokeDotNet(_logger, callId, assemblyName, methodIdentifier, dotNetObjectId);
|
||||
DotNetDispatcher.BeginInvoke(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// We don't expect any of this code to actually throw, because DotNetDispatcher.BeginInvoke doesn't throw
|
||||
// however, we still want this to get logged if we do.
|
||||
Log.BeginInvokeDotNetFailed(_logger, callId, assemblyName, methodIdentifier, dotNetObjectId, ex);
|
||||
if (Client.Connected)
|
||||
{
|
||||
Renderer.Dispose();
|
||||
_scope.Dispose();
|
||||
await NotifyClientError(Client, "Interop call failed.");
|
||||
}
|
||||
});
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
}
|
||||
|
||||
// EndInvokeJSFromDotNet is used in a fire-and-forget context, so it's responsible for its own
|
||||
// error handling.
|
||||
public async Task EndInvokeJSFromDotNet(long asyncCall, bool succeded, string arguments)
|
||||
{
|
||||
AssertInitialized();
|
||||
AssertNotDisposed();
|
||||
|
||||
try
|
||||
{
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
if (!succeded)
|
||||
{
|
||||
// We can log the arguments here because it is simply the JS error with the call stack.
|
||||
Log.EndInvokeJSFailed(_logger, asyncCall, arguments);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.EndInvokeJSSucceeded(_logger, asyncCall);
|
||||
}
|
||||
|
||||
DotNetDispatcher.EndInvoke(arguments);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// An error completing JS interop means that the user sent invalid data, a well-behaved
|
||||
// client won't do this.
|
||||
Log.EndInvokeDispatchException(_logger, ex);
|
||||
if (Client.Connected)
|
||||
{
|
||||
await NotifyClientError(Client, "Invalid interop arguments.");
|
||||
}
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
}
|
||||
|
||||
// DispatchEvent is used in a fire-and-forget context, so it's responsible for its own
|
||||
// error handling.
|
||||
public async Task DispatchEvent(string eventDescriptorJson, string eventArgsJson)
|
||||
{
|
||||
AssertInitialized();
|
||||
AssertNotDisposed();
|
||||
|
||||
WebEventData webEventData;
|
||||
try
|
||||
{
|
||||
AssertInitialized();
|
||||
webEventData = WebEventData.Parse(eventDescriptorJson, eventArgsJson);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Invalid event data is fatal. We expect a well-behaved client to send valid JSON.
|
||||
Log.DispatchEventFailedToParseEventData(_logger, ex);
|
||||
if (Client.Connected)
|
||||
{
|
||||
await NotifyClientError(Client, "Invalid event data.");
|
||||
}
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
return Renderer.DispatchEventAsync(
|
||||
webEventData.EventHandlerId,
|
||||
webEventData.EventFieldInfo,
|
||||
webEventData.EventArgs);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// A failure in dispatching an event means that it was an attempt to use an invalid event id.
|
||||
// A well-behaved client won't do this.
|
||||
Log.DispatchEventFailedToDispatchEvent(_logger, webEventData.EventHandlerId.ToString(), ex);
|
||||
if (Client.Connected)
|
||||
{
|
||||
await NotifyClientError(Client, "Failed to dispatch event.");
|
||||
}
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
}
|
||||
|
||||
// OnLocationChangedAsync is used in a fire-and-forget context, so it's responsible for its own
|
||||
// error handling.
|
||||
public async Task OnLocationChangedAsync(string uri, bool intercepted)
|
||||
{
|
||||
AssertInitialized();
|
||||
AssertNotDisposed();
|
||||
|
||||
try
|
||||
{
|
||||
await Renderer.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
SetCurrentCircuitHost(this);
|
||||
Log.LocationChange(_logger, uri, CircuitId);
|
||||
var navigationManager = (RemoteNavigationManager)Services.GetRequiredService<NavigationManager>();
|
||||
navigationManager.NotifyLocationChanged(uri, intercepted);
|
||||
Log.LocationChangeSucceeded(_logger, uri, CircuitId);
|
||||
});
|
||||
}
|
||||
|
||||
// It's up to the NavigationManager implementation to validate the URI.
|
||||
//
|
||||
// Note that it's also possible that setting the URI could cause a failure in code that listens
|
||||
// to NavigationManager.LocationChanged.
|
||||
//
|
||||
// In either case, a well-behaved client will not send invalid URIs, and we don't really
|
||||
// want to continue processing with the circuit if setting the URI failed inside application
|
||||
// code. The safest thing to do is consider it a critical failure since URI is global state,
|
||||
// and a failure means that an update to global state was partially applied.
|
||||
catch (LocationChangeException nex)
|
||||
{
|
||||
// LocationChangeException means that it failed in user-code. Treat this like an unhandled
|
||||
// exception in user-code.
|
||||
Log.LocationChangeFailedInCircuit(_logger, uri, CircuitId, nex);
|
||||
await ReportUnhandledException(nex);
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(nex, isTerminating: false));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Any other exception means that it failed validation, or inside the NavigationManager. Treat
|
||||
// this like bad data.
|
||||
Log.LocationChangeFailed(_logger, uri, CircuitId, ex);
|
||||
if (Client.Connected)
|
||||
{
|
||||
await NotifyClientError(Client, $"Location change to {uri} failed.");
|
||||
}
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCircuitUser(ClaimsPrincipal user)
|
||||
{
|
||||
// This can be called before the circuit is initialized.
|
||||
AssertNotDisposed();
|
||||
|
||||
var authenticationStateProvider = Services.GetService<AuthenticationStateProvider>() as IHostEnvironmentAuthenticationStateProvider;
|
||||
if (authenticationStateProvider != null)
|
||||
{
|
||||
var authenticationState = new AuthenticationState(user);
|
||||
authenticationStateProvider.SetAuthenticationState(Task.FromResult(authenticationState));
|
||||
}
|
||||
}
|
||||
|
||||
public void SendPendingBatches()
|
||||
{
|
||||
AssertInitialized();
|
||||
AssertNotDisposed();
|
||||
|
||||
// Dispatch any buffered renders we accumulated during a disconnect.
|
||||
// Note that while the rendering is async, we cannot await it here. The Task returned by ProcessBufferedRenderBatches relies on
|
||||
// OnRenderCompleted to be invoked to complete, and SignalR does not allow concurrent hub method invocations.
|
||||
_ = Renderer.Dispatcher.InvokeAsync(() => Renderer.ProcessBufferedRenderBatches());
|
||||
}
|
||||
|
||||
private void AssertInitialized()
|
||||
|
|
@ -368,26 +539,86 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
}
|
||||
|
||||
private void Renderer_UnhandledException(object sender, Exception e)
|
||||
private void AssertNotDisposed()
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
throw new ObjectDisposedException(objectName: null);
|
||||
}
|
||||
}
|
||||
|
||||
// An unhandled exception from the renderer is always fatal because it came from user code.
|
||||
// We want to notify the client if it's still connected, and then tear-down the circuit.
|
||||
private async void Renderer_UnhandledException(object sender, Exception e)
|
||||
{
|
||||
await ReportUnhandledException(e);
|
||||
UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(e, isTerminating: false));
|
||||
}
|
||||
|
||||
private void SynchronizationContext_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
// An unhandled exception from the renderer is always fatal because it came from user code.
|
||||
// We want to notify the client if it's still connected, and then tear-down the circuit.
|
||||
private async void SynchronizationContext_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
await ReportUnhandledException((Exception)e.ExceptionObject);
|
||||
UnhandledException?.Invoke(this, e);
|
||||
}
|
||||
|
||||
private async Task ReportUnhandledException(Exception exception)
|
||||
{
|
||||
Log.CircuitUnhandledException(_logger, CircuitId, exception);
|
||||
if (!Client.Connected)
|
||||
{
|
||||
_logger.LogDebug("Client is disconnected YO.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (_options.DetailedErrors)
|
||||
{
|
||||
await NotifyClientError(Client, exception.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
var message =
|
||||
$"There was an unhandled exception on the current circuit, so this circuit will be terminated. For more details turn on " +
|
||||
$"detailed exceptions in '{typeof(CircuitOptions).Name}.{nameof(CircuitOptions.DetailedErrors)}'";
|
||||
await NotifyClientError(Client, message);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.CircuitUnhandledExceptionFailed(_logger, CircuitId, ex);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task NotifyClientError(IClientProxy client, string error)
|
||||
{
|
||||
_logger.LogDebug("About to notify of an error");
|
||||
await client.SendAsync("JS.Error", error);
|
||||
_logger.LogDebug("Completed notify of an error");
|
||||
}
|
||||
|
||||
private static class Log
|
||||
{
|
||||
private static readonly Action<ILogger, Type, string, string, Exception> _unhandledExceptionInvokingCircuitHandler;
|
||||
private static readonly Action<ILogger, string, Exception> _disposingCircuit;
|
||||
private static readonly Action<ILogger, Exception> _intializationStarted;
|
||||
private static readonly Action<ILogger, Exception> _intializationSucceded;
|
||||
private static readonly Action<ILogger, Exception> _intializationFailed;
|
||||
private static readonly Action<ILogger, string, Exception> _disposeStarted;
|
||||
private static readonly Action<ILogger, string, Exception> _disposeSucceded;
|
||||
private static readonly Action<ILogger, string, Exception> _disposeFailed;
|
||||
private static readonly Action<ILogger, string, Exception> _onCircuitOpened;
|
||||
private static readonly Action<ILogger, string, string, Exception> _onConnectionUp;
|
||||
private static readonly Action<ILogger, string, string, Exception> _onConnectionDown;
|
||||
private static readonly Action<ILogger, string, Exception> _onCircuitClosed;
|
||||
private static readonly Action<ILogger, Type, string, string, Exception> _circuitHandlerFailed;
|
||||
private static readonly Action<ILogger, string, Exception> _circuitUnhandledException;
|
||||
private static readonly Action<ILogger, string, Exception> _circuitUnhandledExceptionFailed;
|
||||
|
||||
private static readonly Action<ILogger, string, string, string, Exception> _beginInvokeDotNetStatic;
|
||||
private static readonly Action<ILogger, string, long, string, Exception> _beginInvokeDotNetInstance;
|
||||
private static readonly Action<ILogger, string, string, string, Exception> _beginInvokeDotNetStaticFailed;
|
||||
private static readonly Action<ILogger, string, long, string, Exception> _beginInvokeDotNetInstanceFailed;
|
||||
private static readonly Action<ILogger, Exception> _endInvokeDispatchException;
|
||||
private static readonly Action<ILogger, long, string, Exception> _endInvokeJSFailed;
|
||||
private static readonly Action<ILogger, long, Exception> _endInvokeJSSucceeded;
|
||||
|
|
@ -396,39 +627,71 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
private static readonly Action<ILogger, string, string, Exception> _locationChange;
|
||||
private static readonly Action<ILogger, string, string, Exception> _locationChangeSucceeded;
|
||||
private static readonly Action<ILogger, string, string, Exception> _locationChangeFailed;
|
||||
private static readonly Action<ILogger, string, string, Exception> _locationChangeFailedInCircuit;
|
||||
|
||||
private static class EventIds
|
||||
{
|
||||
public static readonly EventId ExceptionInvokingCircuitHandlerMethod = new EventId(100, "ExceptionInvokingCircuitHandlerMethod");
|
||||
public static readonly EventId DisposingCircuit = new EventId(101, "DisposingCircuitHost");
|
||||
public static readonly EventId OnCircuitOpened = new EventId(102, "OnCircuitOpened");
|
||||
public static readonly EventId OnConnectionUp = new EventId(103, "OnConnectionUp");
|
||||
public static readonly EventId OnConnectionDown = new EventId(104, "OnConnectionDown");
|
||||
public static readonly EventId OnCircuitClosed = new EventId(105, "OnCircuitClosed");
|
||||
public static readonly EventId InvalidBrowserEventFormat = new EventId(106, "InvalidBrowserEventFormat");
|
||||
public static readonly EventId DispatchEventFailedToParseEventData = new EventId(107, "DispatchEventFailedToParseEventData");
|
||||
public static readonly EventId DispatchEventFailedToDispatchEvent = new EventId(108, "DispatchEventFailedToDispatchEvent");
|
||||
public static readonly EventId BeginInvokeDotNet = new EventId(109, "BeginInvokeDotNet");
|
||||
public static readonly EventId EndInvokeDispatchException = new EventId(110, "EndInvokeDispatchException");
|
||||
public static readonly EventId EndInvokeJSFailed = new EventId(111, "EndInvokeJSFailed");
|
||||
public static readonly EventId EndInvokeJSSucceeded = new EventId(112, "EndInvokeJSSucceeded");
|
||||
public static readonly EventId DispatchEventThroughJSInterop = new EventId(113, "DispatchEventThroughJSInterop");
|
||||
public static readonly EventId LocationChange = new EventId(114, "LocationChange");
|
||||
public static readonly EventId LocationChangeSucceded = new EventId(115, "LocationChangeSucceeded");
|
||||
public static readonly EventId LocationChangeFailed = new EventId(116, "LocationChangeFailed");
|
||||
// 100s used for lifecycle stuff
|
||||
public static readonly EventId InitializationStarted = new EventId(100, "InitializationStarted");
|
||||
public static readonly EventId InitializationSucceeded = new EventId(101, "InitializationSucceeded");
|
||||
public static readonly EventId InitializationFailed = new EventId(102, "InitializationFailed");
|
||||
public static readonly EventId DisposeStarted = new EventId(103, "DisposeStarted");
|
||||
public static readonly EventId DisposeSucceeded = new EventId(104, "DisposeSucceeded");
|
||||
public static readonly EventId DisposeFailed = new EventId(105, "DisposeFailed");
|
||||
public static readonly EventId OnCircuitOpened = new EventId(106, "OnCircuitOpened");
|
||||
public static readonly EventId OnConnectionUp = new EventId(107, "OnConnectionUp");
|
||||
public static readonly EventId OnConnectionDown = new EventId(108, "OnConnectionDown");
|
||||
public static readonly EventId OnCircuitClosed = new EventId(109, "OnCircuitClosed");
|
||||
public static readonly EventId CircuitHandlerFailed = new EventId(110, "CircuitHandlerFailed");
|
||||
public static readonly EventId CircuitUnhandledException = new EventId(111, "CircuitUnhandledException");
|
||||
public static readonly EventId CircuitUnhandledExceptionFailed = new EventId(112, "CircuitUnhandledExceptionFailed");
|
||||
|
||||
// 200s used for interactive stuff
|
||||
public static readonly EventId DispatchEventFailedToParseEventData = new EventId(200, "DispatchEventFailedToParseEventData");
|
||||
public static readonly EventId DispatchEventFailedToDispatchEvent = new EventId(201, "DispatchEventFailedToDispatchEvent");
|
||||
public static readonly EventId BeginInvokeDotNet = new EventId(202, "BeginInvokeDotNet");
|
||||
public static readonly EventId BeginInvokeDotNetFailed = new EventId(203, "BeginInvokeDotNetFailed");
|
||||
public static readonly EventId EndInvokeDispatchException = new EventId(204, "EndInvokeDispatchException");
|
||||
public static readonly EventId EndInvokeJSFailed = new EventId(205, "EndInvokeJSFailed");
|
||||
public static readonly EventId EndInvokeJSSucceeded = new EventId(206, "EndInvokeJSSucceeded");
|
||||
public static readonly EventId DispatchEventThroughJSInterop = new EventId(207, "DispatchEventThroughJSInterop");
|
||||
public static readonly EventId LocationChange = new EventId(208, "LocationChange");
|
||||
public static readonly EventId LocationChangeSucceded = new EventId(209, "LocationChangeSucceeded");
|
||||
public static readonly EventId LocationChangeFailed = new EventId(210, "LocationChangeFailed");
|
||||
public static readonly EventId LocationChangeFailedInCircuit = new EventId(211, "LocationChangeFailedInCircuit");
|
||||
}
|
||||
|
||||
static Log()
|
||||
{
|
||||
_unhandledExceptionInvokingCircuitHandler = LoggerMessage.Define<Type, string, string>(
|
||||
LogLevel.Error,
|
||||
EventIds.ExceptionInvokingCircuitHandlerMethod,
|
||||
"Unhandled error invoking circuit handler type {handlerType}.{handlerMethod}: {Message}");
|
||||
|
||||
_disposingCircuit = LoggerMessage.Define<string>(
|
||||
_intializationStarted = LoggerMessage.Define(
|
||||
LogLevel.Debug,
|
||||
EventIds.DisposingCircuit,
|
||||
"Disposing circuit with identifier {CircuitId}");
|
||||
EventIds.InitializationFailed,
|
||||
"Circuit initialization started");
|
||||
|
||||
_intializationSucceded = LoggerMessage.Define(
|
||||
LogLevel.Debug,
|
||||
EventIds.InitializationFailed,
|
||||
"Circuit initialization succeeded");
|
||||
|
||||
_intializationFailed = LoggerMessage.Define(
|
||||
LogLevel.Debug,
|
||||
EventIds.InitializationFailed,
|
||||
"Circuit initialization failed");
|
||||
|
||||
_disposeStarted = LoggerMessage.Define<string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.DisposeStarted,
|
||||
"Disposing circuit {CircuitId} started");
|
||||
|
||||
_disposeSucceded = LoggerMessage.Define<string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.DisposeSucceeded,
|
||||
"Disposing circuit {CircuitId} succeded");
|
||||
|
||||
_disposeFailed = LoggerMessage.Define<string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.DisposeFailed,
|
||||
"Disposing circuit {CircuitId} failed");
|
||||
|
||||
_onCircuitOpened = LoggerMessage.Define<string>(
|
||||
LogLevel.Debug,
|
||||
|
|
@ -450,6 +713,21 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
EventIds.OnCircuitClosed,
|
||||
"Closing circuit with id {CircuitId}.");
|
||||
|
||||
_circuitHandlerFailed = LoggerMessage.Define<Type, string, string>(
|
||||
LogLevel.Error,
|
||||
EventIds.CircuitHandlerFailed,
|
||||
"Unhandled error invoking circuit handler type {handlerType}.{handlerMethod}: {Message}");
|
||||
|
||||
_circuitUnhandledException = LoggerMessage.Define<string>(
|
||||
LogLevel.Error,
|
||||
EventIds.CircuitUnhandledException,
|
||||
"Unhandled exception in circuit {CircuitId}");
|
||||
|
||||
_circuitUnhandledExceptionFailed = LoggerMessage.Define<string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.CircuitUnhandledExceptionFailed,
|
||||
"Failed to transmit exception to client in circuit {CircuitId}");
|
||||
|
||||
_beginInvokeDotNetStatic = LoggerMessage.Define<string, string, string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.BeginInvokeDotNet,
|
||||
|
|
@ -460,6 +738,16 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
EventIds.BeginInvokeDotNet,
|
||||
"Invoking instance method '{MethodIdentifier}' on instance '{DotNetObjectId}' with callback id '{CallId}'");
|
||||
|
||||
_beginInvokeDotNetStaticFailed = LoggerMessage.Define<string, string, string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.BeginInvokeDotNetFailed,
|
||||
"Failed to invoke static method with identifier '{MethodIdentifier}' on assembly '{Assembly}' with callback id '{CallId}'");
|
||||
|
||||
_beginInvokeDotNetInstanceFailed = LoggerMessage.Define<string, long, string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.BeginInvokeDotNetFailed,
|
||||
"Failed to invoke instance method '{MethodIdentifier}' on instance '{DotNetObjectId}' with callback id '{CallId}'");
|
||||
|
||||
_endInvokeDispatchException = LoggerMessage.Define(
|
||||
LogLevel.Debug,
|
||||
EventIds.EndInvokeDispatchException,
|
||||
|
|
@ -488,22 +776,38 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
_locationChange = LoggerMessage.Define<string, string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.LocationChange,
|
||||
"Location changing to {URI} in {CircuitId}.");
|
||||
"Location changing to {URI} in circuit {CircuitId}.");
|
||||
|
||||
_locationChangeSucceeded = LoggerMessage.Define<string, string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.LocationChangeSucceded,
|
||||
"Location change to {URI} in {CircuitId} succeded.");
|
||||
"Location change to {URI} in circuit {CircuitId} succeded.");
|
||||
|
||||
_locationChangeFailed = LoggerMessage.Define<string, string>(
|
||||
LogLevel.Debug,
|
||||
EventIds.LocationChangeFailed,
|
||||
"Location change to {URI} in {CircuitId} failed.");
|
||||
"Location change to {URI} in circuit {CircuitId} failed.");
|
||||
|
||||
_locationChangeFailedInCircuit = LoggerMessage.Define<string, string>(
|
||||
LogLevel.Error,
|
||||
EventIds.LocationChangeFailed,
|
||||
"Location change to {URI} in circuit {CircuitId} failed.");
|
||||
}
|
||||
|
||||
public static void UnhandledExceptionInvokingCircuitHandler(ILogger logger, CircuitHandler handler, string handlerMethod, Exception exception)
|
||||
public static void InitializationStarted(ILogger logger) =>_intializationStarted(logger, null);
|
||||
public static void InitializationSucceeded(ILogger logger) => _intializationSucceded(logger, null);
|
||||
public static void InitializationFailed(ILogger logger, Exception exception) => _intializationFailed(logger, exception);
|
||||
public static void DisposeStarted(ILogger logger, string circuitId) => _disposeStarted(logger, circuitId, null);
|
||||
public static void DisposeSucceeded(ILogger logger, string circuitId) => _disposeSucceded(logger, circuitId, null);
|
||||
public static void DisposeFailed(ILogger logger, string circuitId, Exception exception) => _disposeFailed(logger, circuitId, exception);
|
||||
public static void CircuitOpened(ILogger logger, string circuitId) => _onCircuitOpened(logger, circuitId, null);
|
||||
public static void ConnectionUp(ILogger logger, string circuitId, string connectionId) => _onConnectionUp(logger, circuitId, connectionId, null);
|
||||
public static void ConnectionDown(ILogger logger, string circuitId, string connectionId) => _onConnectionDown(logger, circuitId, connectionId, null);
|
||||
public static void CircuitClosed(ILogger logger, string circuitId) => _onCircuitClosed(logger, circuitId, null);
|
||||
|
||||
public static void CircuitHandlerFailed(ILogger logger, CircuitHandler handler, string handlerMethod, Exception exception)
|
||||
{
|
||||
_unhandledExceptionInvokingCircuitHandler(
|
||||
_circuitHandlerFailed(
|
||||
logger,
|
||||
handler.GetType(),
|
||||
handlerMethod,
|
||||
|
|
@ -511,27 +815,12 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
exception);
|
||||
}
|
||||
|
||||
public static void DisposingCircuit(ILogger logger, string circuitId) => _disposingCircuit(logger, circuitId, null);
|
||||
|
||||
public static void CircuitOpened(ILogger logger, string circuitId) => _onCircuitOpened(logger, circuitId, null);
|
||||
|
||||
public static void ConnectionUp(ILogger logger, string circuitId, string connectionId) =>
|
||||
_onConnectionUp(logger, circuitId, connectionId, null);
|
||||
|
||||
public static void ConnectionDown(ILogger logger, string circuitId, string connectionId) =>
|
||||
_onConnectionDown(logger, circuitId, connectionId, null);
|
||||
|
||||
public static void CircuitClosed(ILogger logger, string circuitId) =>
|
||||
_onCircuitClosed(logger, circuitId, null);
|
||||
|
||||
public static void CircuitUnhandledException(ILogger logger, string circuitId, Exception exception) => _circuitUnhandledException(logger, circuitId, exception);
|
||||
public static void CircuitUnhandledExceptionFailed(ILogger logger, string circuitId, Exception exception) => _circuitUnhandledExceptionFailed(logger, circuitId, exception);
|
||||
public static void EndInvokeDispatchException(ILogger logger, Exception ex) => _endInvokeDispatchException(logger, ex);
|
||||
|
||||
public static void EndInvokeJSFailed(ILogger logger, long asyncHandle, string arguments) => _endInvokeJSFailed(logger, asyncHandle, arguments, null);
|
||||
|
||||
public static void EndInvokeJSSucceeded(ILogger logger, long asyncCall) => _endInvokeJSSucceeded(logger, asyncCall, null);
|
||||
|
||||
public static void DispatchEventFailedToParseEventData(ILogger logger, Exception ex) => _dispatchEventFailedToParseEventData(logger, ex);
|
||||
|
||||
public static void DispatchEventFailedToDispatchEvent(ILogger logger, string eventHandlerId, Exception ex) => _dispatchEventFailedToDispatchEvent(logger, eventHandlerId ?? "", ex);
|
||||
|
||||
public static void BeginInvokeDotNet(ILogger logger, string callId, string assemblyName, string methodIdentifier, long dotNetObjectId)
|
||||
|
|
@ -546,11 +835,22 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
}
|
||||
|
||||
public static void LocationChange(ILogger logger, string circuitId, string uri) => _locationChange(logger, circuitId, uri, null);
|
||||
public static void BeginInvokeDotNetFailed(ILogger logger, string callId, string assemblyName, string methodIdentifier, long dotNetObjectId, Exception exception)
|
||||
{
|
||||
if (assemblyName != null)
|
||||
{
|
||||
_beginInvokeDotNetStaticFailed(logger, methodIdentifier, assemblyName, callId, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
_beginInvokeDotNetInstanceFailed(logger, methodIdentifier, dotNetObjectId, callId, null);
|
||||
}
|
||||
}
|
||||
|
||||
public static void LocationChangeSucceeded(ILogger logger, string circuitId, string uri) => _locationChangeSucceeded(logger, circuitId, uri, null);
|
||||
|
||||
public static void LocationChangeFailed(ILogger logger, string circuitId, string uri, Exception exception) => _locationChangeFailed(logger, circuitId, uri, exception);
|
||||
public static void LocationChange(ILogger logger, string uri, string circuitId) => _locationChange(logger, uri, circuitId, null);
|
||||
public static void LocationChangeSucceeded(ILogger logger, string uri, string circuitId) => _locationChangeSucceeded(logger, uri, circuitId, null);
|
||||
public static void LocationChangeFailed(ILogger logger, string uri, string circuitId, Exception exception) => _locationChangeFailed(logger, uri, circuitId, exception);
|
||||
public static void LocationChangeFailedInCircuit(ILogger logger, string uri, string circuitId, Exception exception) => _locationChangeFailedInCircuit(logger, uri, circuitId, exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
// This will likely never happen, except perhaps in unit tests, since CircuitIds are unique.
|
||||
throw new ArgumentException($"Circuit with identity {circuitHost.CircuitId} is already registered.");
|
||||
}
|
||||
|
||||
// Register for unhandled exceptions from the circuit. The registry is responsible for tearing
|
||||
// down the circuit on errors.
|
||||
circuitHost.UnhandledException += CircuitHost_UnhandledException;
|
||||
}
|
||||
|
||||
public virtual Task DisconnectAsync(CircuitHost circuitHost, string connectionId)
|
||||
|
|
@ -154,6 +158,16 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
DisconnectedCircuits.Set(circuitHost.CircuitId, entry, entryOptions);
|
||||
}
|
||||
|
||||
// ConnectAsync is called from the CircuitHub - but the error handling story is a little bit complicated.
|
||||
// We return the circuit from this method, but need to clean up the circuit on failure. So we don't want to
|
||||
// throw from this method because we don't want to return a *failed* circuit.
|
||||
//
|
||||
// The solution is to handle exceptions here, and then return null to represent failure.
|
||||
//
|
||||
// 1. If the circuit id is invalue return null
|
||||
// 2. If the circuit is not found return null
|
||||
// 3. If the circuit is found, but fails to connect, we need to dispose it here and return null
|
||||
// 4. If everything goes well, return the circuit.
|
||||
public virtual async Task<CircuitHost> ConnectAsync(string circuitId, IClientProxy clientProxy, string connectionId, CancellationToken cancellationToken)
|
||||
{
|
||||
Log.CircuitConnectStarted(_logger, circuitId);
|
||||
|
|
@ -169,6 +183,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
Task circuitHandlerTask;
|
||||
|
||||
// We don't expect any of the logic inside the lock to throw, or run user code.
|
||||
lock (CircuitRegistryLock)
|
||||
{
|
||||
// Transition the host from disconnected to connected if it's available. In this critical section, we return
|
||||
|
|
@ -188,7 +203,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
// b) out of order connection-up \ connection-down events e.g. a client that disconnects as soon it finishes reconnecting.
|
||||
|
||||
// Dispatch the circuit handlers inside the sync context to ensure the order of execution. CircuitHost executes circuit handlers inside of
|
||||
//
|
||||
// the sync context.
|
||||
circuitHandlerTask = circuitHost.Renderer.Dispatcher.InvokeAsync(async () =>
|
||||
{
|
||||
if (previouslyConnected)
|
||||
|
|
@ -200,13 +215,22 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
await circuitHost.OnConnectionUpAsync(cancellationToken);
|
||||
});
|
||||
|
||||
Log.ReconnectionSucceeded(_logger, circuitId);
|
||||
}
|
||||
|
||||
await circuitHandlerTask;
|
||||
try
|
||||
{
|
||||
await circuitHandlerTask;
|
||||
Log.ReconnectionSucceeded(_logger, circuitId);
|
||||
return circuitHost;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.FailedToReconnectToCircuit(_logger, circuitId, ex);
|
||||
await TerminateAsync(circuitId);
|
||||
|
||||
return circuitHost;
|
||||
// Return null on failure, because we need to clean up the circuit.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual (CircuitHost circuitHost, bool previouslyConnected) ConnectCore(string circuitId, IClientProxy clientProxy, string connectionId)
|
||||
|
|
@ -268,6 +292,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
try
|
||||
{
|
||||
entry.CircuitHost.UnhandledException -= CircuitHost_UnhandledException;
|
||||
await entry.CircuitHost.DisposeAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -288,7 +313,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
}
|
||||
|
||||
public ValueTask Terminate(string circuitId)
|
||||
public ValueTask TerminateAsync(string circuitId)
|
||||
{
|
||||
CircuitHost circuitHost;
|
||||
DisconnectedCircuitEntry entry = default;
|
||||
|
|
@ -302,13 +327,33 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
Log.CircuitDisconnectedPermanently(_logger, circuitHost.CircuitId);
|
||||
circuitHost.Client.SetDisconnected();
|
||||
}
|
||||
else
|
||||
{
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
return circuitHost?.DisposeAsync() ?? default;
|
||||
if (circuitHost != null)
|
||||
{
|
||||
circuitHost.UnhandledException -= CircuitHost_UnhandledException;
|
||||
return circuitHost.DisposeAsync();
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
// We don't need to do anything with the exception here, logging and sending exceptions to the client
|
||||
// is done inside the circuit host.
|
||||
private async void CircuitHost_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
var circuitHost = (CircuitHost)sender;
|
||||
|
||||
try
|
||||
{
|
||||
// This will dispose the circuit and remove it from the registry.
|
||||
await TerminateAsync(circuitHost.CircuitId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// We don't expect TerminateAsync to throw, but we want exceptions here for completeness.
|
||||
Log.CircuitExceptionHandlerFailed(_logger, circuitHost.CircuitId, ex);
|
||||
}
|
||||
}
|
||||
|
||||
private readonly struct DisconnectedCircuitEntry
|
||||
|
|
@ -339,6 +384,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
private static readonly Action<ILogger, string, Exception> _circuitMarkedDisconnected;
|
||||
private static readonly Action<ILogger, string, Exception> _circuitDisconnectedPermanently;
|
||||
private static readonly Action<ILogger, string, EvictionReason, Exception> _circuitEvicted;
|
||||
private static readonly Action<ILogger, string, Exception> _circuitExceptionHandlerFailed;
|
||||
|
||||
private static class EventIds
|
||||
{
|
||||
|
|
@ -355,6 +401,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
public static readonly EventId CircuitMarkedDisconnected = new EventId(110, "CircuitMarkedDisconnected");
|
||||
public static readonly EventId CircuitEvicted = new EventId(111, "CircuitEvicted");
|
||||
public static readonly EventId CircuitDisconnectedPermanently = new EventId(112, "CircuitDisconnectedPermanently");
|
||||
public static readonly EventId CircuitExceptionHandlerFailed = new EventId(113, "CircuitExceptionHandlerFailed");
|
||||
}
|
||||
|
||||
static Log()
|
||||
|
|
@ -428,6 +475,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
LogLevel.Debug,
|
||||
EventIds.CircuitEvicted,
|
||||
"Circuit with id {CircuitId} evicted due to {EvictionReason}.");
|
||||
|
||||
_circuitExceptionHandlerFailed = LoggerMessage.Define<string>(
|
||||
LogLevel.Error,
|
||||
EventIds.CircuitExceptionHandlerFailed,
|
||||
"Exception handler for {CircuitId} failed.");
|
||||
}
|
||||
|
||||
public static void UnhandledExceptionDisposingCircuitHost(ILogger logger, Exception exception) =>
|
||||
|
|
@ -448,8 +500,8 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
public static void ConnectingToDisconnectedCircuit(ILogger logger, string circuitId, string connectionId) =>
|
||||
_connectingToDisconnectedCircuit(logger, circuitId, connectionId, null);
|
||||
|
||||
public static void FailedToReconnectToCircuit(ILogger logger, string circuitId) =>
|
||||
_failedToReconnectToCircuit(logger, circuitId, null);
|
||||
public static void FailedToReconnectToCircuit(ILogger logger, string circuitId, Exception exception = null) =>
|
||||
_failedToReconnectToCircuit(logger, circuitId, exception);
|
||||
|
||||
public static void ReconnectionSucceeded(ILogger logger, string circuitId) =>
|
||||
_reconnectionSucceeded(logger, circuitId, null);
|
||||
|
|
@ -471,6 +523,9 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
public static void CircuitEvicted(ILogger logger, string circuitId, EvictionReason evictionReason) =>
|
||||
_circuitEvicted(logger, circuitId, evictionReason, null);
|
||||
|
||||
public static void CircuitExceptionHandlerFailed(ILogger logger, string circuitId, Exception exception) =>
|
||||
_circuitExceptionHandlerFailed(logger, circuitId, exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,9 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Text.Encodings.Web;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.Rendering;
|
||||
using Microsoft.AspNetCore.Components.Routing;
|
||||
using Microsoft.AspNetCore.Components.Web.Rendering;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
|
@ -23,9 +20,9 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
{
|
||||
private readonly IServiceScopeFactory _scopeFactory;
|
||||
private readonly ILoggerFactory _loggerFactory;
|
||||
private readonly ILogger _logger;
|
||||
private readonly CircuitIdFactory _circuitIdFactory;
|
||||
private readonly CircuitOptions _options;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public DefaultCircuitFactory(
|
||||
IServiceScopeFactory scopeFactory,
|
||||
|
|
@ -34,10 +31,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
IOptions<CircuitOptions> options)
|
||||
{
|
||||
_scopeFactory = scopeFactory ?? throw new ArgumentNullException(nameof(scopeFactory));
|
||||
_loggerFactory = loggerFactory;
|
||||
_logger = _loggerFactory.CreateLogger<CircuitFactory>();
|
||||
_loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
|
||||
_circuitIdFactory = circuitIdFactory ?? throw new ArgumentNullException(nameof(circuitIdFactory));
|
||||
_options = options.Value;
|
||||
_options = options?.Value ?? throw new ArgumentNullException(nameof(options));
|
||||
|
||||
_logger = _loggerFactory.CreateLogger<DefaultCircuitFactory>();
|
||||
}
|
||||
|
||||
public override CircuitHost CreateCircuitHost(
|
||||
|
|
@ -49,10 +47,9 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
{
|
||||
// We do as much intialization as possible eagerly in this method, which makes the error handling
|
||||
// story much simpler. If we throw from here, it's handled inside the initial hub method.
|
||||
var components = ResolveComponentMetadata(httpContext, client);
|
||||
var components = ResolveComponentMetadata(httpContext);
|
||||
|
||||
var scope = _scopeFactory.CreateScope();
|
||||
var encoder = scope.ServiceProvider.GetRequiredService<HtmlEncoder>();
|
||||
var jsRuntime = (RemoteJSRuntime)scope.ServiceProvider.GetRequiredService<IJSRuntime>();
|
||||
var componentContext = (RemoteComponentContext)scope.ServiceProvider.GetRequiredService<IComponentContext>();
|
||||
jsRuntime.Initialize(client);
|
||||
|
|
@ -78,7 +75,6 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
_options,
|
||||
jsRuntime,
|
||||
client,
|
||||
encoder,
|
||||
_loggerFactory.CreateLogger<RemoteRenderer>());
|
||||
|
||||
var circuitHandlers = scope.ServiceProvider.GetServices<CircuitHandler>()
|
||||
|
|
@ -88,6 +84,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
var circuitHost = new CircuitHost(
|
||||
_circuitIdFactory.CreateCircuitId(),
|
||||
scope,
|
||||
_options,
|
||||
client,
|
||||
renderer,
|
||||
components,
|
||||
|
|
@ -103,28 +100,17 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
return circuitHost;
|
||||
}
|
||||
|
||||
internal static List<ComponentDescriptor> ResolveComponentMetadata(HttpContext httpContext, CircuitClientProxy client)
|
||||
public static IReadOnlyList<ComponentDescriptor> ResolveComponentMetadata(HttpContext httpContext)
|
||||
{
|
||||
if (!client.Connected)
|
||||
var endpoint = httpContext.GetEndpoint();
|
||||
if (endpoint == null)
|
||||
{
|
||||
// This is the prerendering case. Descriptors will be registered by the prerenderer.
|
||||
return new List<ComponentDescriptor>();
|
||||
throw new InvalidOperationException(
|
||||
$"{nameof(ComponentHub)} doesn't have an associated endpoint. " +
|
||||
"Use 'app.UseEndpoints(endpoints => endpoints.MapBlazorHub<App>(\"app\"))' to register your hub.");
|
||||
}
|
||||
else
|
||||
{
|
||||
var endpointFeature = httpContext.Features.Get<IEndpointFeature>();
|
||||
var endpoint = endpointFeature?.Endpoint;
|
||||
if (endpoint == null)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"{nameof(ComponentHub)} doesn't have an associated endpoint. " +
|
||||
"Use 'app.UseEndpoints(endpoints => endpoints.MapBlazorHub<App>(\"app\"))' to register your hub.");
|
||||
}
|
||||
|
||||
var componentsMetadata = endpoint.Metadata.OfType<ComponentDescriptor>().ToList();
|
||||
|
||||
return componentsMetadata;
|
||||
}
|
||||
return endpoint.Metadata.GetOrderedMetadata<ComponentDescriptor>();
|
||||
}
|
||||
|
||||
private static class Log
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Linq;
|
||||
using System.Text.Encodings.Web;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
|
@ -17,7 +16,7 @@ using Microsoft.JSInterop;
|
|||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Rendering
|
||||
{
|
||||
internal class RemoteRenderer : HtmlRenderer
|
||||
internal class RemoteRenderer : Renderer
|
||||
{
|
||||
private static readonly Task CanceledTask = Task.FromCanceled(new CancellationToken(canceled: true));
|
||||
|
||||
|
|
@ -43,9 +42,8 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering
|
|||
CircuitOptions options,
|
||||
IJSRuntime jsRuntime,
|
||||
CircuitClientProxy client,
|
||||
HtmlEncoder encoder,
|
||||
ILogger logger)
|
||||
: base(serviceProvider, loggerFactory, encoder.Encode)
|
||||
: base(serviceProvider, loggerFactory)
|
||||
{
|
||||
_jsRuntime = jsRuntime;
|
||||
_client = client;
|
||||
|
|
@ -286,7 +284,15 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering
|
|||
// missing.
|
||||
|
||||
// We return the task in here, but the caller doesn't await it.
|
||||
return Dispatcher.InvokeAsync(() => ProcessPendingRender());
|
||||
return Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
// Now we're on the sync context, check again whether we got disposed since this
|
||||
// work item was queued. If so there's nothing to do.
|
||||
if (!_disposing)
|
||||
{
|
||||
ProcessPendingRender();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using System;
|
|||
using System.Security.Claims;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Server
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Server
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,15 +7,35 @@ using System.Threading.Tasks;
|
|||
using Microsoft.AspNetCore.Components.Server.Circuits;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Server
|
||||
{
|
||||
/// <summary>
|
||||
/// A SignalR hub that accepts connections to an ASP.NET Core Components application.
|
||||
/// </summary>
|
||||
// Some notes about our expectations for error handling:
|
||||
//
|
||||
// In general, we need to prevent any client from interacting with a circuit that's in an unpredictable
|
||||
// state. This means that when a circuit throws an unhandled exception our top priority is to
|
||||
// unregister and dispose the circuit. This will prevent any new dispatches from the client
|
||||
// from making it into application code.
|
||||
//
|
||||
// As part of this process, we also notify the client (if there is one) of the error, and we
|
||||
// *expect* a well-behaved client to disconnect. A malicious client can't be expected to disconnect,
|
||||
// but since we've unregistered the circuit they won't be able to access it anyway. When a call
|
||||
// comes into any hub method and the circuit has been disassociated, we will abort the connection.
|
||||
// It's safe to assume that's the result of a race condition or misbehaving client.
|
||||
//
|
||||
// Now it's important to remember that we can only abort a connection as part of a hub method call.
|
||||
// We can dispose a circuit in the background, but we have to deal with a possible race condition
|
||||
// any time we try to acquire access to the circuit - because it could have gone away in the
|
||||
// background - outside of the scope of a hub method.
|
||||
//
|
||||
// In general we author our Hub methods as async methods, but we fire-and-forget anything that
|
||||
// needs access to the circuit/application state to unblock the message loop. Using async in our
|
||||
// Hub methods allows us to ensure message delivery to the client before we abort the connection
|
||||
// in error cases.
|
||||
internal sealed class ComponentHub : Hub
|
||||
{
|
||||
private static readonly object CircuitKey = new object();
|
||||
|
|
@ -24,10 +44,6 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
private readonly CircuitOptions _options;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not instantiate
|
||||
/// this class directly.
|
||||
/// </summary>
|
||||
public ComponentHub(
|
||||
CircuitFactory circuitFactory,
|
||||
CircuitRegistry circuitRegistry,
|
||||
|
|
@ -45,24 +61,11 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
/// </summary>
|
||||
public static PathString DefaultPath { get; } = "/_blazor";
|
||||
|
||||
/// <summary>
|
||||
/// For unit testing only.
|
||||
/// </summary>
|
||||
// We store the circuit host in Context.Items which is tied to the lifetime of the underlying
|
||||
// SignalR connection. There's no need to clean this up, it's a non-owning reference and it
|
||||
// will go away when the connection does.
|
||||
internal CircuitHost CircuitHost
|
||||
{
|
||||
get => (CircuitHost)Context.Items[CircuitKey];
|
||||
private set => Context.Items[CircuitKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public override Task OnDisconnectedAsync(Exception exception)
|
||||
{
|
||||
var circuitHost = CircuitHost;
|
||||
// If the CircuitHost is gone now this isn't an error. This could happen if the disconnect
|
||||
// if the result of well behaving client hanging up after an unhandled exception.
|
||||
var circuitHost = GetCircuit();
|
||||
if (circuitHost == null)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -71,15 +74,16 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
return _circuitRegistry.DisconnectAsync(circuitHost, Context.ConnectionId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public string StartCircuit(string baseUri, string uri)
|
||||
public async ValueTask<string> StartCircuit(string baseUri, string uri)
|
||||
{
|
||||
if (CircuitHost != null)
|
||||
var circuitHost = GetCircuit();
|
||||
if (circuitHost != null)
|
||||
{
|
||||
Log.CircuitAlreadyInitialized(_logger, CircuitHost.CircuitId);
|
||||
NotifyClientError(Clients.Caller, $"The circuit host '{CircuitHost.CircuitId}' has already been initialized.");
|
||||
// This is an error condition and an attempt to bind multiple circuits to a single connection.
|
||||
// We can reject this and terminate the connection.
|
||||
Log.CircuitAlreadyInitialized(_logger, circuitHost.CircuitId);
|
||||
await NotifyClientError(Clients.Caller, $"The circuit host '{circuitHost.CircuitId}' has already been initialized.");
|
||||
Context.Abort();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -90,34 +94,33 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
{
|
||||
// We do some really minimal validation here to prevent obviously wrong data from getting in
|
||||
// without duplicating too much logic.
|
||||
//
|
||||
// This is an error condition attempting to initialize the circuit in a way that would fail.
|
||||
// We can reject this and terminate the connection.
|
||||
Log.InvalidInputData(_logger);
|
||||
_ = NotifyClientError(Clients.Caller, $"The uris provided are invalid.");
|
||||
await NotifyClientError(Clients.Caller, $"The uris provided are invalid.");
|
||||
Context.Abort();
|
||||
return null;
|
||||
}
|
||||
|
||||
var circuitClient = new CircuitClientProxy(Clients.Caller, Context.ConnectionId);
|
||||
if (DefaultCircuitFactory.ResolveComponentMetadata(Context.GetHttpContext(), circuitClient).Count == 0)
|
||||
// From this point, we can try to actually initialize the circuit.
|
||||
if (DefaultCircuitFactory.ResolveComponentMetadata(Context.GetHttpContext()).Count == 0)
|
||||
{
|
||||
var endpointFeature = Context.GetHttpContext().Features.Get<IEndpointFeature>();
|
||||
var endpoint = endpointFeature?.Endpoint;
|
||||
|
||||
Log.NoComponentsRegisteredInEndpoint(_logger, endpoint.DisplayName);
|
||||
|
||||
// No components preregistered so return. This is totally normal if the components were prerendered.
|
||||
Log.NoComponentsRegisteredInEndpoint(_logger, Context.GetHttpContext().GetEndpoint()?.DisplayName);
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var circuitHost = _circuitFactory.CreateCircuitHost(
|
||||
var circuitClient = new CircuitClientProxy(Clients.Caller, Context.ConnectionId);
|
||||
circuitHost = _circuitFactory.CreateCircuitHost(
|
||||
Context.GetHttpContext(),
|
||||
circuitClient,
|
||||
baseUri,
|
||||
uri,
|
||||
Context.User);
|
||||
|
||||
circuitHost.UnhandledException += CircuitHost_UnhandledException;
|
||||
|
||||
// Fire-and-forget the initialization process, because we can't block the
|
||||
// SignalR message loop (we'd get a deadlock if any of the initialization
|
||||
// logic relied on receiving a subsequent message from SignalR), and it will
|
||||
|
|
@ -127,141 +130,136 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
// It's safe to *publish* the circuit now because nothing will be able
|
||||
// to run inside it until after InitializeAsync completes.
|
||||
_circuitRegistry.Register(circuitHost);
|
||||
CircuitHost = circuitHost;
|
||||
SetCircuit(circuitHost);
|
||||
return circuitHost.CircuitId;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// If the circuit fails to initialize synchronously we can notify the client immediately
|
||||
// and shut down the connection.
|
||||
Log.CircuitInitializationFailed(_logger, ex);
|
||||
NotifyClientError(Clients.Caller, "The circuit failed to initialize.");
|
||||
await NotifyClientError(Clients.Caller, "The circuit failed to initialize.");
|
||||
Context.Abort();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public async Task<bool> ConnectCircuit(string circuitId)
|
||||
public async ValueTask<bool> ConnectCircuit(string circuitId)
|
||||
{
|
||||
// ConnectionAsync will not throw.
|
||||
var circuitHost = await _circuitRegistry.ConnectAsync(circuitId, Clients.Caller, Context.ConnectionId, Context.ConnectionAborted);
|
||||
if (circuitHost != null)
|
||||
{
|
||||
CircuitHost = circuitHost;
|
||||
CircuitHost.UnhandledException += CircuitHost_UnhandledException;
|
||||
|
||||
SetCircuit(circuitHost);
|
||||
circuitHost.SetCircuitUser(Context.User);
|
||||
circuitHost.SendPendingBatches();
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we get here the circuit does not exist anymore. This is something that's valid for a client to
|
||||
// recover from, and the client is not holding any resources right now other than the connection.
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public void BeginInvokeDotNetFromJS(string callId, string assemblyName, string methodIdentifier, long dotNetObjectId, string argsJson)
|
||||
public async ValueTask BeginInvokeDotNetFromJS(string callId, string assemblyName, string methodIdentifier, long dotNetObjectId, string argsJson)
|
||||
{
|
||||
if (CircuitHost == null)
|
||||
var circuitHost = await GetActiveCircuitAsync();
|
||||
if (circuitHost == null)
|
||||
{
|
||||
Log.CircuitHostNotInitialized(_logger);
|
||||
_ = NotifyClientError(Clients.Caller, "Circuit not initialized.");
|
||||
return;
|
||||
}
|
||||
|
||||
_ = CircuitHost.BeginInvokeDotNetFromJS(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson);
|
||||
_ = circuitHost.BeginInvokeDotNetFromJS(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public void EndInvokeJSFromDotNet(long asyncHandle, bool succeeded, string arguments)
|
||||
public async ValueTask EndInvokeJSFromDotNet(long asyncHandle, bool succeeded, string arguments)
|
||||
{
|
||||
if (CircuitHost == null)
|
||||
var circuitHost = await GetActiveCircuitAsync();
|
||||
if (circuitHost == null)
|
||||
{
|
||||
Log.CircuitHostNotInitialized(_logger);
|
||||
_ = NotifyClientError(Clients.Caller, "Circuit not initialized.");
|
||||
return;
|
||||
}
|
||||
|
||||
_ = CircuitHost.EndInvokeJSFromDotNet(asyncHandle, succeeded, arguments);
|
||||
_ = circuitHost.EndInvokeJSFromDotNet(asyncHandle, succeeded, arguments);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public void DispatchBrowserEvent(string eventDescriptor, string eventArgs)
|
||||
public async ValueTask DispatchBrowserEvent(string eventDescriptor, string eventArgs)
|
||||
{
|
||||
if (CircuitHost == null)
|
||||
var circuitHost = await GetActiveCircuitAsync();
|
||||
if (circuitHost == null)
|
||||
{
|
||||
Log.CircuitHostNotInitialized(_logger);
|
||||
_ = NotifyClientError(Clients.Caller, "Circuit not initialized.");
|
||||
return;
|
||||
}
|
||||
|
||||
_ = CircuitHost.DispatchEvent(eventDescriptor, eventArgs);
|
||||
_ = circuitHost.DispatchEvent(eventDescriptor, eventArgs);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Intended for framework use only. Applications should not call this method directly.
|
||||
/// </summary>
|
||||
public void OnRenderCompleted(long renderId, string errorMessageOrNull)
|
||||
public async ValueTask OnRenderCompleted(long renderId, string errorMessageOrNull)
|
||||
{
|
||||
if (CircuitHost == null)
|
||||
var circuitHost = await GetActiveCircuitAsync();
|
||||
if (circuitHost == null)
|
||||
{
|
||||
Log.CircuitHostNotInitialized(_logger);
|
||||
NotifyClientError(Clients.Caller, "Circuit not initialized.");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.ReceivedConfirmationForBatch(_logger, renderId);
|
||||
_ = CircuitHost.Renderer.OnRenderCompleted(renderId, errorMessageOrNull);
|
||||
_ = circuitHost.Renderer.OnRenderCompleted(renderId, errorMessageOrNull);
|
||||
}
|
||||
|
||||
public void OnLocationChanged(string uri, bool intercepted)
|
||||
public async ValueTask OnLocationChanged(string uri, bool intercepted)
|
||||
{
|
||||
if (CircuitHost == null)
|
||||
var circuitHost = await GetActiveCircuitAsync();
|
||||
if (circuitHost == null)
|
||||
{
|
||||
Log.CircuitHostNotInitialized(_logger);
|
||||
NotifyClientError(Clients.Caller, "Circuit not initialized.");
|
||||
return;
|
||||
}
|
||||
|
||||
_ = CircuitHost.OnLocationChangedAsync(uri, intercepted);
|
||||
_ = circuitHost.OnLocationChangedAsync(uri, intercepted);
|
||||
}
|
||||
|
||||
private async void CircuitHost_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
// We store the CircuitHost through a *handle* here because Context.Items is tied to the lifetime
|
||||
// of the connection. It's possible that a misbehaving client could cause disposal of a CircuitHost
|
||||
// but keep a connection open indefinitely, preventing GC of the Circuit and related application state.
|
||||
// Using a handle allows the CircuitHost to clear this reference in the background.
|
||||
//
|
||||
// See comment on error handling on the class definition.
|
||||
private async ValueTask<CircuitHost> GetActiveCircuitAsync([CallerMemberName] string callSite = "")
|
||||
{
|
||||
var circuitHost = (CircuitHost)sender;
|
||||
var circuitId = circuitHost?.CircuitId;
|
||||
|
||||
try
|
||||
var handle = (CircuitHandle)Context.Items[CircuitKey];
|
||||
var circuitHost = handle?.CircuitHost;
|
||||
if (handle != null && circuitHost == null)
|
||||
{
|
||||
Log.UnhandledExceptionInCircuit(_logger, circuitId, (Exception)e.ExceptionObject);
|
||||
if (_options.DetailedErrors)
|
||||
{
|
||||
await NotifyClientError(circuitHost.Client, e.ExceptionObject.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
var message = $"There was an unhandled exception on the current circuit, so this circuit will be terminated. For more details turn on " +
|
||||
$"detailed exceptions in '{typeof(CircuitOptions).Name}.{nameof(CircuitOptions.DetailedErrors)}'";
|
||||
|
||||
await NotifyClientError(circuitHost.Client, message);
|
||||
}
|
||||
|
||||
// We generally can't abort the connection here since this is an async
|
||||
// callback. The Hub has already been torn down. We'll rely on the
|
||||
// client to abort the connection if we successfully transmit an error.
|
||||
// This can occur when a circuit host does not exist anymore due to an unhandled exception.
|
||||
// We can reject this and terminate the connection.
|
||||
Log.CircuitHostShutdown(_logger, callSite);
|
||||
await NotifyClientError(Clients.Caller, "Circuit has been shut down due to error.");
|
||||
Context.Abort();
|
||||
return null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
else if (circuitHost == null)
|
||||
{
|
||||
Log.FailedToTransmitException(_logger, circuitId, ex);
|
||||
// This can occur when a circuit host does not exist anymore due to an unhandled exception.
|
||||
// We can reject this and terminate the connection.
|
||||
Log.CircuitHostNotInitialized(_logger, callSite);
|
||||
await NotifyClientError(Clients.Caller, "Circuit not initialized.");
|
||||
Context.Abort();
|
||||
return null;
|
||||
}
|
||||
|
||||
return circuitHost;
|
||||
}
|
||||
|
||||
private static Task NotifyClientError(IClientProxy client, string error) =>
|
||||
client.SendAsync("JS.Error", error);
|
||||
private CircuitHost GetCircuit()
|
||||
{
|
||||
return ((CircuitHandle)Context.Items[CircuitKey])?.CircuitHost;
|
||||
}
|
||||
|
||||
private void SetCircuit(CircuitHost circuitHost)
|
||||
{
|
||||
Context.Items[CircuitKey] = circuitHost?.Handle;
|
||||
}
|
||||
|
||||
private static Task NotifyClientError(IClientProxy client, string error) => client.SendAsync("JS.Error", error);
|
||||
|
||||
private static class Log
|
||||
{
|
||||
|
|
@ -274,14 +272,14 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
private static readonly Action<ILogger, string, Exception> _unhandledExceptionInCircuit =
|
||||
LoggerMessage.Define<string>(LogLevel.Warning, new EventId(3, "UnhandledExceptionInCircuit"), "Unhandled exception in circuit {CircuitId}");
|
||||
|
||||
private static readonly Action<ILogger, string, Exception> _failedToTransmitException =
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(4, "FailedToTransmitException"), "Failed to transmit exception to client in circuit {CircuitId}");
|
||||
|
||||
private static readonly Action<ILogger, string, Exception> _circuitAlreadyInitialized =
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(5, "CircuitAlreadyInitialized"), "The circuit host '{CircuitId}' has already been initialized");
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(4, "CircuitAlreadyInitialized"), "The circuit host '{CircuitId}' has already been initialized");
|
||||
|
||||
private static readonly Action<ILogger, string, Exception> _circuitHostNotInitialized =
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(6, "CircuitHostNotInitialized"), "Call to '{CallSite}' received before the circuit host initialization");
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(5, "CircuitHostNotInitialized"), "Call to '{CallSite}' received before the circuit host initialization");
|
||||
|
||||
private static readonly Action<ILogger, string, Exception> _circuitHostShutdown =
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(6, "CircuitHostShutdown"), "Call to '{CallSite}' received after the circuit was shut down");
|
||||
|
||||
private static readonly Action<ILogger, string, Exception> _circuitTerminatedGracefully =
|
||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(7, "CircuitTerminatedGracefully"), "Circuit '{CircuitId}' terminated gracefully");
|
||||
|
|
@ -307,15 +305,12 @@ namespace Microsoft.AspNetCore.Components.Server
|
|||
_unhandledExceptionInCircuit(logger, circuitId, exception);
|
||||
}
|
||||
|
||||
public static void FailedToTransmitException(ILogger logger, string circuitId, Exception transmissionException)
|
||||
{
|
||||
_failedToTransmitException(logger, circuitId, transmissionException);
|
||||
}
|
||||
|
||||
public static void CircuitAlreadyInitialized(ILogger logger, string circuitId) => _circuitAlreadyInitialized(logger, circuitId, null);
|
||||
|
||||
public static void CircuitHostNotInitialized(ILogger logger, [CallerMemberName] string callSite = "") => _circuitHostNotInitialized(logger, callSite, null);
|
||||
|
||||
public static void CircuitHostShutdown(ILogger logger, [CallerMemberName] string callSite = "") => _circuitHostShutdown(logger, callSite, null);
|
||||
|
||||
public static void CircuitTerminatedGracefully(ILogger logger, string circuitId) => _circuitTerminatedGracefully(logger, circuitId, null);
|
||||
|
||||
public static void InvalidInputData(ILogger logger, [CallerMemberName] string callSite = "") => _invalidInputData(logger, callSite, null);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
using System;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Routing;
|
||||
using Microsoft.AspNetCore.Components.Server;
|
||||
using Microsoft.AspNetCore.Components.Server.BlazorPack;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Authorization" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Web" />
|
||||
<Reference Include="Microsoft.AspNetCore.DataProtection" />
|
||||
<Reference Include="Microsoft.AspNetCore.SignalR" />
|
||||
|
|
|
|||
|
|
@ -5,10 +5,8 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text.Encodings.Web;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.Rendering;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
|
@ -38,10 +36,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
// Assert
|
||||
serviceScope.Verify(s => s.Dispose(), Times.Once());
|
||||
Assert.True(remoteRenderer.Disposed);
|
||||
Assert.Null(circuitHost.Handle.CircuitHost);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DisposeAsync_DisposesResourcesEvenIfCircuitHandlerOrComponentThrows()
|
||||
public async Task DisposeAsync_DisposesResourcesAndSilencesException()
|
||||
{
|
||||
// Arrange
|
||||
var serviceScope = new Mock<IServiceScope>();
|
||||
|
|
@ -60,10 +59,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
circuitHost.Renderer.AssignRootComponentId(throwOnDisposeComponent);
|
||||
|
||||
// Act
|
||||
await Assert.ThrowsAsync<InvalidTimeZoneException>(async () =>
|
||||
{
|
||||
await circuitHost.DisposeAsync();
|
||||
});
|
||||
await circuitHost.DisposeAsync(); // Does not throw
|
||||
|
||||
// Assert
|
||||
Assert.True(throwOnDisposeComponent.DidCallDispose);
|
||||
|
|
@ -181,7 +177,8 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
await initializeAsyncTask;
|
||||
|
||||
// Assert: The async exception was reported via the side-channel
|
||||
Assert.Same(ex, reportedErrors.Single().ExceptionObject);
|
||||
var aex = Assert.IsType<AggregateException>(reportedErrors.Single().ExceptionObject);
|
||||
Assert.Same(ex, aex.InnerExceptions.Single());
|
||||
Assert.False(reportedErrors.Single().IsTerminating);
|
||||
}
|
||||
|
||||
|
|
@ -239,7 +236,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
private class TestRemoteRenderer : RemoteRenderer
|
||||
{
|
||||
public TestRemoteRenderer(IServiceProvider serviceProvider, IJSRuntime jsRuntime, IClientProxy client)
|
||||
: base(serviceProvider, NullLoggerFactory.Instance, new CircuitOptions(), jsRuntime, new CircuitClientProxy(client, "connection"), HtmlEncoder.Default, NullLogger.Instance)
|
||||
: base(serviceProvider, NullLoggerFactory.Instance, new CircuitOptions(), jsRuntime, new CircuitClientProxy(client, "connection"), NullLogger.Instance)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue