Purge the blazor-wasm branch
This commit is contained in:
parent
bbafecc053
commit
f54902f169
|
|
@ -6,6 +6,7 @@
|
|||
<add key="darc-pub-dotnet-core-setup-65f04fb" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-core-setup-65f04fb6/nuget/v3/index.json" />
|
||||
<add key="darc-pub-dotnet-corefx-0f7f38c" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-corefx-0f7f38c4/nuget/v3/index.json" />
|
||||
<!--End: Package sources managed by Dependency Flow automation. Do not edit the sources above.-->
|
||||
<add key="aspnetcore" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/3.1.102-servicing-014873/nuget/v3/index.json" />
|
||||
<add key="dotnet-core" value="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" />
|
||||
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
|
||||
<add key="aspnet-blazor" value="https://dotnetfeed.blob.core.windows.net/aspnet-blazor/index.json" />
|
||||
|
|
|
|||
|
|
@ -2,106 +2,106 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
<AspNetCoreBaselineVersion>3.1.0</AspNetCoreBaselineVersion>
|
||||
<AspNetCoreBaselineVersion>3.1.1</AspNetCoreBaselineVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: AspNetCoreRuntime.3.0.x64-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' ">
|
||||
<BaselinePackageVersion>3.0.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.0.2</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " />
|
||||
<!-- Package: AspNetCoreRuntime.3.0.x86-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' ">
|
||||
<BaselinePackageVersion>3.0.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.0.2</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " />
|
||||
<!-- Package: dotnet-sql-cache-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-sql-cache' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.ApiAuthorization.IdentityServer-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="IdentityServer4" Version="[3.0.0, )" />
|
||||
<BaselinePackageReference Include="IdentityServer4.AspNetIdentity" Version="[3.0.0, )" />
|
||||
<BaselinePackageReference Include="IdentityServer4.EntityFramework" Version="[3.0.0, )" />
|
||||
<BaselinePackageReference Include="IdentityServer4.EntityFramework.Storage" Version="[3.0.0, )" />
|
||||
<BaselinePackageReference Include="IdentityServer4.Storage" Version="[3.0.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.App.Runtime.win-x64-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.App.Runtime.win-x64' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.AzureAD.UI-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.AzureADB2C.UI-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Certificate-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Facebook-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Google-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.JwtBearer-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.MicrosoftAccount-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Negotiate-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.OpenIdConnect-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Twitter-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.WsFederation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="[5.5.0, )" />
|
||||
|
|
@ -109,39 +109,39 @@
|
|||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authorization-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.AzureAppServices.HostingStartup-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.AzureAppServices.SiteExtension-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' AND '$(TargetFramework)' == 'net461' ">
|
||||
<BaselinePackageReference Include="Microsoft.Web.Xdt.Extensions" Version="[3.1.0-rtm.19566.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Web.Xdt.Extensions" Version="[3.1.1-servicing.19615.10, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.AzureAppServicesIntegration-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Blazor-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Blazor' ">
|
||||
|
|
@ -186,273 +186,273 @@
|
|||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Components-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Components.Analyzers-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Analyzers' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Components.Authorization-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Components.Forms-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Components.Web-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.ConcurrencyLimiter-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Connections.Abstractions-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Cryptography.Internal-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Cryptography.KeyDerivation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netcoreapp2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
|
||||
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
|
||||
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
|
||||
<BaselinePackageReference Include="System.Security.Principal.Windows" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.Abstractions-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureKeyVault-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Azure.KeyVault" Version="[2.3.2, )" />
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="[3.19.8, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureStorage-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Azure.Storage.Blob" Version="[10.0.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Data.OData" Version="[5.8.4, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.EntityFrameworkCore-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.Extensions-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.StackExchangeRedis-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.HeaderPropagation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Hosting.WindowsServices-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="System.ServiceProcess.ServiceController" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Http.Connections.Client-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Http.Connections.Common-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Http.Features-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Identity.EntityFrameworkCore-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Identity.Specification.Tests-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Testing" Version="[3.1.0-rtm.19565.4, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Testing" Version="[3.1.1-servicing.19614.4, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
|
||||
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Identity.UI-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.JsonPatch-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.CSharp" Version="[4.7.0, )" />
|
||||
|
|
@ -460,236 +460,238 @@
|
|||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Metadata-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||
<!-- Package: Microsoft.AspNetCore.MiddlewareAnalysis-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Mvc.NewtonsoftJson-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json.Bson" Version="[1.0.2, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Mvc.Testing-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.NodeServices-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Console" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Console" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Owin-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Libuv" Version="[1.10.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Client-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Client" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Client" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Client.Core-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Common-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.Json-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.MessagePack-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.Specification.Tests-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
|
||||
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SignalR.StackExchangeRedis-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SpaServices-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.NodeServices" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.NodeServices" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SpaServices.Extensions-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.TestHost-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.dotnet-openapi-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.dotnet-openapi' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.DotNet.Web.Client.ItemTemplates-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Client.ItemTemplates' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.DotNet.Web.ItemTemplates-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ItemTemplates' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.DotNet.Web.ProjectTemplates.3.1-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ProjectTemplates.3.1' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.Extensions.ApiDescription.Client-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Client' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.Extensions.ApiDescription.Server-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Server' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.Extensions.Identity.Core-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.Extensions.Identity.Stores-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' ">
|
||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.1, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
154
eng/Baseline.xml
154
eng/Baseline.xml
|
|
@ -4,86 +4,86 @@ This file contains a list of all the packages and their versions which were rele
|
|||
Update this list when preparing for a new patch.
|
||||
|
||||
-->
|
||||
<Baseline Version="3.1.0">
|
||||
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.0" />
|
||||
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.0" />
|
||||
<Package Id="dotnet-sql-cache" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Certificate" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Google" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Negotiate" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Twitter" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.WsFederation" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Authorization" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="3.1.0" />
|
||||
<Baseline Version="3.1.1">
|
||||
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.2" />
|
||||
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.2" />
|
||||
<Package Id="dotnet-sql-cache" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Certificate" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Google" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Negotiate" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.Twitter" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authentication.WsFederation" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Authorization" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Blazor" Version="3.0.0-preview9.19465.2" />
|
||||
<Package Id="Microsoft.AspNetCore.Blazor.Build" Version="3.0.0-preview9.19465.2" />
|
||||
<Package Id="Microsoft.AspNetCore.Blazor.DevServer" Version="3.0.0-preview9.19465.2" />
|
||||
<Package Id="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.0.0-preview9.19465.2" />
|
||||
<Package Id="Microsoft.AspNetCore.Blazor.Server" Version="3.0.0-preview9.19465.2" />
|
||||
<Package Id="Microsoft.AspNetCore.Blazor.Templates" Version="3.0.0-preview9.19465.2" />
|
||||
<Package Id="Microsoft.AspNetCore.Components" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Analyzers" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Authorization" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Forms" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Web" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.ConcurrencyLimiter" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Cryptography.Internal" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.Abstractions" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.AzureStorage" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.Extensions" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.HeaderPropagation" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Hosting.WindowsServices" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Http.Connections.Client" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Http.Connections.Common" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Http.Features" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Identity.Specification.Tests" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Identity.UI" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.JsonPatch" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Metadata" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.MiddlewareAnalysis" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.NodeServices" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Owin" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Client" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Client.Core" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Common" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Specification.Tests" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SpaServices" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.0" />
|
||||
<Package Id="Microsoft.AspNetCore.TestHost" Version="3.1.0" />
|
||||
<Package Id="Microsoft.dotnet-openapi" Version="3.1.0" />
|
||||
<Package Id="Microsoft.DotNet.Web.Client.ItemTemplates" Version="3.1.0" />
|
||||
<Package Id="Microsoft.DotNet.Web.ItemTemplates" Version="3.1.0" />
|
||||
<Package Id="Microsoft.DotNet.Web.ProjectTemplates.3.1" Version="3.1.0" />
|
||||
<Package Id="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" Version="3.1.0" />
|
||||
<Package Id="Microsoft.Extensions.ApiDescription.Client" Version="3.1.0" />
|
||||
<Package Id="Microsoft.Extensions.ApiDescription.Server" Version="3.1.0" />
|
||||
<Package Id="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="3.1.0" />
|
||||
<Package Id="Microsoft.Extensions.Identity.Core" Version="3.1.0" />
|
||||
<Package Id="Microsoft.Extensions.Identity.Stores" Version="3.1.0" />
|
||||
</Baseline>
|
||||
<Package Id="Microsoft.AspNetCore.Components" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Analyzers" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Authorization" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Forms" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Components.Web" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.ConcurrencyLimiter" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Cryptography.Internal" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.Abstractions" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.AzureStorage" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.Extensions" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.HeaderPropagation" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Hosting.WindowsServices" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Http.Connections.Client" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Http.Connections.Common" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Http.Features" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Identity.Specification.Tests" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Identity.UI" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.JsonPatch" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Metadata" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.MiddlewareAnalysis" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.NodeServices" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Owin" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Client" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Client.Core" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Common" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.Specification.Tests" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SpaServices" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.1" />
|
||||
<Package Id="Microsoft.AspNetCore.TestHost" Version="3.1.1" />
|
||||
<Package Id="Microsoft.dotnet-openapi" Version="3.1.1" />
|
||||
<Package Id="Microsoft.DotNet.Web.Client.ItemTemplates" Version="3.1.1" />
|
||||
<Package Id="Microsoft.DotNet.Web.ItemTemplates" Version="3.1.1" />
|
||||
<Package Id="Microsoft.DotNet.Web.ProjectTemplates.3.1" Version="3.1.1" />
|
||||
<Package Id="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" Version="3.1.1" />
|
||||
<Package Id="Microsoft.Extensions.ApiDescription.Client" Version="3.1.1" />
|
||||
<Package Id="Microsoft.Extensions.ApiDescription.Server" Version="3.1.1" />
|
||||
<Package Id="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="3.1.1" />
|
||||
<Package Id="Microsoft.Extensions.Identity.Core" Version="3.1.1" />
|
||||
<Package Id="Microsoft.Extensions.Identity.Stores" Version="3.1.1" />
|
||||
</Baseline>
|
||||
|
|
@ -147,6 +147,16 @@ and are generated based on the last package release.
|
|||
<LatestPackageReference Include="System.Threading.Tasks.Extensions" Version="$(SystemThreadingTasksExtensionsPackageVersion)" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Label="AspNetCore">
|
||||
<LatestPackageReference Include="Ignitor" Version="$(IgnitorPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Components" Version="$(MicrosoftAspNetCoreComponentsPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="$(MicrosoftAspNetCoreComponentsAuthorizationPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="$(MicrosoftAspNetCoreComponentsFormsPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Components.Web" Version="$(MicrosoftAspNetCoreComponentsWebPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Label="MSBuild">
|
||||
<LatestPackageReference Include="Microsoft.Build" Version="$(MicrosoftBuildPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkPackageVersion)" />
|
||||
|
|
|
|||
|
|
@ -5,143 +5,12 @@
|
|||
-->
|
||||
<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="dotnet-getdocument" ProjectPath="$(RepoRoot)src\Tools\dotnet-getdocument\src\dotnet-getdocument.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Extensions.ApiDescription.Client" ProjectPath="$(RepoRoot)src\Tools\Extensions.ApiDescription.Client\src\Microsoft.Extensions.ApiDescription.Client.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Extensions.ApiDescription.Server" ProjectPath="$(RepoRoot)src\Tools\Extensions.ApiDescription.Server\src\Microsoft.Extensions.ApiDescription.Server.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DeveloperCertificates.XPlat" ProjectPath="$(RepoRoot)src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj" />
|
||||
<ProjectReferenceProvider Include="GetDocument.Insider" ProjectPath="$(RepoRoot)src\Tools\GetDocumentInsider\src\GetDocumentInsider.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Specification.Tests" ProjectPath="$(RepoRoot)src\SignalR\server\Specification.Tests\src\Microsoft.AspNetCore.SignalR.Specification.Tests.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.Build" ProjectPath="$(RepoRoot)src\Components\Blazor\Build\src\Microsoft.AspNetCore.Blazor.Build.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.HttpClient" ProjectPath="$(RepoRoot)src\Components\Blazor\Http\src\Microsoft.AspNetCore.Blazor.HttpClient.csproj" />
|
||||
<ProjectReferenceProvider Include="Mono.WebAssembly.Interop" ProjectPath="$(RepoRoot)src\Components\Blazor\Mono.WebAssembly.Interop\src\Mono.WebAssembly.Interop.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.Server" ProjectPath="$(RepoRoot)src\Components\Blazor\Server\src\Microsoft.AspNetCore.Blazor.Server.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.DataAnnotations.Validation" ProjectPath="$(RepoRoot)src\Components\Blazor\Validation\src\Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.csproj" />
|
||||
<ProjectReferenceProvider Include="Ignitor" ProjectPath="$(RepoRoot)src\Components\Ignitor\src\Ignitor.csproj" />
|
||||
<ProjectReferenceProvider Include="BlazorServerApp" ProjectPath="$(RepoRoot)src\Components\Samples\BlazorServerApp\BlazorServerApp.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore" ProjectPath="$(RepoRoot)src\DefaultBuilder\src\Microsoft.AspNetCore.csproj" RefProjectPath="$(RepoRoot)src\DefaultBuilder\ref\Microsoft.AspNetCore.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.JsonPatch" ProjectPath="$(RepoRoot)src\Features\JsonPatch\src\Microsoft.AspNetCore.JsonPatch.csproj" RefProjectPath="$(RepoRoot)src\Features\JsonPatch\ref\Microsoft.AspNetCore.JsonPatch.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection.Abstractions" ProjectPath="$(RepoRoot)src\DataProtection\Abstractions\src\Microsoft.AspNetCore.DataProtection.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\Abstractions\ref\Microsoft.AspNetCore.DataProtection.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection.AzureKeyVault" ProjectPath="$(RepoRoot)src\DataProtection\AzureKeyVault\src\Microsoft.AspNetCore.DataProtection.AzureKeyVault.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\AzureKeyVault\ref\Microsoft.AspNetCore.DataProtection.AzureKeyVault.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection.AzureStorage" ProjectPath="$(RepoRoot)src\DataProtection\AzureStorage\src\Microsoft.AspNetCore.DataProtection.AzureStorage.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\AzureStorage\ref\Microsoft.AspNetCore.DataProtection.AzureStorage.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Cryptography.Internal" ProjectPath="$(RepoRoot)src\DataProtection\Cryptography.Internal\src\Microsoft.AspNetCore.Cryptography.Internal.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\Cryptography.Internal\ref\Microsoft.AspNetCore.Cryptography.Internal.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" ProjectPath="$(RepoRoot)src\DataProtection\Cryptography.KeyDerivation\src\Microsoft.AspNetCore.Cryptography.KeyDerivation.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\Cryptography.KeyDerivation\ref\Microsoft.AspNetCore.Cryptography.KeyDerivation.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection" ProjectPath="$(RepoRoot)src\DataProtection\DataProtection\src\Microsoft.AspNetCore.DataProtection.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\DataProtection\ref\Microsoft.AspNetCore.DataProtection.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" ProjectPath="$(RepoRoot)src\DataProtection\EntityFrameworkCore\src\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\EntityFrameworkCore\ref\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection.Extensions" ProjectPath="$(RepoRoot)src\DataProtection\Extensions\src\Microsoft.AspNetCore.DataProtection.Extensions.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\Extensions\ref\Microsoft.AspNetCore.DataProtection.Extensions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" ProjectPath="$(RepoRoot)src\DataProtection\StackExchangeRedis\src\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj" RefProjectPath="$(RepoRoot)src\DataProtection\StackExchangeRedis\ref\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Antiforgery" ProjectPath="$(RepoRoot)src\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj" RefProjectPath="$(RepoRoot)src\Antiforgery\ref\Microsoft.AspNetCore.Antiforgery.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Hosting.Abstractions" ProjectPath="$(RepoRoot)src\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Hosting\Abstractions\ref\Microsoft.AspNetCore.Hosting.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Hosting" ProjectPath="$(RepoRoot)src\Hosting\Hosting\src\Microsoft.AspNetCore.Hosting.csproj" RefProjectPath="$(RepoRoot)src\Hosting\Hosting\ref\Microsoft.AspNetCore.Hosting.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Hosting.Server.Abstractions" ProjectPath="$(RepoRoot)src\Hosting\Server.Abstractions\src\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Hosting\Server.Abstractions\ref\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.TestHost" ProjectPath="$(RepoRoot)src\Hosting\TestHost\src\Microsoft.AspNetCore.TestHost.csproj" RefProjectPath="$(RepoRoot)src\Hosting\TestHost\ref\Microsoft.AspNetCore.TestHost.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Hosting.WindowsServices" ProjectPath="$(RepoRoot)src\Hosting\WindowsServices\src\Microsoft.AspNetCore.Hosting.WindowsServices.csproj" RefProjectPath="$(RepoRoot)src\Hosting\WindowsServices\ref\Microsoft.AspNetCore.Hosting.WindowsServices.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Abstractions" ProjectPath="$(RepoRoot)src\Http\Authentication.Abstractions\src\Microsoft.AspNetCore.Authentication.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Http\Authentication.Abstractions\ref\Microsoft.AspNetCore.Authentication.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Core" ProjectPath="$(RepoRoot)src\Http\Authentication.Core\src\Microsoft.AspNetCore.Authentication.Core.csproj" RefProjectPath="$(RepoRoot)src\Http\Authentication.Core\ref\Microsoft.AspNetCore.Authentication.Core.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Net.Http.Headers" ProjectPath="$(RepoRoot)src\Http\Headers\src\Microsoft.Net.Http.Headers.csproj" RefProjectPath="$(RepoRoot)src\Http\Headers\ref\Microsoft.Net.Http.Headers.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Abstractions" ProjectPath="$(RepoRoot)src\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Http\Http.Abstractions\ref\Microsoft.AspNetCore.Http.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Extensions" ProjectPath="$(RepoRoot)src\Http\Http.Extensions\src\Microsoft.AspNetCore.Http.Extensions.csproj" RefProjectPath="$(RepoRoot)src\Http\Http.Extensions\ref\Microsoft.AspNetCore.Http.Extensions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Features" ProjectPath="$(RepoRoot)src\Http\Http.Features\src\Microsoft.AspNetCore.Http.Features.csproj" RefProjectPath="$(RepoRoot)src\Http\Http.Features\ref\Microsoft.AspNetCore.Http.Features.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http" ProjectPath="$(RepoRoot)src\Http\Http\src\Microsoft.AspNetCore.Http.csproj" RefProjectPath="$(RepoRoot)src\Http\Http\ref\Microsoft.AspNetCore.Http.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Metadata" ProjectPath="$(RepoRoot)src\Http\Metadata\src\Microsoft.AspNetCore.Metadata.csproj" RefProjectPath="$(RepoRoot)src\Http\Metadata\ref\Microsoft.AspNetCore.Metadata.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Owin" ProjectPath="$(RepoRoot)src\Http\Owin\src\Microsoft.AspNetCore.Owin.csproj" RefProjectPath="$(RepoRoot)src\Http\Owin\ref\Microsoft.AspNetCore.Owin.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Routing.Abstractions" ProjectPath="$(RepoRoot)src\Http\Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Http\Routing.Abstractions\ref\Microsoft.AspNetCore.Routing.Abstractions.csproj" />
|
||||
<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.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" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Extensions.Identity.Stores" ProjectPath="$(RepoRoot)src\Identity\Extensions.Stores\src\Microsoft.Extensions.Identity.Stores.csproj" RefProjectPath="$(RepoRoot)src\Identity\Extensions.Stores\ref\Microsoft.Extensions.Identity.Stores.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Identity.UI" ProjectPath="$(RepoRoot)src\Identity\UI\src\Microsoft.AspNetCore.Identity.UI.csproj" RefProjectPath="$(RepoRoot)src\Identity\UI\ref\Microsoft.AspNetCore.Identity.UI.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Connections.Abstractions" ProjectPath="$(RepoRoot)src\Servers\Connections.Abstractions\src\Microsoft.AspNetCore.Connections.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Servers\Connections.Abstractions\ref\Microsoft.AspNetCore.Connections.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.HttpSys" ProjectPath="$(RepoRoot)src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj" RefProjectPath="$(RepoRoot)src\Servers\HttpSys\ref\Microsoft.AspNetCore.Server.HttpSys.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.IISIntegration" ProjectPath="$(RepoRoot)src\Servers\IIS\IISIntegration\src\Microsoft.AspNetCore.Server.IISIntegration.csproj" RefProjectPath="$(RepoRoot)src\Servers\IIS\IISIntegration\ref\Microsoft.AspNetCore.Server.IISIntegration.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.IIS" ProjectPath="$(RepoRoot)src\Servers\IIS\IIS\src\Microsoft.AspNetCore.Server.IIS.csproj" RefProjectPath="$(RepoRoot)src\Servers\IIS\IIS\ref\Microsoft.AspNetCore.Server.IIS.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Core" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Core\ref\Microsoft.AspNetCore.Server.Kestrel.Core.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Kestrel\ref\Microsoft.AspNetCore.Server.Kestrel.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Libuv\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Libuv\ref\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Sockets\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Sockets\ref\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Certificate" ProjectPath="$(RepoRoot)src\Security\Authentication\Certificate\src\Microsoft.AspNetCore.Authentication.Certificate.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Certificate\ref\Microsoft.AspNetCore.Authentication.Certificate.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Cookies" ProjectPath="$(RepoRoot)src\Security\Authentication\Cookies\src\Microsoft.AspNetCore.Authentication.Cookies.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Cookies\ref\Microsoft.AspNetCore.Authentication.Cookies.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication" ProjectPath="$(RepoRoot)src\Security\Authentication\Core\src\Microsoft.AspNetCore.Authentication.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Core\ref\Microsoft.AspNetCore.Authentication.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Facebook" ProjectPath="$(RepoRoot)src\Security\Authentication\Facebook\src\Microsoft.AspNetCore.Authentication.Facebook.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Facebook\ref\Microsoft.AspNetCore.Authentication.Facebook.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Google" ProjectPath="$(RepoRoot)src\Security\Authentication\Google\src\Microsoft.AspNetCore.Authentication.Google.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Google\ref\Microsoft.AspNetCore.Authentication.Google.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.JwtBearer" ProjectPath="$(RepoRoot)src\Security\Authentication\JwtBearer\src\Microsoft.AspNetCore.Authentication.JwtBearer.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\JwtBearer\ref\Microsoft.AspNetCore.Authentication.JwtBearer.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" ProjectPath="$(RepoRoot)src\Security\Authentication\MicrosoftAccount\src\Microsoft.AspNetCore.Authentication.MicrosoftAccount.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\MicrosoftAccount\ref\Microsoft.AspNetCore.Authentication.MicrosoftAccount.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Negotiate" ProjectPath="$(RepoRoot)src\Security\Authentication\Negotiate\src\Microsoft.AspNetCore.Authentication.Negotiate.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Negotiate\ref\Microsoft.AspNetCore.Authentication.Negotiate.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.OAuth" ProjectPath="$(RepoRoot)src\Security\Authentication\OAuth\src\Microsoft.AspNetCore.Authentication.OAuth.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\OAuth\ref\Microsoft.AspNetCore.Authentication.OAuth.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" ProjectPath="$(RepoRoot)src\Security\Authentication\OpenIdConnect\src\Microsoft.AspNetCore.Authentication.OpenIdConnect.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\OpenIdConnect\ref\Microsoft.AspNetCore.Authentication.OpenIdConnect.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Twitter" ProjectPath="$(RepoRoot)src\Security\Authentication\Twitter\src\Microsoft.AspNetCore.Authentication.Twitter.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Twitter\ref\Microsoft.AspNetCore.Authentication.Twitter.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.WsFederation" ProjectPath="$(RepoRoot)src\Security\Authentication\WsFederation\src\Microsoft.AspNetCore.Authentication.WsFederation.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\WsFederation\ref\Microsoft.AspNetCore.Authentication.WsFederation.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authorization" ProjectPath="$(RepoRoot)src\Security\Authorization\Core\src\Microsoft.AspNetCore.Authorization.csproj" RefProjectPath="$(RepoRoot)src\Security\Authorization\Core\ref\Microsoft.AspNetCore.Authorization.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authorization.Policy" ProjectPath="$(RepoRoot)src\Security\Authorization\Policy\src\Microsoft.AspNetCore.Authorization.Policy.csproj" RefProjectPath="$(RepoRoot)src\Security\Authorization\Policy\ref\Microsoft.AspNetCore.Authorization.Policy.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.CookiePolicy" ProjectPath="$(RepoRoot)src\Security\CookiePolicy\src\Microsoft.AspNetCore.CookiePolicy.csproj" RefProjectPath="$(RepoRoot)src\Security\CookiePolicy\ref\Microsoft.AspNetCore.CookiePolicy.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ConcurrencyLimiter" ProjectPath="$(RepoRoot)src\Middleware\ConcurrencyLimiter\src\Microsoft.AspNetCore.ConcurrencyLimiter.csproj" RefProjectPath="$(RepoRoot)src\Middleware\ConcurrencyLimiter\ref\Microsoft.AspNetCore.ConcurrencyLimiter.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Cors" ProjectPath="$(RepoRoot)src\Middleware\CORS\src\Microsoft.AspNetCore.Cors.csproj" RefProjectPath="$(RepoRoot)src\Middleware\CORS\ref\Microsoft.AspNetCore.Cors.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Diagnostics.Abstractions" ProjectPath="$(RepoRoot)src\Middleware\Diagnostics.Abstractions\src\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Diagnostics.Abstractions\ref\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" ProjectPath="$(RepoRoot)src\Middleware\Diagnostics.EntityFrameworkCore\src\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Diagnostics.EntityFrameworkCore\ref\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Diagnostics" ProjectPath="$(RepoRoot)src\Middleware\Diagnostics\src\Microsoft.AspNetCore.Diagnostics.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Diagnostics\ref\Microsoft.AspNetCore.Diagnostics.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.HeaderPropagation" ProjectPath="$(RepoRoot)src\Middleware\HeaderPropagation\src\Microsoft.AspNetCore.HeaderPropagation.csproj" RefProjectPath="$(RepoRoot)src\Middleware\HeaderPropagation\ref\Microsoft.AspNetCore.HeaderPropagation.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" ProjectPath="$(RepoRoot)src\Middleware\HealthChecks.EntityFrameworkCore\src\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.csproj" RefProjectPath="$(RepoRoot)src\Middleware\HealthChecks.EntityFrameworkCore\ref\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" ProjectPath="$(RepoRoot)src\Middleware\HealthChecks\src\Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj" RefProjectPath="$(RepoRoot)src\Middleware\HealthChecks\ref\Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.HostFiltering" ProjectPath="$(RepoRoot)src\Middleware\HostFiltering\src\Microsoft.AspNetCore.HostFiltering.csproj" RefProjectPath="$(RepoRoot)src\Middleware\HostFiltering\ref\Microsoft.AspNetCore.HostFiltering.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.HttpOverrides" ProjectPath="$(RepoRoot)src\Middleware\HttpOverrides\src\Microsoft.AspNetCore.HttpOverrides.csproj" RefProjectPath="$(RepoRoot)src\Middleware\HttpOverrides\ref\Microsoft.AspNetCore.HttpOverrides.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.HttpsPolicy" ProjectPath="$(RepoRoot)src\Middleware\HttpsPolicy\src\Microsoft.AspNetCore.HttpsPolicy.csproj" RefProjectPath="$(RepoRoot)src\Middleware\HttpsPolicy\ref\Microsoft.AspNetCore.HttpsPolicy.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Localization.Routing" ProjectPath="$(RepoRoot)src\Middleware\Localization.Routing\src\Microsoft.AspNetCore.Localization.Routing.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Localization.Routing\ref\Microsoft.AspNetCore.Localization.Routing.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Localization" ProjectPath="$(RepoRoot)src\Middleware\Localization\src\Microsoft.AspNetCore.Localization.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Localization\ref\Microsoft.AspNetCore.Localization.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.MiddlewareAnalysis" ProjectPath="$(RepoRoot)src\Middleware\MiddlewareAnalysis\src\Microsoft.AspNetCore.MiddlewareAnalysis.csproj" RefProjectPath="$(RepoRoot)src\Middleware\MiddlewareAnalysis\ref\Microsoft.AspNetCore.MiddlewareAnalysis.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.NodeServices" ProjectPath="$(RepoRoot)src\Middleware\NodeServices\src\Microsoft.AspNetCore.NodeServices.csproj" RefProjectPath="$(RepoRoot)src\Middleware\NodeServices\ref\Microsoft.AspNetCore.NodeServices.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ResponseCaching.Abstractions" ProjectPath="$(RepoRoot)src\Middleware\ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Middleware\ResponseCaching.Abstractions\ref\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ResponseCaching" ProjectPath="$(RepoRoot)src\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj" RefProjectPath="$(RepoRoot)src\Middleware\ResponseCaching\ref\Microsoft.AspNetCore.ResponseCaching.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ResponseCompression" ProjectPath="$(RepoRoot)src\Middleware\ResponseCompression\src\Microsoft.AspNetCore.ResponseCompression.csproj" RefProjectPath="$(RepoRoot)src\Middleware\ResponseCompression\ref\Microsoft.AspNetCore.ResponseCompression.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Rewrite" ProjectPath="$(RepoRoot)src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Rewrite\ref\Microsoft.AspNetCore.Rewrite.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Session" ProjectPath="$(RepoRoot)src\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj" RefProjectPath="$(RepoRoot)src\Middleware\Session\ref\Microsoft.AspNetCore.Session.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SpaServices.Extensions" ProjectPath="$(RepoRoot)src\Middleware\SpaServices.Extensions\src\Microsoft.AspNetCore.SpaServices.Extensions.csproj" RefProjectPath="$(RepoRoot)src\Middleware\SpaServices.Extensions\ref\Microsoft.AspNetCore.SpaServices.Extensions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SpaServices" ProjectPath="$(RepoRoot)src\Middleware\SpaServices\src\Microsoft.AspNetCore.SpaServices.csproj" RefProjectPath="$(RepoRoot)src\Middleware\SpaServices\ref\Microsoft.AspNetCore.SpaServices.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.StaticFiles" ProjectPath="$(RepoRoot)src\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj" RefProjectPath="$(RepoRoot)src\Middleware\StaticFiles\ref\Microsoft.AspNetCore.StaticFiles.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.WebSockets" ProjectPath="$(RepoRoot)src\Middleware\WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj" RefProjectPath="$(RepoRoot)src\Middleware\WebSockets\ref\Microsoft.AspNetCore.WebSockets.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Razor.Runtime" ProjectPath="$(RepoRoot)src\Razor\Razor.Runtime\src\Microsoft.AspNetCore.Razor.Runtime.csproj" RefProjectPath="$(RepoRoot)src\Razor\Razor.Runtime\ref\Microsoft.AspNetCore.Razor.Runtime.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Razor" ProjectPath="$(RepoRoot)src\Razor\Razor\src\Microsoft.AspNetCore.Razor.csproj" RefProjectPath="$(RepoRoot)src\Razor\Razor\ref\Microsoft.AspNetCore.Razor.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Abstractions" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Abstractions\src\Microsoft.AspNetCore.Mvc.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Abstractions\ref\Microsoft.AspNetCore.Mvc.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.ApiExplorer" ProjectPath="$(RepoRoot)src\Mvc\Mvc.ApiExplorer\src\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.ApiExplorer\ref\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Core" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Core\ref\Microsoft.AspNetCore.Mvc.Core.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Cors" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Cors\src\Microsoft.AspNetCore.Mvc.Cors.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Cors\ref\Microsoft.AspNetCore.Mvc.Cors.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.DataAnnotations" ProjectPath="$(RepoRoot)src\Mvc\Mvc.DataAnnotations\src\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.DataAnnotations\ref\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Formatters.Json" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Formatters.Json\ref\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Formatters.Xml\src\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Formatters.Xml\ref\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Localization" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Localization\src\Microsoft.AspNetCore.Mvc.Localization.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Localization\ref\Microsoft.AspNetCore.Mvc.Localization.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" ProjectPath="$(RepoRoot)src\Mvc\Mvc.NewtonsoftJson\src\Microsoft.AspNetCore.Mvc.NewtonsoftJson.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.NewtonsoftJson\ref\Microsoft.AspNetCore.Mvc.NewtonsoftJson.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Razor.RuntimeCompilation\src\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Razor.RuntimeCompilation\ref\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.RazorPages" ProjectPath="$(RepoRoot)src\Mvc\Mvc.RazorPages\src\Microsoft.AspNetCore.Mvc.RazorPages.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.RazorPages\ref\Microsoft.AspNetCore.Mvc.RazorPages.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Razor" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Razor\src\Microsoft.AspNetCore.Mvc.Razor.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Razor\ref\Microsoft.AspNetCore.Mvc.Razor.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.TagHelpers" ProjectPath="$(RepoRoot)src\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.TagHelpers\ref\Microsoft.AspNetCore.Mvc.TagHelpers.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Testing" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.Testing\ref\Microsoft.AspNetCore.Mvc.Testing.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.ViewFeatures" ProjectPath="$(RepoRoot)src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc.ViewFeatures\ref\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc" ProjectPath="$(RepoRoot)src\Mvc\Mvc\src\Microsoft.AspNetCore.Mvc.csproj" RefProjectPath="$(RepoRoot)src\Mvc\Mvc\ref\Microsoft.AspNetCore.Mvc.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" ProjectPath="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureAD.UI\src\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj" RefProjectPath="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureAD.UI\ref\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" ProjectPath="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureADB2C.UI\src\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj" RefProjectPath="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureADB2C.UI\ref\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.AzureAppServices.HostingStartup" ProjectPath="$(RepoRoot)src\Azure\AzureAppServices.HostingStartup\src\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj" RefProjectPath="$(RepoRoot)src\Azure\AzureAppServices.HostingStartup\ref\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.AzureAppServicesIntegration" ProjectPath="$(RepoRoot)src\Azure\AzureAppServicesIntegration\src\Microsoft.AspNetCore.AzureAppServicesIntegration.csproj" RefProjectPath="$(RepoRoot)src\Azure\AzureAppServicesIntegration\ref\Microsoft.AspNetCore.AzureAppServicesIntegration.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Client.Core" ProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Client.Core\src\Microsoft.AspNetCore.SignalR.Client.Core.csproj" RefProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Client.Core\ref\Microsoft.AspNetCore.SignalR.Client.Core.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Client" ProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Client\src\Microsoft.AspNetCore.SignalR.Client.csproj" RefProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Client\ref\Microsoft.AspNetCore.SignalR.Client.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections.Client" ProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Http.Connections.Client\src\Microsoft.AspNetCore.Http.Connections.Client.csproj" RefProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Http.Connections.Client\ref\Microsoft.AspNetCore.Http.Connections.Client.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections.Common" ProjectPath="$(RepoRoot)src\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj" RefProjectPath="$(RepoRoot)src\SignalR\common\Http.Connections.Common\ref\Microsoft.AspNetCore.Http.Connections.Common.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections" ProjectPath="$(RepoRoot)src\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj" RefProjectPath="$(RepoRoot)src\SignalR\common\Http.Connections\ref\Microsoft.AspNetCore.Http.Connections.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.Json" ProjectPath="$(RepoRoot)src\SignalR\common\Protocols.Json\src\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj" RefProjectPath="$(RepoRoot)src\SignalR\common\Protocols.Json\ref\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" ProjectPath="$(RepoRoot)src\SignalR\common\Protocols.MessagePack\src\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj" RefProjectPath="$(RepoRoot)src\SignalR\common\Protocols.MessagePack\ref\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" ProjectPath="$(RepoRoot)src\SignalR\common\Protocols.NewtonsoftJson\src\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj" RefProjectPath="$(RepoRoot)src\SignalR\common\Protocols.NewtonsoftJson\ref\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Common" ProjectPath="$(RepoRoot)src\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj" RefProjectPath="$(RepoRoot)src\SignalR\common\SignalR.Common\ref\Microsoft.AspNetCore.SignalR.Common.csproj" />
|
||||
<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.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>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
<PropertyGroup Label="Version settings">
|
||||
<AspNetCoreMajorVersion>3</AspNetCoreMajorVersion>
|
||||
<AspNetCoreMinorVersion>1</AspNetCoreMinorVersion>
|
||||
<AspNetCorePatchVersion>0</AspNetCorePatchVersion>
|
||||
<PreReleasePreviewNumber>3</PreReleasePreviewNumber>
|
||||
<AspNetCorePatchVersion>2</AspNetCorePatchVersion>
|
||||
<PreReleasePreviewNumber>0</PreReleasePreviewNumber>
|
||||
<!--
|
||||
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
|
||||
-->
|
||||
|
|
@ -19,21 +19,21 @@
|
|||
<IncludePreReleaseLabelInPackageVersion Condition=" '$(DotNetFinalVersionKind)' == 'release' ">false</IncludePreReleaseLabelInPackageVersion>
|
||||
<PreReleaseVersionLabel>preview$(PreReleasePreviewNumber)</PreReleaseVersionLabel>
|
||||
<PreReleaseBrandingLabel>Preview $(PreReleasePreviewNumber)</PreReleaseBrandingLabel>
|
||||
<!-- Blazor Client packages will not RTM with 3.1 -->
|
||||
<BlazorClientPreReleasePreviewNumber>4</BlazorClientPreReleasePreviewNumber>
|
||||
<BlazorClientPreReleaseVersionLabel>preview$(BlazorClientPreReleasePreviewNumber)</BlazorClientPreReleaseVersionLabel>
|
||||
<AspNetCoreMajorMinorVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)</AspNetCoreMajorMinorVersion>
|
||||
<!-- The following property may need to be updated if ingesting new versions of Extensions.Refs package. The package override version is used to create PackageOverrides.txt in the targeting pack. -->
|
||||
<MicrosoftInternalExtensionsRefsPackageOverrideVersion>3.1.0</MicrosoftInternalExtensionsRefsPackageOverrideVersion>
|
||||
<!-- Additional assembly attributes are already configured to include the source revision ID. -->
|
||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||
<!--
|
||||
Until package baselines are updated (see aspnet/AspNetCore#12702), ignore them and PatchConfig.props. This also
|
||||
gives us time to build the entire repo and settle the infrastructure. Do _not_ do this when stabilizing versions.
|
||||
-->
|
||||
<DisableServicingFeatures Condition=" '$(DisableServicingFeatures)' == '' AND '$(StabilizePackageVersion)' != 'true' ">true</DisableServicingFeatures>
|
||||
<!-- Servicing builds have different characteristics for the way dependencies, baselines, and versions are handled. -->
|
||||
<IsServicingBuild Condition=" '$(DisableServicingFeatures)' != 'true' AND '$(PreReleaseVersionLabel)' == 'servicing' ">true</IsServicingBuild>
|
||||
<!-- Servicing builds have different characteristics for the way dependencies, framework references, and versions are handled. -->
|
||||
<IsServicingBuild Condition=" '$(PreReleaseVersionLabel)' == 'servicing' ">true</IsServicingBuild>
|
||||
<VersionPrefix>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).$(AspNetCorePatchVersion)</VersionPrefix>
|
||||
<!-- TargetingPackVersionPrefix is used by projects, like .deb and .rpm, which use slightly different version formats. -->
|
||||
<TargetingPackVersionPrefix>$(VersionPrefix)</TargetingPackVersionPrefix>
|
||||
<!-- Targeting packs do not produce patch versions in servicing builds. No API changes are allowed in patches. -->
|
||||
<TargetingPackVersionPrefix Condition="'$(IsServicingBuild)' == 'true'">$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0</TargetingPackVersionPrefix>
|
||||
<TargetingPackVersionPrefix Condition="'$(IsTargetingPackBuilding)' != 'true'">$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).2</TargetingPackVersionPrefix>
|
||||
<ExperimentalVersionPrefix>0.3.$(AspNetCorePatchVersion)</ExperimentalVersionPrefix>
|
||||
<!-- ANCM versioning is intentionally 10 + AspNetCoreMajorVersion because earlier versions of ANCM shipped as 8.x. -->
|
||||
<AspNetCoreModuleVersionMajor>$([MSBuild]::Add(10, $(AspNetCoreMajorVersion)))</AspNetCoreModuleVersionMajor>
|
||||
|
|
@ -62,14 +62,15 @@
|
|||
-->
|
||||
<PropertyGroup Label="Automated">
|
||||
<!-- Packages from dotnet/arcade -->
|
||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19577.5</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19607.3</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<!-- Packages from dotnet/roslyn -->
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.4.0-beta4-19569-03</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.4.1-beta4-19614-01</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<!-- Packages from dotnet/core-setup -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.1.1-servicing.19575.1</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>3.1.1-servicing.19576.9</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.1.2</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>3.1.2-servicing.20067.4</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>3.1.0</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.1.1-servicing.19575.1</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<MicrosoftAspNetCoreAppRefPackageVersion>3.1.2</MicrosoftAspNetCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.1.2</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<NETStandardLibraryRefPackageVersion>2.1.0</NETStandardLibraryRefPackageVersion>
|
||||
<!-- Packages from dotnet/corefx -->
|
||||
<MicrosoftBclAsyncInterfacesPackageVersion>1.1.0</MicrosoftBclAsyncInterfacesPackageVersion>
|
||||
|
|
@ -91,7 +92,7 @@
|
|||
<SystemSecurityPrincipalWindowsPackageVersion>4.7.0</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.7.0</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.7.0</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>4.7.0</SystemTextJsonPackageVersion>
|
||||
<SystemTextJsonPackageVersion>4.7.1</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.7.0</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>4.7.0</SystemWindowsExtensionsPackageVersion>
|
||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
|
|
@ -99,80 +100,80 @@
|
|||
<!-- Packages from aspnet/Blazor -->
|
||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||
<!-- Packages from aspnet/Extensions -->
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.1.0-rtm.19575.5</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.1.0-rtm.19575.5</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.1.0-rtm.19575.5</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.1.0</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.1.0</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.1.0</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.1.0</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.1.0</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.1.0</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.1.0</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.1.0</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.1.0</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.1.0</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.1.0</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.1.0</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.1.0</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.1.0</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.1.0</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.1.0</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.1.0</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.1.0</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.1.0</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.1.0</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.1.0</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.1.0</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.1.0</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.1.0</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.1.0</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.1.0</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.1.0</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.1.0</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.1.0</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.1.0</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.1.0</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.1.0</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.1.0</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.1.0</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.1.0</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.1.0</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.1.0</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.1.0</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.1.2-servicing.20067.6</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.1.2-servicing.20067.6</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.1.2-servicing.20067.6</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.1.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.1.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.1.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.1.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.1.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.1.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.1.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.1.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.1.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.1.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.1.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.1.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.1.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.1.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.1.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.1.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.1.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.1.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.1.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.1.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.1.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.1.2</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.1.2</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.1.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.1.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.1.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.1.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.1.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.1.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.1.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.1.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.1.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.1.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.1.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.1.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.1.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.1.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.1.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.1.0-rtm.19565.4</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.1.0</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.1.0-preview4.19575.5</MonoWebAssemblyInteropPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.1.2</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.1.2-preview4.20067.6</MonoWebAssemblyInteropPackageVersion>
|
||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||
<dotnetefPackageVersion>3.1.0</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.1.0</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.1.0</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<dotnetefPackageVersion>3.1.2</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.1.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.1.2</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.1.0-rtm.19573.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.1.0-rtm.19573.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.1.0-rtm.19573.1</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>3.1.0-rtm.19573.1</MicrosoftNETSdkRazorPackageVersion>
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.1.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.1.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.1.2</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>3.1.2</MicrosoftNETSdkRazorPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
|
||||
|
|
@ -189,6 +190,7 @@
|
|||
All Runtime.$rid packages should have the same version.
|
||||
-->
|
||||
<MicrosoftNETCoreAppRuntimeVersion>$(MicrosoftNETCoreAppRuntimewinx64PackageVersion)</MicrosoftNETCoreAppRuntimeVersion>
|
||||
<MicrosoftAspNetCoreAppVersion>3.1.2</MicrosoftAspNetCoreAppVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Manual">
|
||||
<!-- Build tool dependencies -->
|
||||
|
|
@ -264,10 +266,19 @@
|
|||
<XunitExtensibilityCorePackageVersion>$(XunitVersion)</XunitExtensibilityCorePackageVersion>
|
||||
<XunitExtensibilityExecutionPackageVersion>$(XunitVersion)</XunitExtensibilityExecutionPackageVersion>
|
||||
<MicrosoftDataSqlClientPackageVersion>1.0.19249.1</MicrosoftDataSqlClientPackageVersion>
|
||||
|
||||
<!-- AspNetCore 3.1 package versions -->
|
||||
<IgnitorPackageVersion>3.1.2-servicing.20068.1</IgnitorPackageVersion>
|
||||
<MicrosoftAspNetCoreComponentsPackageVersion>3.1.2</MicrosoftAspNetCoreComponentsPackageVersion>
|
||||
<MicrosoftAspNetCoreComponentsAuthorizationPackageVersion>$(MicrosoftAspNetCoreComponentsPackageVersion)</MicrosoftAspNetCoreComponentsAuthorizationPackageVersion>
|
||||
<MicrosoftAspNetCoreComponentsFormsPackageVersion>$(MicrosoftAspNetCoreComponentsPackageVersion)</MicrosoftAspNetCoreComponentsFormsPackageVersion>
|
||||
<MicrosoftAspNetCoreComponentsWebPackageVersion>$(MicrosoftAspNetCoreComponentsPackageVersion)</MicrosoftAspNetCoreComponentsWebPackageVersion>
|
||||
<MicrosoftAspNetCoreMvcPackageVersion>$(MicrosoftAspNetCoreComponentsPackageVersion)</MicrosoftAspNetCoreMvcPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Restore feeds -->
|
||||
<PropertyGroup Label="Restore feeds">
|
||||
<!-- In an orchestrated build, this may be overridden to other Azure feeds. -->
|
||||
<DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl>
|
||||
<DotNetPrivateAssetRootUrl Condition="'$(DotNetPrivateAssetRootUrl)'==''">https://dotnetclimsrc.blob.core.windows.net/dotnet/</DotNetPrivateAssetRootUrl>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"sdk": {
|
||||
"version": "3.1.100"
|
||||
"version": "3.1.102-servicing-014873"
|
||||
},
|
||||
"tools": {
|
||||
"dotnet": "3.1.100",
|
||||
"dotnet": "3.1.102-servicing-014873",
|
||||
"runtimes": {
|
||||
"dotnet/x64": [
|
||||
"$(MicrosoftNETCoreAppInternalPackageVersion)"
|
||||
|
|
|
|||
|
|
@ -1,111 +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.Linq;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
internal static class ComponentFacts
|
||||
{
|
||||
public static bool IsAnyParameter(ComponentSymbols symbols, IPropertySymbol property)
|
||||
{
|
||||
if (symbols == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(symbols));
|
||||
}
|
||||
|
||||
if (property == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(property));
|
||||
}
|
||||
|
||||
return property.GetAttributes().Any(a =>
|
||||
{
|
||||
return a.AttributeClass == symbols.ParameterAttribute || a.AttributeClass == symbols.CascadingParameterAttribute;
|
||||
});
|
||||
}
|
||||
|
||||
public static bool IsParameter(ComponentSymbols symbols, IPropertySymbol property)
|
||||
{
|
||||
if (symbols == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(symbols));
|
||||
}
|
||||
|
||||
if (property == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(property));
|
||||
}
|
||||
|
||||
return property.GetAttributes().Any(a => a.AttributeClass == symbols.ParameterAttribute);
|
||||
}
|
||||
|
||||
public static bool IsParameterWithCaptureUnmatchedValues(ComponentSymbols symbols, IPropertySymbol property)
|
||||
{
|
||||
if (symbols == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(symbols));
|
||||
}
|
||||
|
||||
if (property == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(property));
|
||||
}
|
||||
|
||||
var attribute = property.GetAttributes().FirstOrDefault(a => a.AttributeClass == symbols.ParameterAttribute);
|
||||
if (attribute == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (var kvp in attribute.NamedArguments)
|
||||
{
|
||||
if (string.Equals(kvp.Key, ComponentsApi.ParameterAttribute.CaptureUnmatchedValues, StringComparison.Ordinal))
|
||||
{
|
||||
return kvp.Value.Value as bool? ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsCascadingParameter(ComponentSymbols symbols, IPropertySymbol property)
|
||||
{
|
||||
if (symbols == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(symbols));
|
||||
}
|
||||
|
||||
if (property == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(property));
|
||||
}
|
||||
|
||||
return property.GetAttributes().Any(a => a.AttributeClass == symbols.CascadingParameterAttribute);
|
||||
}
|
||||
|
||||
public static bool IsComponent(ComponentSymbols symbols, Compilation compilation, INamedTypeSymbol type)
|
||||
{
|
||||
if (symbols is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(symbols));
|
||||
}
|
||||
|
||||
if (type is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(type));
|
||||
}
|
||||
|
||||
var conversion = compilation.ClassifyConversion(symbols.IComponentType, type);
|
||||
if (!conversion.Exists || !conversion.IsExplicit)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +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.Immutable;
|
||||
using Microsoft.AspNetCore.Components.Analyzers;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
|
||||
namespace Microsoft.Extensions.Internal
|
||||
{
|
||||
/// <summary>
|
||||
/// This API supports infrastructure and is not intended to be used
|
||||
/// directly from your code. This API may change or be removed in future releases.
|
||||
/// </summary>
|
||||
[DiagnosticAnalyzer(LanguageNames.CSharp)]
|
||||
public class ComponentInternalUsageDiagnosticAnalyzer : DiagnosticAnalyzer
|
||||
{
|
||||
private readonly InternalUsageAnalyzer _inner;
|
||||
|
||||
public ComponentInternalUsageDiagnosticAnalyzer()
|
||||
{
|
||||
// We don't have in *internal* attribute in Blazor.
|
||||
_inner = new InternalUsageAnalyzer(IsInInternalNamespace, hasInternalAttribute: null, DiagnosticDescriptors.DoNotUseRenderTreeTypes);
|
||||
}
|
||||
|
||||
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(DiagnosticDescriptors.DoNotUseRenderTreeTypes);
|
||||
|
||||
public override void Initialize(AnalysisContext context)
|
||||
{
|
||||
_inner.Register(context);
|
||||
}
|
||||
|
||||
private static bool IsInInternalNamespace(ISymbol symbol)
|
||||
{
|
||||
if (symbol?.ContainingNamespace?.ToDisplayString() is string ns)
|
||||
{
|
||||
return string.Equals(ns, "Microsoft.AspNetCore.Components.RenderTree");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,125 +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.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
[DiagnosticAnalyzer(LanguageNames.CSharp)]
|
||||
public class ComponentParameterAnalyzer : DiagnosticAnalyzer
|
||||
{
|
||||
public ComponentParameterAnalyzer()
|
||||
{
|
||||
SupportedDiagnostics = ImmutableArray.Create(new[]
|
||||
{
|
||||
DiagnosticDescriptors.ComponentParametersShouldBePublic,
|
||||
DiagnosticDescriptors.ComponentParameterSettersShouldBePublic,
|
||||
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesMustBeUnique,
|
||||
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesHasWrongType,
|
||||
});
|
||||
}
|
||||
|
||||
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
|
||||
|
||||
public override void Initialize(AnalysisContext context)
|
||||
{
|
||||
context.RegisterCompilationStartAction(context =>
|
||||
{
|
||||
if (!ComponentSymbols.TryCreate(context.Compilation, out var symbols))
|
||||
{
|
||||
// Types we need are not defined.
|
||||
return;
|
||||
}
|
||||
|
||||
// This operates per-type because one of the validations we need has to look for duplicates
|
||||
// defined on the same type.
|
||||
context.RegisterSymbolStartAction(context =>
|
||||
{
|
||||
var properties = new List<IPropertySymbol>();
|
||||
|
||||
var type = (INamedTypeSymbol)context.Symbol;
|
||||
foreach (var member in type.GetMembers())
|
||||
{
|
||||
if (member is IPropertySymbol property && ComponentFacts.IsParameter(symbols, property))
|
||||
{
|
||||
// Annotated with [Parameter]. We ignore [CascadingParameter]'s because they don't interact with tooling and don't currently have any analyzer restrictions.
|
||||
properties.Add(property);
|
||||
}
|
||||
}
|
||||
|
||||
if (properties.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
context.RegisterSymbolEndAction(context =>
|
||||
{
|
||||
var captureUnmatchedValuesParameters = new List<IPropertySymbol>();
|
||||
|
||||
// Per-property validations
|
||||
foreach (var property in properties)
|
||||
{
|
||||
var propertyLocation = property.Locations.FirstOrDefault();
|
||||
if (propertyLocation == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (property.DeclaredAccessibility != Accessibility.Public)
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
DiagnosticDescriptors.ComponentParametersShouldBePublic,
|
||||
propertyLocation,
|
||||
property.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)));
|
||||
}
|
||||
else if (property.SetMethod?.DeclaredAccessibility != Accessibility.Public)
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
DiagnosticDescriptors.ComponentParameterSettersShouldBePublic,
|
||||
propertyLocation,
|
||||
property.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)));
|
||||
}
|
||||
|
||||
if (ComponentFacts.IsParameterWithCaptureUnmatchedValues(symbols, property))
|
||||
{
|
||||
captureUnmatchedValuesParameters.Add(property);
|
||||
|
||||
// Check the type, we need to be able to assign a Dictionary<string, object>
|
||||
var conversion = context.Compilation.ClassifyConversion(symbols.ParameterCaptureUnmatchedValuesRuntimeType, property.Type);
|
||||
if (!conversion.Exists || conversion.IsExplicit)
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesHasWrongType,
|
||||
propertyLocation,
|
||||
property.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat),
|
||||
property.Type.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat),
|
||||
symbols.ParameterCaptureUnmatchedValuesRuntimeType.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the type defines multiple CaptureUnmatchedValues parameters. Doing this outside the loop means we place the
|
||||
// errors on the type.
|
||||
if (captureUnmatchedValuesParameters.Count > 1)
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesMustBeUnique,
|
||||
context.Symbol.Locations[0],
|
||||
type.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat),
|
||||
Environment.NewLine,
|
||||
string.Join(
|
||||
Environment.NewLine,
|
||||
captureUnmatchedValuesParameters.Select(p => p.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)).OrderBy(n => n))));
|
||||
}
|
||||
});
|
||||
}, SymbolKind.NamedType);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,114 +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.Immutable;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using Microsoft.CodeAnalysis.Operations;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
[DiagnosticAnalyzer(LanguageNames.CSharp)]
|
||||
public class ComponentParameterUsageAnalyzer : DiagnosticAnalyzer
|
||||
{
|
||||
public ComponentParameterUsageAnalyzer()
|
||||
{
|
||||
SupportedDiagnostics = ImmutableArray.Create(new[]
|
||||
{
|
||||
DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent,
|
||||
});
|
||||
}
|
||||
|
||||
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
|
||||
|
||||
public override void Initialize(AnalysisContext context)
|
||||
{
|
||||
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
|
||||
context.RegisterCompilationStartAction(context =>
|
||||
{
|
||||
if (!ComponentSymbols.TryCreate(context.Compilation, out var symbols))
|
||||
{
|
||||
// Types we need are not defined.
|
||||
return;
|
||||
}
|
||||
|
||||
context.RegisterOperationBlockStartAction(startBlockContext =>
|
||||
{
|
||||
startBlockContext.RegisterOperationAction(context =>
|
||||
{
|
||||
IOperation leftHandSide;
|
||||
|
||||
if (context.Operation is IAssignmentOperation assignmentOperation)
|
||||
{
|
||||
leftHandSide = assignmentOperation.Target;
|
||||
}
|
||||
else
|
||||
{
|
||||
var incrementOrDecrementOperation = (IIncrementOrDecrementOperation)context.Operation;
|
||||
leftHandSide = incrementOrDecrementOperation.Target;
|
||||
}
|
||||
|
||||
if (leftHandSide == null)
|
||||
{
|
||||
// Malformed assignment, no left hand side.
|
||||
return;
|
||||
}
|
||||
|
||||
if (leftHandSide.Kind != OperationKind.PropertyReference)
|
||||
{
|
||||
// We don't want to capture situations where a user does
|
||||
// MyOtherProperty = aComponent.SomeParameter
|
||||
return;
|
||||
}
|
||||
|
||||
var propertyReference = (IPropertyReferenceOperation)leftHandSide;
|
||||
var componentProperty = (IPropertySymbol)propertyReference.Member;
|
||||
|
||||
if (!ComponentFacts.IsParameter(symbols, componentProperty))
|
||||
{
|
||||
// This is not a property reference that we care about, it is not decorated with [Parameter].
|
||||
return;
|
||||
}
|
||||
|
||||
var propertyContainingType = componentProperty.ContainingType;
|
||||
if (!ComponentFacts.IsComponent(symbols, context.Compilation, propertyContainingType))
|
||||
{
|
||||
// Someone referenced a property as [Parameter] inside something that is not a component.
|
||||
return;
|
||||
}
|
||||
|
||||
var assignmentContainingType = startBlockContext.OwningSymbol?.ContainingType;
|
||||
if (assignmentContainingType == null)
|
||||
{
|
||||
// Assignment location has no containing type. Most likely we're operating on malformed code, don't try and validate.
|
||||
return;
|
||||
}
|
||||
|
||||
var conversion = context.Compilation.ClassifyConversion(propertyContainingType, assignmentContainingType);
|
||||
if (conversion.Exists && conversion.IsIdentity)
|
||||
{
|
||||
// The assignment is taking place inside of the declaring component.
|
||||
return;
|
||||
}
|
||||
|
||||
if (conversion.Exists && conversion.IsExplicit)
|
||||
{
|
||||
// The assignment is taking place within the components type hierarchy. This means the user is setting this in a supported
|
||||
// scenario.
|
||||
return;
|
||||
}
|
||||
|
||||
// At this point the user is referencing a component parameter outside of its declaring class.
|
||||
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent,
|
||||
propertyReference.Syntax.GetLocation(),
|
||||
propertyReference.Member.Name));
|
||||
}, OperationKind.SimpleAssignment, OperationKind.CompoundAssignment, OperationKind.CoalesceAssignment, OperationKind.Increment, OperationKind.Decrement);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,88 +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.Immutable;
|
||||
using System.Composition;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CodeActions;
|
||||
using Microsoft.CodeAnalysis.CodeFixes;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(ComponentParametersShouldBePublicCodeFixProvider)), Shared]
|
||||
public class ComponentParametersShouldBePublicCodeFixProvider : CodeFixProvider
|
||||
{
|
||||
private static readonly LocalizableString Title = new LocalizableResourceString(nameof(Resources.ComponentParametersShouldBePublic_FixTitle), Resources.ResourceManager, typeof(Resources));
|
||||
|
||||
public override ImmutableArray<string> FixableDiagnosticIds
|
||||
=> ImmutableArray.Create(DiagnosticDescriptors.ComponentParametersShouldBePublic.Id);
|
||||
|
||||
public sealed override FixAllProvider GetFixAllProvider()
|
||||
{
|
||||
// See https://github.com/dotnet/roslyn/blob/master/docs/analyzers/FixAllProvider.md for more information on Fix All Providers
|
||||
return WellKnownFixAllProviders.BatchFixer;
|
||||
}
|
||||
|
||||
public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
|
||||
{
|
||||
var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
|
||||
var diagnostic = context.Diagnostics.First();
|
||||
var diagnosticSpan = diagnostic.Location.SourceSpan;
|
||||
|
||||
// Find the type declaration identified by the diagnostic.
|
||||
var declaration = root.FindToken(diagnosticSpan.Start).Parent.AncestorsAndSelf().OfType<PropertyDeclarationSyntax>().First();
|
||||
|
||||
// Register a code action that will invoke the fix.
|
||||
var title = Title.ToString();
|
||||
context.RegisterCodeFix(
|
||||
CodeAction.Create(
|
||||
title: title,
|
||||
createChangedDocument: c => GetTransformedDocumentAsync(context.Document, root, declaration),
|
||||
equivalenceKey: title),
|
||||
diagnostic);
|
||||
}
|
||||
|
||||
private Task<Document> GetTransformedDocumentAsync(
|
||||
Document document,
|
||||
SyntaxNode root,
|
||||
PropertyDeclarationSyntax declarationNode)
|
||||
{
|
||||
var updatedDeclarationNode = HandlePropertyDeclaration(declarationNode);
|
||||
var newSyntaxRoot = root.ReplaceNode(declarationNode, updatedDeclarationNode);
|
||||
return Task.FromResult(document.WithSyntaxRoot(newSyntaxRoot));
|
||||
}
|
||||
|
||||
private SyntaxNode HandlePropertyDeclaration(PropertyDeclarationSyntax node)
|
||||
{
|
||||
TypeSyntax type = node.Type;
|
||||
if (type == null || type.IsMissing)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var newModifiers = node.Modifiers;
|
||||
for (var i = 0; i < node.Modifiers.Count; i++)
|
||||
{
|
||||
var modifier = node.Modifiers[i];
|
||||
if (modifier.IsKind(SyntaxKind.PrivateKeyword) ||
|
||||
modifier.IsKind(SyntaxKind.ProtectedKeyword) ||
|
||||
modifier.IsKind(SyntaxKind.InternalKeyword) ||
|
||||
|
||||
// We also remove public in case the user has written something totally backwards such as private public protected Foo
|
||||
modifier.IsKind(SyntaxKind.PublicKeyword))
|
||||
{
|
||||
newModifiers = newModifiers.Remove(modifier);
|
||||
}
|
||||
}
|
||||
|
||||
var publicModifier = SyntaxFactory.Token(SyntaxKind.PublicKeyword);
|
||||
newModifiers = newModifiers.Insert(0, publicModifier);
|
||||
node = node.WithModifiers(newModifiers);
|
||||
return node;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,79 +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.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
internal class ComponentSymbols
|
||||
{
|
||||
public static bool TryCreate(Compilation compilation, out ComponentSymbols symbols)
|
||||
{
|
||||
if (compilation == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(compilation));
|
||||
}
|
||||
|
||||
var parameterAttribute = compilation.GetTypeByMetadataName(ComponentsApi.ParameterAttribute.MetadataName);
|
||||
if (parameterAttribute == null)
|
||||
{
|
||||
symbols = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
var cascadingParameterAttribute = compilation.GetTypeByMetadataName(ComponentsApi.CascadingParameterAttribute.MetadataName);
|
||||
if (cascadingParameterAttribute == null)
|
||||
{
|
||||
symbols = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
var icomponentType = compilation.GetTypeByMetadataName(ComponentsApi.IComponent.MetadataName);
|
||||
if (icomponentType == null)
|
||||
{
|
||||
symbols = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
var dictionary = compilation.GetTypeByMetadataName("System.Collections.Generic.Dictionary`2");
|
||||
var @string = compilation.GetSpecialType(SpecialType.System_String);
|
||||
var @object = compilation.GetSpecialType(SpecialType.System_Object);
|
||||
if (dictionary == null || @string == null || @object == null)
|
||||
{
|
||||
symbols = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
var parameterCaptureUnmatchedValuesRuntimeType = dictionary.Construct(@string, @object);
|
||||
|
||||
symbols = new ComponentSymbols(
|
||||
parameterAttribute,
|
||||
cascadingParameterAttribute,
|
||||
parameterCaptureUnmatchedValuesRuntimeType,
|
||||
icomponentType);
|
||||
return true;
|
||||
}
|
||||
|
||||
private ComponentSymbols(
|
||||
INamedTypeSymbol parameterAttribute,
|
||||
INamedTypeSymbol cascadingParameterAttribute,
|
||||
INamedTypeSymbol parameterCaptureUnmatchedValuesRuntimeType,
|
||||
INamedTypeSymbol icomponentType)
|
||||
{
|
||||
ParameterAttribute = parameterAttribute;
|
||||
CascadingParameterAttribute = cascadingParameterAttribute;
|
||||
ParameterCaptureUnmatchedValuesRuntimeType = parameterCaptureUnmatchedValuesRuntimeType;
|
||||
IComponentType = icomponentType;
|
||||
}
|
||||
|
||||
public INamedTypeSymbol ParameterAttribute { get; }
|
||||
|
||||
// Dictionary<string, object>
|
||||
public INamedTypeSymbol ParameterCaptureUnmatchedValuesRuntimeType { get; }
|
||||
|
||||
public INamedTypeSymbol CascadingParameterAttribute { get; }
|
||||
|
||||
public INamedTypeSymbol IComponentType { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
// Constants for type and method names used in code-generation
|
||||
// Keep these in sync with the actual definitions
|
||||
internal static class ComponentsApi
|
||||
{
|
||||
public static readonly string AssemblyName = "Microsoft.AspNetCore.Components";
|
||||
|
||||
public static class ParameterAttribute
|
||||
{
|
||||
public static readonly string FullTypeName = "Microsoft.AspNetCore.Components.ParameterAttribute";
|
||||
public static readonly string MetadataName = FullTypeName;
|
||||
|
||||
public static readonly string CaptureUnmatchedValues = "CaptureUnmatchedValues";
|
||||
}
|
||||
|
||||
public static class CascadingParameterAttribute
|
||||
{
|
||||
public static readonly string FullTypeName = "Microsoft.AspNetCore.Components.CascadingParameterAttribute";
|
||||
public static readonly string MetadataName = FullTypeName;
|
||||
}
|
||||
|
||||
public static class IComponent
|
||||
{
|
||||
public static readonly string FullTypeName = "Microsoft.AspNetCore.Components.IComponent";
|
||||
public static readonly string MetadataName = FullTypeName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,68 +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.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
internal static class DiagnosticDescriptors
|
||||
{
|
||||
// Note: The Razor Compiler (including Components features) use the RZ prefix for diagnostics, so there's currently
|
||||
// no change of clashing between that and the BL prefix used here.
|
||||
//
|
||||
// Tracking https://github.com/aspnet/AspNetCore/issues/10382 to rationalize this
|
||||
public static readonly DiagnosticDescriptor ComponentParameterSettersShouldBePublic = new DiagnosticDescriptor(
|
||||
"BL0001",
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Title), Resources.ResourceManager, typeof(Resources)),
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Format), Resources.ResourceManager, typeof(Resources)),
|
||||
"Encapsulation",
|
||||
DiagnosticSeverity.Error,
|
||||
isEnabledByDefault: true,
|
||||
description: new LocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Description), Resources.ResourceManager, typeof(Resources)));
|
||||
|
||||
public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesMustBeUnique = new DiagnosticDescriptor(
|
||||
"BL0002",
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title), Resources.ResourceManager, typeof(Resources)),
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format), Resources.ResourceManager, typeof(Resources)),
|
||||
"Usage",
|
||||
DiagnosticSeverity.Warning,
|
||||
isEnabledByDefault: true,
|
||||
description: new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description), Resources.ResourceManager, typeof(Resources)));
|
||||
|
||||
public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesHasWrongType = new DiagnosticDescriptor(
|
||||
"BL0003",
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Title), Resources.ResourceManager, typeof(Resources)),
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Format), Resources.ResourceManager, typeof(Resources)),
|
||||
"Usage",
|
||||
DiagnosticSeverity.Warning,
|
||||
isEnabledByDefault: true,
|
||||
description: new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Description), Resources.ResourceManager, typeof(Resources)));
|
||||
|
||||
public static readonly DiagnosticDescriptor ComponentParametersShouldBePublic = new DiagnosticDescriptor(
|
||||
"BL0004",
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterShouldBePublic_Title), Resources.ResourceManager, typeof(Resources)),
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterShouldBePublic_Format), Resources.ResourceManager, typeof(Resources)),
|
||||
"Encapsulation",
|
||||
DiagnosticSeverity.Error,
|
||||
isEnabledByDefault: true,
|
||||
description: new LocalizableResourceString(nameof(Resources.ComponentParametersShouldBePublic_Description), Resources.ResourceManager, typeof(Resources)));
|
||||
|
||||
public static readonly DiagnosticDescriptor ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent = new DiagnosticDescriptor(
|
||||
"BL0005",
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Title), Resources.ResourceManager, typeof(Resources)),
|
||||
new LocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Format), Resources.ResourceManager, typeof(Resources)),
|
||||
"Usage",
|
||||
DiagnosticSeverity.Warning,
|
||||
isEnabledByDefault: true,
|
||||
description: new LocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Description), Resources.ResourceManager, typeof(Resources)));
|
||||
|
||||
public static readonly DiagnosticDescriptor DoNotUseRenderTreeTypes = new DiagnosticDescriptor(
|
||||
"BL0006",
|
||||
new LocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Title), Resources.ResourceManager, typeof(Resources)),
|
||||
new LocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Description), Resources.ResourceManager, typeof(Resources)),
|
||||
"Usage",
|
||||
DiagnosticSeverity.Warning,
|
||||
isEnabledByDefault: true,
|
||||
description: new LocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Description), Resources.ResourceManager, typeof(Resources)));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,126 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
|
||||
namespace Microsoft.Extensions.Internal
|
||||
{
|
||||
internal class InternalUsageAnalyzer
|
||||
{
|
||||
private readonly Func<ISymbol, bool> _isInternalNamespace;
|
||||
private readonly Func<ISymbol, bool> _hasInternalAttribute;
|
||||
private readonly DiagnosticDescriptor _descriptor;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="InternalUsageAnalyzer" />. The creator should provide delegates to help determine whether
|
||||
/// a given symbol is internal or not, and a <see cref="DiagnosticDescriptor" /> to create errors.
|
||||
/// </summary>
|
||||
/// <param name="isInInternalNamespace">The delegate used to check if a symbol belongs to an internal namespace.</param>
|
||||
/// <param name="hasInternalAttribute">The delegate used to check if a symbol has an internal attribute.</param>
|
||||
/// <param name="descriptor">
|
||||
/// The <see cref="DiagnosticDescriptor" /> used to create errors. The error message should expect a single parameter
|
||||
/// used for the display name of the member.
|
||||
/// </param>
|
||||
public InternalUsageAnalyzer(Func<ISymbol, bool> isInInternalNamespace, Func<ISymbol, bool> hasInternalAttribute, DiagnosticDescriptor descriptor)
|
||||
{
|
||||
_isInternalNamespace = isInInternalNamespace ?? new Func<ISymbol, bool>((_) => false);
|
||||
_hasInternalAttribute = hasInternalAttribute ?? new Func<ISymbol, bool>((_) => false);
|
||||
_descriptor = descriptor ?? throw new ArgumentNullException(nameof(descriptor));
|
||||
}
|
||||
|
||||
public void Register(AnalysisContext context)
|
||||
{
|
||||
context.EnableConcurrentExecution();
|
||||
context.RegisterSyntaxNodeAction(AnalyzeNode,
|
||||
SyntaxKind.SimpleMemberAccessExpression,
|
||||
SyntaxKind.ObjectCreationExpression,
|
||||
SyntaxKind.ClassDeclaration,
|
||||
SyntaxKind.Parameter);
|
||||
}
|
||||
|
||||
private void AnalyzeNode(SyntaxNodeAnalysisContext context)
|
||||
{
|
||||
switch (context.Node)
|
||||
{
|
||||
case MemberAccessExpressionSyntax memberAccessSyntax:
|
||||
{
|
||||
if (context.SemanticModel.GetSymbolInfo(context.Node, context.CancellationToken).Symbol is ISymbol symbol &&
|
||||
symbol.ContainingAssembly != context.Compilation.Assembly)
|
||||
{
|
||||
var containingType = symbol.ContainingType;
|
||||
|
||||
if (HasInternalAttribute(symbol))
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(_descriptor, memberAccessSyntax.Name.GetLocation(), $"{containingType}.{symbol.Name}"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsInInternalNamespace(containingType) || HasInternalAttribute(containingType))
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(_descriptor, memberAccessSyntax.Name.GetLocation(), containingType));
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
case ObjectCreationExpressionSyntax creationSyntax:
|
||||
{
|
||||
if (context.SemanticModel.GetSymbolInfo(context.Node, context.CancellationToken).Symbol is ISymbol symbol &&
|
||||
symbol.ContainingAssembly != context.Compilation.Assembly)
|
||||
{
|
||||
var containingType = symbol.ContainingType;
|
||||
|
||||
if (HasInternalAttribute(symbol))
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(_descriptor, creationSyntax.GetLocation(), containingType));
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsInInternalNamespace(containingType) || HasInternalAttribute(containingType))
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(_descriptor, creationSyntax.Type.GetLocation(), containingType));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
case ClassDeclarationSyntax declarationSyntax:
|
||||
{
|
||||
if (context.SemanticModel.GetDeclaredSymbol(declarationSyntax)?.BaseType is ISymbol symbol &&
|
||||
symbol.ContainingAssembly != context.Compilation.Assembly &&
|
||||
(IsInInternalNamespace(symbol) || HasInternalAttribute(symbol)) &&
|
||||
declarationSyntax.BaseList?.Types.Count > 0)
|
||||
{
|
||||
context.ReportDiagnostic(Diagnostic.Create(_descriptor, declarationSyntax.BaseList.Types[0].GetLocation(), symbol));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
case ParameterSyntax parameterSyntax:
|
||||
{
|
||||
if (context.SemanticModel.GetDeclaredSymbol(parameterSyntax)?.Type is ISymbol symbol &&
|
||||
symbol.ContainingAssembly != context.Compilation.Assembly &&
|
||||
(IsInInternalNamespace(symbol) || HasInternalAttribute(symbol)))
|
||||
{
|
||||
|
||||
context.ReportDiagnostic(Diagnostic.Create(_descriptor, parameterSyntax.GetLocation(), symbol));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasInternalAttribute(ISymbol symbol) => _hasInternalAttribute(symbol);
|
||||
|
||||
private bool IsInInternalNamespace(ISymbol symbol) => _isInternalNamespace(symbol);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<IncludeBuildOutput>false</IncludeBuildOutput>
|
||||
<NoPackageAnalysis>true</NoPackageAnalysis>
|
||||
<GenerateDocumentationFile>false</GenerateDocumentationFile>
|
||||
<Description>Roslyn analyzers for ASP.NET Core Components.</Description>
|
||||
<IsShippingPackage>true</IsShippingPackage>
|
||||
<HasReferenceAssembly>false</HasReferenceAssembly>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" PrivateAssets="all" />
|
||||
<PackageReference Update="NETStandard.Library" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="$(TargetPath)" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
|
||||
<None Include="build/netstandard2.0/*" Pack="true" PackagePath="build/netstandard2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Analyzers.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
|
|
@ -1,177 +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="ComponentParameterSettersShouldBePublic_Description" xml:space="preserve">
|
||||
<value>Component parameters should have public setters.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterSettersShouldBePublic_Format" xml:space="preserve">
|
||||
<value>Component parameter '{0}' should have a public setter.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterSettersShouldBePublic_Title" xml:space="preserve">
|
||||
<value>Component parameter should have public setters.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description" xml:space="preserve">
|
||||
<value>Components may only define a single parameter with CaptureUnmatchedValues.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format" xml:space="preserve">
|
||||
<value>Component type '{0}' defines properties multiple parameters with CaptureUnmatchedValues. Properties: {1}{2}</value>
|
||||
</data>
|
||||
<data name="ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title" xml:space="preserve">
|
||||
<value>Component has multiple CaptureUnmatchedValues parameters</value>
|
||||
</data>
|
||||
<data name="ComponentParameterCaptureUnmatchedValuesHasWrongType_Description" xml:space="preserve">
|
||||
<value>Component parameters with CaptureUnmatchedValues must be a correct type.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterCaptureUnmatchedValuesHasWrongType_Format" xml:space="preserve">
|
||||
<value>Component parameter '{0}' defines CaptureUnmatchedValues but has an unsupported type '{1}'. Use a type assignable from '{2}'.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterCaptureUnmatchedValuesHasWrongType_Title" xml:space="preserve">
|
||||
<value>Component parameter with CaptureUnmatchedValues has the wrong type</value>
|
||||
</data>
|
||||
<data name="ComponentParameterShouldBePublic_Format" xml:space="preserve">
|
||||
<value>Component parameter '{0}' should be public.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterShouldBePublic_Title" xml:space="preserve">
|
||||
<value>Component parameter should be public.</value>
|
||||
</data>
|
||||
<data name="ComponentParametersShouldBePublic_Description" xml:space="preserve">
|
||||
<value>Component parameters should be public.</value>
|
||||
</data>
|
||||
<data name="ComponentParametersShouldBePublic_FixTitle" xml:space="preserve">
|
||||
<value>Make component parameters public.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Description" xml:space="preserve">
|
||||
<value>Component parameters should not be set outside of their declared component. Doing so may result in unexpected behavior at runtime.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Format" xml:space="preserve">
|
||||
<value>Component parameter '{0}' should not be set outside of its component.</value>
|
||||
</data>
|
||||
<data name="ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Title" xml:space="preserve">
|
||||
<value>Component parameter should not be set outside of its component.</value>
|
||||
</data>
|
||||
<data name="DoNotUseRenderTreeTypes_Description" xml:space="preserve">
|
||||
<value>The types in 'Microsoft.AspNetCore.Components.RenderTree' are not recommended for use outside of the Blazor framework. These type definitions will change in future releases.</value>
|
||||
</data>
|
||||
<data name="DoNotUseRenderTreeTypes_Format" xml:space="preserve">
|
||||
<value>The type or member {0} is is not recommended for use outside of the Blazor frameworks. Types defined in 'Microsoft.AspNetCore.Components.RenderTree' will change in future releases.</value>
|
||||
</data>
|
||||
<data name="DoNotUseRenderTreeTypes_Title" xml:space="preserve">
|
||||
<value>Do not use RenderTree types</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<DisableImplicitComponentsAnalyzers>true</DisableImplicitComponentsAnalyzers>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -1,67 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Analyzer.Testing;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
public abstract class AnalyzerTestBase
|
||||
{
|
||||
private static readonly string ProjectDirectory = GetProjectDirectory();
|
||||
|
||||
public TestSource Read(string source)
|
||||
{
|
||||
if (!source.EndsWith(".cs"))
|
||||
{
|
||||
source = source + ".cs";
|
||||
}
|
||||
|
||||
var filePath = Path.Combine(ProjectDirectory, "TestFiles", GetType().Name, source);
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
throw new FileNotFoundException($"TestFile {source} could not be found at {filePath}.", filePath);
|
||||
}
|
||||
|
||||
var fileContent = File.ReadAllText(filePath);
|
||||
return TestSource.Read(fileContent);
|
||||
}
|
||||
|
||||
public Project CreateProject(string source)
|
||||
{
|
||||
if (!source.EndsWith(".cs"))
|
||||
{
|
||||
source = source + ".cs";
|
||||
}
|
||||
|
||||
var read = Read(source);
|
||||
return DiagnosticProject.Create(GetType().Assembly, new[] { read.Source, });
|
||||
}
|
||||
|
||||
public Task<Compilation> CreateCompilationAsync(string source)
|
||||
{
|
||||
return CreateProject(source).GetCompilationAsync();
|
||||
}
|
||||
|
||||
private static string GetProjectDirectory()
|
||||
{
|
||||
// On helix we use the published test files
|
||||
if (SkipOnHelixAttribute.OnHelix())
|
||||
{
|
||||
return AppContext.BaseDirectory;
|
||||
}
|
||||
|
||||
// This test code needs to be updated to support distributed testing.
|
||||
// See https://github.com/aspnet/AspNetCore/issues/10422
|
||||
#pragma warning disable 0618
|
||||
var solutionDirectory = TestPathUtilities.GetSolutionRootDirectory("Components");
|
||||
#pragma warning restore 0618
|
||||
var projectDirectory = Path.Combine(solutionDirectory, "Analyzers", "test");
|
||||
return projectDirectory;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Analyzer.Testing;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
internal class ComponentAnalyzerDiagnosticAnalyzerRunner : DiagnosticAnalyzerRunner
|
||||
{
|
||||
public ComponentAnalyzerDiagnosticAnalyzerRunner(DiagnosticAnalyzer analyzer)
|
||||
{
|
||||
Analyzer = analyzer;
|
||||
}
|
||||
|
||||
public DiagnosticAnalyzer Analyzer { get; }
|
||||
|
||||
public Task<Diagnostic[]> GetDiagnosticsAsync(string source)
|
||||
{
|
||||
return GetDiagnosticsAsync(sources: new[] { source }, Analyzer, Array.Empty<string>());
|
||||
}
|
||||
|
||||
public Task<Diagnostic[]> GetDiagnosticsAsync(Project project)
|
||||
{
|
||||
return GetDiagnosticsAsync(new[] { project }, Analyzer, Array.Empty<string>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,60 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Analyzer.Testing;
|
||||
using Microsoft.Extensions.Internal;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
public class ComponentInternalUsageDiagnoticsAnalyzerTest : AnalyzerTestBase
|
||||
{
|
||||
public ComponentInternalUsageDiagnoticsAnalyzerTest()
|
||||
{
|
||||
Analyzer = new ComponentInternalUsageDiagnosticAnalyzer();
|
||||
Runner = new ComponentAnalyzerDiagnosticAnalyzerRunner(Analyzer);
|
||||
}
|
||||
|
||||
private ComponentInternalUsageDiagnosticAnalyzer Analyzer { get; }
|
||||
private ComponentAnalyzerDiagnosticAnalyzerRunner Runner { get; }
|
||||
|
||||
[Fact]
|
||||
public async Task InternalUsage_FindsUseOfRenderTreeFrameAsParameter()
|
||||
{
|
||||
// Arrange
|
||||
var source = Read("UsesRenderTreeFrameAsParameter");
|
||||
|
||||
// Act
|
||||
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
|
||||
|
||||
// Assert
|
||||
Assert.Collection(
|
||||
diagnostics,
|
||||
diagnostic =>
|
||||
{
|
||||
Assert.Same(DiagnosticDescriptors.DoNotUseRenderTreeTypes, diagnostic.Descriptor);
|
||||
AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InternalUsage_FindsUseOfRenderTreeType()
|
||||
{
|
||||
// Arrange
|
||||
var source = Read("UsesRenderTreeFrameTypeAsLocal");
|
||||
|
||||
// Act
|
||||
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
|
||||
|
||||
// Assert
|
||||
Assert.Collection(
|
||||
diagnostics,
|
||||
diagnostic =>
|
||||
{
|
||||
Assert.Same(DiagnosticDescriptors.DoNotUseRenderTreeTypes, diagnostic.Descriptor);
|
||||
AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,80 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using TestHelper;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers.Test
|
||||
{
|
||||
public class ComponentParameterCaptureUnmatchedValuesHasWrongTypeTest : DiagnosticVerifier
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>")]
|
||||
[InlineData("System.Collections.Generic.Dictionary<string, object>")]
|
||||
[InlineData("System.Collections.Generic.IDictionary<string, object>")]
|
||||
[InlineData("System.Collections.Generic.IReadOnlyDictionary<string, object>")]
|
||||
public void IgnoresPropertiesWithSupportedType(string propertyType)
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter(CaptureUnmatchedValues = true)] public {propertyType} MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IgnoresPropertiesWithCaptureUnmatchedValuesFalse()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter(CaptureUnmatchedValues = false)] public string MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddsDiagnosticForInvalidType()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter(CaptureUnmatchedValues = true)] public string MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesHasWrongType.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty' defines CaptureUnmatchedValues but has an unsupported type 'string'. Use a type assignable from 'System.Collections.Generic.Dictionary<string, object>'.",
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 7, 70)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
|
||||
{
|
||||
return new ComponentParameterAnalyzer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,69 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using TestHelper;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers.Test
|
||||
{
|
||||
public class ComponentParameterCaptureUnmatchedValuesMustBeUniqueTest : DiagnosticVerifier
|
||||
{
|
||||
[Fact]
|
||||
public void IgnoresPropertiesWithCaptureUnmatchedValuesFalse()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using System.Collections.Generic;
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter(CaptureUnmatchedValues = false)] public string MyProperty {{ get; set; }}
|
||||
[Parameter(CaptureUnmatchedValues = true)] public Dictionary<string, object> MyOtherProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddsDiagnosticForMultipleCaptureUnmatchedValuesProperties()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using System.Collections.Generic;
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter(CaptureUnmatchedValues = true)] public Dictionary<string, object> MyProperty {{ get; set; }}
|
||||
[Parameter(CaptureUnmatchedValues = true)] public Dictionary<string, object> MyOtherProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
var message = @"Component type 'ConsoleApplication1.TypeName' defines properties multiple parameters with CaptureUnmatchedValues. Properties: " + Environment.NewLine +
|
||||
"ConsoleApplication1.TypeName.MyOtherProperty" + Environment.NewLine +
|
||||
"ConsoleApplication1.TypeName.MyProperty";
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesMustBeUnique.Id,
|
||||
Message = message,
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 6, 15)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
|
||||
{
|
||||
return new ComponentParameterAnalyzer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,111 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using TestHelper;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
public class ComponentParameterSettersShouldBePublicTest : DiagnosticVerifier
|
||||
{
|
||||
[Fact]
|
||||
public void IgnoresCascadingParameterProperties()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(CascadingParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[CascadingParameter] string MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IgnoresPublicSettersProperties()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter] public string MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IgnoresPrivateSettersNonParameterProperties()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
private string MyProperty {{ get; private set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ErrorsForNonPublicSetterParameters()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter] public string MyProperty1 {{ get; private set; }}
|
||||
[Parameter] public string MyProperty2 {{ get; protected set; }}
|
||||
[Parameter] public string MyProperty3 {{ get; internal set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterSettersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty1' should have a public setter.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 7, 39)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterSettersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty2' should have a public setter.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 8, 39)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterSettersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty3' should have a public setter.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 9, 39)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer() => new ComponentParameterAnalyzer();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,361 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using TestHelper;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
public class ComponentParameterUsageAnalyzerTest : DiagnosticVerifier
|
||||
{
|
||||
public ComponentParameterUsageAnalyzerTest()
|
||||
{
|
||||
ComponentTestSource = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TestComponent : IComponent
|
||||
{{
|
||||
[Parameter] public string TestProperty {{ get; set; }}
|
||||
[Parameter] public int TestInt {{ get; set; }}
|
||||
public string NonParameter {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
}
|
||||
|
||||
private string ComponentTestSource { get; }
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertySimpleAssignment_Warns()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private TestComponent _testComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testComponent = new TestComponent();
|
||||
_testComponent.TestProperty = ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent.Id,
|
||||
Message = "Component parameter 'TestProperty' should not be set outside of its component.",
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 11, 17)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyCoalesceAssignment__Warns()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private TestComponent _testComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testComponent = new TestComponent();
|
||||
_testComponent.TestProperty ??= ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent.Id,
|
||||
Message = "Component parameter 'TestProperty' should not be set outside of its component.",
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 11, 17)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyCompoundAssignment__Warns()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private TestComponent _testComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testComponent = new TestComponent();
|
||||
_testComponent.TestProperty += ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent.Id,
|
||||
Message = "Component parameter 'TestProperty' should not be set outside of its component.",
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 11, 17)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyIncrement_Warns()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private TestComponent _testComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testComponent = new TestComponent();
|
||||
_testComponent.TestInt++;
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent.Id,
|
||||
Message = "Component parameter 'TestInt' should not be set outside of its component.",
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 11, 17)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyDecrement_Warns()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private TestComponent _testComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testComponent = new TestComponent();
|
||||
_testComponent.TestInt--;
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent.Id,
|
||||
Message = "Component parameter 'TestInt' should not be set outside of its component.",
|
||||
Severity = DiagnosticSeverity.Warning,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 11, 17)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyExpression_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
void Method()
|
||||
{{
|
||||
System.IO.Console.WriteLine(new TestComponent().TestProperty);
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyExpressionInStatement_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
void Method()
|
||||
{{
|
||||
var testComponent = new TestComponent();
|
||||
for (var i = 0; i < testComponent.TestProperty.Length; i++)
|
||||
{{
|
||||
}}
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RetrievalOfComponentPropertyValueInAssignment_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
void Method()
|
||||
{{
|
||||
var testComponent = new TestComponent();
|
||||
AnotherProperty = testComponent.TestProperty;
|
||||
}}
|
||||
|
||||
public string AnotherProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ShadowedComponentPropertyAssignment_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
void Method()
|
||||
{{
|
||||
var testComponent = new InheritedComponent();
|
||||
testComponent.TestProperty = ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
|
||||
class InheritedComponent : TestComponent
|
||||
{{
|
||||
public new string TestProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InheritedImplicitComponentPropertyAssignment_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName : TestComponent
|
||||
{{
|
||||
void Method()
|
||||
{{
|
||||
this.TestProperty = ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ImplicitComponentPropertyAssignment_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName : IComponent
|
||||
{{
|
||||
void Method()
|
||||
{{
|
||||
TestProperty = ""Hello World"";
|
||||
}}
|
||||
|
||||
[Parameter] public string TestProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComponentPropertyAssignment_NonParameter_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private TestComponent _testComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testComponent = new TestComponent();
|
||||
_testComponent.NonParameter = ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NonComponentPropertyAssignment_Ignores()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class OtherComponent : IComponent
|
||||
{{
|
||||
private SomethingElse _testNonComponent;
|
||||
void Render()
|
||||
{{
|
||||
_testNonComponent = new NotAComponent();
|
||||
_testNonComponent.TestProperty = ""Hello World"";
|
||||
}}
|
||||
}}
|
||||
class NotAComponent
|
||||
{{
|
||||
[Parameter] public string TestProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentTestSource;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer() => new ComponentParameterUsageAnalyzer();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,126 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CodeFixes;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using TestHelper;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers.Test
|
||||
{
|
||||
public class ComponentParametersShouldBePublicCodeFixProviderTest : CodeFixVerifier
|
||||
{
|
||||
[Fact]
|
||||
public void IgnoresPrivatePropertiesWithoutParameterAttribute()
|
||||
{
|
||||
var test = @"
|
||||
namespace ConsoleApplication1
|
||||
{
|
||||
class TypeName
|
||||
{
|
||||
private string MyProperty { get; set; }
|
||||
}
|
||||
}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddsDiagnosticAndFixForPrivatePropertiesWithParameterAttribute()
|
||||
{
|
||||
var test = @"
|
||||
namespace ConsoleApplication1
|
||||
{
|
||||
using " + typeof(ParameterAttribute).Namespace + @";
|
||||
|
||||
class TypeName
|
||||
{
|
||||
[Parameter] private string BadProperty1 { get; set; }
|
||||
}
|
||||
}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.BadProperty1' should be public.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 8, 40)
|
||||
}
|
||||
});
|
||||
|
||||
VerifyCSharpFix(test, @"
|
||||
namespace ConsoleApplication1
|
||||
{
|
||||
using " + typeof(ParameterAttribute).Namespace + @";
|
||||
|
||||
class TypeName
|
||||
{
|
||||
[Parameter] public string BadProperty1 { get; set; }
|
||||
}
|
||||
}" + ComponentsTestDeclarations.Source);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IgnoresPublicPropertiesWithNonPublicSetterWithParameterAttribute()
|
||||
{
|
||||
var test = @"
|
||||
namespace ConsoleApplication1
|
||||
{
|
||||
using " + typeof(ParameterAttribute).Namespace + @";
|
||||
|
||||
class TypeName
|
||||
{
|
||||
[Parameter] public string MyProperty1 { get; private set; }
|
||||
[Parameter] public object MyProperty2 { get; protected set; }
|
||||
[Parameter] public object MyProperty3 { get; internal set; }
|
||||
}
|
||||
}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterSettersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty1' should have a public setter.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 8, 39)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterSettersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty2' should have a public setter.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 9, 39)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParameterSettersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty3' should have a public setter.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 10, 39)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected override CodeFixProvider GetCSharpCodeFixProvider()
|
||||
{
|
||||
return new ComponentParametersShouldBePublicCodeFixProvider();
|
||||
}
|
||||
|
||||
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
|
||||
{
|
||||
return new ComponentParameterAnalyzer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,106 +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.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using TestHelper;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
public class ComponentParametersShouldBePublicTest : DiagnosticVerifier
|
||||
{
|
||||
[Fact]
|
||||
public void IgnoresPublicProperties()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter] public string MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IgnoresPrivateNonParameterProperties()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
private string MyProperty {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ErrorsForNonPublicParameters()
|
||||
{
|
||||
var test = $@"
|
||||
namespace ConsoleApplication1
|
||||
{{
|
||||
using {typeof(ParameterAttribute).Namespace};
|
||||
class TypeName
|
||||
{{
|
||||
[Parameter] string MyProperty1 {{ get; set; }}
|
||||
[Parameter] private string MyProperty2 {{ get; set; }}
|
||||
[Parameter] protected string MyProperty3 {{ get; set; }}
|
||||
[Parameter] internal string MyProperty4 {{ get; set; }}
|
||||
}}
|
||||
}}" + ComponentsTestDeclarations.Source;
|
||||
|
||||
VerifyCSharpDiagnostic(test,
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty1' should be public.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 7, 32)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty2' should be public.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 8, 40)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty3' should be public.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 9, 42)
|
||||
}
|
||||
},
|
||||
new DiagnosticResult
|
||||
{
|
||||
Id = DiagnosticDescriptors.ComponentParametersShouldBePublic.Id,
|
||||
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty4' should be public.",
|
||||
Severity = DiagnosticSeverity.Error,
|
||||
Locations = new[]
|
||||
{
|
||||
new DiagnosticResultLocation("Test0.cs", 10, 41)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer() => new ComponentParameterAnalyzer();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,26 +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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers
|
||||
{
|
||||
public static class ComponentsTestDeclarations
|
||||
{
|
||||
public static readonly string Source = $@"
|
||||
namespace {typeof(ParameterAttribute).Namespace}
|
||||
{{
|
||||
public class {typeof(ParameterAttribute).Name} : System.Attribute
|
||||
{{
|
||||
public bool CaptureUnmatchedValues {{ get; set; }}
|
||||
}}
|
||||
|
||||
public class {typeof(CascadingParameterAttribute).Name} : System.Attribute
|
||||
{{
|
||||
}}
|
||||
|
||||
public interface {typeof(IComponent).Name}
|
||||
{{
|
||||
}}
|
||||
}}
|
||||
";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,90 +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.
|
||||
|
||||
// Most of the code in this file comes from the default Roslyn Analyzer project template
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CodeActions;
|
||||
using Microsoft.CodeAnalysis.Formatting;
|
||||
using Microsoft.CodeAnalysis.Simplification;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace TestHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Diagnostic Producer class with extra methods dealing with applying codefixes
|
||||
/// All methods are static
|
||||
/// </summary>
|
||||
public abstract partial class CodeFixVerifier : DiagnosticVerifier
|
||||
{
|
||||
/// <summary>
|
||||
/// Apply the inputted CodeAction to the inputted document.
|
||||
/// Meant to be used to apply codefixes.
|
||||
/// </summary>
|
||||
/// <param name="document">The Document to apply the fix on</param>
|
||||
/// <param name="codeAction">A CodeAction that will be applied to the Document.</param>
|
||||
/// <returns>A Document with the changes from the CodeAction</returns>
|
||||
private static Document ApplyFix(Document document, CodeAction codeAction)
|
||||
{
|
||||
var operations = codeAction.GetOperationsAsync(CancellationToken.None).Result;
|
||||
var solution = operations.OfType<ApplyChangesOperation>().Single().ChangedSolution;
|
||||
return solution.GetDocument(document.Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compare two collections of Diagnostics,and return a list of any new diagnostics that appear only in the second collection.
|
||||
/// Note: Considers Diagnostics to be the same if they have the same Ids. In the case of multiple diagnostics with the same Id in a row,
|
||||
/// this method may not necessarily return the new one.
|
||||
/// </summary>
|
||||
/// <param name="diagnostics">The Diagnostics that existed in the code before the CodeFix was applied</param>
|
||||
/// <param name="newDiagnostics">The Diagnostics that exist in the code after the CodeFix was applied</param>
|
||||
/// <returns>A list of Diagnostics that only surfaced in the code after the CodeFix was applied</returns>
|
||||
private static IEnumerable<Diagnostic> GetNewDiagnostics(IEnumerable<Diagnostic> diagnostics, IEnumerable<Diagnostic> newDiagnostics)
|
||||
{
|
||||
var oldArray = diagnostics.OrderBy(d => d.Location.SourceSpan.Start).ToArray();
|
||||
var newArray = newDiagnostics.OrderBy(d => d.Location.SourceSpan.Start).ToArray();
|
||||
|
||||
int oldIndex = 0;
|
||||
int newIndex = 0;
|
||||
|
||||
while (newIndex < newArray.Length)
|
||||
{
|
||||
if (oldIndex < oldArray.Length && oldArray[oldIndex].Id == newArray[newIndex].Id)
|
||||
{
|
||||
++oldIndex;
|
||||
++newIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return newArray[newIndex++];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the existing compiler diagnostics on the inputted document.
|
||||
/// </summary>
|
||||
/// <param name="document">The Document to run the compiler diagnostic analyzers on</param>
|
||||
/// <returns>The compiler diagnostics that were found in the code</returns>
|
||||
private static IEnumerable<Diagnostic> GetCompilerDiagnostics(Document document)
|
||||
{
|
||||
return document.GetSemanticModelAsync().Result.GetDiagnostics();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given a document, turn it into a string based on the syntax root
|
||||
/// </summary>
|
||||
/// <param name="document">The Document to be converted to a string</param>
|
||||
/// <returns>A string containing the syntax of the Document after formatting</returns>
|
||||
private static string GetStringFromDocument(Document document)
|
||||
{
|
||||
var simplifiedDoc = Simplifier.ReduceAsync(document, Simplifier.Annotation).Result;
|
||||
var root = simplifiedDoc.GetSyntaxRootAsync().Result;
|
||||
root = Formatter.Format(root, Formatter.Annotation, simplifiedDoc.Project.Solution.Workspace);
|
||||
return root.GetText().ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,92 +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.
|
||||
|
||||
// Most of the code in this file comes from the default Roslyn Analyzer project template
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using System;
|
||||
|
||||
namespace TestHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Location where the diagnostic appears, as determined by path, line number, and column number.
|
||||
/// </summary>
|
||||
public struct DiagnosticResultLocation
|
||||
{
|
||||
public DiagnosticResultLocation(string path, int line, int column)
|
||||
{
|
||||
if (line < -1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(line), "line must be >= -1");
|
||||
}
|
||||
|
||||
if (column < -1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(column), "column must be >= -1");
|
||||
}
|
||||
|
||||
this.Path = path;
|
||||
this.Line = line;
|
||||
this.Column = column;
|
||||
}
|
||||
|
||||
public string Path { get; }
|
||||
public int Line { get; }
|
||||
public int Column { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Struct that stores information about a Diagnostic appearing in a source
|
||||
/// </summary>
|
||||
public struct DiagnosticResult
|
||||
{
|
||||
private DiagnosticResultLocation[] locations;
|
||||
|
||||
public DiagnosticResultLocation[] Locations
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.locations == null)
|
||||
{
|
||||
this.locations = new DiagnosticResultLocation[] { };
|
||||
}
|
||||
return this.locations;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
this.locations = value;
|
||||
}
|
||||
}
|
||||
|
||||
public DiagnosticSeverity Severity { get; set; }
|
||||
|
||||
public string Id { get; set; }
|
||||
|
||||
public string Message { get; set; }
|
||||
|
||||
public string Path
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Locations.Length > 0 ? this.Locations[0].Path : "";
|
||||
}
|
||||
}
|
||||
|
||||
public int Line
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Locations.Length > 0 ? this.Locations[0].Line : -1;
|
||||
}
|
||||
}
|
||||
|
||||
public int Column
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Locations.Length > 0 ? this.Locations[0].Column : -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,175 +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.
|
||||
|
||||
// Most of the code in this file comes from the default Roslyn Analyzer project template
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using Microsoft.CodeAnalysis.Text;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
|
||||
namespace TestHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Class for turning strings into documents and getting the diagnostics on them
|
||||
/// All methods are static
|
||||
/// </summary>
|
||||
public abstract partial class DiagnosticVerifier
|
||||
{
|
||||
private static readonly MetadataReference CorlibReference = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
|
||||
private static readonly MetadataReference SystemCoreReference = MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location);
|
||||
private static readonly MetadataReference CSharpSymbolsReference = MetadataReference.CreateFromFile(typeof(CSharpCompilation).Assembly.Location);
|
||||
private static readonly MetadataReference CodeAnalysisReference = MetadataReference.CreateFromFile(typeof(Compilation).Assembly.Location);
|
||||
|
||||
internal static string DefaultFilePathPrefix = "Test";
|
||||
internal static string CSharpDefaultFileExt = "cs";
|
||||
internal static string VisualBasicDefaultExt = "vb";
|
||||
internal static string TestProjectName = "TestProject";
|
||||
|
||||
#region Get Diagnostics
|
||||
|
||||
/// <summary>
|
||||
/// Given classes in the form of strings, their language, and an IDiagnosticAnalyzer to apply to it, return the diagnostics found in the string after converting it to a document.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <param name="language">The language the source classes are in</param>
|
||||
/// <param name="analyzer">The analyzer to be run on the sources</param>
|
||||
/// <returns>An IEnumerable of Diagnostics that surfaced in the source code, sorted by Location</returns>
|
||||
private static Diagnostic[] GetSortedDiagnostics(string[] sources, string language, DiagnosticAnalyzer analyzer)
|
||||
{
|
||||
return GetSortedDiagnosticsFromDocuments(analyzer, GetDocuments(sources, language));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given an analyzer and a document to apply it to, run the analyzer and gather an array of diagnostics found in it.
|
||||
/// The returned diagnostics are then ordered by location in the source document.
|
||||
/// </summary>
|
||||
/// <param name="analyzer">The analyzer to run on the documents</param>
|
||||
/// <param name="documents">The Documents that the analyzer will be run on</param>
|
||||
/// <returns>An IEnumerable of Diagnostics that surfaced in the source code, sorted by Location</returns>
|
||||
protected static Diagnostic[] GetSortedDiagnosticsFromDocuments(DiagnosticAnalyzer analyzer, Document[] documents)
|
||||
{
|
||||
var projects = new HashSet<Project>();
|
||||
foreach (var document in documents)
|
||||
{
|
||||
projects.Add(document.Project);
|
||||
}
|
||||
|
||||
var diagnostics = new List<Diagnostic>();
|
||||
foreach (var project in projects)
|
||||
{
|
||||
var compilationWithAnalyzers = project.GetCompilationAsync().Result.WithAnalyzers(ImmutableArray.Create(analyzer));
|
||||
var diags = compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync().Result;
|
||||
foreach (var diag in diags)
|
||||
{
|
||||
if (diag.Location == Location.None || diag.Location.IsInMetadata)
|
||||
{
|
||||
diagnostics.Add(diag);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < documents.Length; i++)
|
||||
{
|
||||
var document = documents[i];
|
||||
var tree = document.GetSyntaxTreeAsync().Result;
|
||||
if (tree == diag.Location.SourceTree)
|
||||
{
|
||||
diagnostics.Add(diag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var results = SortDiagnostics(diagnostics);
|
||||
diagnostics.Clear();
|
||||
return results;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sort diagnostics by location in source document
|
||||
/// </summary>
|
||||
/// <param name="diagnostics">The list of Diagnostics to be sorted</param>
|
||||
/// <returns>An IEnumerable containing the Diagnostics in order of Location</returns>
|
||||
private static Diagnostic[] SortDiagnostics(IEnumerable<Diagnostic> diagnostics)
|
||||
{
|
||||
return diagnostics.OrderBy(d => d.Location.SourceSpan.Start).ToArray();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Set up compilation and documents
|
||||
/// <summary>
|
||||
/// Given an array of strings as sources and a language, turn them into a project and return the documents and spans of it.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <param name="language">The language the source code is in</param>
|
||||
/// <returns>A Tuple containing the Documents produced from the sources and their TextSpans if relevant</returns>
|
||||
private static Document[] GetDocuments(string[] sources, string language)
|
||||
{
|
||||
if (language != LanguageNames.CSharp && language != LanguageNames.VisualBasic)
|
||||
{
|
||||
throw new ArgumentException("Unsupported Language");
|
||||
}
|
||||
|
||||
var project = CreateProject(sources, language);
|
||||
var documents = project.Documents.ToArray();
|
||||
|
||||
if (sources.Length != documents.Length)
|
||||
{
|
||||
throw new InvalidOperationException("Amount of sources did not match amount of Documents created");
|
||||
}
|
||||
|
||||
return documents;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a Document from a string through creating a project that contains it.
|
||||
/// </summary>
|
||||
/// <param name="source">Classes in the form of a string</param>
|
||||
/// <param name="language">The language the source code is in</param>
|
||||
/// <returns>A Document created from the source string</returns>
|
||||
protected static Document CreateDocument(string source, string language = LanguageNames.CSharp)
|
||||
{
|
||||
return CreateProject(new[] { source }, language).Documents.First();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a project using the inputted strings as sources.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <param name="language">The language the source code is in</param>
|
||||
/// <returns>A Project created out of the Documents created from the source strings</returns>
|
||||
private static Project CreateProject(string[] sources, string language = LanguageNames.CSharp)
|
||||
{
|
||||
string fileNamePrefix = DefaultFilePathPrefix;
|
||||
string fileExt = language == LanguageNames.CSharp ? CSharpDefaultFileExt : VisualBasicDefaultExt;
|
||||
|
||||
var projectId = ProjectId.CreateNewId(debugName: TestProjectName);
|
||||
|
||||
var solution = new AdhocWorkspace()
|
||||
.CurrentSolution
|
||||
.AddProject(projectId, TestProjectName, TestProjectName, language)
|
||||
.AddMetadataReference(projectId, CorlibReference)
|
||||
.AddMetadataReference(projectId, SystemCoreReference)
|
||||
.AddMetadataReference(projectId, CSharpSymbolsReference)
|
||||
.AddMetadataReference(projectId, CodeAnalysisReference);
|
||||
|
||||
int count = 0;
|
||||
foreach (var source in sources)
|
||||
{
|
||||
var newFileName = fileNamePrefix + count + "." + fileExt;
|
||||
var documentId = DocumentId.CreateNewId(projectId, debugName: newFileName);
|
||||
solution = solution.AddDocument(documentId, newFileName, SourceText.From(source));
|
||||
count++;
|
||||
}
|
||||
return solution.GetProject(projectId);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
|
||||
<!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
|
||||
<!-- https://github.com/aspnet/AspNetCore/issues/10422 -->
|
||||
<BuildHelixPayload>false</BuildHelixPayload>
|
||||
<BaseOutputPath />
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- This is set to a ProjectReference because analyzers cannot be referenced via Reference. -->
|
||||
<ProjectReference Include="..\src\Microsoft.AspNetCore.Components.Analyzers.csproj" />
|
||||
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
|
||||
<Reference Include="Microsoft.AspNetCore.Analyzer.Testing" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
|
||||
<Content Include="TestFiles\**\*.*" CopyToPublishDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers.Tests.TestFiles.ComponentInternalUsageDiagnoticsAnalyzerTest
|
||||
{
|
||||
class UsesRenderTreeFrameAsParameter
|
||||
{
|
||||
private void Test(/*MM*/RenderTreeFrame frame)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
using System;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Analyzers.Tests.TestFiles.ComponentInternalUsageDiagnoticsAnalyzerTest
|
||||
{
|
||||
class UsesRenderTreeFrameTypeAsLocal
|
||||
{
|
||||
private void Test()
|
||||
{
|
||||
var test = RenderTreeFrameType./*MM*/Attribute;
|
||||
GC.KeepAlive(test);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,133 +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.
|
||||
|
||||
// Most of the code in this file comes from the default Roslyn Analyzer project template
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CodeActions;
|
||||
using Microsoft.CodeAnalysis.CodeFixes;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using Microsoft.CodeAnalysis.Formatting;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Xunit;
|
||||
|
||||
namespace TestHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Superclass of all Unit tests made for diagnostics with codefixes.
|
||||
/// Contains methods used to verify correctness of codefixes
|
||||
/// </summary>
|
||||
public abstract partial class CodeFixVerifier : DiagnosticVerifier
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns the codefix being tested (C#) - to be implemented in non-abstract class
|
||||
/// </summary>
|
||||
/// <returns>The CodeFixProvider to be used for CSharp code</returns>
|
||||
protected virtual CodeFixProvider GetCSharpCodeFixProvider()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the codefix being tested (VB) - to be implemented in non-abstract class
|
||||
/// </summary>
|
||||
/// <returns>The CodeFixProvider to be used for VisualBasic code</returns>
|
||||
protected virtual CodeFixProvider GetBasicCodeFixProvider()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to test a C# codefix when applied on the inputted string as a source
|
||||
/// </summary>
|
||||
/// <param name="oldSource">A class in the form of a string before the CodeFix was applied to it</param>
|
||||
/// <param name="newSource">A class in the form of a string after the CodeFix was applied to it</param>
|
||||
/// <param name="codeFixIndex">Index determining which codefix to apply if there are multiple</param>
|
||||
/// <param name="allowNewCompilerDiagnostics">A bool controlling whether or not the test will fail if the CodeFix introduces other warnings after being applied</param>
|
||||
protected void VerifyCSharpFix(string oldSource, string newSource, int? codeFixIndex = null, bool allowNewCompilerDiagnostics = false)
|
||||
{
|
||||
VerifyFix(LanguageNames.CSharp, GetCSharpDiagnosticAnalyzer(), GetCSharpCodeFixProvider(), oldSource, newSource, codeFixIndex, allowNewCompilerDiagnostics);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to test a VB codefix when applied on the inputted string as a source
|
||||
/// </summary>
|
||||
/// <param name="oldSource">A class in the form of a string before the CodeFix was applied to it</param>
|
||||
/// <param name="newSource">A class in the form of a string after the CodeFix was applied to it</param>
|
||||
/// <param name="codeFixIndex">Index determining which codefix to apply if there are multiple</param>
|
||||
/// <param name="allowNewCompilerDiagnostics">A bool controlling whether or not the test will fail if the CodeFix introduces other warnings after being applied</param>
|
||||
protected void VerifyBasicFix(string oldSource, string newSource, int? codeFixIndex = null, bool allowNewCompilerDiagnostics = false)
|
||||
{
|
||||
VerifyFix(LanguageNames.VisualBasic, GetBasicDiagnosticAnalyzer(), GetBasicCodeFixProvider(), oldSource, newSource, codeFixIndex, allowNewCompilerDiagnostics);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// General verifier for codefixes.
|
||||
/// Creates a Document from the source string, then gets diagnostics on it and applies the relevant codefixes.
|
||||
/// Then gets the string after the codefix is applied and compares it with the expected result.
|
||||
/// Note: If any codefix causes new diagnostics to show up, the test fails unless allowNewCompilerDiagnostics is set to true.
|
||||
/// </summary>
|
||||
/// <param name="language">The language the source code is in</param>
|
||||
/// <param name="analyzer">The analyzer to be applied to the source code</param>
|
||||
/// <param name="codeFixProvider">The codefix to be applied to the code wherever the relevant Diagnostic is found</param>
|
||||
/// <param name="oldSource">A class in the form of a string before the CodeFix was applied to it</param>
|
||||
/// <param name="newSource">A class in the form of a string after the CodeFix was applied to it</param>
|
||||
/// <param name="codeFixIndex">Index determining which codefix to apply if there are multiple</param>
|
||||
/// <param name="allowNewCompilerDiagnostics">A bool controlling whether or not the test will fail if the CodeFix introduces other warnings after being applied</param>
|
||||
private void VerifyFix(string language, DiagnosticAnalyzer analyzer, CodeFixProvider codeFixProvider, string oldSource, string newSource, int? codeFixIndex, bool allowNewCompilerDiagnostics)
|
||||
{
|
||||
var document = CreateDocument(oldSource, language);
|
||||
var analyzerDiagnostics = GetSortedDiagnosticsFromDocuments(analyzer, new[] { document });
|
||||
var compilerDiagnostics = GetCompilerDiagnostics(document);
|
||||
var attempts = analyzerDiagnostics.Length;
|
||||
|
||||
for (int i = 0; i < attempts; ++i)
|
||||
{
|
||||
var actions = new List<CodeAction>();
|
||||
var context = new CodeFixContext(document, analyzerDiagnostics[0], (a, d) => actions.Add(a), CancellationToken.None);
|
||||
codeFixProvider.RegisterCodeFixesAsync(context).Wait();
|
||||
|
||||
if (!actions.Any())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (codeFixIndex != null)
|
||||
{
|
||||
document = ApplyFix(document, actions.ElementAt((int)codeFixIndex));
|
||||
break;
|
||||
}
|
||||
|
||||
document = ApplyFix(document, actions.ElementAt(0));
|
||||
analyzerDiagnostics = GetSortedDiagnosticsFromDocuments(analyzer, new[] { document });
|
||||
|
||||
var newCompilerDiagnostics = GetNewDiagnostics(compilerDiagnostics, GetCompilerDiagnostics(document));
|
||||
|
||||
//check if applying the code fix introduced any new compiler diagnostics
|
||||
if (!allowNewCompilerDiagnostics && newCompilerDiagnostics.Any())
|
||||
{
|
||||
// Format and get the compiler diagnostics again so that the locations make sense in the output
|
||||
document = document.WithSyntaxRoot(Formatter.Format(document.GetSyntaxRootAsync().Result, Formatter.Annotation, document.Project.Solution.Workspace));
|
||||
newCompilerDiagnostics = GetNewDiagnostics(compilerDiagnostics, GetCompilerDiagnostics(document));
|
||||
|
||||
Assert.True(false,
|
||||
string.Format("Fix introduced new compiler diagnostics:\r\n{0}\r\n\r\nNew document:\r\n{1}\r\n",
|
||||
string.Join("\r\n", newCompilerDiagnostics.Select(d => d.ToString())),
|
||||
document.GetSyntaxRootAsync().Result.ToFullString()));
|
||||
}
|
||||
|
||||
//check if there are analyzer diagnostics left after the code fix
|
||||
if (!analyzerDiagnostics.Any())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//after applying all of the code fixes, compare the resulting string to the inputted one
|
||||
var actual = GetStringFromDocument(document);
|
||||
Assert.Equal(newSource, actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,274 +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.
|
||||
|
||||
// Most of the code in this file comes from the default Roslyn Analyzer project template
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
namespace TestHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Superclass of all Unit Tests for DiagnosticAnalyzers
|
||||
/// </summary>
|
||||
public abstract partial class DiagnosticVerifier
|
||||
{
|
||||
#region To be implemented by Test classes
|
||||
/// <summary>
|
||||
/// Get the CSharp analyzer being tested - to be implemented in non-abstract class
|
||||
/// </summary>
|
||||
protected virtual DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the Visual Basic analyzer being tested (C#) - to be implemented in non-abstract class
|
||||
/// </summary>
|
||||
protected virtual DiagnosticAnalyzer GetBasicDiagnosticAnalyzer()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Verifier wrappers
|
||||
|
||||
/// <summary>
|
||||
/// Called to test a C# DiagnosticAnalyzer when applied on the single inputted string as a source
|
||||
/// Note: input a DiagnosticResult for each Diagnostic expected
|
||||
/// </summary>
|
||||
/// <param name="source">A class in the form of a string to run the analyzer on</param>
|
||||
/// <param name="expected"> DiagnosticResults that should appear after the analyzer is run on the source</param>
|
||||
protected void VerifyCSharpDiagnostic(string source, params DiagnosticResult[] expected)
|
||||
{
|
||||
VerifyDiagnostics(new[] { source }, LanguageNames.CSharp, GetCSharpDiagnosticAnalyzer(), expected);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to test a VB DiagnosticAnalyzer when applied on the single inputted string as a source
|
||||
/// Note: input a DiagnosticResult for each Diagnostic expected
|
||||
/// </summary>
|
||||
/// <param name="source">A class in the form of a string to run the analyzer on</param>
|
||||
/// <param name="expected">DiagnosticResults that should appear after the analyzer is run on the source</param>
|
||||
protected void VerifyBasicDiagnostic(string source, params DiagnosticResult[] expected)
|
||||
{
|
||||
VerifyDiagnostics(new[] { source }, LanguageNames.VisualBasic, GetBasicDiagnosticAnalyzer(), expected);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to test a C# DiagnosticAnalyzer when applied on the inputted strings as a source
|
||||
/// Note: input a DiagnosticResult for each Diagnostic expected
|
||||
/// </summary>
|
||||
/// <param name="sources">An array of strings to create source documents from to run the analyzers on</param>
|
||||
/// <param name="expected">DiagnosticResults that should appear after the analyzer is run on the sources</param>
|
||||
protected void VerifyCSharpDiagnostic(string[] sources, params DiagnosticResult[] expected)
|
||||
{
|
||||
VerifyDiagnostics(sources, LanguageNames.CSharp, GetCSharpDiagnosticAnalyzer(), expected);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to test a VB DiagnosticAnalyzer when applied on the inputted strings as a source
|
||||
/// Note: input a DiagnosticResult for each Diagnostic expected
|
||||
/// </summary>
|
||||
/// <param name="sources">An array of strings to create source documents from to run the analyzers on</param>
|
||||
/// <param name="expected">DiagnosticResults that should appear after the analyzer is run on the sources</param>
|
||||
protected void VerifyBasicDiagnostic(string[] sources, params DiagnosticResult[] expected)
|
||||
{
|
||||
VerifyDiagnostics(sources, LanguageNames.VisualBasic, GetBasicDiagnosticAnalyzer(), expected);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// General method that gets a collection of actual diagnostics found in the source after the analyzer is run,
|
||||
/// then verifies each of them.
|
||||
/// </summary>
|
||||
/// <param name="sources">An array of strings to create source documents from to run the analyzers on</param>
|
||||
/// <param name="language">The language of the classes represented by the source strings</param>
|
||||
/// <param name="analyzer">The analyzer to be run on the source code</param>
|
||||
/// <param name="expected">DiagnosticResults that should appear after the analyzer is run on the sources</param>
|
||||
private void VerifyDiagnostics(string[] sources, string language, DiagnosticAnalyzer analyzer, params DiagnosticResult[] expected)
|
||||
{
|
||||
var diagnostics = GetSortedDiagnostics(sources, language, analyzer);
|
||||
VerifyDiagnosticResults(diagnostics, analyzer, expected);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Actual comparisons and verifications
|
||||
/// <summary>
|
||||
/// Checks each of the actual Diagnostics found and compares them with the corresponding DiagnosticResult in the array of expected results.
|
||||
/// Diagnostics are considered equal only if the DiagnosticResultLocation, Id, Severity, and Message of the DiagnosticResult match the actual diagnostic.
|
||||
/// </summary>
|
||||
/// <param name="actualResults">The Diagnostics found by the compiler after running the analyzer on the source code</param>
|
||||
/// <param name="analyzer">The analyzer that was being run on the sources</param>
|
||||
/// <param name="expectedResults">Diagnostic Results that should have appeared in the code</param>
|
||||
private static void VerifyDiagnosticResults(IEnumerable<Diagnostic> actualResults, DiagnosticAnalyzer analyzer, params DiagnosticResult[] expectedResults)
|
||||
{
|
||||
int expectedCount = expectedResults.Count();
|
||||
int actualCount = actualResults.Count();
|
||||
|
||||
if (expectedCount != actualCount)
|
||||
{
|
||||
string diagnosticsOutput = actualResults.Any() ? FormatDiagnostics(analyzer, actualResults.ToArray()) : " NONE.";
|
||||
|
||||
Assert.True(false,
|
||||
string.Format("Mismatch between number of diagnostics returned, expected \"{0}\" actual \"{1}\"\r\n\r\nDiagnostics:\r\n{2}\r\n", expectedCount, actualCount, diagnosticsOutput));
|
||||
}
|
||||
|
||||
for (int i = 0; i < expectedResults.Length; i++)
|
||||
{
|
||||
var actual = actualResults.ElementAt(i);
|
||||
var expected = expectedResults[i];
|
||||
|
||||
if (expected.Line == -1 && expected.Column == -1)
|
||||
{
|
||||
if (actual.Location != Location.None)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected:\nA project diagnostic with No location\nActual:\n{0}",
|
||||
FormatDiagnostics(analyzer, actual)));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VerifyDiagnosticLocation(analyzer, actual, actual.Location, expected.Locations.First());
|
||||
var additionalLocations = actual.AdditionalLocations.ToArray();
|
||||
|
||||
if (additionalLocations.Length != expected.Locations.Length - 1)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected {0} additional locations but got {1} for Diagnostic:\r\n {2}\r\n",
|
||||
expected.Locations.Length - 1, additionalLocations.Length,
|
||||
FormatDiagnostics(analyzer, actual)));
|
||||
}
|
||||
|
||||
for (int j = 0; j < additionalLocations.Length; ++j)
|
||||
{
|
||||
VerifyDiagnosticLocation(analyzer, actual, additionalLocations[j], expected.Locations[j + 1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (actual.Id != expected.Id)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected diagnostic id to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n",
|
||||
expected.Id, actual.Id, FormatDiagnostics(analyzer, actual)));
|
||||
}
|
||||
|
||||
if (actual.Severity != expected.Severity)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected diagnostic severity to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n",
|
||||
expected.Severity, actual.Severity, FormatDiagnostics(analyzer, actual)));
|
||||
}
|
||||
|
||||
if (actual.GetMessage() != expected.Message)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected diagnostic message to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n",
|
||||
expected.Message, actual.GetMessage(), FormatDiagnostics(analyzer, actual)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Helper method to VerifyDiagnosticResult that checks the location of a diagnostic and compares it with the location in the expected DiagnosticResult.
|
||||
/// </summary>
|
||||
/// <param name="analyzer">The analyzer that was being run on the sources</param>
|
||||
/// <param name="diagnostic">The diagnostic that was found in the code</param>
|
||||
/// <param name="actual">The Location of the Diagnostic found in the code</param>
|
||||
/// <param name="expected">The DiagnosticResultLocation that should have been found</param>
|
||||
private static void VerifyDiagnosticLocation(DiagnosticAnalyzer analyzer, Diagnostic diagnostic, Location actual, DiagnosticResultLocation expected)
|
||||
{
|
||||
var actualSpan = actual.GetLineSpan();
|
||||
|
||||
Assert.True(actualSpan.Path == expected.Path || (actualSpan.Path != null && actualSpan.Path.Contains("Test0.") && expected.Path.Contains("Test.")),
|
||||
string.Format("Expected diagnostic to be in file \"{0}\" was actually in file \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n",
|
||||
expected.Path, actualSpan.Path, FormatDiagnostics(analyzer, diagnostic)));
|
||||
|
||||
var actualLinePosition = actualSpan.StartLinePosition;
|
||||
|
||||
// Only check line position if there is an actual line in the real diagnostic
|
||||
if (actualLinePosition.Line > 0)
|
||||
{
|
||||
if (actualLinePosition.Line + 1 != expected.Line)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected diagnostic to be on line \"{0}\" was actually on line \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n",
|
||||
expected.Line, actualLinePosition.Line + 1, FormatDiagnostics(analyzer, diagnostic)));
|
||||
}
|
||||
}
|
||||
|
||||
// Only check column position if there is an actual column position in the real diagnostic
|
||||
if (actualLinePosition.Character > 0)
|
||||
{
|
||||
if (actualLinePosition.Character + 1 != expected.Column)
|
||||
{
|
||||
Assert.True(false,
|
||||
string.Format("Expected diagnostic to start at column \"{0}\" was actually at column \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n",
|
||||
expected.Column, actualLinePosition.Character + 1, FormatDiagnostics(analyzer, diagnostic)));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Formatting Diagnostics
|
||||
/// <summary>
|
||||
/// Helper method to format a Diagnostic into an easily readable string
|
||||
/// </summary>
|
||||
/// <param name="analyzer">The analyzer that this verifier tests</param>
|
||||
/// <param name="diagnostics">The Diagnostics to be formatted</param>
|
||||
/// <returns>The Diagnostics formatted as a string</returns>
|
||||
private static string FormatDiagnostics(DiagnosticAnalyzer analyzer, params Diagnostic[] diagnostics)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
for (int i = 0; i < diagnostics.Length; ++i)
|
||||
{
|
||||
builder.AppendLine("// " + diagnostics[i].ToString());
|
||||
|
||||
var analyzerType = analyzer.GetType();
|
||||
var rules = analyzer.SupportedDiagnostics;
|
||||
|
||||
foreach (var rule in rules)
|
||||
{
|
||||
if (rule != null && rule.Id == diagnostics[i].Id)
|
||||
{
|
||||
var location = diagnostics[i].Location;
|
||||
if (location == Location.None)
|
||||
{
|
||||
builder.AppendFormat("GetGlobalResult({0}.{1})", analyzerType.Name, rule.Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.True(location.IsInSource,
|
||||
$"Test base does not currently handle diagnostics in metadata locations. Diagnostic in metadata: {diagnostics[i]}\r\n");
|
||||
|
||||
string resultMethodName = diagnostics[i].Location.SourceTree.FilePath.EndsWith(".cs") ? "GetCSharpResultAt" : "GetBasicResultAt";
|
||||
var linePosition = diagnostics[i].Location.GetLineSpan().StartLinePosition;
|
||||
|
||||
builder.AppendFormat("{0}({1}, {2}, {3}.{4})",
|
||||
resultMethodName,
|
||||
linePosition.Line + 1,
|
||||
linePosition.Character + 1,
|
||||
analyzerType.Name,
|
||||
rule.Id);
|
||||
}
|
||||
|
||||
if (i != diagnostics.Length - 1)
|
||||
{
|
||||
builder.Append(',');
|
||||
}
|
||||
|
||||
builder.AppendLine();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<!-- This file is automatically generated. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;$(DefaultNetCoreTargetFramework)</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)' == '$(DefaultNetCoreTargetFramework)'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.Authorization.netcoreapp.cs" />
|
||||
<Reference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -1,68 +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.
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,68 +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.
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,41 +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.Concurrent;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
internal static class AttributeAuthorizeDataCache
|
||||
{
|
||||
private static ConcurrentDictionary<Type, IAuthorizeData[]> _cache
|
||||
= new ConcurrentDictionary<Type, IAuthorizeData[]>();
|
||||
|
||||
public static IAuthorizeData[] GetAuthorizeDataForType(Type type)
|
||||
{
|
||||
IAuthorizeData[] result;
|
||||
if (!_cache.TryGetValue(type, out result))
|
||||
{
|
||||
result = ComputeAuthorizeDataForType(type);
|
||||
_cache[type] = result; // Safe race - doesn't matter if it overwrites
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static IAuthorizeData[] ComputeAuthorizeDataForType(Type type)
|
||||
{
|
||||
// Allow Anonymous skips all authorization
|
||||
var allAttributes = type.GetCustomAttributes(inherit: true);
|
||||
if (allAttributes.OfType<IAllowAnonymous>().Any())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var authorizeDataAttributes = allAttributes.OfType<IAuthorizeData>().ToArray();
|
||||
return authorizeDataAttributes.Length > 0 ? authorizeDataAttributes : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,28 +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.Security.Claims;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides information about the currently authenticated user, if any.
|
||||
/// </summary>
|
||||
public class AuthenticationState
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="AuthenticationState"/>.
|
||||
/// </summary>
|
||||
/// <param name="user">A <see cref="ClaimsPrincipal"/> representing the user.</param>
|
||||
public AuthenticationState(ClaimsPrincipal user)
|
||||
{
|
||||
User = user ?? throw new ArgumentNullException(nameof(user));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a <see cref="ClaimsPrincipal"/> that describes the current user.
|
||||
/// </summary>
|
||||
public ClaimsPrincipal User { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,46 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides information about the authentication state of the current user.
|
||||
/// </summary>
|
||||
public abstract class AuthenticationStateProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Asynchronously gets an <see cref="AuthenticationState"/> that describes the current user.
|
||||
/// </summary>
|
||||
/// <returns>A task that, when resolved, gives an <see cref="AuthenticationState"/> instance that describes the current user.</returns>
|
||||
public abstract Task<AuthenticationState> GetAuthenticationStateAsync();
|
||||
|
||||
/// <summary>
|
||||
/// An event that provides notification when the <see cref="AuthenticationState"/>
|
||||
/// has changed. For example, this event may be raised if a user logs in or out.
|
||||
/// </summary>
|
||||
public event AuthenticationStateChangedHandler AuthenticationStateChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Raises the <see cref="AuthenticationStateChanged"/> event.
|
||||
/// </summary>
|
||||
/// <param name="task">A <see cref="Task"/> that supplies the updated <see cref="AuthenticationState"/>.</param>
|
||||
protected void NotifyAuthenticationStateChanged(Task<AuthenticationState> task)
|
||||
{
|
||||
if (task == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(task));
|
||||
}
|
||||
|
||||
AuthenticationStateChanged?.Invoke(task);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A handler for the <see cref="AuthenticationStateProvider.AuthenticationStateChanged"/> event.
|
||||
/// </summary>
|
||||
/// <param name="task">A <see cref="Task"/> that supplies the updated <see cref="AuthenticationState"/>.</param>
|
||||
public delegate void AuthenticationStateChangedHandler(Task<AuthenticationState> task);
|
||||
}
|
||||
|
|
@ -1,39 +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.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
// This is so the AuthorizeView can avoid implementing IAuthorizeData (even privately)
|
||||
internal class AuthorizeDataAdapter : IAuthorizeData
|
||||
{
|
||||
private readonly AuthorizeView _component;
|
||||
|
||||
public AuthorizeDataAdapter(AuthorizeView component)
|
||||
{
|
||||
_component = component ?? throw new ArgumentNullException(nameof(component));
|
||||
}
|
||||
|
||||
public string Policy
|
||||
{
|
||||
get => _component.Policy;
|
||||
set => throw new NotSupportedException();
|
||||
}
|
||||
|
||||
public string Roles
|
||||
{
|
||||
get => _component.Roles;
|
||||
set => throw new NotSupportedException();
|
||||
}
|
||||
|
||||
// AuthorizeView doesn't expose any such parameter, as it wouldn't be used anyway,
|
||||
// since we already have the ClaimsPrincipal by the time AuthorizeView gets involved.
|
||||
public string AuthenticationSchemes
|
||||
{
|
||||
get => null;
|
||||
set => throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,117 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Combines the behaviors of <see cref="AuthorizeView"/> and <see cref="RouteView"/>,
|
||||
/// so that it displays the page matching the specified route but only if the user
|
||||
/// is authorized to see it.
|
||||
///
|
||||
/// Additionally, this component supplies a cascading parameter of type <see cref="Task{AuthenticationState}"/>,
|
||||
/// which makes the user's current authentication state available to descendants.
|
||||
/// </summary>
|
||||
public sealed class AuthorizeRouteView : RouteView
|
||||
{
|
||||
// We expect applications to supply their own authorizing/not-authorized content, but
|
||||
// it's better to have defaults than to make the parameters mandatory because in some
|
||||
// cases they will never be used (e.g., "authorizing" in out-of-box server-side Blazor)
|
||||
private static readonly RenderFragment<AuthenticationState> _defaultNotAuthorizedContent
|
||||
= state => builder => builder.AddContent(0, "Not authorized");
|
||||
private static readonly RenderFragment _defaultAuthorizingContent
|
||||
= builder => builder.AddContent(0, "Authorizing...");
|
||||
|
||||
private readonly RenderFragment _renderAuthorizeRouteViewCoreDelegate;
|
||||
private readonly RenderFragment<AuthenticationState> _renderAuthorizedDelegate;
|
||||
private readonly RenderFragment<AuthenticationState> _renderNotAuthorizedDelegate;
|
||||
private readonly RenderFragment _renderAuthorizingDelegate;
|
||||
|
||||
public AuthorizeRouteView()
|
||||
{
|
||||
// Cache the rendering delegates so that we only construct new closure instances
|
||||
// when they are actually used (e.g., we never prepare a RenderFragment bound to
|
||||
// the NotAuthorized content except when you are displaying that particular state)
|
||||
RenderFragment renderBaseRouteViewDelegate = builder => base.Render(builder);
|
||||
_renderAuthorizedDelegate = authenticateState => renderBaseRouteViewDelegate;
|
||||
_renderNotAuthorizedDelegate = authenticationState => builder => RenderNotAuthorizedInDefaultLayout(builder, authenticationState);
|
||||
_renderAuthorizingDelegate = RenderAuthorizingInDefaultLayout;
|
||||
_renderAuthorizeRouteViewCoreDelegate = RenderAuthorizeRouteViewCore;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The content that will be displayed if the user is not authorized.
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public RenderFragment<AuthenticationState> NotAuthorized { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The content that will be displayed while asynchronous authorization is in progress.
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public RenderFragment Authorizing { get; set; }
|
||||
|
||||
[CascadingParameter]
|
||||
private Task<AuthenticationState> ExistingCascadedAuthenticationState { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Render(RenderTreeBuilder builder)
|
||||
{
|
||||
if (ExistingCascadedAuthenticationState != null)
|
||||
{
|
||||
// If this component is already wrapped in a <CascadingAuthenticationState> (or another
|
||||
// compatible provider), then don't interfere with the cascaded authentication state.
|
||||
_renderAuthorizeRouteViewCoreDelegate(builder);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, implicitly wrap the output in a <CascadingAuthenticationState>
|
||||
builder.OpenComponent<CascadingAuthenticationState>(0);
|
||||
builder.AddAttribute(1, nameof(CascadingAuthenticationState.ChildContent), _renderAuthorizeRouteViewCoreDelegate);
|
||||
builder.CloseComponent();
|
||||
}
|
||||
}
|
||||
|
||||
private void RenderAuthorizeRouteViewCore(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.OpenComponent<AuthorizeRouteViewCore>(0);
|
||||
builder.AddAttribute(1, nameof(AuthorizeRouteViewCore.RouteData), RouteData);
|
||||
builder.AddAttribute(2, nameof(AuthorizeRouteViewCore.Authorized), _renderAuthorizedDelegate);
|
||||
builder.AddAttribute(3, nameof(AuthorizeRouteViewCore.Authorizing), _renderAuthorizingDelegate);
|
||||
builder.AddAttribute(4, nameof(AuthorizeRouteViewCore.NotAuthorized), _renderNotAuthorizedDelegate);
|
||||
builder.CloseComponent();
|
||||
}
|
||||
|
||||
private void RenderContentInDefaultLayout(RenderTreeBuilder builder, RenderFragment content)
|
||||
{
|
||||
builder.OpenComponent<LayoutView>(0);
|
||||
builder.AddAttribute(1, nameof(LayoutView.Layout), DefaultLayout);
|
||||
builder.AddAttribute(2, nameof(LayoutView.ChildContent), content);
|
||||
builder.CloseComponent();
|
||||
}
|
||||
|
||||
private void RenderNotAuthorizedInDefaultLayout(RenderTreeBuilder builder, AuthenticationState authenticationState)
|
||||
{
|
||||
var content = NotAuthorized ?? _defaultNotAuthorizedContent;
|
||||
RenderContentInDefaultLayout(builder, content(authenticationState));
|
||||
}
|
||||
|
||||
private void RenderAuthorizingInDefaultLayout(RenderTreeBuilder builder)
|
||||
{
|
||||
var content = Authorizing ?? _defaultAuthorizingContent;
|
||||
RenderContentInDefaultLayout(builder, content);
|
||||
}
|
||||
|
||||
private class AuthorizeRouteViewCore : AuthorizeViewCore
|
||||
{
|
||||
[Parameter]
|
||||
public RouteData RouteData { get; set; }
|
||||
|
||||
protected override IAuthorizeData[] GetAuthorizeData()
|
||||
=> AttributeAuthorizeDataCache.GetAuthorizeDataForType(RouteData.PageType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,39 +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.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// Displays differing content depending on the user's authorization status.
|
||||
/// </summary>
|
||||
public class AuthorizeView : AuthorizeViewCore
|
||||
{
|
||||
private readonly IAuthorizeData[] selfAsAuthorizeData;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="AuthorizeView"/>.
|
||||
/// </summary>
|
||||
public AuthorizeView()
|
||||
{
|
||||
selfAsAuthorizeData = new[] { new AuthorizeDataAdapter(this) };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The policy name that determines whether the content can be displayed.
|
||||
/// </summary>
|
||||
[Parameter] public string Policy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A comma delimited list of roles that are allowed to display the content.
|
||||
/// </summary>
|
||||
[Parameter] public string Roles { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the data used for authorization.
|
||||
/// </summary>
|
||||
protected override IAuthorizeData[] GetAuthorizeData()
|
||||
=> selfAsAuthorizeData;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,136 +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.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// A base class for components that display differing content depending on the user's authorization status.
|
||||
/// </summary>
|
||||
public abstract class AuthorizeViewCore : ComponentBase
|
||||
{
|
||||
private AuthenticationState currentAuthenticationState;
|
||||
private bool isAuthorized;
|
||||
|
||||
/// <summary>
|
||||
/// The content that will be displayed if the user is authorized.
|
||||
/// </summary>
|
||||
[Parameter] public RenderFragment<AuthenticationState> ChildContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The content that will be displayed if the user is not authorized.
|
||||
/// </summary>
|
||||
[Parameter] public RenderFragment<AuthenticationState> NotAuthorized { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The content that will be displayed if the user is authorized.
|
||||
/// If you specify a value for this parameter, do not also specify a value for <see cref="ChildContent"/>.
|
||||
/// </summary>
|
||||
[Parameter] public RenderFragment<AuthenticationState> Authorized { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The content that will be displayed while asynchronous authorization is in progress.
|
||||
/// </summary>
|
||||
[Parameter] public RenderFragment Authorizing { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The resource to which access is being controlled.
|
||||
/// </summary>
|
||||
[Parameter] public object Resource { get; set; }
|
||||
|
||||
[CascadingParameter] private Task<AuthenticationState> AuthenticationState { get; set; }
|
||||
|
||||
[Inject] private IAuthorizationPolicyProvider AuthorizationPolicyProvider { get; set; }
|
||||
|
||||
[Inject] private IAuthorizationService AuthorizationService { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
// We're using the same sequence number for each of the content items here
|
||||
// so that we can update existing instances if they are the same shape
|
||||
if (currentAuthenticationState == null)
|
||||
{
|
||||
builder.AddContent(0, Authorizing);
|
||||
}
|
||||
else if (isAuthorized)
|
||||
{
|
||||
var authorized = Authorized ?? ChildContent;
|
||||
builder.AddContent(0, authorized?.Invoke(currentAuthenticationState));
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.AddContent(0, NotAuthorized?.Invoke(currentAuthenticationState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
// We allow 'ChildContent' for convenience in basic cases, and 'Authorized' for symmetry
|
||||
// with 'NotAuthorized' in other cases. Besides naming, they are equivalent. To avoid
|
||||
// confusion, explicitly prevent the case where both are supplied.
|
||||
if (ChildContent != null && Authorized != null)
|
||||
{
|
||||
throw new InvalidOperationException($"Do not specify both '{nameof(Authorized)}' and '{nameof(ChildContent)}'.");
|
||||
}
|
||||
|
||||
if (AuthenticationState == null)
|
||||
{
|
||||
throw new InvalidOperationException($"Authorization requires a cascading parameter of type Task<{nameof(AuthenticationState)}>. Consider using {typeof(CascadingAuthenticationState).Name} to supply this.");
|
||||
}
|
||||
|
||||
// First render in pending state
|
||||
// If the task has already completed, this render will be skipped
|
||||
currentAuthenticationState = null;
|
||||
|
||||
// Then render in completed state
|
||||
// Importantly, we *don't* call StateHasChanged between the following async steps,
|
||||
// otherwise we'd display an incorrect UI state while waiting for IsAuthorizedAsync
|
||||
currentAuthenticationState = await AuthenticationState;
|
||||
isAuthorized = await IsAuthorizedAsync(currentAuthenticationState.User);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the data required to apply authorization rules.
|
||||
/// </summary>
|
||||
protected abstract IAuthorizeData[] GetAuthorizeData();
|
||||
|
||||
private async Task<bool> IsAuthorizedAsync(ClaimsPrincipal user)
|
||||
{
|
||||
var authorizeData = GetAuthorizeData();
|
||||
if (authorizeData == null)
|
||||
{
|
||||
// No authorization applies, so no need to consult the authorization service
|
||||
return true;
|
||||
}
|
||||
|
||||
EnsureNoAuthenticationSchemeSpecified(authorizeData);
|
||||
|
||||
var policy = await AuthorizationPolicy.CombineAsync(
|
||||
AuthorizationPolicyProvider, authorizeData);
|
||||
var result = await AuthorizationService.AuthorizeAsync(user, Resource, policy);
|
||||
return result.Succeeded;
|
||||
}
|
||||
|
||||
private static void EnsureNoAuthenticationSchemeSpecified(IAuthorizeData[] authorizeData)
|
||||
{
|
||||
// It's not meaningful to specify a nonempty scheme, since by the time Components
|
||||
// authorization runs, we already have a specific ClaimsPrincipal (we're stateful).
|
||||
// To avoid any confusion, ensure the developer isn't trying to specify a scheme.
|
||||
for (var i = 0; i < authorizeData.Length; i++)
|
||||
{
|
||||
var entry = authorizeData[i];
|
||||
if (!string.IsNullOrEmpty(entry.AuthenticationSchemes))
|
||||
{
|
||||
throw new NotSupportedException($"The authorization data specifies an authentication scheme with value '{entry.AuthenticationSchemes}'. Authentication schemes cannot be specified for components.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
@implements IDisposable
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||
|
||||
<CascadingValue TValue="Task<AuthenticationState>" Value="@_currentAuthenticationStateTask" ChildContent="@ChildContent" />
|
||||
|
||||
@code {
|
||||
private Task<AuthenticationState> _currentAuthenticationStateTask;
|
||||
|
||||
/// <summary>
|
||||
/// The content to which the authentication state should be provided.
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; }
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
AuthenticationStateProvider.AuthenticationStateChanged += OnAuthenticationStateChanged;
|
||||
|
||||
_currentAuthenticationStateTask = AuthenticationStateProvider
|
||||
.GetAuthenticationStateAsync();
|
||||
}
|
||||
|
||||
private void OnAuthenticationStateChanged(Task<AuthenticationState> newAuthStateTask)
|
||||
{
|
||||
_ = InvokeAsync(() =>
|
||||
{
|
||||
_currentAuthenticationStateTask = newAuthStateTask;
|
||||
StateHasChanged();
|
||||
});
|
||||
}
|
||||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
AuthenticationStateProvider.AuthenticationStateChanged -= OnAuthenticationStateChanged;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
/// <summary>
|
||||
/// An interface implemented by <see cref="AuthenticationStateProvider"/> classes that can receive authentication
|
||||
/// state information from the host environment.
|
||||
/// </summary>
|
||||
public interface IHostEnvironmentAuthenticationStateProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Supplies updated authentication state data to the <see cref="AuthenticationStateProvider"/>.
|
||||
/// </summary>
|
||||
/// <param name="authenticationStateTask">A task that resolves with the updated <see cref="AuthenticationState"/>.</param>
|
||||
void SetAuthenticationState(Task<AuthenticationState> authenticationStateTask);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Razor">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;$(DefaultNetCoreTargetFramework)</TargetFrameworks>
|
||||
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' == 'true'">$(DefaultNetCoreTargetFramework)</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>
|
||||
|
|
@ -1,356 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
using Microsoft.AspNetCore.Components.Test.Helpers;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class AuthorizeRouteViewTest
|
||||
{
|
||||
private readonly static IReadOnlyDictionary<string, object> EmptyParametersDictionary = new Dictionary<string, object>();
|
||||
private readonly TestAuthenticationStateProvider _authenticationStateProvider;
|
||||
private readonly TestRenderer _renderer;
|
||||
private readonly RouteView _authorizeRouteViewComponent;
|
||||
private readonly int _authorizeRouteViewComponentId;
|
||||
private readonly TestAuthorizationService _testAuthorizationService;
|
||||
|
||||
public AuthorizeRouteViewTest()
|
||||
{
|
||||
_authenticationStateProvider = new TestAuthenticationStateProvider();
|
||||
_authenticationStateProvider.CurrentAuthStateTask = Task.FromResult(
|
||||
new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())));
|
||||
|
||||
_testAuthorizationService = new TestAuthorizationService();
|
||||
|
||||
var serviceCollection = new ServiceCollection();
|
||||
serviceCollection.AddSingleton<AuthenticationStateProvider>(_authenticationStateProvider);
|
||||
serviceCollection.AddSingleton<IAuthorizationPolicyProvider, TestAuthorizationPolicyProvider>();
|
||||
serviceCollection.AddSingleton<IAuthorizationService>(_testAuthorizationService);
|
||||
|
||||
_renderer = new TestRenderer(serviceCollection.BuildServiceProvider());
|
||||
_authorizeRouteViewComponent = new AuthorizeRouteView();
|
||||
_authorizeRouteViewComponentId = _renderer.AssignRootComponentId(_authorizeRouteViewComponent);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenAuthorized_RendersPageInsideLayout()
|
||||
{
|
||||
// Arrange
|
||||
var routeData = new RouteData(typeof(TestPageRequiringAuthorization), new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(TestPageRequiringAuthorization.Message), "Hello, world!" }
|
||||
});
|
||||
_testAuthorizationService.NextResult = AuthorizationResult.Success();
|
||||
|
||||
// Act
|
||||
_renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData },
|
||||
{ nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) },
|
||||
}));
|
||||
|
||||
// Assert: renders layout
|
||||
var batch = _renderer.Batches.Single();
|
||||
var layoutDiff = batch.GetComponentDiffs<TestLayout>().Single();
|
||||
Assert.Collection(layoutDiff.Edits,
|
||||
edit => AssertPrependText(batch, edit, "Layout starts here"),
|
||||
edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Component<TestPageRequiringAuthorization>(batch.ReferenceFrames[edit.ReferenceFrameIndex]);
|
||||
},
|
||||
edit => AssertPrependText(batch, edit, "Layout ends here"));
|
||||
|
||||
// Assert: renders page
|
||||
var pageDiff = batch.GetComponentDiffs<TestPageRequiringAuthorization>().Single();
|
||||
Assert.Collection(pageDiff.Edits,
|
||||
edit => AssertPrependText(batch, edit, "Hello from the page with message: Hello, world!"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenNotAuthorized_RendersDefaultNotAuthorizedContentInsideLayout()
|
||||
{
|
||||
// Arrange
|
||||
var routeData = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary);
|
||||
_testAuthorizationService.NextResult = AuthorizationResult.Failed();
|
||||
|
||||
// Act
|
||||
_renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData },
|
||||
{ nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) },
|
||||
}));
|
||||
|
||||
// Assert: renders layout containing "not authorized" message
|
||||
var batch = _renderer.Batches.Single();
|
||||
var layoutDiff = batch.GetComponentDiffs<TestLayout>().Single();
|
||||
Assert.Collection(layoutDiff.Edits,
|
||||
edit => AssertPrependText(batch, edit, "Layout starts here"),
|
||||
edit => AssertPrependText(batch, edit, "Not authorized"),
|
||||
edit => AssertPrependText(batch, edit, "Layout ends here"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenNotAuthorized_RendersCustomNotAuthorizedContentInsideLayout()
|
||||
{
|
||||
// Arrange
|
||||
var routeData = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary);
|
||||
_testAuthorizationService.NextResult = AuthorizationResult.Failed();
|
||||
_authenticationStateProvider.CurrentAuthStateTask = Task.FromResult(new AuthenticationState(
|
||||
new ClaimsPrincipal(new TestIdentity { Name = "Bert" })));
|
||||
|
||||
// Act
|
||||
RenderFragment<AuthenticationState> customNotAuthorized =
|
||||
state => builder => builder.AddContent(0, $"Go away, {state.User.Identity.Name}");
|
||||
_renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData },
|
||||
{ nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) },
|
||||
{ nameof(AuthorizeRouteView.NotAuthorized), customNotAuthorized },
|
||||
}));
|
||||
|
||||
// Assert: renders layout containing "not authorized" message
|
||||
var batch = _renderer.Batches.Single();
|
||||
var layoutDiff = batch.GetComponentDiffs<TestLayout>().Single();
|
||||
Assert.Collection(layoutDiff.Edits,
|
||||
edit => AssertPrependText(batch, edit, "Layout starts here"),
|
||||
edit => AssertPrependText(batch, edit, "Go away, Bert"),
|
||||
edit => AssertPrependText(batch, edit, "Layout ends here"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task WhenAuthorizing_RendersDefaultAuthorizingContentInsideLayout()
|
||||
{
|
||||
// Arrange
|
||||
var routeData = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary);
|
||||
var authStateTcs = new TaskCompletionSource<AuthenticationState>();
|
||||
_authenticationStateProvider.CurrentAuthStateTask = authStateTcs.Task;
|
||||
RenderFragment<AuthenticationState> customNotAuthorized =
|
||||
state => builder => builder.AddContent(0, $"Go away, {state.User.Identity.Name}");
|
||||
|
||||
// Act
|
||||
var firstRenderTask = _renderer.RenderRootComponentAsync(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData },
|
||||
{ nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) },
|
||||
{ nameof(AuthorizeRouteView.NotAuthorized), customNotAuthorized },
|
||||
}));
|
||||
|
||||
// Assert: renders layout containing "authorizing" message
|
||||
Assert.False(firstRenderTask.IsCompleted);
|
||||
var batch = _renderer.Batches.Single();
|
||||
var layoutDiff = batch.GetComponentDiffs<TestLayout>().Single();
|
||||
Assert.Collection(layoutDiff.Edits,
|
||||
edit => AssertPrependText(batch, edit, "Layout starts here"),
|
||||
edit => AssertPrependText(batch, edit, "Authorizing..."),
|
||||
edit => AssertPrependText(batch, edit, "Layout ends here"));
|
||||
|
||||
// Act 2: updates when authorization completes
|
||||
authStateTcs.SetResult(new AuthenticationState(
|
||||
new ClaimsPrincipal(new TestIdentity { Name = "Bert" })));
|
||||
await firstRenderTask;
|
||||
|
||||
// Assert 2: Only the layout is updated
|
||||
batch = _renderer.Batches.Skip(1).Single();
|
||||
var nonEmptyDiff = batch.DiffsInOrder.Where(d => d.Edits.Any()).Single();
|
||||
Assert.Equal(layoutDiff.ComponentId, nonEmptyDiff.ComponentId);
|
||||
Assert.Collection(nonEmptyDiff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.UpdateText, edit.Type);
|
||||
Assert.Equal(1, edit.SiblingIndex);
|
||||
AssertFrame.Text(batch.ReferenceFrames[edit.ReferenceFrameIndex], "Go away, Bert");
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenAuthorizing_RendersCustomAuthorizingContentInsideLayout()
|
||||
{
|
||||
// Arrange
|
||||
var routeData = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary);
|
||||
var authStateTcs = new TaskCompletionSource<AuthenticationState>();
|
||||
_authenticationStateProvider.CurrentAuthStateTask = authStateTcs.Task;
|
||||
RenderFragment customAuthorizing =
|
||||
builder => builder.AddContent(0, "Hold on, we're checking your papers.");
|
||||
|
||||
// Act
|
||||
var firstRenderTask = _renderer.RenderRootComponentAsync(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData },
|
||||
{ nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) },
|
||||
{ nameof(AuthorizeRouteView.Authorizing), customAuthorizing },
|
||||
}));
|
||||
|
||||
// Assert: renders layout containing "authorizing" message
|
||||
Assert.False(firstRenderTask.IsCompleted);
|
||||
var batch = _renderer.Batches.Single();
|
||||
var layoutDiff = batch.GetComponentDiffs<TestLayout>().Single();
|
||||
Assert.Collection(layoutDiff.Edits,
|
||||
edit => AssertPrependText(batch, edit, "Layout starts here"),
|
||||
edit => AssertPrependText(batch, edit, "Hold on, we're checking your papers."),
|
||||
edit => AssertPrependText(batch, edit, "Layout ends here"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WithoutCascadedAuthenticationState_WrapsOutputInCascadingAuthenticationState()
|
||||
{
|
||||
// Arrange/Act
|
||||
var routeData = new RouteData(typeof(TestPageWithNoAuthorization), EmptyParametersDictionary);
|
||||
_renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData }
|
||||
}));
|
||||
|
||||
// Assert
|
||||
var batch = _renderer.Batches.Single();
|
||||
var componentInstances = batch.ReferenceFrames
|
||||
.Where(f => f.FrameType == RenderTreeFrameType.Component)
|
||||
.Select(f => f.Component);
|
||||
|
||||
Assert.Collection(componentInstances,
|
||||
// This is the hierarchy inside the AuthorizeRouteView, which contains its
|
||||
// own CascadingAuthenticationState
|
||||
component => Assert.IsType<CascadingAuthenticationState>(component),
|
||||
component => Assert.IsType<CascadingValue<Task<AuthenticationState>>>(component),
|
||||
component => Assert.IsAssignableFrom<AuthorizeViewCore>(component),
|
||||
component => Assert.IsType<LayoutView>(component),
|
||||
component => Assert.IsType<TestPageWithNoAuthorization>(component));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WithCascadedAuthenticationState_DoesNotWrapOutputInCascadingAuthenticationState()
|
||||
{
|
||||
// Arrange
|
||||
var routeData = new RouteData(typeof(TestPageWithNoAuthorization), EmptyParametersDictionary);
|
||||
var rootComponent = new AuthorizeRouteViewWithExistingCascadedAuthenticationState(
|
||||
_authenticationStateProvider.CurrentAuthStateTask,
|
||||
routeData);
|
||||
var rootComponentId = _renderer.AssignRootComponentId(rootComponent);
|
||||
|
||||
// Act
|
||||
_renderer.RenderRootComponent(rootComponentId);
|
||||
|
||||
// Assert
|
||||
var batch = _renderer.Batches.Single();
|
||||
var componentInstances = batch.ReferenceFrames
|
||||
.Where(f => f.FrameType == RenderTreeFrameType.Component)
|
||||
.Select(f => f.Component);
|
||||
|
||||
Assert.Collection(componentInstances,
|
||||
// This is the externally-supplied cascading value
|
||||
component => Assert.IsType<CascadingValue<Task<AuthenticationState>>>(component),
|
||||
component => Assert.IsType<AuthorizeRouteView>(component),
|
||||
|
||||
// This is the hierarchy inside the AuthorizeRouteView. It doesn't contain a
|
||||
// further CascadingAuthenticationState
|
||||
component => Assert.IsAssignableFrom<AuthorizeViewCore>(component),
|
||||
component => Assert.IsType<LayoutView>(component),
|
||||
component => Assert.IsType<TestPageWithNoAuthorization>(component));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UpdatesOutputWhenRouteDataChanges()
|
||||
{
|
||||
// Arrange/Act 1: Start on some route
|
||||
// Not asserting about the initial output, as that is covered by other tests
|
||||
var routeData = new RouteData(typeof(TestPageWithNoAuthorization), EmptyParametersDictionary);
|
||||
_renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData },
|
||||
{ nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) },
|
||||
}));
|
||||
|
||||
// Act 2: Move to another route
|
||||
var routeData2 = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary);
|
||||
var render2Task = _renderer.Dispatcher.InvokeAsync(() => _authorizeRouteViewComponent.SetParametersAsync(ParameterView.FromDictionary(new Dictionary<string, object>
|
||||
{
|
||||
{ nameof(AuthorizeRouteView.RouteData), routeData2 },
|
||||
})));
|
||||
|
||||
// Assert: we retain the layout instance, and mutate its contents
|
||||
Assert.True(render2Task.IsCompletedSuccessfully);
|
||||
Assert.Equal(2, _renderer.Batches.Count);
|
||||
var batch2 = _renderer.Batches[1];
|
||||
var diff = batch2.DiffsInOrder.Where(d => d.Edits.Any()).Single();
|
||||
Assert.Collection(diff.Edits,
|
||||
edit =>
|
||||
{
|
||||
// Inside the layout, we add the new content
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
Assert.Equal(1, edit.SiblingIndex);
|
||||
AssertFrame.Text(batch2.ReferenceFrames[edit.ReferenceFrameIndex], "Not authorized");
|
||||
},
|
||||
edit =>
|
||||
{
|
||||
// ... and remove the old content
|
||||
Assert.Equal(RenderTreeEditType.RemoveFrame, edit.Type);
|
||||
Assert.Equal(2, edit.SiblingIndex);
|
||||
});
|
||||
}
|
||||
|
||||
private static void AssertPrependText(CapturedBatch batch, RenderTreeEdit edit, string text)
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
ref var referenceFrame = ref batch.ReferenceFrames[edit.ReferenceFrameIndex];
|
||||
AssertFrame.Text(referenceFrame, text);
|
||||
}
|
||||
|
||||
class TestPageWithNoAuthorization : ComponentBase { }
|
||||
|
||||
[Authorize]
|
||||
class TestPageRequiringAuthorization : ComponentBase
|
||||
{
|
||||
[Parameter] public string Message { get; set; }
|
||||
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.AddContent(0, $"Hello from the page with message: {Message}");
|
||||
}
|
||||
}
|
||||
|
||||
class TestLayout : LayoutComponentBase
|
||||
{
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.AddContent(0, "Layout starts here");
|
||||
builder.AddContent(1, Body);
|
||||
builder.AddContent(2, "Layout ends here");
|
||||
}
|
||||
}
|
||||
|
||||
class AuthorizeRouteViewWithExistingCascadedAuthenticationState : AutoRenderComponent
|
||||
{
|
||||
private readonly Task<AuthenticationState> _authenticationState;
|
||||
private readonly RouteData _routeData;
|
||||
|
||||
public AuthorizeRouteViewWithExistingCascadedAuthenticationState(
|
||||
Task<AuthenticationState> authenticationState,
|
||||
RouteData routeData)
|
||||
{
|
||||
_authenticationState = authenticationState;
|
||||
_routeData = routeData;
|
||||
}
|
||||
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.OpenComponent<CascadingValue<Task<AuthenticationState>>>(0);
|
||||
builder.AddAttribute(1, nameof(CascadingValue<object>.Value), _authenticationState);
|
||||
builder.AddAttribute(2, nameof(CascadingValue<object>.ChildContent), (RenderFragment)(builder =>
|
||||
{
|
||||
builder.OpenComponent<AuthorizeRouteView>(0);
|
||||
builder.AddAttribute(1, nameof(AuthorizeRouteView.RouteData), _routeData);
|
||||
builder.CloseComponent();
|
||||
}));
|
||||
builder.CloseComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,524 +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.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Security.Principal;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Authorization.Infrastructure;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
using Microsoft.AspNetCore.Components.Test.Helpers;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class AuthorizeViewTest
|
||||
{
|
||||
// Nothing should exceed the timeout in a successful run of the the tests, this is just here to catch
|
||||
// failures.
|
||||
private static readonly TimeSpan Timeout = Debugger.IsAttached ? System.Threading.Timeout.InfiniteTimeSpan : TimeSpan.FromSeconds(10);
|
||||
|
||||
[Fact]
|
||||
public void RendersNothingIfNotAuthorized()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
childContent:
|
||||
context => builder => builder.AddContent(0, "This should not be rendered"));
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
var diff = renderer.Batches.Single().GetComponentDiffs<AuthorizeView>().Single();
|
||||
Assert.Empty(diff.Edits);
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Null(call.user.Identity);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersNotAuthorizedIfNotAuthorized()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
notAuthorized:
|
||||
context => builder => builder.AddContent(0, $"You are not authorized, even though we know you are {context.User.Identity.Name}"));
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
var diff = renderer.Batches.Single().GetComponentDiffs<AuthorizeView>().Single();
|
||||
Assert.Collection(diff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
renderer.Batches.Single().ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"You are not authorized, even though we know you are Nellie");
|
||||
});
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersNothingIfAuthorizedButNoChildContentOrAuthorizedProvided()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
authorizationService.NextResult = AuthorizationResult.Success();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView();
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
var diff = renderer.Batches.Single().GetComponentDiffs<AuthorizeView>().Single();
|
||||
Assert.Empty(diff.Edits);
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersChildContentIfAuthorized()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
authorizationService.NextResult = AuthorizationResult.Success();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
childContent: context => builder =>
|
||||
builder.AddContent(0, $"You are authenticated as {context.User.Identity.Name}"));
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
var diff = renderer.Batches.Single().GetComponentDiffs<AuthorizeView>().Single();
|
||||
Assert.Collection(diff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
renderer.Batches.Single().ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"You are authenticated as Nellie");
|
||||
});
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersAuthorizedIfAuthorized()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
authorizationService.NextResult = AuthorizationResult.Success();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
authorized: context => builder =>
|
||||
builder.AddContent(0, $"You are authenticated as {context.User.Identity.Name}"));
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
var diff = renderer.Batches.Single().GetComponentDiffs<AuthorizeView>().Single();
|
||||
Assert.Collection(diff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
renderer.Batches.Single().ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"You are authenticated as Nellie");
|
||||
});
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RespondsToChangeInAuthorizationState()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
authorizationService.NextResult = AuthorizationResult.Success();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
childContent: context => builder =>
|
||||
builder.AddContent(0, $"You are authenticated as {context.User.Identity.Name}"));
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Render in initial state. From other tests, we know this renders
|
||||
// a single batch with the correct output.
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
var authorizeViewComponentId = renderer.Batches.Single()
|
||||
.GetComponentFrames<AuthorizeView>().Single().ComponentId;
|
||||
authorizationService.AuthorizeCalls.Clear();
|
||||
|
||||
// Act
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Ronaldo");
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert: It's only one new diff. We skip the intermediate "await" render state
|
||||
// because the task was completed synchronously.
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
var batch = renderer.Batches.Last();
|
||||
var diff = batch.DiffsByComponentId[authorizeViewComponentId].Single();
|
||||
Assert.Collection(diff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.UpdateText, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"You are authenticated as Ronaldo");
|
||||
});
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Ronaldo", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ThrowsIfBothChildContentAndAuthorizedProvided()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
authorized: context => builder => { },
|
||||
childContent: context => builder => { });
|
||||
|
||||
// Act/Assert
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
var ex = Assert.Throws<InvalidOperationException>(() =>
|
||||
rootComponent.TriggerRender());
|
||||
Assert.Equal("Do not specify both 'Authorized' and 'ChildContent'.", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersNothingUntilAuthorizationCompleted()
|
||||
{
|
||||
// Arrange
|
||||
var @event = new ManualResetEventSlim();
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
renderer.OnUpdateDisplayComplete = () => { @event.Set(); };
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
notAuthorized:
|
||||
context => builder => builder.AddContent(0, "You are not authorized"));
|
||||
var authTcs = new TaskCompletionSource<AuthenticationState>();
|
||||
rootComponent.AuthenticationState = authTcs.Task;
|
||||
|
||||
// Act/Assert 1: Auth pending
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
var batch1 = renderer.Batches.Single();
|
||||
var authorizeViewComponentId = batch1.GetComponentFrames<AuthorizeView>().Single().ComponentId;
|
||||
var diff1 = batch1.DiffsByComponentId[authorizeViewComponentId].Single();
|
||||
Assert.Empty(diff1.Edits);
|
||||
|
||||
// Act/Assert 2: Auth process completes asynchronously
|
||||
@event.Reset();
|
||||
authTcs.SetResult(new AuthenticationState(new ClaimsPrincipal()));
|
||||
|
||||
// We need to wait here because the continuations of SetResult will be scheduled to run asynchronously.
|
||||
@event.Wait(Timeout);
|
||||
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
var batch2 = renderer.Batches[1];
|
||||
var diff2 = batch2.DiffsByComponentId[authorizeViewComponentId].Single();
|
||||
Assert.Collection(diff2.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch2.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"You are not authorized");
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RendersAuthorizingUntilAuthorizationCompleted()
|
||||
{
|
||||
// Arrange
|
||||
var @event = new ManualResetEventSlim();
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
authorizationService.NextResult = AuthorizationResult.Success();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
renderer.OnUpdateDisplayComplete = () => { @event.Set(); };
|
||||
var rootComponent = WrapInAuthorizeView(
|
||||
authorizing: builder => builder.AddContent(0, "Auth pending..."),
|
||||
authorized: context => builder => builder.AddContent(0, $"Hello, {context.User.Identity.Name}!"));
|
||||
var authTcs = new TaskCompletionSource<AuthenticationState>();
|
||||
rootComponent.AuthenticationState = authTcs.Task;
|
||||
|
||||
// Act/Assert 1: Auth pending
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
var batch1 = renderer.Batches.Single();
|
||||
var authorizeViewComponentId = batch1.GetComponentFrames<AuthorizeView>().Single().ComponentId;
|
||||
var diff1 = batch1.DiffsByComponentId[authorizeViewComponentId].Single();
|
||||
Assert.Collection(diff1.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch1.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"Auth pending...");
|
||||
});
|
||||
|
||||
// Act/Assert 2: Auth process completes asynchronously
|
||||
@event.Reset();
|
||||
authTcs.SetResult(CreateAuthenticationState("Monsieur").Result);
|
||||
|
||||
// We need to wait here because the continuations of SetResult will be scheduled to run asynchronously.
|
||||
@event.Wait(Timeout);
|
||||
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
var batch2 = renderer.Batches[1];
|
||||
var diff2 = batch2.DiffsByComponentId[authorizeViewComponentId].Single();
|
||||
Assert.Collection(diff2.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.UpdateText, edit.Type);
|
||||
Assert.Equal(0, edit.SiblingIndex);
|
||||
AssertFrame.Text(
|
||||
batch2.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"Hello, Monsieur!");
|
||||
});
|
||||
|
||||
// Assert: The IAuthorizationService was given expected criteria
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Monsieur", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IncludesPolicyInAuthorizeCall()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(policy: "MyTestPolicy");
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements,
|
||||
req => Assert.Equal("MyTestPolicy", ((TestPolicyRequirement)req).PolicyName));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IncludesRolesInAuthorizeCall()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = WrapInAuthorizeView(roles: "SuperTestRole1, SuperTestRole2");
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Null(call.resource);
|
||||
Assert.Collection(call.requirements, req => Assert.Equal(
|
||||
new[] { "SuperTestRole1", "SuperTestRole2" },
|
||||
((RolesAuthorizationRequirement)req).AllowedRoles));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IncludesResourceInAuthorizeCall()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var resource = new object();
|
||||
var rootComponent = WrapInAuthorizeView(resource: resource);
|
||||
rootComponent.AuthenticationState = CreateAuthenticationState("Nellie");
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
rootComponent.TriggerRender();
|
||||
|
||||
// Assert
|
||||
Assert.Collection(authorizationService.AuthorizeCalls, call =>
|
||||
{
|
||||
Assert.Equal("Nellie", call.user.Identity.Name);
|
||||
Assert.Same(resource, call.resource);
|
||||
Assert.Collection(call.requirements, req =>
|
||||
Assert.IsType<DenyAnonymousAuthorizationRequirement>(req));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RejectsNonemptyScheme()
|
||||
{
|
||||
// Arrange
|
||||
var authorizationService = new TestAuthorizationService();
|
||||
var renderer = CreateTestRenderer(authorizationService);
|
||||
var rootComponent = new TestAuthStateProviderComponent(builder =>
|
||||
{
|
||||
builder.OpenComponent<AuthorizeViewCoreWithScheme>(0);
|
||||
builder.CloseComponent();
|
||||
});
|
||||
renderer.AssignRootComponentId(rootComponent);
|
||||
|
||||
// Act/Assert
|
||||
var ex = Assert.Throws<NotSupportedException>(rootComponent.TriggerRender);
|
||||
Assert.Equal("The authorization data specifies an authentication scheme with value 'test scheme'. Authentication schemes cannot be specified for components.", ex.Message);
|
||||
}
|
||||
|
||||
private static TestAuthStateProviderComponent WrapInAuthorizeView(
|
||||
RenderFragment<AuthenticationState> childContent = null,
|
||||
RenderFragment<AuthenticationState> authorized = null,
|
||||
RenderFragment<AuthenticationState> notAuthorized = null,
|
||||
RenderFragment authorizing = null,
|
||||
string policy = null,
|
||||
string roles = null,
|
||||
object resource = null)
|
||||
{
|
||||
return new TestAuthStateProviderComponent(builder =>
|
||||
{
|
||||
builder.OpenComponent<AuthorizeView>(0);
|
||||
builder.AddAttribute(1, nameof(AuthorizeView.ChildContent), childContent);
|
||||
builder.AddAttribute(2, nameof(AuthorizeView.Authorized), authorized);
|
||||
builder.AddAttribute(3, nameof(AuthorizeView.NotAuthorized), notAuthorized);
|
||||
builder.AddAttribute(4, nameof(AuthorizeView.Authorizing), authorizing);
|
||||
builder.AddAttribute(5, nameof(AuthorizeView.Policy), policy);
|
||||
builder.AddAttribute(6, nameof(AuthorizeView.Roles), roles);
|
||||
builder.AddAttribute(7, nameof(AuthorizeView.Resource), resource);
|
||||
builder.CloseComponent();
|
||||
});
|
||||
}
|
||||
|
||||
class TestAuthStateProviderComponent : AutoRenderComponent
|
||||
{
|
||||
private readonly RenderFragment _childContent;
|
||||
|
||||
public Task<AuthenticationState> AuthenticationState { get; set; }
|
||||
= Task.FromResult(new AuthenticationState(new ClaimsPrincipal()));
|
||||
|
||||
public TestAuthStateProviderComponent(RenderFragment childContent)
|
||||
{
|
||||
_childContent = childContent;
|
||||
}
|
||||
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.OpenComponent<CascadingValue<Task<AuthenticationState>>>(0);
|
||||
builder.AddAttribute(1, nameof(CascadingValue<Task<AuthenticationState>>.Value), AuthenticationState);
|
||||
builder.AddAttribute(2, "ChildContent", (RenderFragment)(builder =>
|
||||
{
|
||||
builder.OpenComponent<NeverReRenderComponent>(0);
|
||||
builder.AddAttribute(1, "ChildContent", _childContent);
|
||||
builder.CloseComponent();
|
||||
}));
|
||||
builder.CloseComponent();
|
||||
}
|
||||
}
|
||||
|
||||
// This is useful to show that the reason why a CascadingValue refreshes is because the
|
||||
// value itself changed, not just that we're re-rendering the entire tree and have to
|
||||
// recurse into all descendants because we're passing ChildContent
|
||||
class NeverReRenderComponent : ComponentBase
|
||||
{
|
||||
[Parameter] public RenderFragment ChildContent { get; set; }
|
||||
|
||||
protected override bool ShouldRender() => false;
|
||||
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.AddContent(0, ChildContent);
|
||||
}
|
||||
}
|
||||
|
||||
public static Task<AuthenticationState> CreateAuthenticationState(string username)
|
||||
=> Task.FromResult(new AuthenticationState(
|
||||
new ClaimsPrincipal(new TestIdentity { Name = username })));
|
||||
|
||||
public TestRenderer CreateTestRenderer(IAuthorizationService authorizationService)
|
||||
{
|
||||
var serviceCollection = new ServiceCollection();
|
||||
serviceCollection.AddSingleton(authorizationService);
|
||||
serviceCollection.AddSingleton<IAuthorizationPolicyProvider>(new TestAuthorizationPolicyProvider());
|
||||
return new TestRenderer(serviceCollection.BuildServiceProvider());
|
||||
}
|
||||
|
||||
public class AuthorizeViewCoreWithScheme : AuthorizeViewCore
|
||||
{
|
||||
protected override IAuthorizeData[] GetAuthorizeData()
|
||||
=> new[] { new AuthorizeAttribute { AuthenticationSchemes = "test scheme" } };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,207 +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.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Security.Principal;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
using Microsoft.AspNetCore.Components.Test.Helpers;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class CascadingAuthenticationStateTest
|
||||
{
|
||||
[Fact]
|
||||
public void RequiresRegisteredService()
|
||||
{
|
||||
// Arrange
|
||||
var renderer = new TestRenderer();
|
||||
var component = new AutoRenderFragmentComponent(builder =>
|
||||
{
|
||||
builder.OpenComponent<CascadingAuthenticationState>(0);
|
||||
builder.CloseComponent();
|
||||
});
|
||||
|
||||
// Act/Assert
|
||||
renderer.AssignRootComponentId(component);
|
||||
var ex = Assert.Throws<InvalidOperationException>(() => component.TriggerRender());
|
||||
Assert.Contains($"There is no registered service of type '{typeof(AuthenticationStateProvider).FullName}'.", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SuppliesSynchronouslyAvailableAuthStateToChildContent()
|
||||
{
|
||||
// Arrange: Service
|
||||
var services = new ServiceCollection();
|
||||
var authStateProvider = new TestAuthenticationStateProvider()
|
||||
{
|
||||
CurrentAuthStateTask = Task.FromResult(CreateAuthenticationState("Bert"))
|
||||
};
|
||||
services.AddSingleton<AuthenticationStateProvider>(authStateProvider);
|
||||
|
||||
// Arrange: Renderer and component
|
||||
var renderer = new TestRenderer(services.BuildServiceProvider());
|
||||
var component = new UseCascadingAuthenticationStateComponent();
|
||||
|
||||
// Act
|
||||
renderer.AssignRootComponentId(component);
|
||||
component.TriggerRender();
|
||||
|
||||
// Assert
|
||||
var batch = renderer.Batches.Single();
|
||||
var receiveAuthStateId = batch.GetComponentFrames<ReceiveAuthStateComponent>().Single().ComponentId;
|
||||
var receiveAuthStateDiff = batch.DiffsByComponentId[receiveAuthStateId].Single();
|
||||
Assert.Collection(receiveAuthStateDiff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"Authenticated: True; Name: Bert; Pending: False; Renders: 1");
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SuppliesAsynchronouslyAvailableAuthStateToChildContent()
|
||||
{
|
||||
// Arrange: Service
|
||||
var services = new ServiceCollection();
|
||||
var authStateTaskCompletionSource = new TaskCompletionSource<AuthenticationState>();
|
||||
var authStateProvider = new TestAuthenticationStateProvider()
|
||||
{
|
||||
CurrentAuthStateTask = authStateTaskCompletionSource.Task
|
||||
};
|
||||
services.AddSingleton<AuthenticationStateProvider>(authStateProvider);
|
||||
|
||||
// Arrange: Renderer and component
|
||||
var renderer = new TestRenderer(services.BuildServiceProvider());
|
||||
var component = new UseCascadingAuthenticationStateComponent();
|
||||
|
||||
// Act 1: Initial synchronous render
|
||||
renderer.AssignRootComponentId(component);
|
||||
component.TriggerRender();
|
||||
|
||||
// Assert 1: Empty state
|
||||
var batch1 = renderer.Batches.Single();
|
||||
var receiveAuthStateFrame = batch1.GetComponentFrames<ReceiveAuthStateComponent>().Single();
|
||||
var receiveAuthStateId = receiveAuthStateFrame.ComponentId;
|
||||
var receiveAuthStateComponent = (ReceiveAuthStateComponent)receiveAuthStateFrame.Component;
|
||||
var receiveAuthStateDiff1 = batch1.DiffsByComponentId[receiveAuthStateId].Single();
|
||||
Assert.Collection(receiveAuthStateDiff1.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch1.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"Authenticated: False; Name: ; Pending: True; Renders: 1");
|
||||
});
|
||||
|
||||
// Act/Assert 2: Auth state fetch task completes in background
|
||||
// No new renders yet, because the cascading parameter itself hasn't changed
|
||||
authStateTaskCompletionSource.SetResult(CreateAuthenticationState("Bert"));
|
||||
Assert.Single(renderer.Batches);
|
||||
|
||||
// Act/Assert 3: Refresh display
|
||||
receiveAuthStateComponent.TriggerRender();
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
var batch2 = renderer.Batches.Last();
|
||||
var receiveAuthStateDiff2 = batch2.DiffsByComponentId[receiveAuthStateId].Single();
|
||||
Assert.Collection(receiveAuthStateDiff2.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.UpdateText, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch2.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"Authenticated: True; Name: Bert; Pending: False; Renders: 2");
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RespondsToNotificationsFromAuthenticationStateProvider()
|
||||
{
|
||||
// Arrange: Service
|
||||
var services = new ServiceCollection();
|
||||
var authStateProvider = new TestAuthenticationStateProvider()
|
||||
{
|
||||
CurrentAuthStateTask = Task.FromResult(CreateAuthenticationState(null))
|
||||
};
|
||||
services.AddSingleton<AuthenticationStateProvider>(authStateProvider);
|
||||
|
||||
// Arrange: Renderer and component, initially rendered
|
||||
var renderer = new TestRenderer(services.BuildServiceProvider());
|
||||
var component = new UseCascadingAuthenticationStateComponent();
|
||||
renderer.AssignRootComponentId(component);
|
||||
component.TriggerRender();
|
||||
var receiveAuthStateId = renderer.Batches.Single()
|
||||
.GetComponentFrames<ReceiveAuthStateComponent>().Single().ComponentId;
|
||||
|
||||
// Act 2: AuthenticationStateProvider issues notification
|
||||
authStateProvider.TriggerAuthenticationStateChanged(
|
||||
Task.FromResult(CreateAuthenticationState("Bert")));
|
||||
|
||||
// Assert 2: Re-renders content
|
||||
Assert.Equal(2, renderer.Batches.Count);
|
||||
var batch = renderer.Batches.Last();
|
||||
var receiveAuthStateDiff = batch.DiffsByComponentId[receiveAuthStateId].Single();
|
||||
Assert.Collection(receiveAuthStateDiff.Edits, edit =>
|
||||
{
|
||||
Assert.Equal(RenderTreeEditType.UpdateText, edit.Type);
|
||||
AssertFrame.Text(
|
||||
batch.ReferenceFrames[edit.ReferenceFrameIndex],
|
||||
"Authenticated: True; Name: Bert; Pending: False; Renders: 2");
|
||||
});
|
||||
}
|
||||
|
||||
class ReceiveAuthStateComponent : AutoRenderComponent
|
||||
{
|
||||
int numRenders;
|
||||
|
||||
[CascadingParameter] Task<AuthenticationState> AuthStateTask { get; set; }
|
||||
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
numRenders++;
|
||||
|
||||
if (AuthStateTask.IsCompleted)
|
||||
{
|
||||
var identity = AuthStateTask.Result.User.Identity;
|
||||
builder.AddContent(0, $"Authenticated: {identity.IsAuthenticated}; Name: {identity.Name}; Pending: False; Renders: {numRenders}");
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.AddContent(0, $"Authenticated: False; Name: ; Pending: True; Renders: {numRenders}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UseCascadingAuthenticationStateComponent : AutoRenderComponent
|
||||
{
|
||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.OpenComponent<CascadingAuthenticationState>(0);
|
||||
builder.AddAttribute(1, "ChildContent", new RenderFragment(childBuilder =>
|
||||
{
|
||||
childBuilder.OpenComponent<ReceiveAuthStateComponent>(0);
|
||||
childBuilder.CloseComponent();
|
||||
}));
|
||||
builder.CloseComponent();
|
||||
}
|
||||
}
|
||||
|
||||
public static AuthenticationState CreateAuthenticationState(string username)
|
||||
=> new AuthenticationState(new ClaimsPrincipal(username == null
|
||||
? new ClaimsIdentity()
|
||||
: (IIdentity)new TestIdentity { Name = username }));
|
||||
|
||||
class TestIdentity : IIdentity
|
||||
{
|
||||
public string AuthenticationType => "Test";
|
||||
|
||||
public bool IsAuthenticated => true;
|
||||
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</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,22 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestAuthenticationStateProvider : AuthenticationStateProvider
|
||||
{
|
||||
public Task<AuthenticationState> CurrentAuthStateTask { get; set; }
|
||||
|
||||
public override Task<AuthenticationState> GetAuthenticationStateAsync()
|
||||
{
|
||||
return CurrentAuthStateTask;
|
||||
}
|
||||
|
||||
internal void TriggerAuthenticationStateChanged(Task<AuthenticationState> authState)
|
||||
{
|
||||
NotifyAuthenticationStateChanged(authState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestAuthorizationPolicyProvider : IAuthorizationPolicyProvider
|
||||
{
|
||||
private readonly AuthorizationOptions options = new AuthorizationOptions();
|
||||
|
||||
public Task<AuthorizationPolicy> GetDefaultPolicyAsync()
|
||||
=> Task.FromResult(options.DefaultPolicy);
|
||||
|
||||
public Task<AuthorizationPolicy> GetFallbackPolicyAsync()
|
||||
=> Task.FromResult(options.FallbackPolicy);
|
||||
|
||||
public Task<AuthorizationPolicy> GetPolicyAsync(string policyName) => Task.FromResult(
|
||||
new AuthorizationPolicy(new[]
|
||||
{
|
||||
new TestPolicyRequirement { PolicyName = policyName }
|
||||
},
|
||||
new[] { $"TestScheme:{policyName}" }));
|
||||
}
|
||||
|
||||
public class TestPolicyRequirement : IAuthorizationRequirement
|
||||
{
|
||||
public string PolicyName { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,34 +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.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestAuthorizationService : IAuthorizationService
|
||||
{
|
||||
public AuthorizationResult NextResult { get; set; }
|
||||
= AuthorizationResult.Failed();
|
||||
|
||||
public List<(ClaimsPrincipal user, object resource, IEnumerable<IAuthorizationRequirement> requirements)> AuthorizeCalls { get; }
|
||||
= new List<(ClaimsPrincipal user, object resource, IEnumerable<IAuthorizationRequirement> requirements)>();
|
||||
|
||||
public Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user, object resource, IEnumerable<IAuthorizationRequirement> requirements)
|
||||
{
|
||||
AuthorizeCalls.Add((user, resource, requirements));
|
||||
|
||||
// The TestAuthorizationService doesn't actually apply any authorization requirements
|
||||
// It just returns the specified NextResult, since we're not trying to test the logic
|
||||
// in DefaultAuthorizationService or similar here. So it's up to tests to set a desired
|
||||
// NextResult and assert that the expected criteria were passed by inspecting AuthorizeCalls.
|
||||
return Task.FromResult(NextResult);
|
||||
}
|
||||
|
||||
public Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user, object resource, string policyName)
|
||||
=> throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
|
@ -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.Security.Principal;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Authorization
|
||||
{
|
||||
public class TestIdentity : IIdentity
|
||||
{
|
||||
public string AuthenticationType => "Test";
|
||||
|
||||
public bool IsAuthenticated => true;
|
||||
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,484 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29728.190
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarkapps", "benchmarkapps", "{46E744CC-D332-401F-B074-A40341F0F832}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wasm.Performance", "Wasm.Performance", "{9B360D1A-5355-4942-B77E-76A1AC67911B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Performance.Driver", "benchmarkapps\Wasm.Performance\Driver\Wasm.Performance.Driver.csproj", "{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Performance.TestApp", "benchmarkapps\Wasm.Performance\TestApp\Wasm.Performance.TestApp.csproj", "{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Blazor", "Blazor", "{B29FB58D-FAE5-405E-9695-BCF93582BE9A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Blazor", "Blazor", "{E363191C-6C15-4C40-8698-B0AD5AA09700}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor", "Blazor\Blazor\src\Microsoft.AspNetCore.Blazor.csproj", "{8A585A38-917D-4A7E-8AFD-E860C76878FA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.Tests", "Blazor\Blazor\test\Microsoft.AspNetCore.Blazor.Tests.csproj", "{75DA4341-5B7F-419C-8EED-3492013D8EB5}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{A82B9830-447D-4E26-BEB7-C724A3956C0D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.Build", "Blazor\Build\src\Microsoft.AspNetCore.Blazor.Build.csproj", "{201D53B3-2D33-40AD-813F-347A0C1998ED}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.Build.Tests", "Blazor\Build\test\Microsoft.AspNetCore.Blazor.Build.Tests.csproj", "{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{B4ACD900-27B6-482B-B434-2C1E86E9D8BC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "blazorhosted", "Blazor\Build\testassets\blazorhosted\blazorhosted.csproj", "{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "classlibrarywithsatelliteassemblies", "Blazor\Build\testassets\classlibrarywithsatelliteassemblies\classlibrarywithsatelliteassemblies.csproj", "{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorClassLibrary", "Blazor\Build\testassets\razorclasslibrary\RazorClassLibrary.csproj", "{779749F3-8D4F-42BD-9219-37502AD68F0E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "standalone", "Blazor\Build\testassets\standalone\standalone.csproj", "{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DevServer", "DevServer", "{A44FB7D1-78AB-41C4-B1C7-94399396EA6C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.DevServer", "Blazor\DevServer\src\Microsoft.AspNetCore.Blazor.DevServer.csproj", "{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http", "Http", "{F4995C96-8D4E-4B26-8FB8-614B020156C2}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.HttpClient", "Blazor\Http\src\Microsoft.AspNetCore.Blazor.HttpClient.csproj", "{FAFE3FF2-D36D-47DA-833D-C382A902705E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.HttpClient.Tests", "Blazor\Http\test\Microsoft.AspNetCore.Blazor.HttpClient.Tests.csproj", "{2C10DF3B-D138-414A-BB36-02E45A7B6025}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mono.WebAssembly.Interop", "Mono.WebAssembly.Interop", "{37FA056D-A7B3-4F72-A8B9-8D3C175E831E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.WebAssembly.Interop", "Blazor\Mono.WebAssembly.Interop\src\Mono.WebAssembly.Interop.csproj", "{FBD7C733-200E-4BED-8B31-2610C2263F72}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{7920B09F-8016-49CF-A229-E72D0CECDD17}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.Server", "Blazor\Server\src\Microsoft.AspNetCore.Blazor.Server.csproj", "{BDBEDE12-74C1-466E-B8AE-49EC40F83866}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{CBD2BB24-3EC3-4950-ABE4-8C521D258DCD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedInAspNet.Client", "Blazor\testassets\HostedInAspNet.Client\HostedInAspNet.Client.csproj", "{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedInAspNet.Server", "Blazor\testassets\HostedInAspNet.Server\HostedInAspNet.Server.csproj", "{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoSanity", "Blazor\testassets\MonoSanity\MonoSanity.csproj", "{C97721BB-8D89-4167-9E59-839C237BA270}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoSanityClient", "Blazor\testassets\MonoSanityClient\MonoSanityClient.csproj", "{7F357E7B-BF33-4055-9A21-37B3507BFF90}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StandaloneApp", "Blazor\testassets\StandaloneApp\StandaloneApp.csproj", "{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Validation", "Validation", "{09758C93-6707-46E3-9211-470449280C2C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.DataAnnotations.Validation", "Blazor\Validation\src\Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.csproj", "{52F0CF32-9506-4D9C-B715-52900B219BDF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.Tests", "Blazor\Validation\test\Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.Tests.csproj", "{C1CC2480-7925-4391-86F5-60653D864E87}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{194596E0-E6F5-4728-8A7A-A82EA0893111}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.E2ETests", "test\E2ETest\Microsoft.AspNetCore.Components.E2ETests.csproj", "{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{10C06583-8506-42DE-863E-EAD48A1F7579}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "test\testassets\BasicTestApp\BasicTestApp.csproj", "{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.App", "test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{1B633436-B999-467F-8A8F-778BB075CD35}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.Server", "test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestContentPackage", "test\testassets\TestContentPackage\TestContentPackage.csproj", "{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.TestServer", "test\testassets\TestServer\Components.TestServer.csproj", "{EACC194A-8C1B-424D-B8FE-330E14CAF525}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Release|x64.Build.0 = Release|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED}.Release|x86.Build.0 = Release|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025}.Release|x86.Build.0 = Release|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Release|x64.Build.0 = Release|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90}.Release|x86.Build.0 = Release|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24}.Release|x86.Build.0 = Release|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Release|x64.Build.0 = Release|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{9B360D1A-5355-4942-B77E-76A1AC67911B} = {46E744CC-D332-401F-B074-A40341F0F832}
|
||||
{85E2777A-F8E0-48B8-9FC4-B60FDC7B45B7} = {9B360D1A-5355-4942-B77E-76A1AC67911B}
|
||||
{10E5AD2E-25A9-4B8B-BD33-207B12D5BAE4} = {9B360D1A-5355-4942-B77E-76A1AC67911B}
|
||||
{E363191C-6C15-4C40-8698-B0AD5AA09700} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{8A585A38-917D-4A7E-8AFD-E860C76878FA} = {E363191C-6C15-4C40-8698-B0AD5AA09700}
|
||||
{75DA4341-5B7F-419C-8EED-3492013D8EB5} = {E363191C-6C15-4C40-8698-B0AD5AA09700}
|
||||
{A82B9830-447D-4E26-BEB7-C724A3956C0D} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{201D53B3-2D33-40AD-813F-347A0C1998ED} = {A82B9830-447D-4E26-BEB7-C724A3956C0D}
|
||||
{AB13059F-8F21-48F6-B9F3-EAF260D9CB81} = {A82B9830-447D-4E26-BEB7-C724A3956C0D}
|
||||
{B4ACD900-27B6-482B-B434-2C1E86E9D8BC} = {A82B9830-447D-4E26-BEB7-C724A3956C0D}
|
||||
{5F44DC59-3B4E-4E87-973F-C9FB4BBFD03D} = {B4ACD900-27B6-482B-B434-2C1E86E9D8BC}
|
||||
{4BD2D530-83C7-4A86-AF8E-FE1FECBF64C6} = {B4ACD900-27B6-482B-B434-2C1E86E9D8BC}
|
||||
{779749F3-8D4F-42BD-9219-37502AD68F0E} = {B4ACD900-27B6-482B-B434-2C1E86E9D8BC}
|
||||
{9C41BA92-FBC8-4E11-9A71-0B07906A2D6C} = {B4ACD900-27B6-482B-B434-2C1E86E9D8BC}
|
||||
{A44FB7D1-78AB-41C4-B1C7-94399396EA6C} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{0ED336B7-6FAB-4872-8D75-1CDD5A5DDBB2} = {A44FB7D1-78AB-41C4-B1C7-94399396EA6C}
|
||||
{F4995C96-8D4E-4B26-8FB8-614B020156C2} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{FAFE3FF2-D36D-47DA-833D-C382A902705E} = {F4995C96-8D4E-4B26-8FB8-614B020156C2}
|
||||
{2C10DF3B-D138-414A-BB36-02E45A7B6025} = {F4995C96-8D4E-4B26-8FB8-614B020156C2}
|
||||
{37FA056D-A7B3-4F72-A8B9-8D3C175E831E} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{FBD7C733-200E-4BED-8B31-2610C2263F72} = {37FA056D-A7B3-4F72-A8B9-8D3C175E831E}
|
||||
{7920B09F-8016-49CF-A229-E72D0CECDD17} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{BDBEDE12-74C1-466E-B8AE-49EC40F83866} = {7920B09F-8016-49CF-A229-E72D0CECDD17}
|
||||
{CBD2BB24-3EC3-4950-ABE4-8C521D258DCD} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{8276993E-3F54-4D2F-8DDA-E86F2C6BEF1E} = {CBD2BB24-3EC3-4950-ABE4-8C521D258DCD}
|
||||
{CFA20A59-F52B-47A2-BD5D-B600D9576BDA} = {CBD2BB24-3EC3-4950-ABE4-8C521D258DCD}
|
||||
{C97721BB-8D89-4167-9E59-839C237BA270} = {CBD2BB24-3EC3-4950-ABE4-8C521D258DCD}
|
||||
{7F357E7B-BF33-4055-9A21-37B3507BFF90} = {CBD2BB24-3EC3-4950-ABE4-8C521D258DCD}
|
||||
{236FC110-FBE0-476D-ADC5-D98E23BAA1EE} = {CBD2BB24-3EC3-4950-ABE4-8C521D258DCD}
|
||||
{09758C93-6707-46E3-9211-470449280C2C} = {B29FB58D-FAE5-405E-9695-BCF93582BE9A}
|
||||
{52F0CF32-9506-4D9C-B715-52900B219BDF} = {09758C93-6707-46E3-9211-470449280C2C}
|
||||
{C1CC2480-7925-4391-86F5-60653D864E87} = {09758C93-6707-46E3-9211-470449280C2C}
|
||||
{2DD2A221-255E-4A57-A2C3-B24C9BDC2E24} = {194596E0-E6F5-4728-8A7A-A82EA0893111}
|
||||
{10C06583-8506-42DE-863E-EAD48A1F7579} = {194596E0-E6F5-4728-8A7A-A82EA0893111}
|
||||
{376D8A5F-923C-4AF9-8627-EA0E8E54AEDF} = {10C06583-8506-42DE-863E-EAD48A1F7579}
|
||||
{1B633436-B999-467F-8A8F-778BB075CD35} = {10C06583-8506-42DE-863E-EAD48A1F7579}
|
||||
{DA17FB91-EF6F-4C34-A5D4-1A0F7E42D699} = {10C06583-8506-42DE-863E-EAD48A1F7579}
|
||||
{BC3DDF14-4961-49AB-8F19-2A23F535B0DE} = {10C06583-8506-42DE-863E-EAD48A1F7579}
|
||||
{EACC194A-8C1B-424D-B8FE-330E14CAF525} = {10C06583-8506-42DE-863E-EAD48A1F7579}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {27A36094-AA50-4FFD-ADE6-C055E391F741}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -0,0 +1,440 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26124.0
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Blazor", "Blazor", "{8AD7BBC4-892F-4F45-A239-622DA6C181ED}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor", "Blazor\ref\Microsoft.AspNetCore.Blazor.csproj", "{549D1333-970B-4C0B-80E1-E96C910A4DBD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor", "Blazor\src\Microsoft.AspNetCore.Blazor.csproj", "{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.Tests", "Blazor\test\Microsoft.AspNetCore.Blazor.Tests.csproj", "{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{BE77AC33-F34A-41B4-A22F-DB45A4B8E49C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.Build", "Build\src\Microsoft.AspNetCore.Blazor.Build.csproj", "{814B9486-A590-4C70-A323-3C1118DB5AA2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.Build.Tests", "Build\test\Microsoft.AspNetCore.Blazor.Build.Tests.csproj", "{669396CA-E180-4536-BB9D-565DF522964B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{0BD0C661-CEDD-4D64-BAC8-3947D9AD21F2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "blazorhosted", "Build\testassets\blazorhosted\blazorhosted.csproj", "{D4C040D5-598E-43DB-8341-B1E14368DBE2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "classlibrarywithsatelliteassemblies", "Build\testassets\classlibrarywithsatelliteassemblies\classlibrarywithsatelliteassemblies.csproj", "{EF440F94-84ED-43DB-8D8B-671B1F345B84}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorClassLibrary", "Build\testassets\razorclasslibrary\RazorClassLibrary.csproj", "{C5AE51C7-47CD-489C-80CD-799209DAA0E5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "standalone", "Build\testassets\standalone\standalone.csproj", "{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DevServer", "DevServer", "{0B6A1C60-596A-45A8-A71E-940F463F5C0D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.DevServer", "DevServer\src\Microsoft.AspNetCore.Blazor.DevServer.csproj", "{DD96E545-2466-4531-8F3A-D588871A4D19}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http", "Http", "{4FD7794A-3AB7-4455-9EA6-392CEE415588}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.HttpClient", "Http\src\Microsoft.AspNetCore.Blazor.HttpClient.csproj", "{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.HttpClient.Tests", "Http\test\Microsoft.AspNetCore.Blazor.HttpClient.Tests.csproj", "{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mono.WebAssembly.Interop", "Mono.WebAssembly.Interop", "{6D83D4EC-451D-40B9-BF80-475667CC5DFE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.WebAssembly.Interop", "Mono.WebAssembly.Interop\src\Mono.WebAssembly.Interop.csproj", "{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{3BCD0E35-4CBA-4A14-80D8-9D695F14A384}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.Server", "Server\src\Microsoft.AspNetCore.Blazor.Server.csproj", "{70143EFD-F167-4D8F-A4C1-201DD00C864E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{185140F7-1F8F-430F-BC47-63C2712AC67F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HostedInAspNet.Client", "testassets\HostedInAspNet.Client\HostedInAspNet.Client.csproj", "{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HostedInAspNet.Server", "testassets\HostedInAspNet.Server\HostedInAspNet.Server.csproj", "{02054BB0-BBBD-45BA-8260-040126E98A8D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoSanity", "testassets\MonoSanity\MonoSanity.csproj", "{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoSanityClient", "testassets\MonoSanityClient\MonoSanityClient.csproj", "{3605D881-E511-46E4-B80B-5BFF98DA8A9C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandaloneApp", "testassets\StandaloneApp\StandaloneApp.csproj", "{3293A32D-36DF-4A8A-99F5-E35E86B48F45}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Validation", "Validation", "{BD3AE379-14B5-4ABD-AF0E-023715D9726F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.DataAnnotations.Validation", "Validation\src\Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.csproj", "{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.Tests", "Validation\test\Microsoft.AspNetCore.Blazor.DataAnnotations.Validation.Tests.csproj", "{92113D6B-04C3-456C-867B-87DDF02A796A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Components.E2ETests", "..\test\E2ETest\Microsoft.AspNetCore.Components.E2ETests.csproj", "{86002AE6-8317-4451-A649-8E95AC5148F6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasicTestApp", "..\test\testassets\BasicTestApp\BasicTestApp.csproj", "{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentsApp.App", "..\test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{98F9E296-DB25-4EFB-AB0F-549602F8FC16}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentsApp.Server", "..\test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestContentPackage", "..\test\testassets\TestContentPackage\TestContentPackage.csproj", "{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Components.TestServer", "..\test\testassets\TestServer\Components.TestServer.csproj", "{D117C434-D16D-4E38-A8B7-4663944CE167}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Release|x64.Build.0 = Release|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{669396CA-E180-4536-BB9D-565DF522964B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Release|x64.Build.0 = Release|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Release|x64.Build.0 = Release|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Release|x64.Build.0 = Release|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971}.Release|x86.Build.0 = Release|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{86002AE6-8317-4451-A649-8E95AC5148F6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8997D5A8-097E-46F9-9B99-D9A367A1B1EE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Release|x64.Build.0 = Release|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{98F9E296-DB25-4EFB-AB0F-549602F8FC16}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8E9F474B-D58C-49C4-8EDB-8A9BDBA3F98A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FB0DA201-C124-4DE6-AFCD-7996C2C05BD0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D117C434-D16D-4E38-A8B7-4663944CE167}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{549D1333-970B-4C0B-80E1-E96C910A4DBD} = {8AD7BBC4-892F-4F45-A239-622DA6C181ED}
|
||||
{53E70BA4-4B34-43A4-B6F9-9BEC482650AD} = {8AD7BBC4-892F-4F45-A239-622DA6C181ED}
|
||||
{0A500F50-2CA6-4FD1-B01D-F4E1D33CCCC9} = {8AD7BBC4-892F-4F45-A239-622DA6C181ED}
|
||||
{814B9486-A590-4C70-A323-3C1118DB5AA2} = {BE77AC33-F34A-41B4-A22F-DB45A4B8E49C}
|
||||
{669396CA-E180-4536-BB9D-565DF522964B} = {BE77AC33-F34A-41B4-A22F-DB45A4B8E49C}
|
||||
{0BD0C661-CEDD-4D64-BAC8-3947D9AD21F2} = {BE77AC33-F34A-41B4-A22F-DB45A4B8E49C}
|
||||
{D4C040D5-598E-43DB-8341-B1E14368DBE2} = {0BD0C661-CEDD-4D64-BAC8-3947D9AD21F2}
|
||||
{EF440F94-84ED-43DB-8D8B-671B1F345B84} = {0BD0C661-CEDD-4D64-BAC8-3947D9AD21F2}
|
||||
{C5AE51C7-47CD-489C-80CD-799209DAA0E5} = {0BD0C661-CEDD-4D64-BAC8-3947D9AD21F2}
|
||||
{92B77A61-B60C-4F4E-96FF-C34BEEAD2D54} = {0BD0C661-CEDD-4D64-BAC8-3947D9AD21F2}
|
||||
{DD96E545-2466-4531-8F3A-D588871A4D19} = {0B6A1C60-596A-45A8-A71E-940F463F5C0D}
|
||||
{8EDF0733-D5DD-4D30-8E08-05EB69DD99B7} = {4FD7794A-3AB7-4455-9EA6-392CEE415588}
|
||||
{1EEEF8C8-EA17-4D84-B1CE-870153C7D5DA} = {4FD7794A-3AB7-4455-9EA6-392CEE415588}
|
||||
{6E3190E9-49D7-4E40-A8C6-A29519E4A6FC} = {6D83D4EC-451D-40B9-BF80-475667CC5DFE}
|
||||
{70143EFD-F167-4D8F-A4C1-201DD00C864E} = {3BCD0E35-4CBA-4A14-80D8-9D695F14A384}
|
||||
{9036CD3D-6B45-4B2C-8F69-C6C4D98DCF7D} = {185140F7-1F8F-430F-BC47-63C2712AC67F}
|
||||
{02054BB0-BBBD-45BA-8260-040126E98A8D} = {185140F7-1F8F-430F-BC47-63C2712AC67F}
|
||||
{02EFF071-DC63-4B96-9B1C-8BCAEF22BDA2} = {185140F7-1F8F-430F-BC47-63C2712AC67F}
|
||||
{3605D881-E511-46E4-B80B-5BFF98DA8A9C} = {185140F7-1F8F-430F-BC47-63C2712AC67F}
|
||||
{3293A32D-36DF-4A8A-99F5-E35E86B48F45} = {185140F7-1F8F-430F-BC47-63C2712AC67F}
|
||||
{E0F4A65D-F0BB-4EED-ADE8-B514E0F82971} = {BD3AE379-14B5-4ABD-AF0E-023715D9726F}
|
||||
{92113D6B-04C3-456C-867B-87DDF02A796A} = {BD3AE379-14B5-4ABD-AF0E-023715D9726F}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.1</TargetFrameworks>
|
||||
<NoWarn>$(NoWarn);BL0006</NoWarn>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
|
||||
<Compile Include="Microsoft.AspNetCore.Blazor.netstandard2.1.cs" />
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<Description>Build client-side single-page applications (SPAs) with Blazor running under WebAssembly.</Description>
|
||||
<IsShippingPackage>true</IsShippingPackage>
|
||||
<NoWarn>$(NoWarn);BL0006</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
<!-- Exclude the TestFiles directory from default wildcards -->
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);TestFiles\**\*</DefaultItemExcludes>
|
||||
<NoWarn>$(NoWarn);BL0006</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,4 @@
|
|||
<Project>
|
||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
|
||||
<Import Project="Blazor.Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- This property points to the latest released Microsoft.AspNetCore.App version it needs to be updated to
|
||||
target the latest patch before a preview release. -->
|
||||
<LatestAspNetCoreReferenceVersion>3.1.0</LatestAspNetCoreReferenceVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
# We only track the .template.config.src items in source control
|
||||
# The .template.config files are generated on build
|
||||
src/content/**/.template.config/
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +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.
|
||||
|
||||
[assembly: BenchmarkDotNet.Attributes.AspNetCoreBenchmark]
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<ServerGarbageCollection>true</ServerGarbageCollection>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="BenchmarkDotNet" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="Microsoft.AspNetCore.BenchmarkRunner.Sources" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,47 +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 Microsoft.AspNetCore.Components.Performance;
|
||||
|
||||
namespace Microsoft.AspNetCore.BenchmarkDotNet.Runner
|
||||
{
|
||||
internal partial class Program
|
||||
{
|
||||
static partial void BeforeMain(string[] args)
|
||||
{
|
||||
if (args.Length == 0 || args[0] != "--profile")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Write code here if you want to profile something. Normally Benchmark.NET launches
|
||||
// a separate process, which can be hard to profile.
|
||||
//
|
||||
// See: https://github.com/dotnet/BenchmarkDotNet/issues/387
|
||||
|
||||
// Example:
|
||||
//Console.WriteLine("Starting...");
|
||||
//var stopwatch = Stopwatch.StartNew();
|
||||
//var benchmark = new RenderTreeDiffBuilderBenchmark();
|
||||
|
||||
//for (var i = 0; i < 100000; i++)
|
||||
//{
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
// benchmark.ComputeDiff_SingleFormField();
|
||||
//}
|
||||
|
||||
//Console.WriteLine($"Done after {stopwatch.ElapsedMilliseconds}ms");
|
||||
//Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,114 +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.Threading.Tasks;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Performance
|
||||
{
|
||||
public class RenderTreeDiffBuilderBenchmark
|
||||
{
|
||||
private readonly Renderer renderer;
|
||||
private readonly RenderTreeBuilder original;
|
||||
private readonly RenderTreeBuilder modified;
|
||||
private readonly RenderBatchBuilder builder;
|
||||
|
||||
public RenderTreeDiffBuilderBenchmark()
|
||||
{
|
||||
builder = new RenderBatchBuilder();
|
||||
renderer = new FakeRenderer();
|
||||
|
||||
// A simple component for basic tests -- this is similar to what MVC scaffolding generates
|
||||
// for bootstrap3 form fields, but modified to be more Component-like.
|
||||
original = new RenderTreeBuilder();
|
||||
original.OpenElement(0, "div");
|
||||
original.AddAttribute(1, "class", "form-group");
|
||||
|
||||
original.OpenElement(2, "label");
|
||||
original.AddAttribute(3, "class", "control-label");
|
||||
original.AddAttribute(4, "for", "name");
|
||||
original.AddAttribute(5, "data-unvalidated", true);
|
||||
original.AddContent(6, "Car");
|
||||
original.CloseElement();
|
||||
|
||||
original.OpenElement(7, "input");
|
||||
original.AddAttribute(8, "class", "form-control");
|
||||
original.AddAttribute(9, "type", "text");
|
||||
original.AddAttribute(10, "name", "name"); // Notice the gap in sequence numbers
|
||||
original.AddAttribute(12, "value", "");
|
||||
original.CloseElement();
|
||||
|
||||
original.OpenElement(13, "span");
|
||||
original.AddAttribute(14, "class", "text-danger field-validation-valid");
|
||||
original.AddContent(15, "");
|
||||
original.CloseElement();
|
||||
|
||||
original.CloseElement();
|
||||
|
||||
// Now simulate some input
|
||||
modified = new RenderTreeBuilder();
|
||||
modified.OpenElement(0, "div");
|
||||
modified.AddAttribute(1, "class", "form-group");
|
||||
|
||||
modified.OpenElement(2, "label");
|
||||
modified.AddAttribute(3, "class", "control-label");
|
||||
modified.AddAttribute(4, "for", "name");
|
||||
modified.AddAttribute(5, "data-unvalidated", false);
|
||||
modified.AddContent(6, "Car");
|
||||
modified.CloseElement();
|
||||
|
||||
modified.OpenElement(7, "input");
|
||||
modified.AddAttribute(8, "class", "form-control");
|
||||
modified.AddAttribute(9, "type", "text");
|
||||
modified.AddAttribute(10, "name", "name");
|
||||
modified.AddAttribute(11, "data-validation-state", "invalid");
|
||||
modified.AddAttribute(12, "value", "Lamborghini");
|
||||
modified.CloseElement();
|
||||
|
||||
modified.OpenElement(13, "span");
|
||||
modified.AddAttribute(14, "class", "text-danger field-validation-invalid"); // changed
|
||||
modified.AddContent(15, "No, you can't afford that.");
|
||||
modified.CloseElement();
|
||||
|
||||
modified.CloseElement();
|
||||
}
|
||||
|
||||
[Benchmark(Description = "RenderTreeDiffBuilder: Input and validation on a single form field.", Baseline = true)]
|
||||
public void ComputeDiff_SingleFormField()
|
||||
{
|
||||
builder.ClearStateForCurrentBatch();
|
||||
var diff = RenderTreeDiffBuilder.ComputeDiff(renderer, builder, 0, original.GetFrames(), modified.GetFrames());
|
||||
GC.KeepAlive(diff);
|
||||
}
|
||||
|
||||
private class FakeRenderer : Renderer
|
||||
{
|
||||
public FakeRenderer()
|
||||
: base(new TestServiceProvider(), NullLoggerFactory.Instance)
|
||||
{
|
||||
}
|
||||
|
||||
public override Dispatcher Dispatcher { get; } = Dispatcher.CreateDefault();
|
||||
|
||||
protected override void HandleException(Exception exception)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override Task UpdateDisplayAsync(in RenderBatch renderBatch)
|
||||
=> Task.CompletedTask;
|
||||
}
|
||||
|
||||
private class TestServiceProvider : IServiceProvider
|
||||
{
|
||||
public object GetService(Type serviceType)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
# Benchmarks
|
||||
|
||||
## Instructions
|
||||
|
||||
### Run All Benchmarks
|
||||
|
||||
To run all use `*` as parameter
|
||||
```
|
||||
dotnet run -c Release -- *
|
||||
```
|
||||
|
||||
### Interactive Mode
|
||||
|
||||
To see the list of benchmarks run (and choose interactively):
|
||||
```
|
||||
dotnet run -c Release
|
||||
```
|
||||
|
||||
### Run Specific Benchmark
|
||||
|
||||
To run a specific benchmark add it as parameter
|
||||
```
|
||||
dotnet run -c Release -- <benchmark_name>
|
||||
```
|
||||
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
The runner will create logs in the `<project>\BenchmarkDotNet.Artifacts` directory. That should include a lot more information
|
||||
than what gets printed to the console.
|
||||
|
||||
## Results
|
||||
|
||||
Also in the `<project>\BenchmarkDotNet.Artifacts\results` directive you'll find some markdown-formatted tables suitable for posting
|
||||
in a github comment.
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<Project>
|
||||
|
||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="Microsoft.AspNetCore.Components.netstandard2.0.Manual.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<!-- This file is automatically generated. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;$(DefaultNetCoreTargetFramework)</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.netstandard2.0.cs" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.HashCodeCombiner.Sources" />
|
||||
<Reference Include="System.Buffers" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
|
||||
<Compile Include="Microsoft.AspNetCore.Components.netcoreapp.cs" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.HashCodeCombiner.Sources" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -1,550 +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.
|
||||
|
||||
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.Class, AllowMultiple=true, Inherited=true)]
|
||||
public sealed partial class BindElementAttribute : System.Attribute
|
||||
{
|
||||
public BindElementAttribute(string element, string suffix, string valueAttribute, string changeAttribute) { }
|
||||
public string ChangeAttribute { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Element { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Suffix { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string ValueAttribute { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { 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 void AssertAccess() { }
|
||||
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;
|
||||
public ElementReference(string id) { throw null; }
|
||||
public string Id { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
[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; }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Class, AllowMultiple=true, Inherited=true)]
|
||||
public sealed partial class EventHandlerAttribute : System.Attribute
|
||||
{
|
||||
public EventHandlerAttribute(string attributeName, System.Type eventArgsType) { }
|
||||
public EventHandlerAttribute(string attributeName, System.Type eventArgsType, bool enableStopPropagation, bool enablePreventDefault) { }
|
||||
public string AttributeName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public bool EnablePreventDefault { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public bool EnableStopPropagation { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Type EventArgsType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { 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 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 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; }
|
||||
}
|
||||
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.RenderTree.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.RenderTree.RenderBatch renderBatch);
|
||||
}
|
||||
[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.Collections.Generic.IEnumerable<System.Reflection.Assembly> AdditionalAssemblies { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[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; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,58 +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 Microsoft.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.RenderTree
|
||||
{
|
||||
// https://github.com/dotnet/arcade/pull/2033
|
||||
[StructLayout(LayoutKind.Explicit, Pack = 4)]
|
||||
public readonly partial struct RenderTreeFrame
|
||||
{
|
||||
[FieldOffset(0)] public readonly int Sequence;
|
||||
|
||||
[FieldOffset(4)] public readonly RenderTreeFrameType FrameType;
|
||||
|
||||
[FieldOffset(8)] public readonly int ElementSubtreeLength;
|
||||
|
||||
[FieldOffset(16)] public readonly string ElementName;
|
||||
|
||||
[FieldOffset(24)] public readonly object ElementKey;
|
||||
|
||||
[FieldOffset(16)] public readonly string TextContent;
|
||||
|
||||
[FieldOffset(8)] public readonly ulong AttributeEventHandlerId;
|
||||
|
||||
[FieldOffset(16)] public readonly string AttributeName;
|
||||
|
||||
[FieldOffset(24)] public readonly object AttributeValue;
|
||||
|
||||
[FieldOffset(32)] public readonly string AttributeEventUpdatesAttributeName;
|
||||
|
||||
[FieldOffset(8)] public readonly int ComponentSubtreeLength;
|
||||
|
||||
[FieldOffset(12)] public readonly int ComponentId;
|
||||
|
||||
[FieldOffset(16)] public readonly Type ComponentType;
|
||||
|
||||
[FieldOffset(32)] public readonly object ComponentKey;
|
||||
|
||||
public IComponent Component => null;
|
||||
|
||||
[FieldOffset(8)] public readonly int RegionSubtreeLength;
|
||||
|
||||
[FieldOffset(16)] public readonly string ElementReferenceCaptureId;
|
||||
|
||||
[FieldOffset(24)] public readonly Action<ElementReference> ElementReferenceCaptureAction;
|
||||
|
||||
[FieldOffset(8)] public readonly int ComponentReferenceCaptureParentFrameIndex;
|
||||
|
||||
[FieldOffset(16)] public readonly Action<object> ComponentReferenceCaptureAction;
|
||||
|
||||
[FieldOffset(16)] public readonly string MarkupContent;
|
||||
|
||||
public override string ToString() => null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,550 +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.
|
||||
|
||||
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.Class, AllowMultiple=true, Inherited=true)]
|
||||
public sealed partial class BindElementAttribute : System.Attribute
|
||||
{
|
||||
public BindElementAttribute(string element, string suffix, string valueAttribute, string changeAttribute) { }
|
||||
public string ChangeAttribute { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Element { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Suffix { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string ValueAttribute { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { 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 void AssertAccess() { }
|
||||
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;
|
||||
public ElementReference(string id) { throw null; }
|
||||
public string Id { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
[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; }
|
||||
}
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Class, AllowMultiple=true, Inherited=true)]
|
||||
public sealed partial class EventHandlerAttribute : System.Attribute
|
||||
{
|
||||
public EventHandlerAttribute(string attributeName, System.Type eventArgsType) { }
|
||||
public EventHandlerAttribute(string attributeName, System.Type eventArgsType, bool enableStopPropagation, bool enablePreventDefault) { }
|
||||
public string AttributeName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public bool EnablePreventDefault { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public bool EnableStopPropagation { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Type EventArgsType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { 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 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 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; }
|
||||
}
|
||||
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.RenderTree.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.RenderTree.RenderBatch renderBatch);
|
||||
}
|
||||
[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.Collections.Generic.IEnumerable<System.Reflection.Assembly> AdditionalAssemblies { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
[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; }
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,64 +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;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Configures options for binding specific element types.
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
|
||||
public sealed class BindElementAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="BindElementAttribute"/>.
|
||||
/// </summary>
|
||||
/// <param name="element">The tag name of the element.</param>
|
||||
/// <param name="suffix">The suffix value. For example, set this to <code>value</code> for <code>bind-value</code>, or set this to <code>null</code> for <code>bind</code>.</param>
|
||||
/// <param name="valueAttribute">The name of the value attribute to be bound.</param>
|
||||
/// <param name="changeAttribute">The name of an attribute that will register an associated change event.</param>
|
||||
public BindElementAttribute(string element, string suffix, string valueAttribute, string changeAttribute)
|
||||
{
|
||||
if (element == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(element));
|
||||
}
|
||||
|
||||
if (valueAttribute == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(valueAttribute));
|
||||
}
|
||||
|
||||
if (changeAttribute == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(changeAttribute));
|
||||
}
|
||||
|
||||
Element = element;
|
||||
ValueAttribute = valueAttribute;
|
||||
ChangeAttribute = changeAttribute;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the tag name of the element.
|
||||
/// </summary>
|
||||
public string Element { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the suffix value.
|
||||
/// For example, this will be <code>value</code> to mean <code>bind-value</code>, or <code>null</code> to mean <code>bind</code>.
|
||||
/// </summary>
|
||||
public string Suffix { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the value attribute to be bound.
|
||||
/// </summary>
|
||||
public string ValueAttribute { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of an attribute that will register an associated change event.
|
||||
/// </summary>
|
||||
public string ChangeAttribute { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,27 +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;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Denotes the target member as a cascading component parameter. Its value will be
|
||||
/// supplied by the closest ancestor <see cref="CascadingValue{T}"/> component that
|
||||
/// supplies values with a compatible type and name.
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
|
||||
public sealed class CascadingParameterAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// If specified, the parameter value will be supplied by the closest
|
||||
/// ancestor <see cref="CascadingValue{T}"/> that supplies a value with
|
||||
/// this name.
|
||||
///
|
||||
/// If null, the parameter value will be supplied by the closest ancestor
|
||||
/// <see cref="CascadingValue{T}"/> that supplies a value with a compatible
|
||||
/// type.
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,129 +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.AspNetCore.Components.Reflection;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
internal readonly struct CascadingParameterState
|
||||
{
|
||||
private readonly static ConcurrentDictionary<Type, ReflectedCascadingParameterInfo[]> _cachedInfos
|
||||
= new ConcurrentDictionary<Type, ReflectedCascadingParameterInfo[]>();
|
||||
|
||||
public string LocalValueName { get; }
|
||||
public ICascadingValueComponent ValueSupplier { get; }
|
||||
|
||||
public CascadingParameterState(string localValueName, ICascadingValueComponent valueSupplier)
|
||||
{
|
||||
LocalValueName = localValueName;
|
||||
ValueSupplier = valueSupplier;
|
||||
}
|
||||
|
||||
public static IReadOnlyList<CascadingParameterState> FindCascadingParameters(ComponentState componentState)
|
||||
{
|
||||
var componentType = componentState.Component.GetType();
|
||||
var infos = GetReflectedCascadingParameterInfos(componentType);
|
||||
|
||||
// For components known not to have any cascading parameters, bail out early
|
||||
if (infos == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Now try to find matches for each of the cascading parameters
|
||||
// Defer instantiation of the result list until we know there's at least one
|
||||
List<CascadingParameterState> resultStates = null;
|
||||
|
||||
var numInfos = infos.Length;
|
||||
for (var infoIndex = 0; infoIndex < numInfos; infoIndex++)
|
||||
{
|
||||
ref var info = ref infos[infoIndex];
|
||||
var supplier = GetMatchingCascadingValueSupplier(info, componentState);
|
||||
if (supplier != null)
|
||||
{
|
||||
if (resultStates == null)
|
||||
{
|
||||
// Although not all parameters might be matched, we know the maximum number
|
||||
resultStates = new List<CascadingParameterState>(infos.Length - infoIndex);
|
||||
}
|
||||
|
||||
resultStates.Add(new CascadingParameterState(info.ConsumerValueName, supplier));
|
||||
}
|
||||
}
|
||||
|
||||
return resultStates;
|
||||
}
|
||||
|
||||
private static ICascadingValueComponent GetMatchingCascadingValueSupplier(in ReflectedCascadingParameterInfo info, ComponentState componentState)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (componentState.Component is ICascadingValueComponent candidateSupplier
|
||||
&& candidateSupplier.CanSupplyValue(info.ValueType, info.SupplierValueName))
|
||||
{
|
||||
return candidateSupplier;
|
||||
}
|
||||
|
||||
componentState = componentState.ParentComponentState;
|
||||
} while (componentState != null);
|
||||
|
||||
// No match
|
||||
return null;
|
||||
}
|
||||
|
||||
private static ReflectedCascadingParameterInfo[] GetReflectedCascadingParameterInfos(Type componentType)
|
||||
{
|
||||
if (!_cachedInfos.TryGetValue(componentType, out var infos))
|
||||
{
|
||||
infos = CreateReflectedCascadingParameterInfos(componentType);
|
||||
_cachedInfos[componentType] = infos;
|
||||
}
|
||||
|
||||
return infos;
|
||||
}
|
||||
|
||||
private static ReflectedCascadingParameterInfo[] CreateReflectedCascadingParameterInfos(Type componentType)
|
||||
{
|
||||
List<ReflectedCascadingParameterInfo> result = null;
|
||||
var candidateProps = ComponentProperties.GetCandidateBindableProperties(componentType);
|
||||
foreach (var prop in candidateProps)
|
||||
{
|
||||
var attribute = prop.GetCustomAttribute<CascadingParameterAttribute>();
|
||||
if (attribute != null)
|
||||
{
|
||||
if (result == null)
|
||||
{
|
||||
result = new List<ReflectedCascadingParameterInfo>();
|
||||
}
|
||||
|
||||
result.Add(new ReflectedCascadingParameterInfo(
|
||||
prop.Name,
|
||||
prop.PropertyType,
|
||||
attribute.Name));
|
||||
}
|
||||
}
|
||||
|
||||
return result?.ToArray();
|
||||
}
|
||||
|
||||
readonly struct ReflectedCascadingParameterInfo
|
||||
{
|
||||
public string ConsumerValueName { get; }
|
||||
public string SupplierValueName { get; }
|
||||
public Type ValueType { get; }
|
||||
|
||||
public ReflectedCascadingParameterInfo(
|
||||
string consumerValueName, Type valueType, string supplierValueName)
|
||||
{
|
||||
ConsumerValueName = consumerValueName;
|
||||
SupplierValueName = supplierValueName;
|
||||
ValueType = valueType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// A component that provides a cascading value to all descendant components.
|
||||
/// </summary>
|
||||
public class CascadingValue<TValue> : ICascadingValueComponent, IComponent
|
||||
{
|
||||
private RenderHandle _renderHandle;
|
||||
private HashSet<ComponentState> _subscribers; // Lazily instantiated
|
||||
private bool _hasSetParametersPreviously;
|
||||
|
||||
/// <summary>
|
||||
/// The content to which the value should be provided.
|
||||
/// </summary>
|
||||
[Parameter] public RenderFragment ChildContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value to be provided.
|
||||
/// </summary>
|
||||
[Parameter] public TValue Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optionally gives a name to the provided value. Descendant components
|
||||
/// will be able to receive the value by specifying this name.
|
||||
///
|
||||
/// If no name is specified, then descendant components will receive the
|
||||
/// value based the type of value they are requesting.
|
||||
/// </summary>
|
||||
[Parameter] public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If true, indicates that <see cref="Value"/> will not change. This is a
|
||||
/// performance optimization that allows the framework to skip setting up
|
||||
/// change notifications. Set this flag only if you will not change
|
||||
/// <see cref="Value"/> during the component's lifetime.
|
||||
/// </summary>
|
||||
[Parameter] public bool IsFixed { get; set; }
|
||||
|
||||
object ICascadingValueComponent.CurrentValue => Value;
|
||||
|
||||
bool ICascadingValueComponent.CurrentValueIsFixed => IsFixed;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Attach(RenderHandle renderHandle)
|
||||
{
|
||||
_renderHandle = renderHandle;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
// Implementing the parameter binding manually, instead of just calling
|
||||
// parameters.SetParameterProperties(this), is just a very slight perf optimization
|
||||
// and makes it simpler impose rules about the params being required or not.
|
||||
|
||||
var hasSuppliedValue = false;
|
||||
var previousValue = Value;
|
||||
var previousFixed = IsFixed;
|
||||
Value = default;
|
||||
ChildContent = null;
|
||||
Name = null;
|
||||
IsFixed = false;
|
||||
|
||||
foreach (var parameter in parameters)
|
||||
{
|
||||
if (parameter.Name.Equals(nameof(Value), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Value = (TValue)parameter.Value;
|
||||
hasSuppliedValue = true;
|
||||
}
|
||||
else if (parameter.Name.Equals(nameof(ChildContent), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ChildContent = (RenderFragment)parameter.Value;
|
||||
}
|
||||
else if (parameter.Name.Equals(nameof(Name), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Name = (string)parameter.Value;
|
||||
if (string.IsNullOrEmpty(Name))
|
||||
{
|
||||
throw new ArgumentException($"The parameter '{nameof(Name)}' for component '{nameof(CascadingValue<TValue>)}' does not allow null or empty values.");
|
||||
}
|
||||
}
|
||||
else if (parameter.Name.Equals(nameof(IsFixed), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
IsFixed = (bool)parameter.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"The component '{nameof(CascadingValue<TValue>)}' does not accept a parameter with the name '{parameter.Name}'.");
|
||||
}
|
||||
}
|
||||
|
||||
if (_hasSetParametersPreviously && IsFixed != previousFixed)
|
||||
{
|
||||
throw new InvalidOperationException($"The value of {nameof(IsFixed)} cannot be changed dynamically.");
|
||||
}
|
||||
|
||||
_hasSetParametersPreviously = true;
|
||||
|
||||
// It's OK for the value to be null, but some "Value" param must be suppled
|
||||
// because it serves no useful purpose to have a <CascadingValue> otherwise.
|
||||
if (!hasSuppliedValue)
|
||||
{
|
||||
throw new ArgumentException($"Missing required parameter '{nameof(Value)}' for component '{GetType().Name}'.");
|
||||
}
|
||||
|
||||
// Rendering is most efficient when things are queued from rootmost to leafmost.
|
||||
// Given a components A (parent) -> B (child), you want them to be queued in order
|
||||
// [A, B] because if you had [B, A], then the render for A might change B's params
|
||||
// making it render again, so you'd render [B, A, B], which is wasteful.
|
||||
// At some point we might consider making the render queue actually enforce this
|
||||
// ordering during insertion.
|
||||
//
|
||||
// For the CascadingValue component, this observation is why it's important to render
|
||||
// ourself before notifying subscribers (which can be grandchildren or deeper).
|
||||
// If we rerendered subscribers first, then our own subsequent render might cause an
|
||||
// further update that makes those nested subscribers get rendered twice.
|
||||
_renderHandle.Render(Render);
|
||||
|
||||
if (_subscribers != null && ChangeDetection.MayHaveChanged(previousValue, Value))
|
||||
{
|
||||
NotifySubscribers(parameters.Lifetime);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
bool ICascadingValueComponent.CanSupplyValue(Type requestedType, string requestedName)
|
||||
{
|
||||
if (!requestedType.IsAssignableFrom(typeof(TValue)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return (requestedName == null && Name == null) // Match on type alone
|
||||
|| string.Equals(requestedName, Name, StringComparison.OrdinalIgnoreCase); // Also match on name
|
||||
}
|
||||
|
||||
void ICascadingValueComponent.Subscribe(ComponentState subscriber)
|
||||
{
|
||||
#if DEBUG
|
||||
if (IsFixed)
|
||||
{
|
||||
// Should not be possible. User code cannot trigger this.
|
||||
// Checking only to catch possible future framework bugs.
|
||||
throw new InvalidOperationException($"Cannot subscribe to a {typeof(CascadingValue<>).Name} when {nameof(IsFixed)} is true.");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (_subscribers == null)
|
||||
{
|
||||
_subscribers = new HashSet<ComponentState>();
|
||||
}
|
||||
|
||||
_subscribers.Add(subscriber);
|
||||
}
|
||||
|
||||
void ICascadingValueComponent.Unsubscribe(ComponentState subscriber)
|
||||
{
|
||||
_subscribers.Remove(subscriber);
|
||||
}
|
||||
|
||||
private void NotifySubscribers(in ParameterViewLifetime lifetime)
|
||||
{
|
||||
foreach (var subscriber in _subscribers)
|
||||
{
|
||||
subscriber.NotifyCascadingValueChanged(lifetime);
|
||||
}
|
||||
}
|
||||
|
||||
private void Render(RenderTreeBuilder builder)
|
||||
{
|
||||
builder.AddContent(0, ChildContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,46 +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;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
internal class ChangeDetection
|
||||
{
|
||||
public static bool MayHaveChanged<T1, T2>(T1 oldValue, T2 newValue)
|
||||
{
|
||||
var oldIsNotNull = oldValue != null;
|
||||
var newIsNotNull = newValue != null;
|
||||
if (oldIsNotNull != newIsNotNull)
|
||||
{
|
||||
return true; // One's null and the other isn't, so different
|
||||
}
|
||||
else if (oldIsNotNull) // i.e., both are not null (considering previous check)
|
||||
{
|
||||
var oldValueType = oldValue.GetType();
|
||||
var newValueType = newValue.GetType();
|
||||
if (oldValueType != newValueType // Definitely different
|
||||
|| !IsKnownImmutableType(oldValueType) // Maybe different
|
||||
|| !oldValue.Equals(newValue)) // Somebody says they are different
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// By now we know either both are null, or they are the same immutable type
|
||||
// and ThatType::Equals says the two values are equal.
|
||||
return false;
|
||||
}
|
||||
|
||||
// The contents of this list need to trade off false negatives against computation
|
||||
// time. So we don't want a huge list of types to check (or would have to move to
|
||||
// a hashtable lookup, which is differently expensive). It's better not to include
|
||||
// uncommon types here even if they are known to be immutable.
|
||||
private static bool IsKnownImmutableType(Type type)
|
||||
=> type.IsPrimitive
|
||||
|| type == typeof(string)
|
||||
|| type == typeof(DateTime)
|
||||
|| type == typeof(Type)
|
||||
|| type == typeof(decimal);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +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;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Supplies information about an change event that is being raised.
|
||||
/// </summary>
|
||||
public class ChangeEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the new value.
|
||||
/// </summary>
|
||||
public object Value { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.CompilerServices
|
||||
{
|
||||
/// <summary>
|
||||
/// Used by generated code produced by the Components code generator. Not intended or supported
|
||||
/// for use in application code.
|
||||
/// </summary>
|
||||
public static class RuntimeHelpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Not intended for use by application code.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public static T TypeCheck<T>(T value) => value;
|
||||
|
||||
/// <summary>
|
||||
/// Not intended for use by application code.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
//
|
||||
// This method is used with `@bind-Value` for components. When a component has a generic type, it's
|
||||
// really messy to write to try and write the parameter type for ValueChanged - because it can contain generic
|
||||
// type parameters. We're using a trick of type inference to generate the proper typing for the delegate
|
||||
// so that method-group-to-delegate conversion works.
|
||||
public static EventCallback<T> CreateInferredEventCallback<T>(object receiver, Action<T> callback, T value)
|
||||
{
|
||||
return EventCallback.Factory.Create<T>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Not intended for use by application code.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
//
|
||||
// This method is used with `@bind-Value` for components. When a component has a generic type, it's
|
||||
// really messy to write to try and write the parameter type for ValueChanged - because it can contain generic
|
||||
// type parameters. We're using a trick of type inference to generate the proper typing for the delegate
|
||||
// so that method-group-to-delegate conversion works.
|
||||
public static EventCallback<T> CreateInferredEventCallback<T>(object receiver, Func<T, Task> callback, T value)
|
||||
{
|
||||
return EventCallback.Factory.Create<T>(receiver, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,336 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
// IMPORTANT
|
||||
//
|
||||
// Many of these names are used in code generation. Keep these in sync with the code generation code
|
||||
// See: src/Microsoft.AspNetCore.Components.Razor.Extensions/ComponentsApi.cs
|
||||
|
||||
// Most of the developer-facing component lifecycle concepts are encapsulated in this
|
||||
// base class. The core components rendering system doesn't know about them (it only knows
|
||||
// about IComponent). This gives us flexibility to change the lifecycle concepts easily,
|
||||
// or for developers to design their own lifecycles as different base classes.
|
||||
|
||||
// TODO: When the component lifecycle design stabilises, add proper unit tests for ComponentBase.
|
||||
|
||||
/// <summary>
|
||||
/// Optional base class for components. Alternatively, components may
|
||||
/// implement <see cref="IComponent"/> directly.
|
||||
/// </summary>
|
||||
public abstract class ComponentBase : IComponent, IHandleEvent, IHandleAfterRender
|
||||
{
|
||||
private readonly RenderFragment _renderFragment;
|
||||
private RenderHandle _renderHandle;
|
||||
private bool _initialized;
|
||||
private bool _hasNeverRendered = true;
|
||||
private bool _hasPendingQueuedRender;
|
||||
private bool _hasCalledOnAfterRender;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="ComponentBase"/>.
|
||||
/// </summary>
|
||||
public ComponentBase()
|
||||
{
|
||||
_renderFragment = builder =>
|
||||
{
|
||||
_hasPendingQueuedRender = false;
|
||||
_hasNeverRendered = false;
|
||||
BuildRenderTree(builder);
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Renders the component to the supplied <see cref="RenderTreeBuilder"/>.
|
||||
/// </summary>
|
||||
/// <param name="builder">A <see cref="RenderTreeBuilder"/> that will receive the render output.</param>
|
||||
protected virtual void BuildRenderTree(RenderTreeBuilder builder)
|
||||
{
|
||||
// Developers can either override this method in derived classes, or can use Razor
|
||||
// syntax to define a derived class and have the compiler generate the method.
|
||||
|
||||
// Other code within this class should *not* invoke BuildRenderTree directly,
|
||||
// but instead should invoke the _renderFragment field.
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method invoked when the component is ready to start, having received its
|
||||
/// initial parameters from its parent in the render tree.
|
||||
/// </summary>
|
||||
protected virtual void OnInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method invoked when the component is ready to start, having received its
|
||||
/// initial parameters from its parent in the render tree.
|
||||
///
|
||||
/// Override this method if you will perform an asynchronous operation and
|
||||
/// want the component to refresh when that operation is completed.
|
||||
/// </summary>
|
||||
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
|
||||
protected virtual Task OnInitializedAsync()
|
||||
=> Task.CompletedTask;
|
||||
|
||||
/// <summary>
|
||||
/// Method invoked when the component has received parameters from its parent in
|
||||
/// the render tree, and the incoming values have been assigned to properties.
|
||||
/// </summary>
|
||||
protected virtual void OnParametersSet()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method invoked when the component has received parameters from its parent in
|
||||
/// the render tree, and the incoming values have been assigned to properties.
|
||||
/// </summary>
|
||||
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
|
||||
protected virtual Task OnParametersSetAsync()
|
||||
=> Task.CompletedTask;
|
||||
|
||||
/// <summary>
|
||||
/// Notifies the component that its state has changed. When applicable, this will
|
||||
/// cause the component to be re-rendered.
|
||||
/// </summary>
|
||||
protected void StateHasChanged()
|
||||
{
|
||||
if (_hasPendingQueuedRender)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_hasNeverRendered || ShouldRender())
|
||||
{
|
||||
_hasPendingQueuedRender = true;
|
||||
|
||||
try
|
||||
{
|
||||
_renderHandle.Render(_renderFragment);
|
||||
}
|
||||
catch
|
||||
{
|
||||
_hasPendingQueuedRender = false;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flag to indicate whether the component should render.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected virtual bool ShouldRender()
|
||||
=> true;
|
||||
|
||||
/// <summary>
|
||||
/// Method invoked after each time the component has been rendered.
|
||||
/// </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>
|
||||
/// <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)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method invoked after each time the component has been rendered. Note that the component does
|
||||
/// 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>
|
||||
/// <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>
|
||||
/// Executes the supplied work item on the associated renderer's
|
||||
/// synchronization context.
|
||||
/// </summary>
|
||||
/// <param name="workItem">The work item to execute.</param>
|
||||
protected Task InvokeAsync(Action workItem)
|
||||
=> _renderHandle.Dispatcher.InvokeAsync(workItem);
|
||||
|
||||
/// <summary>
|
||||
/// Executes the supplied work item on the associated renderer's
|
||||
/// synchronization context.
|
||||
/// </summary>
|
||||
/// <param name="workItem">The work item to execute.</param>
|
||||
protected Task InvokeAsync(Func<Task> workItem)
|
||||
=> _renderHandle.Dispatcher.InvokeAsync(workItem);
|
||||
|
||||
void IComponent.Attach(RenderHandle renderHandle)
|
||||
{
|
||||
// This implicitly means a ComponentBase can only be associated with a single
|
||||
// renderer. That's the only use case we have right now. If there was ever a need,
|
||||
// a component could hold a collection of render handles.
|
||||
if (_renderHandle.IsInitialized)
|
||||
{
|
||||
throw new InvalidOperationException($"The render handle is already set. Cannot initialize a {nameof(ComponentBase)} more than once.");
|
||||
}
|
||||
|
||||
_renderHandle = renderHandle;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Sets parameters supplied by the component's parent in the render tree.
|
||||
/// </summary>
|
||||
/// <param name="parameters">The parameters.</param>
|
||||
/// <returns>A <see cref="Task"/> that completes when the component has finished updating and rendering itself.</returns>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// The <see cref="SetParametersAsync(ParameterView)"/> method should be passed the entire set of parameter values each
|
||||
/// time <see cref="SetParametersAsync(ParameterView)"/> is called. It not required that the caller supply a parameter
|
||||
/// value for all parameters that are logically understood by the component.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// The default implementation of <see cref="SetParametersAsync(ParameterView)"/> will set the value of each property
|
||||
/// decorated with <see cref="ParameterAttribute" /> or <see cref="CascadingParameterAttribute" /> that has
|
||||
/// a corresponding value in the <see cref="ParameterView" />. Parameters that do not have a corresponding value
|
||||
/// will be unchanged.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public virtual Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
parameters.SetParameterProperties(this);
|
||||
if (!_initialized)
|
||||
{
|
||||
_initialized = true;
|
||||
|
||||
return RunInitAndSetParametersAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
return CallOnParametersSetAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task RunInitAndSetParametersAsync()
|
||||
{
|
||||
OnInitialized();
|
||||
var task = OnInitializedAsync();
|
||||
|
||||
if (task.Status != TaskStatus.RanToCompletion && task.Status != TaskStatus.Canceled)
|
||||
{
|
||||
// Call state has changed here so that we render after the sync part of OnInitAsync has run
|
||||
// and wait for it to finish before we continue. If no async work has been done yet, we want
|
||||
// to defer calling StateHasChanged up until the first bit of async code happens or until
|
||||
// the end. Additionally, we want to avoid calling StateHasChanged if no
|
||||
// async work is to be performed.
|
||||
StateHasChanged();
|
||||
|
||||
try
|
||||
{
|
||||
await task;
|
||||
}
|
||||
catch // avoiding exception filters for AOT runtime support
|
||||
{
|
||||
// Ignore exceptions from task cancelletions.
|
||||
// Awaiting a canceled task may produce either an OperationCanceledException (if produced as a consequence of
|
||||
// CancellationToken.ThrowIfCancellationRequested()) or a TaskCanceledException (produced as a consequence of awaiting Task.FromCanceled).
|
||||
// It's much easier to check the state of the Task (i.e. Task.IsCanceled) rather than catch two distinct exceptions.
|
||||
if (!task.IsCanceled)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
// Don't call StateHasChanged here. CallOnParametersSetAsync should handle that for us.
|
||||
}
|
||||
|
||||
await CallOnParametersSetAsync();
|
||||
}
|
||||
|
||||
private Task CallOnParametersSetAsync()
|
||||
{
|
||||
OnParametersSet();
|
||||
var task = OnParametersSetAsync();
|
||||
// If no async work is to be performed, i.e. the task has already ran to completion
|
||||
// or was canceled by the time we got to inspect it, avoid going async and re-invoking
|
||||
// StateHasChanged at the culmination of the async work.
|
||||
var shouldAwaitTask = task.Status != TaskStatus.RanToCompletion &&
|
||||
task.Status != TaskStatus.Canceled;
|
||||
|
||||
// We always call StateHasChanged here as we want to trigger a rerender after OnParametersSet and
|
||||
// the synchronous part of OnParametersSetAsync has run.
|
||||
StateHasChanged();
|
||||
|
||||
return shouldAwaitTask ?
|
||||
CallStateHasChangedOnAsyncCompletion(task) :
|
||||
Task.CompletedTask;
|
||||
}
|
||||
|
||||
private async Task CallStateHasChangedOnAsyncCompletion(Task task)
|
||||
{
|
||||
try
|
||||
{
|
||||
await task;
|
||||
}
|
||||
catch // avoiding exception filters for AOT runtime support
|
||||
{
|
||||
// Ignore exceptions from task cancelletions, but don't bother issuing a state change.
|
||||
if (task.IsCanceled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
throw;
|
||||
}
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
Task IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, object arg)
|
||||
{
|
||||
var task = callback.InvokeAsync(arg);
|
||||
var shouldAwaitTask = task.Status != TaskStatus.RanToCompletion &&
|
||||
task.Status != TaskStatus.Canceled;
|
||||
|
||||
// After each event, we synchronously re-render (unless !ShouldRender())
|
||||
// This just saves the developer the trouble of putting "StateHasChanged();"
|
||||
// at the end of every event callback.
|
||||
StateHasChanged();
|
||||
|
||||
return shouldAwaitTask ?
|
||||
CallStateHasChangedOnAsyncCompletion(task) :
|
||||
Task.CompletedTask;
|
||||
}
|
||||
|
||||
Task IHandleAfterRender.OnAfterRenderAsync()
|
||||
{
|
||||
var firstRender = !_hasCalledOnAfterRender;
|
||||
_hasCalledOnAfterRender |= true;
|
||||
|
||||
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
|
||||
// reason we have OnAfterRenderAsync is so that the developer doesn't
|
||||
// have to use "async void" and do their own exception handling in
|
||||
// the case where they want to start an async task.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,88 +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.Concurrent;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Components.Reflection;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <remarks>
|
||||
/// The <see cref="Instance"/> property on this type is used as a static global cache. Ensure any changes to this type
|
||||
/// are thread safe and can be safely cached statically.
|
||||
/// </remarks>
|
||||
internal class ComponentFactory
|
||||
{
|
||||
private static readonly BindingFlags _injectablePropertyBindingFlags
|
||||
= BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
|
||||
|
||||
private readonly ConcurrentDictionary<Type, Action<IServiceProvider, IComponent>> _cachedInitializers
|
||||
= new ConcurrentDictionary<Type, Action<IServiceProvider, IComponent>>();
|
||||
|
||||
public static readonly ComponentFactory Instance = new ComponentFactory();
|
||||
|
||||
public IComponent InstantiateComponent(IServiceProvider serviceProvider, Type componentType)
|
||||
{
|
||||
var instance = Activator.CreateInstance(componentType);
|
||||
if (!(instance is IComponent component))
|
||||
{
|
||||
throw new ArgumentException($"The type {componentType.FullName} does not implement {nameof(IComponent)}.", nameof(componentType));
|
||||
}
|
||||
|
||||
PerformPropertyInjection(serviceProvider, component);
|
||||
return component;
|
||||
}
|
||||
|
||||
private void PerformPropertyInjection(IServiceProvider serviceProvider, IComponent instance)
|
||||
{
|
||||
// This is thread-safe because _cachedInitializers is a ConcurrentDictionary.
|
||||
// We might generate the initializer more than once for a given type, but would
|
||||
// still produce the correct result.
|
||||
var instanceType = instance.GetType();
|
||||
if (!_cachedInitializers.TryGetValue(instanceType, out var initializer))
|
||||
{
|
||||
initializer = CreateInitializer(instanceType);
|
||||
_cachedInitializers.TryAdd(instanceType, initializer);
|
||||
}
|
||||
|
||||
initializer(serviceProvider, instance);
|
||||
}
|
||||
|
||||
private Action<IServiceProvider, IComponent> CreateInitializer(Type type)
|
||||
{
|
||||
// Do all the reflection up front
|
||||
var injectableProperties =
|
||||
MemberAssignment.GetPropertiesIncludingInherited(type, _injectablePropertyBindingFlags)
|
||||
.Where(p => p.IsDefined(typeof(InjectAttribute)));
|
||||
|
||||
var injectables = injectableProperties.Select(property =>
|
||||
(
|
||||
propertyName: property.Name,
|
||||
propertyType: property.PropertyType,
|
||||
setter: MemberAssignment.CreatePropertySetter(type, property, cascading: false)
|
||||
)).ToArray();
|
||||
|
||||
return Initialize;
|
||||
|
||||
// Return an action whose closure can write all the injected properties
|
||||
// without any further reflection calls (just typecasts)
|
||||
void Initialize(IServiceProvider serviceProvider, IComponent component)
|
||||
{
|
||||
foreach (var (propertyName, propertyType, setter) in injectables)
|
||||
{
|
||||
var serviceInstance = serviceProvider.GetService(propertyType);
|
||||
if (serviceInstance == null)
|
||||
{
|
||||
throw new InvalidOperationException($"Cannot provide a value for property " +
|
||||
$"'{propertyName}' on type '{type.FullName}'. There is no " +
|
||||
$"registered service of type '{propertyType}'.");
|
||||
}
|
||||
|
||||
setter.SetValue(component, serviceInstance);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,90 +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.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components.Rendering;
|
||||
using Microsoft.AspNetCore.Components.RenderTree;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Dispatches external actions to be executed on the context of a <see cref="Renderer"/>.
|
||||
/// </summary>
|
||||
public abstract class Dispatcher
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a default instance of <see cref="Dispatcher"/>.
|
||||
/// </summary>
|
||||
/// <returns>A <see cref="Dispatcher"/> instance.</returns>
|
||||
public static Dispatcher CreateDefault() => new RendererSynchronizationContextDispatcher();
|
||||
|
||||
/// <summary>
|
||||
/// Provides notifications of unhandled exceptions that occur within the dispatcher.
|
||||
/// </summary>
|
||||
internal event UnhandledExceptionEventHandler UnhandledException;
|
||||
|
||||
/// <summary>
|
||||
/// Validates that the currently executing code is running inside the dispatcher.
|
||||
/// </summary>
|
||||
public void AssertAccess()
|
||||
{
|
||||
if (!CheckAccess())
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"The current thread is not associated with the Dispatcher. " +
|
||||
"Use InvokeAsync() to switch execution to the Dispatcher when " +
|
||||
"triggering rendering or component state.");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a value that determines whether using the dispatcher to invoke a work item is required
|
||||
/// from the current context.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> if invoking is required, otherwise <c>false</c>.</returns>
|
||||
public abstract bool CheckAccess();
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the given <see cref="Action"/> in the context of the associated <see cref="Renderer"/>.
|
||||
/// </summary>
|
||||
/// <param name="workItem">The action to execute.</param>
|
||||
/// <returns>A <see cref="Task"/> that will be completed when the action has finished executing.</returns>
|
||||
public abstract Task InvokeAsync(Action workItem);
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the given <see cref="Func{TResult}"/> in the context of the associated <see cref="Renderer"/>.
|
||||
/// </summary>
|
||||
/// <param name="workItem">The asynchronous action to execute.</param>
|
||||
/// <returns>A <see cref="Task"/> that will be completed when the action has finished executing.</returns>
|
||||
public abstract Task InvokeAsync(Func<Task> workItem);
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the given <see cref="Func{TResult}"/> in the context of the associated <see cref="Renderer"/>.
|
||||
/// </summary>
|
||||
/// <param name="workItem">The function to execute.</param>
|
||||
/// <returns>A <see cref="Task{TResult}"/> that will be completed when the function has finished executing.</returns>
|
||||
public abstract Task<TResult> InvokeAsync<TResult>(Func<TResult> workItem);
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the given <see cref="Func{TResult}"/> in the context of the associated <see cref="Renderer"/>.
|
||||
/// </summary>
|
||||
/// <param name="workItem">The asynchronous function to execute.</param>
|
||||
/// <returns>A <see cref="Task{TResult}"/> that will be completed when the function has finished executing.</returns>
|
||||
public abstract Task<TResult> InvokeAsync<TResult>(Func<Task<TResult>> workItem);
|
||||
|
||||
/// <summary>
|
||||
/// Called to notify listeners of an unhandled exception.
|
||||
/// </summary>
|
||||
/// <param name="e">The <see cref="UnhandledExceptionEventArgs"/>.</param>
|
||||
protected void OnUnhandledException(UnhandledExceptionEventArgs e)
|
||||
{
|
||||
if (e is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(e));
|
||||
}
|
||||
|
||||
UnhandledException?.Invoke(this, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,55 +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.Globalization;
|
||||
using System.Threading;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a reference to a rendered element.
|
||||
/// </summary>
|
||||
public readonly struct ElementReference
|
||||
{
|
||||
private static long _nextIdForWebAssemblyOnly = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a unique identifier for <see cref="ElementReference" />.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The Id is unique at least within the scope of a given user/circuit.
|
||||
/// This property is public to support Json serialization and should not be used by user code.
|
||||
/// </remarks>
|
||||
public string Id { get; }
|
||||
|
||||
public ElementReference(string id)
|
||||
{
|
||||
Id = id;
|
||||
}
|
||||
|
||||
internal static ElementReference CreateWithUniqueId()
|
||||
=> new ElementReference(CreateUniqueId());
|
||||
|
||||
private static string CreateUniqueId()
|
||||
{
|
||||
if (PlatformInfo.IsWebAssembly)
|
||||
{
|
||||
// On WebAssembly there's only one user, so it's fine to expose the number
|
||||
// of IDs that have been assigned, and this is cheaper than creating a GUID.
|
||||
// It's unfortunate that this still involves a heap allocation. If that becomes
|
||||
// a problem we could extend RenderTreeFrame to have both "string" and "long"
|
||||
// fields for ElementRefCaptureId, of which only one would be in use depending
|
||||
// on the platform.
|
||||
var id = Interlocked.Increment(ref _nextIdForWebAssemblyOnly);
|
||||
return id.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
else
|
||||
{
|
||||
// For remote rendering, it's important not to disclose any cross-user state,
|
||||
// such as the number of IDs that have been assigned.
|
||||
return Guid.NewGuid().ToString("D", CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,69 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// A bound event handler delegate.
|
||||
/// </summary>
|
||||
public readonly struct EventCallback : IEventCallback
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a reference to the <see cref="EventCallbackFactory"/>.
|
||||
/// </summary>
|
||||
public static readonly EventCallbackFactory Factory = new EventCallbackFactory();
|
||||
|
||||
/// <summary>
|
||||
/// Gets an empty <see cref="EventCallback"/>.
|
||||
/// </summary>
|
||||
public static readonly EventCallback Empty = new EventCallback(null, (Action)(() => { }));
|
||||
|
||||
internal readonly MulticastDelegate Delegate;
|
||||
internal readonly IHandleEvent Receiver;
|
||||
|
||||
/// <summary>
|
||||
/// Creates the new <see cref="EventCallback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="delegate">The delegate to bind.</param>
|
||||
public EventCallback(IHandleEvent receiver, MulticastDelegate @delegate)
|
||||
{
|
||||
Receiver = receiver;
|
||||
Delegate = @delegate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value that indicates whether the delegate associated with this event dispatcher is non-null.
|
||||
/// </summary>
|
||||
public bool HasDelegate => Delegate != null;
|
||||
|
||||
// This is a hint to the runtime that Receiver is a different object than what
|
||||
// Delegate.Target points to. This allows us to avoid boxing the command object
|
||||
// when building the render tree. See logic where this is used.
|
||||
internal bool RequiresExplicitReceiver => Receiver != null && !object.ReferenceEquals(Receiver, Delegate?.Target);
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the delegate associated with this binding and dispatches an event notification to the
|
||||
/// appropriate component.
|
||||
/// </summary>
|
||||
/// <param name="arg">The argument.</param>
|
||||
/// <returns>A <see cref="Task"/> which completes asynchronously once event processing has completed.</returns>
|
||||
public Task InvokeAsync(object arg)
|
||||
{
|
||||
if (Receiver == null)
|
||||
{
|
||||
return EventCallbackWorkItem.InvokeAsync<object>(Delegate, arg);
|
||||
}
|
||||
|
||||
return Receiver.HandleEventAsync(new EventCallbackWorkItem(Delegate), arg);
|
||||
}
|
||||
|
||||
object IEventCallback.UnpackForRenderTree()
|
||||
{
|
||||
return RequiresExplicitReceiver ? (object)this : Delegate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,241 +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.ComponentModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// A factory for creating <see cref="EventCallback"/> and <see cref="EventCallback{T}"/>
|
||||
/// instances.
|
||||
/// </summary>
|
||||
public sealed class EventCallbackFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns the provided <paramref name="callback"/>. For internal framework use only.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <returns></returns>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public EventCallback Create(object receiver, EventCallback callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return callback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback Create(object receiver, Action callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback Create(object receiver, Action<object> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback Create(object receiver, Func<Task> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback Create(object receiver, Func<object, Task> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the provided <paramref name="callback"/>. For internal framework use only.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <returns></returns>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public EventCallback<TValue> Create<TValue>(object receiver, EventCallback callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return new EventCallback<TValue>(callback.Receiver, callback.Delegate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the provided <paramref name="callback"/>. For internal framework use only.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <returns></returns>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public EventCallback<TValue> Create<TValue>(object receiver, EventCallback<TValue> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return callback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback<TValue> Create<TValue>(object receiver, Action callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore<TValue>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback<TValue> Create<TValue>(object receiver, Action<TValue> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore<TValue>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback<TValue> Create<TValue>(object receiver, Func<Task> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore<TValue>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public EventCallback<TValue> Create<TValue>(object receiver, Func<TValue, Task> callback)
|
||||
{
|
||||
if (receiver == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(receiver));
|
||||
}
|
||||
|
||||
return CreateCore<TValue>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>. For internal framework use only.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public EventCallback<TValue> CreateInferred<TValue>(object receiver, Action<TValue> callback, TValue value)
|
||||
{
|
||||
return Create(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>. For internal framework use only.
|
||||
/// </summary>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public EventCallback<TValue> CreateInferred<TValue>(object receiver, Func<TValue, Task> callback, TValue value)
|
||||
{
|
||||
return Create(receiver, callback);
|
||||
}
|
||||
|
||||
private EventCallback CreateCore(object receiver, MulticastDelegate callback)
|
||||
{
|
||||
return new EventCallback(callback?.Target as IHandleEvent ?? receiver as IHandleEvent, callback);
|
||||
}
|
||||
|
||||
private EventCallback<TValue> CreateCore<TValue>(object receiver, MulticastDelegate callback)
|
||||
{
|
||||
return new EventCallback<TValue>(callback?.Target as IHandleEvent ?? receiver as IHandleEvent, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,539 +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.Globalization;
|
||||
using static Microsoft.AspNetCore.Components.BindConverter;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains extension methods for two-way binding using <see cref="EventCallback"/>. For internal use only.
|
||||
/// </summary>
|
||||
//
|
||||
// NOTE: for number parsing, the HTML5 spec dictates that <input type="number"> the DOM will represent
|
||||
// number values as floating point numbers using `.` as the period separator. This is NOT culture senstive.
|
||||
// Put another way, the user might see `,` as their decimal separator, but the value available in events
|
||||
// to JS code is always simpilar to what .NET parses with InvariantCulture.
|
||||
//
|
||||
// See: https://www.w3.org/TR/html5/sec-forms.html#number-state-typenumber
|
||||
// See: https://www.w3.org/TR/html5/infrastructure.html#valid-floating-point-number
|
||||
//
|
||||
// For now we're not necessarily handling this correctly since we parse the same way for number and text.
|
||||
public static class EventCallbackFactoryBinderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<string> setter,
|
||||
string existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<string>(factory, receiver, setter, culture, ConvertToString);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<bool> setter,
|
||||
bool existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<bool>(factory, receiver, setter, culture, ConvertToBool);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<bool?> setter,
|
||||
bool? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<bool?>(factory, receiver, setter, culture, ConvertToNullableBool);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<int> setter,
|
||||
int existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<int>(factory, receiver, setter, culture, ConvertToInt);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<int?> setter,
|
||||
int? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<int?>(factory, receiver, setter, culture, ConvertToNullableInt);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<long> setter,
|
||||
long existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<long>(factory, receiver, setter, culture, ConvertToLong);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<long?> setter,
|
||||
long? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<long?>(factory, receiver, setter, culture, ConvertToNullableLong);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<float> setter,
|
||||
float existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<float>(factory, receiver, setter, culture, ConvertToFloat);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<float?> setter,
|
||||
float? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<float?>(factory, receiver, setter, culture, ConvertToNullableFloat);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<double> setter,
|
||||
double existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<double>(factory, receiver, setter, culture, ConvertToDoubleDelegate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<double?> setter,
|
||||
double? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<double?>(factory, receiver, setter, culture, ConvertToNullableDoubleDelegate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<decimal> setter,
|
||||
decimal existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<decimal>(factory, receiver, setter, culture, ConvertToDecimal);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<decimal?> setter,
|
||||
decimal? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<decimal?>(factory, receiver, setter, culture, ConvertToNullableDecimal);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTime> setter,
|
||||
DateTime existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTime>(factory, receiver, setter, culture, ConvertToDateTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="format"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTime> setter,
|
||||
DateTime existingValue,
|
||||
string format,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTime>(factory, receiver, setter, culture, format, ConvertToDateTimeWithFormat);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTime?> setter,
|
||||
DateTime? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTime?>(factory, receiver, setter, culture, ConvertToNullableDateTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="format"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTime?> setter,
|
||||
DateTime? existingValue,
|
||||
string format,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTime?>(factory, receiver, setter, culture, format, ConvertToNullableDateTimeWithFormat);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTimeOffset> setter,
|
||||
DateTimeOffset existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTimeOffset>(factory, receiver, setter, culture, ConvertToDateTimeOffset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="format"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTimeOffset> setter,
|
||||
DateTimeOffset existingValue,
|
||||
string format,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTimeOffset>(factory, receiver, setter, culture, format, ConvertToDateTimeOffsetWithFormat);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTimeOffset?> setter,
|
||||
DateTimeOffset? existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTimeOffset?>(factory, receiver, setter, culture, ConvertToNullableDateTimeOffset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="format"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<DateTimeOffset?> setter,
|
||||
DateTimeOffset? existingValue,
|
||||
string format,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<DateTimeOffset?>(factory, receiver, setter, culture, format, ConvertToNullableDateTimeOffsetWithFormat);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// For internal use only.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="factory"></param>
|
||||
/// <param name="receiver"></param>
|
||||
/// <param name="setter"></param>
|
||||
/// <param name="existingValue"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public static EventCallback<ChangeEventArgs> CreateBinder<T>(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<T> setter,
|
||||
T existingValue,
|
||||
CultureInfo culture = null)
|
||||
{
|
||||
return CreateBinderCore<T>(factory, receiver, setter, culture, ParserDelegateCache.Get<T>());
|
||||
}
|
||||
|
||||
private static EventCallback<ChangeEventArgs> CreateBinderCore<T>(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<T> setter,
|
||||
CultureInfo culture,
|
||||
BindConverter.BindParser<T> converter)
|
||||
{
|
||||
Action<ChangeEventArgs> callback = e =>
|
||||
{
|
||||
T value = default;
|
||||
var converted = false;
|
||||
try
|
||||
{
|
||||
converted = converter(e.Value, culture, out value);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
// We only invoke the setter if the conversion didn't throw, or if the newly-entered value is empty.
|
||||
// If the user entered some non-empty value we couldn't parse, we leave the state of the .NET field
|
||||
// unchanged, which for a two-way binding results in the UI reverting to its previous valid state
|
||||
// because the diff will see the current .NET output no longer matches the render tree since we
|
||||
// patched it to reflect the state of the UI.
|
||||
//
|
||||
// This reversion behavior is valuable because alternatives are problematic:
|
||||
// - If we assigned default(T) on failure, the user would lose whatever data they were editing,
|
||||
// for example if they accidentally pressed an alphabetical key while editing a number with
|
||||
// @bind:event="oninput"
|
||||
// - If the diff mechanism didn't revert to the previous good value, the user wouldn't necessarily
|
||||
// know that the data they are submitting is different from what they think they've typed
|
||||
if (converted)
|
||||
{
|
||||
setter(value);
|
||||
}
|
||||
else if (string.Empty.Equals(e.Value))
|
||||
{
|
||||
setter(default);
|
||||
}
|
||||
};
|
||||
return factory.Create<ChangeEventArgs>(receiver, callback);
|
||||
}
|
||||
|
||||
private static EventCallback<ChangeEventArgs> CreateBinderCore<T>(
|
||||
this EventCallbackFactory factory,
|
||||
object receiver,
|
||||
Action<T> setter,
|
||||
CultureInfo culture,
|
||||
string format,
|
||||
BindConverter.BindParserWithFormat<T> converter)
|
||||
{
|
||||
Action<ChangeEventArgs> callback = e =>
|
||||
{
|
||||
T value = default;
|
||||
var converted = false;
|
||||
try
|
||||
{
|
||||
converted = converter(e.Value, culture, format, out value);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
// We only invoke the setter if the conversion didn't throw, or if the newly-entered value is empty.
|
||||
// If the user entered some non-empty value we couldn't parse, we leave the state of the .NET field
|
||||
// unchanged, which for a two-way binding results in the UI reverting to its previous valid state
|
||||
// because the diff will see the current .NET output no longer matches the render tree since we
|
||||
// patched it to reflect the state of the UI.
|
||||
//
|
||||
// This reversion behavior is valuable because alternatives are problematic:
|
||||
// - If we assigned default(T) on failure, the user would lose whatever data they were editing,
|
||||
// for example if they accidentally pressed an alphabetical key while editing a number with
|
||||
// @bind:event="oninput"
|
||||
// - If the diff mechanism didn't revert to the previous good value, the user wouldn't necessarily
|
||||
// know that the data they are submitting is different from what they think they've typed
|
||||
if (converted)
|
||||
{
|
||||
setter(value);
|
||||
}
|
||||
else if (string.Empty.Equals(e.Value))
|
||||
{
|
||||
setter(default);
|
||||
}
|
||||
};
|
||||
return factory.Create<ChangeEventArgs>(receiver, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,86 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides extension methods for <see cref="EventCallbackFactory"/> and <see cref="EventArgs"/> types.
|
||||
/// </summary>
|
||||
public static class EventCallbackFactoryEventArgsExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="factory">The <see cref="EventCallbackFactory"/>.</param>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public static EventCallback<EventArgs> Create(this EventCallbackFactory factory, object receiver, Action<EventArgs> callback)
|
||||
{
|
||||
if (factory == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(factory));
|
||||
}
|
||||
|
||||
return factory.Create<EventArgs>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="factory">The <see cref="EventCallbackFactory"/>.</param>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public static EventCallback<EventArgs> Create(this EventCallbackFactory factory, object receiver, Func<EventArgs, Task> callback)
|
||||
{
|
||||
if (factory == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(factory));
|
||||
}
|
||||
|
||||
return factory.Create<EventArgs>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="factory">The <see cref="EventCallbackFactory"/>.</param>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public static EventCallback<ChangeEventArgs> Create(this EventCallbackFactory factory, object receiver, Action<ChangeEventArgs> callback)
|
||||
{
|
||||
if (factory == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(factory));
|
||||
}
|
||||
|
||||
return factory.Create<ChangeEventArgs>(receiver, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||
/// <paramref name="callback"/>.
|
||||
/// </summary>
|
||||
/// <param name="factory">The <see cref="EventCallbackFactory"/>.</param>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="callback">The event callback.</param>
|
||||
/// <returns>The <see cref="EventCallback"/>.</returns>
|
||||
public static EventCallback<ChangeEventArgs> Create(this EventCallbackFactory factory, object receiver, Func<ChangeEventArgs, Task> callback)
|
||||
{
|
||||
if (factory == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(factory));
|
||||
}
|
||||
|
||||
return factory.Create<ChangeEventArgs>(receiver, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,69 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// A bound event handler delegate.
|
||||
/// </summary>
|
||||
public readonly struct EventCallback<TValue> : IEventCallback
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets an empty <see cref="EventCallback{TValue}"/>.
|
||||
/// </summary>
|
||||
public static readonly EventCallback<TValue> Empty = new EventCallback<TValue>(null, (Action)(() => { }));
|
||||
|
||||
internal readonly MulticastDelegate Delegate;
|
||||
internal readonly IHandleEvent Receiver;
|
||||
|
||||
/// <summary>
|
||||
/// Creates the new <see cref="EventCallback{TValue}"/>.
|
||||
/// </summary>
|
||||
/// <param name="receiver">The event receiver.</param>
|
||||
/// <param name="delegate">The delegate to bind.</param>
|
||||
public EventCallback(IHandleEvent receiver, MulticastDelegate @delegate)
|
||||
{
|
||||
Receiver = receiver;
|
||||
Delegate = @delegate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value that indicates whether the delegate associated with this event dispatcher is non-null.
|
||||
/// </summary>
|
||||
public bool HasDelegate => Delegate != null;
|
||||
|
||||
// This is a hint to the runtime that Receiver is a different object than what
|
||||
// Delegate.Target points to. This allows us to avoid boxing the command object
|
||||
// when building the render tree. See logic where this is used.
|
||||
internal bool RequiresExplicitReceiver => Receiver != null && !object.ReferenceEquals(Receiver, Delegate?.Target);
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the delegate associated with this binding and dispatches an event notification to the
|
||||
/// appropriate component.
|
||||
/// </summary>
|
||||
/// <param name="arg">The argument.</param>
|
||||
/// <returns>A <see cref="Task"/> which completes asynchronously once event processing has completed.</returns>
|
||||
public Task InvokeAsync(TValue arg)
|
||||
{
|
||||
if (Receiver == null)
|
||||
{
|
||||
return EventCallbackWorkItem.InvokeAsync<TValue>(Delegate, arg);
|
||||
}
|
||||
|
||||
return Receiver.HandleEventAsync(new EventCallbackWorkItem(Delegate), arg);
|
||||
}
|
||||
|
||||
internal EventCallback AsUntyped()
|
||||
{
|
||||
return new EventCallback(Receiver ?? Delegate?.Target as IHandleEvent, Delegate);
|
||||
}
|
||||
|
||||
object IEventCallback.UnpackForRenderTree()
|
||||
{
|
||||
return RequiresExplicitReceiver ? (object)AsUntyped() : Delegate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,79 +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.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Wraps a callback delegate associated with an event.
|
||||
/// </summary>
|
||||
public readonly struct EventCallbackWorkItem
|
||||
{
|
||||
/// <summary>
|
||||
/// An empty <see cref="EventCallbackWorkItem"/>.
|
||||
/// </summary>
|
||||
public static readonly EventCallbackWorkItem Empty = new EventCallbackWorkItem(null);
|
||||
|
||||
private readonly MulticastDelegate _delegate;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="EventCallbackWorkItem"/> with the provided <paramref name="delegate"/>.
|
||||
/// </summary>
|
||||
/// <param name="delegate">The callback delegate.</param>
|
||||
public EventCallbackWorkItem(MulticastDelegate @delegate)
|
||||
{
|
||||
_delegate = @delegate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the delegate associated with this <see cref="EventCallbackWorkItem"/>.
|
||||
/// </summary>
|
||||
/// <param name="arg">The argument to provide to the delegate. May be <c>null</c>.</param>
|
||||
/// <returns>A <see cref="Task"/> then will complete asynchronously once the delegate has completed.</returns>
|
||||
public Task InvokeAsync(object arg)
|
||||
{
|
||||
return InvokeAsync<object>(_delegate, arg);
|
||||
}
|
||||
|
||||
internal static Task InvokeAsync<T>(MulticastDelegate @delegate, T arg)
|
||||
{
|
||||
switch (@delegate)
|
||||
{
|
||||
case null:
|
||||
return Task.CompletedTask;
|
||||
|
||||
case Action action:
|
||||
action.Invoke();
|
||||
return Task.CompletedTask;
|
||||
|
||||
case Action<T> actionEventArgs:
|
||||
actionEventArgs.Invoke(arg);
|
||||
return Task.CompletedTask;
|
||||
|
||||
case Func<Task> func:
|
||||
return func.Invoke();
|
||||
|
||||
case Func<T, Task> funcEventArgs:
|
||||
return funcEventArgs.Invoke(arg);
|
||||
|
||||
default:
|
||||
{
|
||||
try
|
||||
{
|
||||
return @delegate.DynamicInvoke(arg) as Task ?? Task.CompletedTask;
|
||||
}
|
||||
catch (TargetInvocationException e)
|
||||
{
|
||||
// Since we fell into the DynamicInvoke case, any exception will be wrapped
|
||||
// in a TIE. We can expect this to be thrown synchronously, so it's low overhead
|
||||
// to unwrap it.
|
||||
return Task.FromException(e.InnerException);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,68 +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;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Associates an event argument type with an event attribute name.
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
|
||||
public sealed class EventHandlerAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="EventHandlerAttribute"/>.
|
||||
/// </summary>
|
||||
/// <param name="attributeName"></param>
|
||||
/// <param name="eventArgsType"></param>
|
||||
public EventHandlerAttribute(string attributeName, Type eventArgsType) : this(attributeName, eventArgsType, false, false)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an instance of <see cref="EventHandlerAttribute"/>.
|
||||
/// </summary>
|
||||
/// <param name="attributeName"></param>
|
||||
/// <param name="eventArgsType"></param>
|
||||
/// <param name="enableStopPropagation"></param>
|
||||
/// <param name="enablePreventDefault"></param>
|
||||
public EventHandlerAttribute(string attributeName, Type eventArgsType, bool enableStopPropagation, bool enablePreventDefault)
|
||||
{
|
||||
if (attributeName == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(attributeName));
|
||||
}
|
||||
|
||||
if (eventArgsType == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(eventArgsType));
|
||||
}
|
||||
|
||||
AttributeName = attributeName;
|
||||
EventArgsType = eventArgsType;
|
||||
EnableStopPropagation = enableStopPropagation;
|
||||
EnablePreventDefault = enablePreventDefault;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the attribute name.
|
||||
/// </summary>
|
||||
public string AttributeName { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the event argument type.
|
||||
/// </summary>
|
||||
public Type EventArgsType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the event's ability to stop propagation.
|
||||
/// </summary>
|
||||
public bool EnableStopPropagation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the event's ability to prevent default event flow.
|
||||
/// </summary>
|
||||
public bool EnablePreventDefault { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +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.AspNetCore.Components.Rendering;
|
||||
using System;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
internal interface ICascadingValueComponent
|
||||
{
|
||||
// This interface exists only so that CascadingParameterState has a way
|
||||
// to work with all CascadingValue<T> types regardless of T.
|
||||
|
||||
bool CanSupplyValue(Type valueType, string valueName);
|
||||
|
||||
object CurrentValue { get; }
|
||||
|
||||
bool CurrentValueIsFixed { get; }
|
||||
|
||||
void Subscribe(ComponentState subscriber);
|
||||
|
||||
void Unsubscribe(ComponentState subscriber);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a UI component.
|
||||
/// </summary>
|
||||
public interface IComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// Attaches the component to a <see cref="RenderHandle" />.
|
||||
/// </summary>
|
||||
/// <param name="renderHandle">A <see cref="RenderHandle"/> that allows the component to be rendered.</param>
|
||||
void Attach(RenderHandle renderHandle);
|
||||
|
||||
/// <summary>
|
||||
/// Sets parameters supplied by the component's parent in the render tree.
|
||||
/// </summary>
|
||||
/// <param name="parameters">The parameters.</param>
|
||||
/// <returns>A <see cref="Task"/> that completes when the component has finished updating and rendering itself.</returns>
|
||||
/// <remarks>
|
||||
/// The <see cref="SetParametersAsync(ParameterView)"/> method should be passed the entire set of parameter values each
|
||||
/// time <see cref="SetParametersAsync(ParameterView)"/> is called. It not required that the caller supply a parameter
|
||||
/// value for all parameters that are logically understood by the component.
|
||||
/// </remarks>
|
||||
Task SetParametersAsync(ParameterView parameters);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
// Used to understand boxed generic EventCallbacks
|
||||
internal interface IEventCallback
|
||||
{
|
||||
bool HasDelegate { get; }
|
||||
|
||||
object UnpackForRenderTree();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface implemented by components that receive notification that they have been rendered.
|
||||
/// </summary>
|
||||
public interface IHandleAfterRender
|
||||
{
|
||||
/// <summary>
|
||||
/// Notifies the component that it has been rendered.
|
||||
/// </summary>
|
||||
/// <returns>A <see cref="Task"/> that represents the asynchronous event handling operation.</returns>
|
||||
Task OnAfterRenderAsync();
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue