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-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" />
|
<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.-->
|
<!--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-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="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" />
|
<add key="aspnet-blazor" value="https://dotnetfeed.blob.core.windows.net/aspnet-blazor/index.json" />
|
||||||
|
|
|
||||||
|
|
@ -2,106 +2,106 @@
|
||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
<AspNetCoreBaselineVersion>3.1.0</AspNetCoreBaselineVersion>
|
<AspNetCoreBaselineVersion>3.1.1</AspNetCoreBaselineVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: AspNetCoreRuntime.3.0.x64-->
|
<!-- Package: AspNetCoreRuntime.3.0.x64-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' ">
|
||||||
<BaselinePackageVersion>3.0.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.0.2</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " />
|
||||||
<!-- Package: AspNetCoreRuntime.3.0.x86-->
|
<!-- Package: AspNetCoreRuntime.3.0.x86-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' ">
|
||||||
<BaselinePackageVersion>3.0.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.0.2</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " />
|
||||||
<!-- Package: dotnet-sql-cache-->
|
<!-- Package: dotnet-sql-cache-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-sql-cache' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-sql-cache' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.ApiAuthorization.IdentityServer-->
|
<!-- Package: Microsoft.AspNetCore.ApiAuthorization.IdentityServer-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.EntityFrameworkCore" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="IdentityServer4" Version="[3.0.0, )" />
|
<BaselinePackageReference Include="IdentityServer4" Version="[3.0.0, )" />
|
||||||
<BaselinePackageReference Include="IdentityServer4.AspNetIdentity" Version="[3.0.0, )" />
|
<BaselinePackageReference Include="IdentityServer4.AspNetIdentity" Version="[3.0.0, )" />
|
||||||
<BaselinePackageReference Include="IdentityServer4.EntityFramework" Version="[3.0.0, )" />
|
<BaselinePackageReference Include="IdentityServer4.EntityFramework" Version="[3.0.0, )" />
|
||||||
<BaselinePackageReference Include="IdentityServer4.EntityFramework.Storage" Version="[3.0.0, )" />
|
<BaselinePackageReference Include="IdentityServer4.EntityFramework.Storage" Version="[3.0.0, )" />
|
||||||
<BaselinePackageReference Include="IdentityServer4.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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.App.Runtime.win-x64-->
|
<!-- Package: Microsoft.AspNetCore.App.Runtime.win-x64-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == '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>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.AzureAD.UI-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.AzureAD.UI-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.JwtBearer" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.AzureADB2C.UI-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.AzureADB2C.UI-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.JwtBearer" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.Certificate-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.Certificate-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.Facebook-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.Facebook-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.Google-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.Google-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.JwtBearer-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.JwtBearer-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.MicrosoftAccount-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.MicrosoftAccount-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.Negotiate-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.Negotiate-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.OpenIdConnect-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.OpenIdConnect-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.Twitter-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.Twitter-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.WsFederation-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.WsFederation-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="[5.5.0, )" />
|
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="[5.5.0, )" />
|
||||||
|
|
@ -109,39 +109,39 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Authorization-->
|
<!-- Package: Microsoft.AspNetCore.Authorization-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.AzureAppServices.HostingStartup-->
|
<!-- Package: Microsoft.AspNetCore.AzureAppServices.HostingStartup-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.AzureAppServices.SiteExtension-->
|
<!-- Package: Microsoft.AspNetCore.AzureAppServices.SiteExtension-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' AND '$(TargetFramework)' == 'net461' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.AzureAppServicesIntegration-->
|
<!-- Package: Microsoft.AspNetCore.AzureAppServicesIntegration-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Blazor-->
|
<!-- Package: Microsoft.AspNetCore.Blazor-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Blazor' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Blazor' ">
|
||||||
|
|
@ -186,273 +186,273 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Components-->
|
<!-- Package: Microsoft.AspNetCore.Components-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Components.Analyzers-->
|
<!-- Package: Microsoft.AspNetCore.Components.Analyzers-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Analyzers' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Analyzers' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Components.Authorization-->
|
<!-- Package: Microsoft.AspNetCore.Components.Authorization-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Components.Forms-->
|
<!-- Package: Microsoft.AspNetCore.Components.Forms-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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, )" />
|
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Components.Web-->
|
<!-- Package: Microsoft.AspNetCore.Components.Web-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.ConcurrencyLimiter-->
|
<!-- Package: Microsoft.AspNetCore.ConcurrencyLimiter-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Connections.Abstractions-->
|
<!-- Package: Microsoft.AspNetCore.Connections.Abstractions-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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, )" />
|
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
|
||||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
<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, )" />
|
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Cryptography.Internal-->
|
<!-- Package: Microsoft.AspNetCore.Cryptography.Internal-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Cryptography.KeyDerivation-->
|
<!-- Package: Microsoft.AspNetCore.Cryptography.KeyDerivation-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netcoreapp2.0' ">
|
<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>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
|
||||||
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
|
||||||
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
|
||||||
<BaselinePackageReference Include="System.Security.Principal.Windows" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.Security.Principal.Windows" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection.Abstractions-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection.Abstractions-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureKeyVault-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureKeyVault-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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.Azure.KeyVault" Version="[2.3.2, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="[3.19.8, )" />
|
<BaselinePackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="[3.19.8, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureStorage-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureStorage-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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.Azure.Storage.Blob" Version="[10.0.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Data.OData" Version="[5.8.4, )" />
|
<BaselinePackageReference Include="Microsoft.Data.OData" Version="[5.8.4, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection.EntityFrameworkCore-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection.EntityFrameworkCore-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection.Extensions-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection.Extensions-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' 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.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.DataProtection.StackExchangeRedis-->
|
<!-- Package: Microsoft.AspNetCore.DataProtection.StackExchangeRedis-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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, )" />
|
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore-->
|
<!-- Package: Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.HeaderPropagation-->
|
<!-- Package: Microsoft.AspNetCore.HeaderPropagation-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Hosting.WindowsServices-->
|
<!-- Package: Microsoft.AspNetCore.Hosting.WindowsServices-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="System.ServiceProcess.ServiceController" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.ServiceProcess.ServiceController" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Http.Connections.Client-->
|
<!-- Package: Microsoft.AspNetCore.Http.Connections.Client-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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.AspNetCore.Http.Connections.Common" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
<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.AspNetCore.Http.Connections.Common" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Http.Connections.Common-->
|
<!-- Package: Microsoft.AspNetCore.Http.Connections.Common-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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, )" />
|
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Http.Features-->
|
<!-- Package: Microsoft.AspNetCore.Http.Features-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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, )" />
|
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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, )" />
|
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Identity.EntityFrameworkCore-->
|
<!-- Package: Microsoft.AspNetCore.Identity.EntityFrameworkCore-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Identity.Specification.Tests-->
|
<!-- Package: Microsoft.AspNetCore.Identity.Specification.Tests-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.AspNetCore.Testing" Version="[3.1.1-servicing.19614.4, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
|
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
|
||||||
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
|
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Identity.UI-->
|
<!-- Package: Microsoft.AspNetCore.Identity.UI-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.Identity.Stores" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.JsonPatch-->
|
<!-- Package: Microsoft.AspNetCore.JsonPatch-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||||
<BaselinePackageReference Include="Microsoft.CSharp" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="Microsoft.CSharp" Version="[4.7.0, )" />
|
||||||
|
|
@ -460,236 +460,238 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Metadata-->
|
<!-- Package: Microsoft.AspNetCore.Metadata-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.MiddlewareAnalysis-->
|
<!-- Package: Microsoft.AspNetCore.MiddlewareAnalysis-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Mvc.NewtonsoftJson-->
|
<!-- Package: Microsoft.AspNetCore.Mvc.NewtonsoftJson-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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" Version="[12.0.2, )" />
|
||||||
<BaselinePackageReference Include="Newtonsoft.Json.Bson" Version="[1.0.2, )" />
|
<BaselinePackageReference Include="Newtonsoft.Json.Bson" Version="[1.0.2, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation-->
|
<!-- Package: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.AspNetCore.Mvc.Razor.Extensions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Mvc.Testing-->
|
<!-- Package: Microsoft.AspNetCore.Mvc.Testing-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.NodeServices-->
|
<!-- Package: Microsoft.AspNetCore.NodeServices-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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, )" />
|
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.Owin-->
|
<!-- Package: Microsoft.AspNetCore.Owin-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv-->
|
<!-- Package: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == '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>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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="Libuv" Version="[1.10.0, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Client-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Client-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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.SignalR.Client.Core" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Client" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Client" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Client.Core-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Client.Core-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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.Protocols.Json" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
<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.Protocols.Json" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Common-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Common-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.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, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.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="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.Json-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.Json-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.MessagePack-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.MessagePack-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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, )" />
|
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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, )" />
|
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.Specification.Tests-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.Specification.Tests-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.Json" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
|
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
|
||||||
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
|
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SignalR.StackExchangeRedis-->
|
<!-- Package: Microsoft.AspNetCore.SignalR.StackExchangeRedis-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
|
<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, )" />
|
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SpaServices-->
|
<!-- Package: Microsoft.AspNetCore.SpaServices-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.SpaServices.Extensions-->
|
<!-- Package: Microsoft.AspNetCore.SpaServices.Extensions-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.TestHost-->
|
<!-- Package: Microsoft.AspNetCore.TestHost-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.dotnet-openapi-->
|
<!-- Package: Microsoft.dotnet-openapi-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.dotnet-openapi' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.dotnet-openapi' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.DotNet.Web.Client.ItemTemplates-->
|
<!-- Package: Microsoft.DotNet.Web.Client.ItemTemplates-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Client.ItemTemplates' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Client.ItemTemplates' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.DotNet.Web.ItemTemplates-->
|
<!-- Package: Microsoft.DotNet.Web.ItemTemplates-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ItemTemplates' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ItemTemplates' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.DotNet.Web.ProjectTemplates.3.1-->
|
<!-- Package: Microsoft.DotNet.Web.ProjectTemplates.3.1-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == '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>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1-->
|
<!-- Package: Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == '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>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.Extensions.ApiDescription.Client-->
|
<!-- Package: Microsoft.Extensions.ApiDescription.Client-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Client' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Client' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.Extensions.ApiDescription.Server-->
|
<!-- Package: Microsoft.Extensions.ApiDescription.Server-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Server' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Server' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore-->
|
<!-- Package: Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.Extensions.Identity.Core-->
|
<!-- Package: Microsoft.Extensions.Identity.Core-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Package: Microsoft.Extensions.Identity.Stores-->
|
<!-- Package: Microsoft.Extensions.Identity.Stores-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' ">
|
||||||
<BaselinePackageVersion>3.1.0</BaselinePackageVersion>
|
<BaselinePackageVersion>3.1.1</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
<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.Identity.Core" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.1, )" />
|
||||||
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
<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.Identity.Core" Version="[3.1.1, )" />
|
||||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" />
|
<BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.1, )" />
|
||||||
|
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</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.
|
Update this list when preparing for a new patch.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<Baseline Version="3.1.0">
|
<Baseline Version="3.1.1">
|
||||||
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.0" />
|
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.2" />
|
||||||
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.0" />
|
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.2" />
|
||||||
<Package Id="dotnet-sql-cache" Version="3.1.0" />
|
<Package Id="dotnet-sql-cache" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.Certificate" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.Certificate" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.Google" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.Google" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.Negotiate" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.Negotiate" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.Twitter" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.Twitter" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.WsFederation" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.WsFederation" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authorization" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Authorization" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="3.1.0" />
|
<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" 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.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.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.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.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.Blazor.Templates" Version="3.0.0-preview9.19465.2" />
|
||||||
<Package Id="Microsoft.AspNetCore.Components" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Components" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Components.Analyzers" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Components.Analyzers" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Components.Authorization" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Components.Authorization" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Components.Forms" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Components.Forms" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Components.Web" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Components.Web" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.ConcurrencyLimiter" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.ConcurrencyLimiter" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Cryptography.Internal" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Cryptography.Internal" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection.Abstractions" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection.Abstractions" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection.AzureStorage" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection.AzureStorage" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection.Extensions" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection.Extensions" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.HeaderPropagation" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.HeaderPropagation" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Hosting.WindowsServices" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Hosting.WindowsServices" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Http.Connections.Client" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Http.Connections.Client" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Http.Connections.Common" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Http.Connections.Common" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Http.Features" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Http.Features" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Identity.Specification.Tests" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Identity.Specification.Tests" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Identity.UI" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Identity.UI" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.JsonPatch" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.JsonPatch" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Metadata" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Metadata" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.MiddlewareAnalysis" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.MiddlewareAnalysis" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.NodeServices" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.NodeServices" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Owin" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Owin" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Client" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Client" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Client.Core" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Client.Core" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Common" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Common" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.Specification.Tests" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.Specification.Tests" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SpaServices" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SpaServices" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.TestHost" Version="3.1.0" />
|
<Package Id="Microsoft.AspNetCore.TestHost" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.dotnet-openapi" Version="3.1.0" />
|
<Package Id="Microsoft.dotnet-openapi" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.DotNet.Web.Client.ItemTemplates" Version="3.1.0" />
|
<Package Id="Microsoft.DotNet.Web.Client.ItemTemplates" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.DotNet.Web.ItemTemplates" Version="3.1.0" />
|
<Package Id="Microsoft.DotNet.Web.ItemTemplates" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.DotNet.Web.ProjectTemplates.3.1" Version="3.1.0" />
|
<Package Id="Microsoft.DotNet.Web.ProjectTemplates.3.1" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" Version="3.1.0" />
|
<Package Id="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.Extensions.ApiDescription.Client" Version="3.1.0" />
|
<Package Id="Microsoft.Extensions.ApiDescription.Client" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.Extensions.ApiDescription.Server" Version="3.1.0" />
|
<Package Id="Microsoft.Extensions.ApiDescription.Server" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="3.1.0" />
|
<Package Id="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.Extensions.Identity.Core" Version="3.1.0" />
|
<Package Id="Microsoft.Extensions.Identity.Core" Version="3.1.1" />
|
||||||
<Package Id="Microsoft.Extensions.Identity.Stores" Version="3.1.0" />
|
<Package Id="Microsoft.Extensions.Identity.Stores" Version="3.1.1" />
|
||||||
</Baseline>
|
</Baseline>
|
||||||
|
|
@ -147,6 +147,16 @@ and are generated based on the last package release.
|
||||||
<LatestPackageReference Include="System.Threading.Tasks.Extensions" Version="$(SystemThreadingTasksExtensionsPackageVersion)" />
|
<LatestPackageReference Include="System.Threading.Tasks.Extensions" Version="$(SystemThreadingTasksExtensionsPackageVersion)" />
|
||||||
</ItemGroup>
|
</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">
|
<ItemGroup Label="MSBuild">
|
||||||
<LatestPackageReference Include="Microsoft.Build" Version="$(MicrosoftBuildPackageVersion)" />
|
<LatestPackageReference Include="Microsoft.Build" Version="$(MicrosoftBuildPackageVersion)" />
|
||||||
<LatestPackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkPackageVersion)" />
|
<LatestPackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkPackageVersion)" />
|
||||||
|
|
|
||||||
|
|
@ -5,143 +5,12 @@
|
||||||
-->
|
-->
|
||||||
<Project>
|
<Project>
|
||||||
<ItemGroup>
|
<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.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="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="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.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="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="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.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>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
<PropertyGroup Label="Version settings">
|
<PropertyGroup Label="Version settings">
|
||||||
<AspNetCoreMajorVersion>3</AspNetCoreMajorVersion>
|
<AspNetCoreMajorVersion>3</AspNetCoreMajorVersion>
|
||||||
<AspNetCoreMinorVersion>1</AspNetCoreMinorVersion>
|
<AspNetCoreMinorVersion>1</AspNetCoreMinorVersion>
|
||||||
<AspNetCorePatchVersion>0</AspNetCorePatchVersion>
|
<AspNetCorePatchVersion>2</AspNetCorePatchVersion>
|
||||||
<PreReleasePreviewNumber>3</PreReleasePreviewNumber>
|
<PreReleasePreviewNumber>0</PreReleasePreviewNumber>
|
||||||
<!--
|
<!--
|
||||||
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
|
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>
|
<IncludePreReleaseLabelInPackageVersion Condition=" '$(DotNetFinalVersionKind)' == 'release' ">false</IncludePreReleaseLabelInPackageVersion>
|
||||||
<PreReleaseVersionLabel>preview$(PreReleasePreviewNumber)</PreReleaseVersionLabel>
|
<PreReleaseVersionLabel>preview$(PreReleasePreviewNumber)</PreReleaseVersionLabel>
|
||||||
<PreReleaseBrandingLabel>Preview $(PreReleasePreviewNumber)</PreReleaseBrandingLabel>
|
<PreReleaseBrandingLabel>Preview $(PreReleasePreviewNumber)</PreReleaseBrandingLabel>
|
||||||
|
<!-- Blazor Client packages will not RTM with 3.1 -->
|
||||||
|
<BlazorClientPreReleasePreviewNumber>4</BlazorClientPreReleasePreviewNumber>
|
||||||
|
<BlazorClientPreReleaseVersionLabel>preview$(BlazorClientPreReleasePreviewNumber)</BlazorClientPreReleaseVersionLabel>
|
||||||
<AspNetCoreMajorMinorVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)</AspNetCoreMajorMinorVersion>
|
<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. -->
|
<!-- Additional assembly attributes are already configured to include the source revision ID. -->
|
||||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||||
<!--
|
<!-- Servicing builds have different characteristics for the way dependencies, framework references, and versions are handled. -->
|
||||||
Until package baselines are updated (see aspnet/AspNetCore#12702), ignore them and PatchConfig.props. This also
|
<IsServicingBuild Condition=" '$(PreReleaseVersionLabel)' == 'servicing' ">true</IsServicingBuild>
|
||||||
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>
|
|
||||||
<VersionPrefix>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).$(AspNetCorePatchVersion)</VersionPrefix>
|
<VersionPrefix>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).$(AspNetCorePatchVersion)</VersionPrefix>
|
||||||
<!-- TargetingPackVersionPrefix is used by projects, like .deb and .rpm, which use slightly different version formats. -->
|
<!-- TargetingPackVersionPrefix is used by projects, like .deb and .rpm, which use slightly different version formats. -->
|
||||||
<TargetingPackVersionPrefix>$(VersionPrefix)</TargetingPackVersionPrefix>
|
<TargetingPackVersionPrefix>$(VersionPrefix)</TargetingPackVersionPrefix>
|
||||||
<!-- Targeting packs do not produce patch versions in servicing builds. No API changes are allowed in patches. -->
|
<!-- 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>
|
<ExperimentalVersionPrefix>0.3.$(AspNetCorePatchVersion)</ExperimentalVersionPrefix>
|
||||||
<!-- ANCM versioning is intentionally 10 + AspNetCoreMajorVersion because earlier versions of ANCM shipped as 8.x. -->
|
<!-- ANCM versioning is intentionally 10 + AspNetCoreMajorVersion because earlier versions of ANCM shipped as 8.x. -->
|
||||||
<AspNetCoreModuleVersionMajor>$([MSBuild]::Add(10, $(AspNetCoreMajorVersion)))</AspNetCoreModuleVersionMajor>
|
<AspNetCoreModuleVersionMajor>$([MSBuild]::Add(10, $(AspNetCoreMajorVersion)))</AspNetCoreModuleVersionMajor>
|
||||||
|
|
@ -62,14 +62,15 @@
|
||||||
-->
|
-->
|
||||||
<PropertyGroup Label="Automated">
|
<PropertyGroup Label="Automated">
|
||||||
<!-- Packages from dotnet/arcade -->
|
<!-- Packages from dotnet/arcade -->
|
||||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19577.5</MicrosoftDotNetGenAPIPackageVersion>
|
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19607.3</MicrosoftDotNetGenAPIPackageVersion>
|
||||||
<!-- Packages from dotnet/roslyn -->
|
<!-- 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 -->
|
<!-- Packages from dotnet/core-setup -->
|
||||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.1.1-servicing.19575.1</MicrosoftExtensionsDependencyModelPackageVersion>
|
<MicrosoftExtensionsDependencyModelPackageVersion>3.1.2</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||||
<MicrosoftNETCoreAppInternalPackageVersion>3.1.1-servicing.19576.9</MicrosoftNETCoreAppInternalPackageVersion>
|
<MicrosoftNETCoreAppInternalPackageVersion>3.1.2-servicing.20067.4</MicrosoftNETCoreAppInternalPackageVersion>
|
||||||
<MicrosoftNETCoreAppRefPackageVersion>3.1.0</MicrosoftNETCoreAppRefPackageVersion>
|
<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>
|
<NETStandardLibraryRefPackageVersion>2.1.0</NETStandardLibraryRefPackageVersion>
|
||||||
<!-- Packages from dotnet/corefx -->
|
<!-- Packages from dotnet/corefx -->
|
||||||
<MicrosoftBclAsyncInterfacesPackageVersion>1.1.0</MicrosoftBclAsyncInterfacesPackageVersion>
|
<MicrosoftBclAsyncInterfacesPackageVersion>1.1.0</MicrosoftBclAsyncInterfacesPackageVersion>
|
||||||
|
|
@ -91,7 +92,7 @@
|
||||||
<SystemSecurityPrincipalWindowsPackageVersion>4.7.0</SystemSecurityPrincipalWindowsPackageVersion>
|
<SystemSecurityPrincipalWindowsPackageVersion>4.7.0</SystemSecurityPrincipalWindowsPackageVersion>
|
||||||
<SystemServiceProcessServiceControllerPackageVersion>4.7.0</SystemServiceProcessServiceControllerPackageVersion>
|
<SystemServiceProcessServiceControllerPackageVersion>4.7.0</SystemServiceProcessServiceControllerPackageVersion>
|
||||||
<SystemTextEncodingsWebPackageVersion>4.7.0</SystemTextEncodingsWebPackageVersion>
|
<SystemTextEncodingsWebPackageVersion>4.7.0</SystemTextEncodingsWebPackageVersion>
|
||||||
<SystemTextJsonPackageVersion>4.7.0</SystemTextJsonPackageVersion>
|
<SystemTextJsonPackageVersion>4.7.1</SystemTextJsonPackageVersion>
|
||||||
<SystemThreadingChannelsPackageVersion>4.7.0</SystemThreadingChannelsPackageVersion>
|
<SystemThreadingChannelsPackageVersion>4.7.0</SystemThreadingChannelsPackageVersion>
|
||||||
<SystemWindowsExtensionsPackageVersion>4.7.0</SystemWindowsExtensionsPackageVersion>
|
<SystemWindowsExtensionsPackageVersion>4.7.0</SystemWindowsExtensionsPackageVersion>
|
||||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
|
|
@ -99,80 +100,80 @@
|
||||||
<!-- Packages from aspnet/Blazor -->
|
<!-- Packages from aspnet/Blazor -->
|
||||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||||
<!-- Packages from aspnet/Extensions -->
|
<!-- Packages from aspnet/Extensions -->
|
||||||
<InternalAspNetCoreAnalyzersPackageVersion>3.1.0-rtm.19575.5</InternalAspNetCoreAnalyzersPackageVersion>
|
<InternalAspNetCoreAnalyzersPackageVersion>3.1.2-servicing.20067.6</InternalAspNetCoreAnalyzersPackageVersion>
|
||||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.1.0-rtm.19575.5</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.1.2-servicing.20067.6</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||||
<MicrosoftAspNetCoreTestingPackageVersion>3.1.0-rtm.19575.5</MicrosoftAspNetCoreTestingPackageVersion>
|
<MicrosoftAspNetCoreTestingPackageVersion>3.1.2-servicing.20067.6</MicrosoftAspNetCoreTestingPackageVersion>
|
||||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.1.0</MicrosoftExtensionsCachingMemoryPackageVersion>
|
<MicrosoftExtensionsCachingMemoryPackageVersion>3.1.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.1.0</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.1.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.1.0</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.1.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.1.0</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.1.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.1.0</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.1.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.1.0</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.1.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.1.0</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.1.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.1.0</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.1.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.1.0</MicrosoftExtensionsConfigurationIniPackageVersion>
|
<MicrosoftExtensionsConfigurationIniPackageVersion>3.1.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.1.0</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.1.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.1.0</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.1.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationPackageVersion>3.1.0</MicrosoftExtensionsConfigurationPackageVersion>
|
<MicrosoftExtensionsConfigurationPackageVersion>3.1.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.1.0</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.1.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.1.0</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.1.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.1.0</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.1.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.1.0</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.1.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.1.0</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.1.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.1.0</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.1.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.1.0</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.1.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.1.0</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.1.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.1.0</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.1.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsHostingPackageVersion>3.1.0</MicrosoftExtensionsHostingPackageVersion>
|
<MicrosoftExtensionsHostingPackageVersion>3.1.2</MicrosoftExtensionsHostingPackageVersion>
|
||||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHttpPackageVersion>3.1.0</MicrosoftExtensionsHttpPackageVersion>
|
<MicrosoftExtensionsHttpPackageVersion>3.1.2</MicrosoftExtensionsHttpPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationPackageVersion>3.1.0</MicrosoftExtensionsLocalizationPackageVersion>
|
<MicrosoftExtensionsLocalizationPackageVersion>3.1.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.1.0</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.1.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.1.0</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.1.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.1.0</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.1.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.1.0</MicrosoftExtensionsLoggingConsolePackageVersion>
|
<MicrosoftExtensionsLoggingConsolePackageVersion>3.1.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.1.0</MicrosoftExtensionsLoggingDebugPackageVersion>
|
<MicrosoftExtensionsLoggingDebugPackageVersion>3.1.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.1.0</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.1.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.1.0</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.1.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingPackageVersion>3.1.0</MicrosoftExtensionsLoggingPackageVersion>
|
<MicrosoftExtensionsLoggingPackageVersion>3.1.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsLoggingTestingPackageVersion>
|
<MicrosoftExtensionsLoggingTestingPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.1.0</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.1.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.1.0</MicrosoftExtensionsObjectPoolPackageVersion>
|
<MicrosoftExtensionsObjectPoolPackageVersion>3.1.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.1.0</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.1.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.1.0</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.1.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsPackageVersion>3.1.0</MicrosoftExtensionsOptionsPackageVersion>
|
<MicrosoftExtensionsOptionsPackageVersion>3.1.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.1.0</MicrosoftExtensionsPrimitivesPackageVersion>
|
<MicrosoftExtensionsPrimitivesPackageVersion>3.1.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.1.0-rtm.19575.5</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.1.2-servicing.20067.6</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.1.0</MicrosoftExtensionsWebEncodersPackageVersion>
|
<MicrosoftExtensionsWebEncodersPackageVersion>3.1.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.1.0-rtm.19565.4</MicrosoftInternalExtensionsRefsPackageVersion>
|
<MicrosoftInternalExtensionsRefsPackageVersion>3.1.0-rtm.19565.4</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||||
<MicrosoftJSInteropPackageVersion>3.1.0</MicrosoftJSInteropPackageVersion>
|
<MicrosoftJSInteropPackageVersion>3.1.2</MicrosoftJSInteropPackageVersion>
|
||||||
<MonoWebAssemblyInteropPackageVersion>3.1.0-preview4.19575.5</MonoWebAssemblyInteropPackageVersion>
|
<MonoWebAssemblyInteropPackageVersion>3.1.2-preview4.20067.6</MonoWebAssemblyInteropPackageVersion>
|
||||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||||
<dotnetefPackageVersion>3.1.0</dotnetefPackageVersion>
|
<dotnetefPackageVersion>3.1.2</dotnetefPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.1.0</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.1.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.1.0</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.1.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCorePackageVersion>3.1.0</MicrosoftEntityFrameworkCorePackageVersion>
|
<MicrosoftEntityFrameworkCorePackageVersion>3.1.2</MicrosoftEntityFrameworkCorePackageVersion>
|
||||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.1.0-rtm.19573.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.1.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.1.0-rtm.19573.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.1.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.1.0-rtm.19573.1</MicrosoftCodeAnalysisRazorPackageVersion>
|
<MicrosoftCodeAnalysisRazorPackageVersion>3.1.2</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||||
<MicrosoftNETSdkRazorPackageVersion>3.1.0-rtm.19573.1</MicrosoftNETSdkRazorPackageVersion>
|
<MicrosoftNETSdkRazorPackageVersion>3.1.2</MicrosoftNETSdkRazorPackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
|
|
@ -189,6 +190,7 @@
|
||||||
All Runtime.$rid packages should have the same version.
|
All Runtime.$rid packages should have the same version.
|
||||||
-->
|
-->
|
||||||
<MicrosoftNETCoreAppRuntimeVersion>$(MicrosoftNETCoreAppRuntimewinx64PackageVersion)</MicrosoftNETCoreAppRuntimeVersion>
|
<MicrosoftNETCoreAppRuntimeVersion>$(MicrosoftNETCoreAppRuntimewinx64PackageVersion)</MicrosoftNETCoreAppRuntimeVersion>
|
||||||
|
<MicrosoftAspNetCoreAppVersion>3.1.2</MicrosoftAspNetCoreAppVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Manual">
|
<PropertyGroup Label="Manual">
|
||||||
<!-- Build tool dependencies -->
|
<!-- Build tool dependencies -->
|
||||||
|
|
@ -264,10 +266,19 @@
|
||||||
<XunitExtensibilityCorePackageVersion>$(XunitVersion)</XunitExtensibilityCorePackageVersion>
|
<XunitExtensibilityCorePackageVersion>$(XunitVersion)</XunitExtensibilityCorePackageVersion>
|
||||||
<XunitExtensibilityExecutionPackageVersion>$(XunitVersion)</XunitExtensibilityExecutionPackageVersion>
|
<XunitExtensibilityExecutionPackageVersion>$(XunitVersion)</XunitExtensibilityExecutionPackageVersion>
|
||||||
<MicrosoftDataSqlClientPackageVersion>1.0.19249.1</MicrosoftDataSqlClientPackageVersion>
|
<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>
|
</PropertyGroup>
|
||||||
<!-- Restore feeds -->
|
<!-- Restore feeds -->
|
||||||
<PropertyGroup Label="Restore feeds">
|
<PropertyGroup Label="Restore feeds">
|
||||||
<!-- In an orchestrated build, this may be overridden to other Azure feeds. -->
|
<!-- In an orchestrated build, this may be overridden to other Azure feeds. -->
|
||||||
<DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl>
|
<DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl>
|
||||||
|
<DotNetPrivateAssetRootUrl Condition="'$(DotNetPrivateAssetRootUrl)'==''">https://dotnetclimsrc.blob.core.windows.net/dotnet/</DotNetPrivateAssetRootUrl>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"sdk": {
|
"sdk": {
|
||||||
"version": "3.1.100"
|
"version": "3.1.102-servicing-014873"
|
||||||
},
|
},
|
||||||
"tools": {
|
"tools": {
|
||||||
"dotnet": "3.1.100",
|
"dotnet": "3.1.102-servicing-014873",
|
||||||
"runtimes": {
|
"runtimes": {
|
||||||
"dotnet/x64": [
|
"dotnet/x64": [
|
||||||
"$(MicrosoftNETCoreAppInternalPackageVersion)"
|
"$(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">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.1</TargetFrameworks>
|
<TargetFrameworks>netstandard2.1</TargetFrameworks>
|
||||||
|
<NoWarn>$(NoWarn);BL0006</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
|
||||||
<Compile Include="Microsoft.AspNetCore.Blazor.netstandard2.1.cs" />
|
<Compile Include="Microsoft.AspNetCore.Blazor.netstandard2.1.cs" />
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
<TargetFramework>netstandard2.1</TargetFramework>
|
||||||
<Description>Build client-side single-page applications (SPAs) with Blazor running under WebAssembly.</Description>
|
<Description>Build client-side single-page applications (SPAs) with Blazor running under WebAssembly.</Description>
|
||||||
<IsShippingPackage>true</IsShippingPackage>
|
<IsShippingPackage>true</IsShippingPackage>
|
||||||
|
<NoWarn>$(NoWarn);BL0006</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
<!-- Exclude the TestFiles directory from default wildcards -->
|
<!-- Exclude the TestFiles directory from default wildcards -->
|
||||||
<DefaultItemExcludes>$(DefaultItemExcludes);TestFiles\**\*</DefaultItemExcludes>
|
<DefaultItemExcludes>$(DefaultItemExcludes);TestFiles\**\*</DefaultItemExcludes>
|
||||||
|
<NoWarn>$(NoWarn);BL0006</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,4 @@
|
||||||
<Project>
|
<Project>
|
||||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
|
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
|
||||||
<Import Project="Blazor.Version.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>
|
</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