From 5b3976d045a3479da22726d7d6293c8c7937919f Mon Sep 17 00:00:00 2001 From: Artak <34246760+mkArtakMSFT@users.noreply.github.com> Date: Mon, 1 Jun 2020 10:40:14 -0700 Subject: [PATCH 01/46] Updating the issue template to get more detailed information (#22410) * Updating the issue template to get more detailed information * Just a minor emoji to differentiate the bug and feature report lines from the rest --- .github/ISSUE_TEMPLATE/bug_report.md | 20 +++++++++++--------- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 86f53b9a8a..c2417c5fd4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,5 +1,5 @@ --- -name: Bug report +name: 🐞 Bug report about: Create a report about something that is not working --- @@ -7,7 +7,7 @@ about: Create a report about something that is not working More information on our issue management policies can be found here: https://aka.ms/aspnet/issue-policies -Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting non-security bugs and feature requests. +Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting **non-security** bugs and feature requests. If you believe you have an issue that affects the SECURITY of the platform, please do NOT create an issue and instead email your issue details to secure@microsoft.com. Your report may be eligible for our [bug bounty](https://www.microsoft.com/en-us/msrc/bounty-dot-net-core) but ONLY if it is reported through email. For other types of questions, consider using [StackOverflow](https://stackoverflow.com). @@ -19,15 +19,17 @@ A clear and concise description of what the bug is. ### To Reproduce -``` C# -Console.WriteLine("Hello, World!"); -``` - -Got Exceptions? Include both the message and the stack trace +### Exceptions (if any) + ### Further technical details diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index d7991eb1e0..b8f9d9c6c6 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,5 +1,5 @@ --- -name: Feature request +name: 💡 Feature request about: Suggest an idea for this project --- From c87d14afbc212f3153bbd84067b85e491da0ddfc Mon Sep 17 00:00:00 2001 From: Pranav K Date: Mon, 1 Jun 2020 11:32:31 -0700 Subject: [PATCH 02/46] Add nullability to Localization (#22323) * Changes to support nullable for ns2.0 * Change ref assembly project to use nullable context --- eng/targets/CSharp.Common.targets | 11 + eng/targets/ReferenceAssembly.targets | 3 +- ...xtensions.Localization.Abstractions.csproj | 1 + ...ns.Localization.Abstractions.netcoreapp.cs | 4 +- ...ocalization.Abstractions.netstandard2.0.cs | 4 +- .../Abstractions/src/LocalizedString.cs | 6 +- ...xtensions.Localization.Abstractions.csproj | 1 + .../Microsoft.Extensions.Localization.csproj | 1 + ...soft.Extensions.Localization.netcoreapp.cs | 18 +- ....Extensions.Localization.netstandard2.0.cs | 18 +- .../Localization/src/IResourceNamesCache.cs | 2 +- .../src/Internal/AssemblyWrapper.cs | 4 +- .../src/Internal/IResourceStringProvider.cs | 4 +- ...eManagerStringLocalizerLoggerExtensions.cs | 6 +- .../Internal/ResourceManagerStringProvider.cs | 11 +- .../Microsoft.Extensions.Localization.csproj | 1 + .../src/ResourceManagerStringLocalizer.cs | 7 +- .../ResourceManagerStringLocalizerFactory.cs | 23 +- .../Localization/src/ResourceNamesCache.cs | 4 +- .../Localization/src/Resources.resx | 3 + ...ns.Localization.RootNamespace.Tests.csproj | 1 + ...osoft.Extensions.Localization.Tests.csproj | 1 + ...sourceManagerStringLocalizerFactoryTest.cs | 7 +- .../ResourceManagerStringLocalizerTest.cs | 6 +- .../StringLocalizerOfTTest.cs | 7 +- src/Shared/Nullable/NullableAttributes.cs | 196 ++++++++++++++++++ 26 files changed, 290 insertions(+), 60 deletions(-) create mode 100644 src/Shared/Nullable/NullableAttributes.cs diff --git a/eng/targets/CSharp.Common.targets b/eng/targets/CSharp.Common.targets index e327a7b886..2caa7bf00e 100644 --- a/eng/targets/CSharp.Common.targets +++ b/eng/targets/CSharp.Common.targets @@ -28,6 +28,17 @@ + + + + $(DefineConstants),INTERNAL_NULLABLE_ATTRIBUTES + + + + + + + diff --git a/eng/targets/ReferenceAssembly.targets b/eng/targets/ReferenceAssembly.targets index bdf7e2c384..ec7dc3f721 100644 --- a/eng/targets/ReferenceAssembly.targets +++ b/eng/targets/ReferenceAssembly.targets @@ -26,11 +26,12 @@ <_TargetFrameworkOverride /> <_TargetFrameworkOverride Condition=" @(_ResultTargetFramework->Count()) > 1 ">%0A <TargetFrameworks Condition="'%24(DotNetBuildFromSource)' == 'true'">%24(DefaultNetCoreTargetFramework)</TargetFrameworks> + <_NullableProperty Condition="'$(Nullable)' != ''">%0A <Nullable>annotations</Nullable> - @(_ResultTargetFramework)$(_TargetFrameworkOverride) + @(_ResultTargetFramework)$(_TargetFrameworkOverride)$(_NullableProperty) @(ProjectListContentItem->'%(Identity)', '%0A') diff --git a/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.csproj b/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.csproj index a6ffa6ada6..dc3a3b1ec2 100644 --- a/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.csproj +++ b/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.csproj @@ -3,6 +3,7 @@ netstandard2.0;$(DefaultNetCoreTargetFramework) $(DefaultNetCoreTargetFramework) + annotations diff --git a/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netcoreapp.cs b/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netcoreapp.cs index 3b6186e98f..5943610fe8 100644 --- a/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netcoreapp.cs +++ b/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netcoreapp.cs @@ -21,10 +21,10 @@ namespace Microsoft.Extensions.Localization { public LocalizedString(string name, string value) { } public LocalizedString(string name, string value, bool resourceNotFound) { } - public LocalizedString(string name, string value, bool resourceNotFound, string searchedLocation) { } + public LocalizedString(string name, string value, bool resourceNotFound, string? searchedLocation) { } public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public bool ResourceNotFound { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } - public string SearchedLocation { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } + public string? SearchedLocation { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public string Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public static implicit operator string (Microsoft.Extensions.Localization.LocalizedString localizedString) { throw null; } public override string ToString() { throw null; } diff --git a/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netstandard2.0.cs b/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netstandard2.0.cs index 3b6186e98f..5943610fe8 100644 --- a/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netstandard2.0.cs +++ b/src/Localization/Abstractions/ref/Microsoft.Extensions.Localization.Abstractions.netstandard2.0.cs @@ -21,10 +21,10 @@ namespace Microsoft.Extensions.Localization { public LocalizedString(string name, string value) { } public LocalizedString(string name, string value, bool resourceNotFound) { } - public LocalizedString(string name, string value, bool resourceNotFound, string searchedLocation) { } + public LocalizedString(string name, string value, bool resourceNotFound, string? searchedLocation) { } public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public bool ResourceNotFound { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } - public string SearchedLocation { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } + public string? SearchedLocation { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public string Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public static implicit operator string (Microsoft.Extensions.Localization.LocalizedString localizedString) { throw null; } public override string ToString() { throw null; } diff --git a/src/Localization/Abstractions/src/LocalizedString.cs b/src/Localization/Abstractions/src/LocalizedString.cs index 7cac58d16a..9cf8cb819e 100644 --- a/src/Localization/Abstractions/src/LocalizedString.cs +++ b/src/Localization/Abstractions/src/LocalizedString.cs @@ -38,7 +38,7 @@ namespace Microsoft.Extensions.Localization /// The actual string. /// Whether the string was not found in a resource. Set this to true to indicate an alternate string value was used. /// The location which was searched for a localization value. - public LocalizedString(string name, string value, bool resourceNotFound, string searchedLocation) + public LocalizedString(string name, string value, bool resourceNotFound, string? searchedLocation) { if (name == null) { @@ -60,7 +60,7 @@ namespace Microsoft.Extensions.Localization /// Implicitly converts the to a . /// /// The string to be implicitly converted. - public static implicit operator string(LocalizedString localizedString) + public static implicit operator string?(LocalizedString localizedString) { return localizedString?.Value; } @@ -83,7 +83,7 @@ namespace Microsoft.Extensions.Localization /// /// The location which was searched for a localization value. /// - public string SearchedLocation { get; } + public string? SearchedLocation { get; } /// /// Returns the actual string. diff --git a/src/Localization/Abstractions/src/Microsoft.Extensions.Localization.Abstractions.csproj b/src/Localization/Abstractions/src/Microsoft.Extensions.Localization.Abstractions.csproj index 4bf8ba5329..59c2ee7360 100644 --- a/src/Localization/Abstractions/src/Microsoft.Extensions.Localization.Abstractions.csproj +++ b/src/Localization/Abstractions/src/Microsoft.Extensions.Localization.Abstractions.csproj @@ -13,6 +13,7 @@ Microsoft.Extensions.Localization.IStringLocalizer<T> localization true true + enable diff --git a/src/Localization/Localization/ref/Microsoft.Extensions.Localization.csproj b/src/Localization/Localization/ref/Microsoft.Extensions.Localization.csproj index b20502c893..a3b3faa042 100644 --- a/src/Localization/Localization/ref/Microsoft.Extensions.Localization.csproj +++ b/src/Localization/Localization/ref/Microsoft.Extensions.Localization.csproj @@ -3,6 +3,7 @@ netstandard2.0;$(DefaultNetCoreTargetFramework) $(DefaultNetCoreTargetFramework) + annotations diff --git a/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netcoreapp.cs b/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netcoreapp.cs index dea13ee364..c606bf0a9c 100644 --- a/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netcoreapp.cs +++ b/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netcoreapp.cs @@ -13,7 +13,7 @@ namespace Microsoft.Extensions.Localization { public partial interface IResourceNamesCache { - System.Collections.Generic.IList GetOrAdd(string name, System.Func> valueFactory); + System.Collections.Generic.IList? GetOrAdd(string name, System.Func?> valueFactory); } public partial class LocalizationOptions { @@ -35,7 +35,7 @@ namespace Microsoft.Extensions.Localization public virtual Microsoft.Extensions.Localization.LocalizedString this[string name, params object[] arguments] { get { throw null; } } public virtual System.Collections.Generic.IEnumerable GetAllStrings(bool includeParentCultures) { throw null; } protected System.Collections.Generic.IEnumerable GetAllStrings(bool includeParentCultures, System.Globalization.CultureInfo culture) { throw null; } - protected string GetStringSafely(string name, System.Globalization.CultureInfo culture) { throw null; } + protected string? GetStringSafely(string name, System.Globalization.CultureInfo? culture) { throw null; } } public partial class ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory { @@ -43,17 +43,17 @@ namespace Microsoft.Extensions.Localization public Microsoft.Extensions.Localization.IStringLocalizer Create(string baseName, string location) { throw null; } public Microsoft.Extensions.Localization.IStringLocalizer Create(System.Type resourceSource) { throw null; } protected virtual Microsoft.Extensions.Localization.ResourceManagerStringLocalizer CreateResourceManagerStringLocalizer(System.Reflection.Assembly assembly, string baseName) { throw null; } - protected virtual Microsoft.Extensions.Localization.ResourceLocationAttribute GetResourceLocationAttribute(System.Reflection.Assembly assembly) { throw null; } + protected virtual Microsoft.Extensions.Localization.ResourceLocationAttribute? GetResourceLocationAttribute(System.Reflection.Assembly assembly) { throw null; } protected virtual string GetResourcePrefix(System.Reflection.TypeInfo typeInfo) { throw null; } - protected virtual string GetResourcePrefix(System.Reflection.TypeInfo typeInfo, string baseNamespace, string resourcesRelativePath) { throw null; } + protected virtual string GetResourcePrefix(System.Reflection.TypeInfo typeInfo, string? baseNamespace, string? resourcesRelativePath) { throw null; } protected virtual string GetResourcePrefix(string baseResourceName, string baseNamespace) { throw null; } protected virtual string GetResourcePrefix(string location, string baseName, string resourceLocation) { throw null; } - protected virtual Microsoft.Extensions.Localization.RootNamespaceAttribute GetRootNamespaceAttribute(System.Reflection.Assembly assembly) { throw null; } + protected virtual Microsoft.Extensions.Localization.RootNamespaceAttribute? GetRootNamespaceAttribute(System.Reflection.Assembly assembly) { throw null; } } public partial class ResourceNamesCache : Microsoft.Extensions.Localization.IResourceNamesCache { public ResourceNamesCache() { } - public System.Collections.Generic.IList GetOrAdd(string name, System.Func> valueFactory) { throw null; } + public System.Collections.Generic.IList? GetOrAdd(string name, System.Func?> valueFactory) { throw null; } } [System.AttributeUsageAttribute(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)] public partial class RootNamespaceAttribute : System.Attribute @@ -69,15 +69,15 @@ namespace Microsoft.Extensions.Localization.Internal public AssemblyWrapper(System.Reflection.Assembly assembly) { } public System.Reflection.Assembly Assembly { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public virtual string FullName { get { throw null; } } - public virtual System.IO.Stream GetManifestResourceStream(string name) { throw null; } + public virtual System.IO.Stream? GetManifestResourceStream(string name) { throw null; } } public partial interface IResourceStringProvider { - System.Collections.Generic.IList GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing); + System.Collections.Generic.IList? GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing); } public partial class ResourceManagerStringProvider : Microsoft.Extensions.Localization.Internal.IResourceStringProvider { public ResourceManagerStringProvider(Microsoft.Extensions.Localization.IResourceNamesCache resourceCache, System.Resources.ResourceManager resourceManager, System.Reflection.Assembly assembly, string baseName) { } - public System.Collections.Generic.IList GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing) { throw null; } + public System.Collections.Generic.IList? GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing) { throw null; } } } diff --git a/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netstandard2.0.cs b/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netstandard2.0.cs index dea13ee364..c606bf0a9c 100644 --- a/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netstandard2.0.cs +++ b/src/Localization/Localization/ref/Microsoft.Extensions.Localization.netstandard2.0.cs @@ -13,7 +13,7 @@ namespace Microsoft.Extensions.Localization { public partial interface IResourceNamesCache { - System.Collections.Generic.IList GetOrAdd(string name, System.Func> valueFactory); + System.Collections.Generic.IList? GetOrAdd(string name, System.Func?> valueFactory); } public partial class LocalizationOptions { @@ -35,7 +35,7 @@ namespace Microsoft.Extensions.Localization public virtual Microsoft.Extensions.Localization.LocalizedString this[string name, params object[] arguments] { get { throw null; } } public virtual System.Collections.Generic.IEnumerable GetAllStrings(bool includeParentCultures) { throw null; } protected System.Collections.Generic.IEnumerable GetAllStrings(bool includeParentCultures, System.Globalization.CultureInfo culture) { throw null; } - protected string GetStringSafely(string name, System.Globalization.CultureInfo culture) { throw null; } + protected string? GetStringSafely(string name, System.Globalization.CultureInfo? culture) { throw null; } } public partial class ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory { @@ -43,17 +43,17 @@ namespace Microsoft.Extensions.Localization public Microsoft.Extensions.Localization.IStringLocalizer Create(string baseName, string location) { throw null; } public Microsoft.Extensions.Localization.IStringLocalizer Create(System.Type resourceSource) { throw null; } protected virtual Microsoft.Extensions.Localization.ResourceManagerStringLocalizer CreateResourceManagerStringLocalizer(System.Reflection.Assembly assembly, string baseName) { throw null; } - protected virtual Microsoft.Extensions.Localization.ResourceLocationAttribute GetResourceLocationAttribute(System.Reflection.Assembly assembly) { throw null; } + protected virtual Microsoft.Extensions.Localization.ResourceLocationAttribute? GetResourceLocationAttribute(System.Reflection.Assembly assembly) { throw null; } protected virtual string GetResourcePrefix(System.Reflection.TypeInfo typeInfo) { throw null; } - protected virtual string GetResourcePrefix(System.Reflection.TypeInfo typeInfo, string baseNamespace, string resourcesRelativePath) { throw null; } + protected virtual string GetResourcePrefix(System.Reflection.TypeInfo typeInfo, string? baseNamespace, string? resourcesRelativePath) { throw null; } protected virtual string GetResourcePrefix(string baseResourceName, string baseNamespace) { throw null; } protected virtual string GetResourcePrefix(string location, string baseName, string resourceLocation) { throw null; } - protected virtual Microsoft.Extensions.Localization.RootNamespaceAttribute GetRootNamespaceAttribute(System.Reflection.Assembly assembly) { throw null; } + protected virtual Microsoft.Extensions.Localization.RootNamespaceAttribute? GetRootNamespaceAttribute(System.Reflection.Assembly assembly) { throw null; } } public partial class ResourceNamesCache : Microsoft.Extensions.Localization.IResourceNamesCache { public ResourceNamesCache() { } - public System.Collections.Generic.IList GetOrAdd(string name, System.Func> valueFactory) { throw null; } + public System.Collections.Generic.IList? GetOrAdd(string name, System.Func?> valueFactory) { throw null; } } [System.AttributeUsageAttribute(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)] public partial class RootNamespaceAttribute : System.Attribute @@ -69,15 +69,15 @@ namespace Microsoft.Extensions.Localization.Internal public AssemblyWrapper(System.Reflection.Assembly assembly) { } public System.Reflection.Assembly Assembly { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public virtual string FullName { get { throw null; } } - public virtual System.IO.Stream GetManifestResourceStream(string name) { throw null; } + public virtual System.IO.Stream? GetManifestResourceStream(string name) { throw null; } } public partial interface IResourceStringProvider { - System.Collections.Generic.IList GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing); + System.Collections.Generic.IList? GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing); } public partial class ResourceManagerStringProvider : Microsoft.Extensions.Localization.Internal.IResourceStringProvider { public ResourceManagerStringProvider(Microsoft.Extensions.Localization.IResourceNamesCache resourceCache, System.Resources.ResourceManager resourceManager, System.Reflection.Assembly assembly, string baseName) { } - public System.Collections.Generic.IList GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing) { throw null; } + public System.Collections.Generic.IList? GetAllResourceStrings(System.Globalization.CultureInfo culture, bool throwOnMissing) { throw null; } } } diff --git a/src/Localization/Localization/src/IResourceNamesCache.cs b/src/Localization/Localization/src/IResourceNamesCache.cs index 90d104aa68..4f0995c9f1 100644 --- a/src/Localization/Localization/src/IResourceNamesCache.cs +++ b/src/Localization/Localization/src/IResourceNamesCache.cs @@ -17,6 +17,6 @@ namespace Microsoft.Extensions.Localization /// The resource name to add string names for. /// The function used to generate the string names for the resource. /// The string names for the resource. - IList GetOrAdd(string name, Func> valueFactory); + IList? GetOrAdd(string name, Func?> valueFactory); } } diff --git a/src/Localization/Localization/src/Internal/AssemblyWrapper.cs b/src/Localization/Localization/src/Internal/AssemblyWrapper.cs index 11e118e326..813d8717b1 100644 --- a/src/Localization/Localization/src/Internal/AssemblyWrapper.cs +++ b/src/Localization/Localization/src/Internal/AssemblyWrapper.cs @@ -25,8 +25,8 @@ namespace Microsoft.Extensions.Localization.Internal public Assembly Assembly { get; } - public virtual string FullName => Assembly.FullName; + public virtual string FullName => Assembly.FullName!; - public virtual Stream GetManifestResourceStream(string name) => Assembly.GetManifestResourceStream(name); + public virtual Stream? GetManifestResourceStream(string name) => Assembly.GetManifestResourceStream(name); } } diff --git a/src/Localization/Localization/src/Internal/IResourceStringProvider.cs b/src/Localization/Localization/src/Internal/IResourceStringProvider.cs index 157e8e976e..16df0065ac 100644 --- a/src/Localization/Localization/src/Internal/IResourceStringProvider.cs +++ b/src/Localization/Localization/src/Internal/IResourceStringProvider.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; @@ -12,6 +12,6 @@ namespace Microsoft.Extensions.Localization.Internal /// public interface IResourceStringProvider { - IList GetAllResourceStrings(CultureInfo culture, bool throwOnMissing); + IList? GetAllResourceStrings(CultureInfo culture, bool throwOnMissing); } } diff --git a/src/Localization/Localization/src/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs b/src/Localization/Localization/src/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs index 63f40536ca..67d244f265 100644 --- a/src/Localization/Localization/src/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs +++ b/src/Localization/Localization/src/Internal/ResourceManagerStringLocalizerLoggerExtensions.cs @@ -1,5 +1,5 @@ -// 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. +// 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; @@ -9,7 +9,7 @@ namespace Microsoft.Extensions.Localization.Internal { internal static class ResourceManagerStringLocalizerLoggerExtensions { - private static readonly Action _searchedLocation; + private static readonly Action _searchedLocation; static ResourceManagerStringLocalizerLoggerExtensions() { diff --git a/src/Localization/Localization/src/Internal/ResourceManagerStringProvider.cs b/src/Localization/Localization/src/Internal/ResourceManagerStringProvider.cs index 62250938c8..00850b1655 100644 --- a/src/Localization/Localization/src/Internal/ResourceManagerStringProvider.cs +++ b/src/Localization/Localization/src/Internal/ResourceManagerStringProvider.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections; @@ -51,7 +51,7 @@ namespace Microsoft.Extensions.Localization.Internal return resourceStreamName; } - public IList GetAllResourceStrings(CultureInfo culture, bool throwOnMissing) + public IList? GetAllResourceStrings(CultureInfo culture, bool throwOnMissing) { var cacheKey = GetResourceCacheKey(culture); @@ -72,9 +72,12 @@ namespace Microsoft.Extensions.Localization.Internal } var names = new List(); - foreach (DictionaryEntry entry in resourceSet) + foreach (DictionaryEntry? entry in resourceSet) { - names.Add((string)entry.Key); + if (entry?.Key is string key) + { + names.Add(key); + } } return names; diff --git a/src/Localization/Localization/src/Microsoft.Extensions.Localization.csproj b/src/Localization/Localization/src/Microsoft.Extensions.Localization.csproj index c3ffbeb772..be1ebd7044 100644 --- a/src/Localization/Localization/src/Microsoft.Extensions.Localization.csproj +++ b/src/Localization/Localization/src/Microsoft.Extensions.Localization.csproj @@ -10,6 +10,7 @@ localization true true + enable diff --git a/src/Localization/Localization/src/ResourceManagerStringLocalizer.cs b/src/Localization/Localization/src/ResourceManagerStringLocalizer.cs index 0f033a5227..b1e9845a0c 100644 --- a/src/Localization/Localization/src/ResourceManagerStringLocalizer.cs +++ b/src/Localization/Localization/src/ResourceManagerStringLocalizer.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; +using System.Linq; using System.Reflection; using System.Resources; using Microsoft.Extensions.Localization.Internal; @@ -19,7 +20,7 @@ namespace Microsoft.Extensions.Localization /// This type is thread-safe. public class ResourceManagerStringLocalizer : IStringLocalizer { - private readonly ConcurrentDictionary _missingManifestCache = new ConcurrentDictionary(); + private readonly ConcurrentDictionary _missingManifestCache = new ConcurrentDictionary(); private readonly IResourceNamesCache _resourceNamesCache; private readonly ResourceManager _resourceManager; private readonly IResourceStringProvider _resourceStringProvider; @@ -171,7 +172,7 @@ namespace Microsoft.Extensions.Localization ? GetResourceNamesFromCultureHierarchy(culture) : _resourceStringProvider.GetAllResourceStrings(culture, true); - foreach (var name in resourceNames) + foreach (var name in resourceNames ?? Enumerable.Empty()) { var value = GetStringSafely(name, culture); yield return new LocalizedString(name, value ?? name, resourceNotFound: value == null, searchedLocation: _resourceBaseName); @@ -185,7 +186,7 @@ namespace Microsoft.Extensions.Localization /// The name of the string resource. /// The to get the string for. /// The resource string, or null if none was found. - protected string GetStringSafely(string name, CultureInfo culture) + protected string? GetStringSafely(string name, CultureInfo? culture) { if (name == null) { diff --git a/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs b/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs index a525f72368..34d5f34659 100644 --- a/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs +++ b/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs @@ -82,7 +82,7 @@ namespace Microsoft.Extensions.Localization /// For the type "Sample.Controllers.Home" if there's a resourceRelativePath return /// "Sample.Resourcepath.Controllers.Home" if there isn't one then it would return "Sample.Controllers.Home". /// - protected virtual string GetResourcePrefix(TypeInfo typeInfo, string baseNamespace, string resourcesRelativePath) + protected virtual string GetResourcePrefix(TypeInfo typeInfo, string? baseNamespace, string? resourcesRelativePath) { if (typeInfo == null) { @@ -94,6 +94,11 @@ namespace Microsoft.Extensions.Localization throw new ArgumentNullException(nameof(baseNamespace)); } + if (string.IsNullOrEmpty(typeInfo.FullName)) + { + throw new ArgumentException(Resources.FormatLocalization_TypeMustHaveTypeName(typeInfo)); + } + if (string.IsNullOrEmpty(resourcesRelativePath)) { return typeInfo.FullName; @@ -219,7 +224,7 @@ namespace Microsoft.Extensions.Localization /// The assembly to get a from. /// The associated with the given . /// This method is protected and virtual for testing purposes only. - protected virtual ResourceLocationAttribute GetResourceLocationAttribute(Assembly assembly) + protected virtual ResourceLocationAttribute? GetResourceLocationAttribute(Assembly assembly) { return assembly.GetCustomAttribute(); } @@ -228,17 +233,21 @@ namespace Microsoft.Extensions.Localization /// The assembly to get a from. /// The associated with the given . /// This method is protected and virtual for testing purposes only. - protected virtual RootNamespaceAttribute GetRootNamespaceAttribute(Assembly assembly) + protected virtual RootNamespaceAttribute? GetRootNamespaceAttribute(Assembly assembly) { return assembly.GetCustomAttribute(); } - private string GetRootNamespace(Assembly assembly) + private string? GetRootNamespace(Assembly assembly) { var rootNamespaceAttribute = GetRootNamespaceAttribute(assembly); - return rootNamespaceAttribute?.RootNamespace ?? - new AssemblyName(assembly.FullName).Name; + if (rootNamespaceAttribute != null) + { + return rootNamespaceAttribute.RootNamespace; + } + + return assembly.GetName().Name; } private string GetResourcePath(Assembly assembly) @@ -256,7 +265,7 @@ namespace Microsoft.Extensions.Localization return resourceLocation; } - private static string TrimPrefix(string name, string prefix) + private static string? TrimPrefix(string name, string prefix) { if (name.StartsWith(prefix, StringComparison.Ordinal)) { diff --git a/src/Localization/Localization/src/ResourceNamesCache.cs b/src/Localization/Localization/src/ResourceNamesCache.cs index 72b7986d9f..de3f0f5bc6 100644 --- a/src/Localization/Localization/src/ResourceNamesCache.cs +++ b/src/Localization/Localization/src/ResourceNamesCache.cs @@ -12,7 +12,7 @@ namespace Microsoft.Extensions.Localization /// public class ResourceNamesCache : IResourceNamesCache { - private readonly ConcurrentDictionary> _cache = new ConcurrentDictionary>(); + private readonly ConcurrentDictionary?> _cache = new ConcurrentDictionary?>(); /// /// Creates a new @@ -22,7 +22,7 @@ namespace Microsoft.Extensions.Localization } /// - public IList GetOrAdd(string name, Func> valueFactory) + public IList? GetOrAdd(string name, Func?> valueFactory) { return _cache.GetOrAdd(name, valueFactory); } diff --git a/src/Localization/Localization/src/Resources.resx b/src/Localization/Localization/src/Resources.resx index b679f04664..dad5018260 100644 --- a/src/Localization/Localization/src/Resources.resx +++ b/src/Localization/Localization/src/Resources.resx @@ -123,4 +123,7 @@ No manifests exist for the current culture. + + Type '{0}' must have a non-null type name. + \ No newline at end of file diff --git a/src/Localization/Localization/test/Microsoft.Extensions.Localization.RootNamespace.Tests/Microsoft.Extensions.Localization.RootNamespace.Tests.csproj b/src/Localization/Localization/test/Microsoft.Extensions.Localization.RootNamespace.Tests/Microsoft.Extensions.Localization.RootNamespace.Tests.csproj index c81af4416d..29d2e8f504 100644 --- a/src/Localization/Localization/test/Microsoft.Extensions.Localization.RootNamespace.Tests/Microsoft.Extensions.Localization.RootNamespace.Tests.csproj +++ b/src/Localization/Localization/test/Microsoft.Extensions.Localization.RootNamespace.Tests/Microsoft.Extensions.Localization.RootNamespace.Tests.csproj @@ -2,6 +2,7 @@ $(DefaultNetCoreTargetFramework);net472 LocalizationTest.Abc + enable diff --git a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj index 4599766c21..508310f142 100644 --- a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj +++ b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/Microsoft.Extensions.Localization.Tests.csproj @@ -2,6 +2,7 @@ $(DefaultNetCoreTargetFramework);net472 + enable diff --git a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs index 86f6e15ccd..12af15805f 100644 --- a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs +++ b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs @@ -1,6 +1,7 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +#nullable disable using System; using System.IO; using System.Reflection; @@ -84,7 +85,7 @@ namespace Microsoft.Extensions.Localization.Tests // Assert Assert.Equal(typeFactory.BaseName, stringFactory.BaseName); - Assert.Equal(typeFactory.Assembly.FullName, stringFactory.Assembly.FullName); + Assert.Equal(typeFactory.Assembly!.FullName, stringFactory.Assembly!.FullName); } [Fact] @@ -293,7 +294,7 @@ namespace Microsoft.Extensions.Localization.Tests var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object, loggerFactory: loggerFactory); // Act & Assert - Assert.Throws(() => factory.Create("baseName", location: null)); + Assert.Throws(() => factory.Create("baseName", location: null!)); } } } diff --git a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs index a82ce9d1d3..a2bd1ed7c1 100644 --- a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs +++ b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerTest.cs @@ -249,9 +249,9 @@ namespace Microsoft.Extensions.Localization _assemblyWrapper = assemblyWrapper; } - public override string GetString(string name, CultureInfo culture) => null; + public override string? GetString(string name, CultureInfo? culture) => null; - public override ResourceSet GetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents) + public override ResourceSet? GetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents) { var resourceStream = _assemblyWrapper.GetManifestResourceStream(BaseName); @@ -287,7 +287,7 @@ namespace Microsoft.Extensions.Localization public int ManifestResourceStreamCallCount { get; private set; } - public override Stream GetManifestResourceStream(string name) + public override Stream? GetManifestResourceStream(string name) { ManifestResourceStreamCallCount++; diff --git a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/StringLocalizerOfTTest.cs b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/StringLocalizerOfTTest.cs index 53d290064e..50da5d0aca 100644 --- a/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/StringLocalizerOfTTest.cs +++ b/src/Localization/Localization/test/Microsoft.Extensions.Localization.Tests/StringLocalizerOfTTest.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Globalization; using Moq; using Xunit; @@ -15,7 +14,7 @@ namespace Microsoft.Extensions.Localization { // Arrange, act and assert var exception = Assert.Throws( - () => new StringLocalizer(factory: null)); + () => new StringLocalizer(factory: null!)); Assert.Equal("factory", exception.ParamName); } @@ -45,7 +44,7 @@ namespace Microsoft.Extensions.Localization var localizer = new StringLocalizer(factory.Object); // Act and assert - var exception = Assert.Throws(() => localizer[name: null]); + var exception = Assert.Throws(() => localizer[name: null!]); Assert.Equal("name", exception.ParamName); } @@ -80,7 +79,7 @@ namespace Microsoft.Extensions.Localization var localizer = new StringLocalizer(factory.Object); // Act and assert - var exception = Assert.Throws(() => localizer[name: null]); + var exception = Assert.Throws(() => localizer[name: null!]); Assert.Equal("name", exception.ParamName); } diff --git a/src/Shared/Nullable/NullableAttributes.cs b/src/Shared/Nullable/NullableAttributes.cs new file mode 100644 index 0000000000..936ee5832c --- /dev/null +++ b/src/Shared/Nullable/NullableAttributes.cs @@ -0,0 +1,196 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +// From https://github.com/dotnet/runtime/blob/ef72b95937703e485fdbbb75f3251fedfd1a0ef9/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/NullableAttributes.cs + +namespace System.Diagnostics.CodeAnalysis +{ + /// Specifies that null is allowed as an input even if the corresponding type disallows it. + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class AllowNullAttribute : Attribute { } + + /// Specifies that null is disallowed as an input even if the corresponding type allows it. + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class DisallowNullAttribute : Attribute { } + + /// Specifies that an output may be null even if the corresponding type disallows it. + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class MaybeNullAttribute : Attribute { } + + /// Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns. + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class NotNullAttribute : Attribute { } + + /// Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it. + [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class MaybeNullWhenAttribute : Attribute + { + /// Initializes the attribute with the specified return value condition. + /// + /// The return value condition. If the method returns this value, the associated parameter may be null. + /// + public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; + + /// Gets the return value condition. + public bool ReturnValue { get; } + } + + /// Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class NotNullWhenAttribute : Attribute + { + /// Initializes the attribute with the specified return value condition. + /// + /// The return value condition. If the method returns this value, the associated parameter will not be null. + /// + public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; + + /// Gets the return value condition. + public bool ReturnValue { get; } + } + + /// Specifies that the output will be non-null if the named parameter is non-null. + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class NotNullIfNotNullAttribute : Attribute + { + /// Initializes the attribute with the associated parameter name. + /// + /// The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null. + /// + public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName; + + /// Gets the associated parameter name. + public string ParameterName { get; } + } + + /// Applied to a method that will never return under any circumstance. + [AttributeUsage(AttributeTargets.Method, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class DoesNotReturnAttribute : Attribute { } + + /// Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class DoesNotReturnIfAttribute : Attribute + { + /// Initializes the attribute with the specified parameter value. + /// + /// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + /// the associated parameter matches this value. + /// + public DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue; + + /// Gets the condition parameter value. + public bool ParameterValue { get; } + } + + /// Specifies that the method or property will ensure that the listed field and property members have not-null values. + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class MemberNotNullAttribute : Attribute + { + /// Initializes the attribute with a field or property member. + /// + /// The field or property member that is promised to be not-null. + /// + public MemberNotNullAttribute(string member) => Members = new[] { member }; + + /// Initializes the attribute with the list of field and property members. + /// + /// The list of field and property members that are promised to be not-null. + /// + public MemberNotNullAttribute(params string[] members) => Members = members; + + /// Gets field or property member names. + public string[] Members { get; } + } + + /// Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition. + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] +#if INTERNAL_NULLABLE_ATTRIBUTES + internal +#else + public +#endif + sealed class MemberNotNullWhenAttribute : Attribute + { + /// Initializes the attribute with the specified return value condition and a field or property member. + /// + /// The return value condition. If the method returns this value, the associated parameter will not be null. + /// + /// + /// The field or property member that is promised to be not-null. + /// + public MemberNotNullWhenAttribute(bool returnValue, string member) + { + ReturnValue = returnValue; + Members = new[] { member }; + } + + /// Initializes the attribute with the specified return value condition and list of field and property members. + /// + /// The return value condition. If the method returns this value, the associated parameter will not be null. + /// + /// + /// The list of field and property members that are promised to be not-null. + /// + public MemberNotNullWhenAttribute(bool returnValue, params string[] members) + { + ReturnValue = returnValue; + Members = members; + } + + /// Gets the return value condition. + public bool ReturnValue { get; } + + /// Gets field or property member names. + public string[] Members { get; } + } +} \ No newline at end of file From 7fc4a5537ca8689f7d9091b69faad4837566b85c Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Mon, 1 Jun 2020 10:08:10 -0700 Subject: [PATCH 03/46] Switch priorities of Ubuntu 16.04 and 18.04 testing; add 20.04 --- eng/targets/Helix.Common.props | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/eng/targets/Helix.Common.props b/eng/targets/Helix.Common.props index f346b702f0..36b0e0ca84 100644 --- a/eng/targets/Helix.Common.props +++ b/eng/targets/Helix.Common.props @@ -20,7 +20,7 @@ - + @@ -29,7 +29,8 @@ - + + From d2b3eecedb63883d563e2f03842c2a4709bc2308 Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Sat, 30 May 2020 22:51:19 -0700 Subject: [PATCH 04/46] Provide an `$(OutputPath)` setting in helix.proj - #22246 --- eng/helix/helix.proj | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eng/helix/helix.proj b/eng/helix/helix.proj index b905693145..250b2fb9b2 100644 --- a/eng/helix/helix.proj +++ b/eng/helix/helix.proj @@ -20,9 +20,13 @@ private-$(USERNAME) private-$(USER) true - true 2 $(HelixApiAccessToken) + + + bin\ + $(BaseOutputPath)$(Configuration)\ + $(BaseOutputPath)$(PlatformName)\$(Configuration)\ From 12949b7cb7d51bd11de9f20fd03ba9365a265be3 Mon Sep 17 00:00:00 2001 From: Brennan Date: Mon, 1 Jun 2020 11:54:34 -0700 Subject: [PATCH 05/46] Quarantine flaky tests (#22424) --- .../test/PubternabilityAnalyzerTests.cs | 1 + src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs b/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs index 0c2f27644e..da536956b1 100644 --- a/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs +++ b/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs @@ -34,6 +34,7 @@ namespace A.Internal.Namespace [Theory] [MemberData(nameof(PublicMemberDefinitions))] + [QuarantinedTest] public async Task PublicExposureOfPubternalTypeProducesPUB0001(string member) { var code = GetSourceFromNamespaceDeclaration($@" diff --git a/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs b/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs index 3549a7a8b6..f85aed4bb5 100644 --- a/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs +++ b/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs @@ -42,6 +42,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests } [Fact] + [QuarantinedTest] public void CanRenderTextOnlyComponent() { var appElement = Browser.MountTestComponent(); From 3752fa6583158665faaf4203f825f32826155979 Mon Sep 17 00:00:00 2001 From: William Godbe Date: Mon, 1 Jun 2020 12:42:42 -0700 Subject: [PATCH 06/46] Update branding to preview7 (#22426) --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 22aa7b9259..8cf181bad7 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -9,7 +9,7 @@ 5 0 0 - 6 + 7 From 79d3e3e701f38c729a19286c49667f8abdbeb9f6 Mon Sep 17 00:00:00 2001 From: John Luo Date: Mon, 1 Jun 2020 13:17:55 -0700 Subject: [PATCH 07/46] Add migrated projects to Razor.sln (#22378) --- src/Razor/Razor.sln | 332 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 330 insertions(+), 2 deletions(-) diff --git a/src/Razor/Razor.sln b/src/Razor/Razor.sln index 351ffa7d14..26135d97fb 100644 --- a/src/Razor/Razor.sln +++ b/src/Razor/Razor.sln @@ -8,18 +8,126 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor", "Razor", "{FD09AA4B-FD90-4B88-8E74-77FBF96AFF07}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor", "Microsoft.AspNetCore.Razor", "{FD09AA4B-FD90-4B88-8E74-77FBF96AFF07}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor", "Razor\src\Microsoft.AspNetCore.Razor.csproj", "{50B155AF-6778-4FBF-AF97-0AD3DFF11564}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test", "Razor\test\Microsoft.AspNetCore.Razor.Test.csproj", "{6F476A56-25E8-4BDC-82D5-4EBA01D93765}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor.Runtime", "Razor.Runtime", "{CD0A594B-445E-41A0-8C91-1DE90923E66F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Runtime", "Microsoft.AspNetCore.Razor.Runtime", "{CD0A594B-445E-41A0-8C91-1DE90923E66F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime", "Razor.Runtime\src\Microsoft.AspNetCore.Razor.Runtime.csproj", "{CF24C860-423A-4336-8D17-2276249BC945}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime.Test", "Razor.Runtime\test\Microsoft.AspNetCore.Razor.Runtime.Test.csproj", "{B98E84E5-1E26-4722-9F6B-039CED7711C2}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions", "Microsoft.AspNetCore.Mvc.Razor.Extensions", "{FFC73AB3-6596-4A29-8D38-12FE2CAF8BB8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions", "Microsoft.AspNetCore.Mvc.Razor.Extensions\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.csproj", "{3FE56E9D-7939-489C-B016-FF4681CBCA33}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Test", "Microsoft.AspNetCore.Mvc.Razor.Extensions\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Test.csproj", "{6A162525-5CF6-4115-A530-CFED10FB8D2C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "{6BC218FB-E6D3-4639-8EC8-02EDBF3E9FD0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.csproj", "{81D9ED58-272A-4817-AF2E-509CCF8BAC89}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test.csproj", "{07059CCE-D63C-411F-BDFF-14EFEAFDD954}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "{D6D0962A-34F8-4255-BF71-4A2D097A5F18}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.csproj", "{F13003AE-04AD-4ADF-A6E7-74B333188491}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test.csproj", "{512B8EF8-8CBE-4ACA-A706-C30711126C70}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Language", "Microsoft.AspNetCore.Razor.Language", "{C2465ED1-BD6E-4560-AF06-3ABE9C981F17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Language", "Microsoft.AspNetCore.Razor.Language\src\Microsoft.AspNetCore.Razor.Language.csproj", "{A60F2657-440E-44C5-BBA1-87BA8DCEEEBC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Language.Test", "Microsoft.AspNetCore.Razor.Language\test\Microsoft.AspNetCore.Razor.Language.Test.csproj", "{800FE54A-FFDB-4E11-85C5-FDDFB6C9799B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools", "{C1DBAF3D-5DC3-4897-9974-A82F385F433B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools\src\Microsoft.AspNetCore.Razor.Tools.csproj", "{CD8C51C7-9E90-493F-B968-04BE02A61826}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools.Test", "Microsoft.AspNetCore.Razor.Tools\test\Microsoft.AspNetCore.Razor.Tools.Test.csproj", "{09B54B7D-444C-4538-9F96-824C8041121B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.CodeAnalysis.Razor", "Microsoft.CodeAnalysis.Razor", "{897B5F9B-3850-4277-8D1D-C403201A6926}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor", "Microsoft.CodeAnalysis.Razor\src\Microsoft.CodeAnalysis.Razor.csproj", "{663F4A87-FCEC-4F62-AABA-3F32F3A2694A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor.Test", "Microsoft.CodeAnalysis.Razor\test\Microsoft.CodeAnalysis.Razor.Test.csproj", "{D1B631CE-0DA3-4B3C-BD84-006A6B8E8958}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{83888083-D152-4803-86D0-1688D2704774}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Internal.Transport", "tools\Microsoft.AspNetCore.Razor.Internal.Transport\Microsoft.AspNetCore.Razor.Internal.Transport.csproj", "{978DCC52-98F4-40D0-ABEA-7D233096A2FB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorSyntaxGenerator", "tools\RazorSyntaxGenerator\RazorSyntaxGenerator.csproj", "{A6A57B2B-8BC7-4357-AE7F-2C48BE771EC5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{FDA299D0-1E96-444A-8102-B097F31466F5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Performance", "perf\Microsoft.AspNetCore.Razor.Performance\Microsoft.AspNetCore.Razor.Performance.csproj", "{27EFDA3C-6DD1-4A74-9B66-F7C4C1F51280}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.NET.Sdk.Razor", "Microsoft.NET.Sdk.Razor", "{433DDF1D-F86A-492E-B448-4F299F56FACA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Razor", "Microsoft.NET.Sdk.Razor\src\Microsoft.NET.Sdk.Razor.csproj", "{09A52864-57AB-4308-823E-155DE6D0A9EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Razor.Test", "Microsoft.NET.Sdk.Razor\test\Microsoft.NET.Sdk.Razor.Test.csproj", "{3C938DF0-ABC0-486A-B191-26BC61191AD2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.Common", "test\Microsoft.AspNetCore.Razor.Test.Common\Microsoft.AspNetCore.Razor.Test.Common.csproj", "{02DB674A-EE32-4B45-A52D-89DE88D1BE3A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.ComponentShim", "test\Microsoft.AspNetCore.Razor.Test.ComponentShim\Microsoft.AspNetCore.Razor.Test.ComponentShim.csproj", "{63381C66-B3E1-4C23-8348-267ECCEEBB8D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim", "test\Microsoft.AspNetCore.Razor.Test.MvcShim\Microsoft.AspNetCore.Razor.Test.MvcShim.csproj", "{ECFE9F9B-A37B-4A36-9A5A-EAD7DE6FCF0D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib", "test\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib.csproj", "{C6CAD507-F441-4FA8-AE95-99086B5A245F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X", "test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X.csproj", "{381824E8-40CE-475C-9035-9F36AD34EBB7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X", "test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X.csproj", "{B3A97984-FC0A-4FBE-93D4-6CA7049252DC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppWithP2PReference", "test\testassets\AppWithP2PReference\AppWithP2PReference.csproj", "{B01AE52C-EE01-4307-81D6-45DA76DB4CC9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppWithPackageAndP2PReference", "test\testassets\AppWithPackageAndP2PReference\AppWithPackageAndP2PReference.csproj", "{D4B1705B-0932-4285-9039-938316C4A263}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppWithPackageAndP2PReferenceAndRID", "test\testassets\AppWithPackageAndP2PReferenceAndRID\AppWithPackageAndP2PReferenceAndRID.csproj", "{C8BBC11A-7AA0-469A-8217-B0B0D1DEA463}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibrary", "test\testassets\ClassLibrary\ClassLibrary.csproj", "{2F725AC6-8811-4239-A628-7E76EC0C30ED}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibrary2", "test\testassets\ClassLibrary2\ClassLibrary2.csproj", "{B18B9F04-76AB-4DA7-93E0-E9EC3E914F95}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibraryMvc21", "test\testassets\ClassLibraryMvc21\ClassLibraryMvc21.csproj", "{B66BDE37-E98E-41F4-9A85-D69D394F78C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentApp", "test\testassets\ComponentApp\ComponentApp.csproj", "{E9C71DEF-D0BC-4A64-9844-453BB7E5BCF3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentLibrary", "test\testassets\ComponentLibrary\ComponentLibrary.csproj", "{67FB1B92-0800-46AB-B086-FD6E6A2B4B3C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LargeProject", "test\testassets\LargeProject\LargeProject.csproj", "{CF533815-EC96-4208-970B-5F0D63C2694A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MvcWithComponents", "test\testassets\MvcWithComponents\MvcWithComponents.csproj", "{8754CF22-3278-4189-8FAE-34DE7A4A56BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageLibraryDirectDependency", "test\testassets\PackageLibraryDirectDependency\PackageLibraryDirectDependency.csproj", "{75D1E34E-C3AD-497E-B459-285F70E72385}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageLibraryTransitiveDependency", "test\testassets\PackageLibraryTransitiveDependency\PackageLibraryTransitiveDependency.csproj", "{B7062D8B-55FD-4809-9E92-12C7E9777A51}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RestoreTestProjects", "test\testassets\RestoreTestProjects\RestoreTestProjects.csproj", "{CB2411EB-768C-4371-AE5E-77CB5FB5A588}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleMvc", "test\testassets\SimpleMvc\SimpleMvc.csproj", "{FC58EC9A-DCC5-4828-973F-C6564ECB0F53}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleMvc11", "test\testassets\SimpleMvc11\SimpleMvc11.csproj", "{D3097AEA-43A8-442D-ACB6-0F4150D98730}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleMvc11NetFx", "test\testassets\SimpleMvc11NetFx\SimpleMvc11NetFx.csproj", "{B324DFE7-A052-4097-9F52-A10F1C8A063A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleMvc21", "test\testassets\SimpleMvc21\SimpleMvc21.csproj", "{E1BFF82C-A797-45BF-B7E6-494D1210E2C6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleMvc22", "test\testassets\SimpleMvc22\SimpleMvc22.csproj", "{F3A7CC13-E260-4523-9CD8-FF991A7134BF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleMvc22NetFx", "test\testassets\SimpleMvc22NetFx\SimpleMvc22NetFx.csproj", "{19645C7B-A99D-4F62-846D-117620295002}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SimpleMvcFSharp", "test\testassets\SimpleMvcFSharp\SimpleMvcFSharp.fsproj", "{84334F61-A77E-4F7B-A383-58D1D57DB6BC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimplePages", "test\testassets\SimplePages\SimplePages.csproj", "{80A7D935-D0A4-4AA4-9162-C78C543C41F3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -42,6 +150,182 @@ Global {B98E84E5-1E26-4722-9F6B-039CED7711C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {B98E84E5-1E26-4722-9F6B-039CED7711C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {B98E84E5-1E26-4722-9F6B-039CED7711C2}.Release|Any CPU.Build.0 = Release|Any CPU + {3FE56E9D-7939-489C-B016-FF4681CBCA33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3FE56E9D-7939-489C-B016-FF4681CBCA33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3FE56E9D-7939-489C-B016-FF4681CBCA33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3FE56E9D-7939-489C-B016-FF4681CBCA33}.Release|Any CPU.Build.0 = Release|Any CPU + {6A162525-5CF6-4115-A530-CFED10FB8D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A162525-5CF6-4115-A530-CFED10FB8D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A162525-5CF6-4115-A530-CFED10FB8D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A162525-5CF6-4115-A530-CFED10FB8D2C}.Release|Any CPU.Build.0 = Release|Any CPU + {81D9ED58-272A-4817-AF2E-509CCF8BAC89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81D9ED58-272A-4817-AF2E-509CCF8BAC89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81D9ED58-272A-4817-AF2E-509CCF8BAC89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81D9ED58-272A-4817-AF2E-509CCF8BAC89}.Release|Any CPU.Build.0 = Release|Any CPU + {07059CCE-D63C-411F-BDFF-14EFEAFDD954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07059CCE-D63C-411F-BDFF-14EFEAFDD954}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07059CCE-D63C-411F-BDFF-14EFEAFDD954}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07059CCE-D63C-411F-BDFF-14EFEAFDD954}.Release|Any CPU.Build.0 = Release|Any CPU + {F13003AE-04AD-4ADF-A6E7-74B333188491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F13003AE-04AD-4ADF-A6E7-74B333188491}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F13003AE-04AD-4ADF-A6E7-74B333188491}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F13003AE-04AD-4ADF-A6E7-74B333188491}.Release|Any CPU.Build.0 = Release|Any CPU + {512B8EF8-8CBE-4ACA-A706-C30711126C70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {512B8EF8-8CBE-4ACA-A706-C30711126C70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {512B8EF8-8CBE-4ACA-A706-C30711126C70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {512B8EF8-8CBE-4ACA-A706-C30711126C70}.Release|Any CPU.Build.0 = Release|Any CPU + {A60F2657-440E-44C5-BBA1-87BA8DCEEEBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A60F2657-440E-44C5-BBA1-87BA8DCEEEBC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A60F2657-440E-44C5-BBA1-87BA8DCEEEBC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A60F2657-440E-44C5-BBA1-87BA8DCEEEBC}.Release|Any CPU.Build.0 = Release|Any CPU + {800FE54A-FFDB-4E11-85C5-FDDFB6C9799B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {800FE54A-FFDB-4E11-85C5-FDDFB6C9799B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {800FE54A-FFDB-4E11-85C5-FDDFB6C9799B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {800FE54A-FFDB-4E11-85C5-FDDFB6C9799B}.Release|Any CPU.Build.0 = Release|Any CPU + {CD8C51C7-9E90-493F-B968-04BE02A61826}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD8C51C7-9E90-493F-B968-04BE02A61826}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD8C51C7-9E90-493F-B968-04BE02A61826}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD8C51C7-9E90-493F-B968-04BE02A61826}.Release|Any CPU.Build.0 = Release|Any CPU + {09B54B7D-444C-4538-9F96-824C8041121B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09B54B7D-444C-4538-9F96-824C8041121B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09B54B7D-444C-4538-9F96-824C8041121B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09B54B7D-444C-4538-9F96-824C8041121B}.Release|Any CPU.Build.0 = Release|Any CPU + {663F4A87-FCEC-4F62-AABA-3F32F3A2694A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {663F4A87-FCEC-4F62-AABA-3F32F3A2694A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {663F4A87-FCEC-4F62-AABA-3F32F3A2694A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {663F4A87-FCEC-4F62-AABA-3F32F3A2694A}.Release|Any CPU.Build.0 = Release|Any CPU + {D1B631CE-0DA3-4B3C-BD84-006A6B8E8958}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1B631CE-0DA3-4B3C-BD84-006A6B8E8958}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1B631CE-0DA3-4B3C-BD84-006A6B8E8958}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1B631CE-0DA3-4B3C-BD84-006A6B8E8958}.Release|Any CPU.Build.0 = Release|Any CPU + {978DCC52-98F4-40D0-ABEA-7D233096A2FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {978DCC52-98F4-40D0-ABEA-7D233096A2FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {978DCC52-98F4-40D0-ABEA-7D233096A2FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {978DCC52-98F4-40D0-ABEA-7D233096A2FB}.Release|Any CPU.Build.0 = Release|Any CPU + {A6A57B2B-8BC7-4357-AE7F-2C48BE771EC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6A57B2B-8BC7-4357-AE7F-2C48BE771EC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6A57B2B-8BC7-4357-AE7F-2C48BE771EC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6A57B2B-8BC7-4357-AE7F-2C48BE771EC5}.Release|Any CPU.Build.0 = Release|Any CPU + {27EFDA3C-6DD1-4A74-9B66-F7C4C1F51280}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27EFDA3C-6DD1-4A74-9B66-F7C4C1F51280}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27EFDA3C-6DD1-4A74-9B66-F7C4C1F51280}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27EFDA3C-6DD1-4A74-9B66-F7C4C1F51280}.Release|Any CPU.Build.0 = Release|Any CPU + {09A52864-57AB-4308-823E-155DE6D0A9EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09A52864-57AB-4308-823E-155DE6D0A9EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09A52864-57AB-4308-823E-155DE6D0A9EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09A52864-57AB-4308-823E-155DE6D0A9EC}.Release|Any CPU.Build.0 = Release|Any CPU + {3C938DF0-ABC0-486A-B191-26BC61191AD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C938DF0-ABC0-486A-B191-26BC61191AD2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C938DF0-ABC0-486A-B191-26BC61191AD2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C938DF0-ABC0-486A-B191-26BC61191AD2}.Release|Any CPU.Build.0 = Release|Any CPU + {02DB674A-EE32-4B45-A52D-89DE88D1BE3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02DB674A-EE32-4B45-A52D-89DE88D1BE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02DB674A-EE32-4B45-A52D-89DE88D1BE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02DB674A-EE32-4B45-A52D-89DE88D1BE3A}.Release|Any CPU.Build.0 = Release|Any CPU + {63381C66-B3E1-4C23-8348-267ECCEEBB8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63381C66-B3E1-4C23-8348-267ECCEEBB8D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63381C66-B3E1-4C23-8348-267ECCEEBB8D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63381C66-B3E1-4C23-8348-267ECCEEBB8D}.Release|Any CPU.Build.0 = Release|Any CPU + {ECFE9F9B-A37B-4A36-9A5A-EAD7DE6FCF0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ECFE9F9B-A37B-4A36-9A5A-EAD7DE6FCF0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ECFE9F9B-A37B-4A36-9A5A-EAD7DE6FCF0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ECFE9F9B-A37B-4A36-9A5A-EAD7DE6FCF0D}.Release|Any CPU.Build.0 = Release|Any CPU + {C6CAD507-F441-4FA8-AE95-99086B5A245F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6CAD507-F441-4FA8-AE95-99086B5A245F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6CAD507-F441-4FA8-AE95-99086B5A245F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6CAD507-F441-4FA8-AE95-99086B5A245F}.Release|Any CPU.Build.0 = Release|Any CPU + {381824E8-40CE-475C-9035-9F36AD34EBB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {381824E8-40CE-475C-9035-9F36AD34EBB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {381824E8-40CE-475C-9035-9F36AD34EBB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {381824E8-40CE-475C-9035-9F36AD34EBB7}.Release|Any CPU.Build.0 = Release|Any CPU + {B3A97984-FC0A-4FBE-93D4-6CA7049252DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3A97984-FC0A-4FBE-93D4-6CA7049252DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3A97984-FC0A-4FBE-93D4-6CA7049252DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3A97984-FC0A-4FBE-93D4-6CA7049252DC}.Release|Any CPU.Build.0 = Release|Any CPU + {B01AE52C-EE01-4307-81D6-45DA76DB4CC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B01AE52C-EE01-4307-81D6-45DA76DB4CC9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B01AE52C-EE01-4307-81D6-45DA76DB4CC9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B01AE52C-EE01-4307-81D6-45DA76DB4CC9}.Release|Any CPU.Build.0 = Release|Any CPU + {D4B1705B-0932-4285-9039-938316C4A263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4B1705B-0932-4285-9039-938316C4A263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4B1705B-0932-4285-9039-938316C4A263}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4B1705B-0932-4285-9039-938316C4A263}.Release|Any CPU.Build.0 = Release|Any CPU + {C8BBC11A-7AA0-469A-8217-B0B0D1DEA463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8BBC11A-7AA0-469A-8217-B0B0D1DEA463}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8BBC11A-7AA0-469A-8217-B0B0D1DEA463}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8BBC11A-7AA0-469A-8217-B0B0D1DEA463}.Release|Any CPU.Build.0 = Release|Any CPU + {2F725AC6-8811-4239-A628-7E76EC0C30ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F725AC6-8811-4239-A628-7E76EC0C30ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F725AC6-8811-4239-A628-7E76EC0C30ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F725AC6-8811-4239-A628-7E76EC0C30ED}.Release|Any CPU.Build.0 = Release|Any CPU + {B18B9F04-76AB-4DA7-93E0-E9EC3E914F95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B18B9F04-76AB-4DA7-93E0-E9EC3E914F95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B18B9F04-76AB-4DA7-93E0-E9EC3E914F95}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B18B9F04-76AB-4DA7-93E0-E9EC3E914F95}.Release|Any CPU.Build.0 = Release|Any CPU + {B66BDE37-E98E-41F4-9A85-D69D394F78C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B66BDE37-E98E-41F4-9A85-D69D394F78C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B66BDE37-E98E-41F4-9A85-D69D394F78C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B66BDE37-E98E-41F4-9A85-D69D394F78C8}.Release|Any CPU.Build.0 = Release|Any CPU + {E9C71DEF-D0BC-4A64-9844-453BB7E5BCF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9C71DEF-D0BC-4A64-9844-453BB7E5BCF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9C71DEF-D0BC-4A64-9844-453BB7E5BCF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9C71DEF-D0BC-4A64-9844-453BB7E5BCF3}.Release|Any CPU.Build.0 = Release|Any CPU + {67FB1B92-0800-46AB-B086-FD6E6A2B4B3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67FB1B92-0800-46AB-B086-FD6E6A2B4B3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67FB1B92-0800-46AB-B086-FD6E6A2B4B3C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67FB1B92-0800-46AB-B086-FD6E6A2B4B3C}.Release|Any CPU.Build.0 = Release|Any CPU + {CF533815-EC96-4208-970B-5F0D63C2694A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF533815-EC96-4208-970B-5F0D63C2694A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF533815-EC96-4208-970B-5F0D63C2694A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF533815-EC96-4208-970B-5F0D63C2694A}.Release|Any CPU.Build.0 = Release|Any CPU + {8754CF22-3278-4189-8FAE-34DE7A4A56BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8754CF22-3278-4189-8FAE-34DE7A4A56BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8754CF22-3278-4189-8FAE-34DE7A4A56BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8754CF22-3278-4189-8FAE-34DE7A4A56BE}.Release|Any CPU.Build.0 = Release|Any CPU + {75D1E34E-C3AD-497E-B459-285F70E72385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75D1E34E-C3AD-497E-B459-285F70E72385}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75D1E34E-C3AD-497E-B459-285F70E72385}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75D1E34E-C3AD-497E-B459-285F70E72385}.Release|Any CPU.Build.0 = Release|Any CPU + {B7062D8B-55FD-4809-9E92-12C7E9777A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7062D8B-55FD-4809-9E92-12C7E9777A51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7062D8B-55FD-4809-9E92-12C7E9777A51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7062D8B-55FD-4809-9E92-12C7E9777A51}.Release|Any CPU.Build.0 = Release|Any CPU + {CB2411EB-768C-4371-AE5E-77CB5FB5A588}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB2411EB-768C-4371-AE5E-77CB5FB5A588}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB2411EB-768C-4371-AE5E-77CB5FB5A588}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB2411EB-768C-4371-AE5E-77CB5FB5A588}.Release|Any CPU.Build.0 = Release|Any CPU + {FC58EC9A-DCC5-4828-973F-C6564ECB0F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC58EC9A-DCC5-4828-973F-C6564ECB0F53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC58EC9A-DCC5-4828-973F-C6564ECB0F53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC58EC9A-DCC5-4828-973F-C6564ECB0F53}.Release|Any CPU.Build.0 = Release|Any CPU + {D3097AEA-43A8-442D-ACB6-0F4150D98730}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3097AEA-43A8-442D-ACB6-0F4150D98730}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3097AEA-43A8-442D-ACB6-0F4150D98730}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3097AEA-43A8-442D-ACB6-0F4150D98730}.Release|Any CPU.Build.0 = Release|Any CPU + {B324DFE7-A052-4097-9F52-A10F1C8A063A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B324DFE7-A052-4097-9F52-A10F1C8A063A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B324DFE7-A052-4097-9F52-A10F1C8A063A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B324DFE7-A052-4097-9F52-A10F1C8A063A}.Release|Any CPU.Build.0 = Release|Any CPU + {E1BFF82C-A797-45BF-B7E6-494D1210E2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1BFF82C-A797-45BF-B7E6-494D1210E2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1BFF82C-A797-45BF-B7E6-494D1210E2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1BFF82C-A797-45BF-B7E6-494D1210E2C6}.Release|Any CPU.Build.0 = Release|Any CPU + {F3A7CC13-E260-4523-9CD8-FF991A7134BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3A7CC13-E260-4523-9CD8-FF991A7134BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3A7CC13-E260-4523-9CD8-FF991A7134BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3A7CC13-E260-4523-9CD8-FF991A7134BF}.Release|Any CPU.Build.0 = Release|Any CPU + {19645C7B-A99D-4F62-846D-117620295002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19645C7B-A99D-4F62-846D-117620295002}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19645C7B-A99D-4F62-846D-117620295002}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19645C7B-A99D-4F62-846D-117620295002}.Release|Any CPU.Build.0 = Release|Any CPU + {84334F61-A77E-4F7B-A383-58D1D57DB6BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84334F61-A77E-4F7B-A383-58D1D57DB6BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84334F61-A77E-4F7B-A383-58D1D57DB6BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84334F61-A77E-4F7B-A383-58D1D57DB6BC}.Release|Any CPU.Build.0 = Release|Any CPU + {80A7D935-D0A4-4AA4-9162-C78C543C41F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80A7D935-D0A4-4AA4-9162-C78C543C41F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80A7D935-D0A4-4AA4-9162-C78C543C41F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80A7D935-D0A4-4AA4-9162-C78C543C41F3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -51,6 +335,50 @@ Global {6F476A56-25E8-4BDC-82D5-4EBA01D93765} = {FD09AA4B-FD90-4B88-8E74-77FBF96AFF07} {CF24C860-423A-4336-8D17-2276249BC945} = {CD0A594B-445E-41A0-8C91-1DE90923E66F} {B98E84E5-1E26-4722-9F6B-039CED7711C2} = {CD0A594B-445E-41A0-8C91-1DE90923E66F} + {3FE56E9D-7939-489C-B016-FF4681CBCA33} = {FFC73AB3-6596-4A29-8D38-12FE2CAF8BB8} + {6A162525-5CF6-4115-A530-CFED10FB8D2C} = {FFC73AB3-6596-4A29-8D38-12FE2CAF8BB8} + {81D9ED58-272A-4817-AF2E-509CCF8BAC89} = {6BC218FB-E6D3-4639-8EC8-02EDBF3E9FD0} + {07059CCE-D63C-411F-BDFF-14EFEAFDD954} = {6BC218FB-E6D3-4639-8EC8-02EDBF3E9FD0} + {F13003AE-04AD-4ADF-A6E7-74B333188491} = {D6D0962A-34F8-4255-BF71-4A2D097A5F18} + {512B8EF8-8CBE-4ACA-A706-C30711126C70} = {D6D0962A-34F8-4255-BF71-4A2D097A5F18} + {A60F2657-440E-44C5-BBA1-87BA8DCEEEBC} = {C2465ED1-BD6E-4560-AF06-3ABE9C981F17} + {800FE54A-FFDB-4E11-85C5-FDDFB6C9799B} = {C2465ED1-BD6E-4560-AF06-3ABE9C981F17} + {CD8C51C7-9E90-493F-B968-04BE02A61826} = {C1DBAF3D-5DC3-4897-9974-A82F385F433B} + {09B54B7D-444C-4538-9F96-824C8041121B} = {C1DBAF3D-5DC3-4897-9974-A82F385F433B} + {663F4A87-FCEC-4F62-AABA-3F32F3A2694A} = {897B5F9B-3850-4277-8D1D-C403201A6926} + {D1B631CE-0DA3-4B3C-BD84-006A6B8E8958} = {897B5F9B-3850-4277-8D1D-C403201A6926} + {978DCC52-98F4-40D0-ABEA-7D233096A2FB} = {83888083-D152-4803-86D0-1688D2704774} + {A6A57B2B-8BC7-4357-AE7F-2C48BE771EC5} = {83888083-D152-4803-86D0-1688D2704774} + {27EFDA3C-6DD1-4A74-9B66-F7C4C1F51280} = {FDA299D0-1E96-444A-8102-B097F31466F5} + {09A52864-57AB-4308-823E-155DE6D0A9EC} = {433DDF1D-F86A-492E-B448-4F299F56FACA} + {3C938DF0-ABC0-486A-B191-26BC61191AD2} = {433DDF1D-F86A-492E-B448-4F299F56FACA} + {02DB674A-EE32-4B45-A52D-89DE88D1BE3A} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {63381C66-B3E1-4C23-8348-267ECCEEBB8D} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {ECFE9F9B-A37B-4A36-9A5A-EAD7DE6FCF0D} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {C6CAD507-F441-4FA8-AE95-99086B5A245F} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {381824E8-40CE-475C-9035-9F36AD34EBB7} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {B3A97984-FC0A-4FBE-93D4-6CA7049252DC} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {B01AE52C-EE01-4307-81D6-45DA76DB4CC9} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {D4B1705B-0932-4285-9039-938316C4A263} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {C8BBC11A-7AA0-469A-8217-B0B0D1DEA463} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {2F725AC6-8811-4239-A628-7E76EC0C30ED} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {B18B9F04-76AB-4DA7-93E0-E9EC3E914F95} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {B66BDE37-E98E-41F4-9A85-D69D394F78C8} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {E9C71DEF-D0BC-4A64-9844-453BB7E5BCF3} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {67FB1B92-0800-46AB-B086-FD6E6A2B4B3C} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {CF533815-EC96-4208-970B-5F0D63C2694A} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {8754CF22-3278-4189-8FAE-34DE7A4A56BE} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {75D1E34E-C3AD-497E-B459-285F70E72385} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {B7062D8B-55FD-4809-9E92-12C7E9777A51} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {CB2411EB-768C-4371-AE5E-77CB5FB5A588} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {FC58EC9A-DCC5-4828-973F-C6564ECB0F53} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {D3097AEA-43A8-442D-ACB6-0F4150D98730} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {B324DFE7-A052-4097-9F52-A10F1C8A063A} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {E1BFF82C-A797-45BF-B7E6-494D1210E2C6} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {F3A7CC13-E260-4523-9CD8-FF991A7134BF} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {19645C7B-A99D-4F62-846D-117620295002} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {84334F61-A77E-4F7B-A383-58D1D57DB6BC} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} + {80A7D935-D0A4-4AA4-9162-C78C543C41F3} = {CFF4CF22-6CCF-41E6-8041-E3CC26ED27BA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {779069AC-1F9F-407F-92C7-28507D91D64E} From 96e8d89f2a004b942652ab67fef7c611eee1d107 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2020 22:21:42 +0000 Subject: [PATCH 08/46] [master] Update dependencies from dotnet/efcore (#22403) * Update dependencies from https://github.com/dotnet/efcore build 20200531.1 Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.SqlServer , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.InMemory From Version 5.0.0-preview.6.20279.1 -> To Version 5.0.0-preview.6.20281.1 * Update dependencies from https://github.com/dotnet/efcore build 20200601.2 Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.SqlServer , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.InMemory From Version 5.0.0-preview.6.20279.1 -> To Version 5.0.0-preview.6.20301.2 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 14 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index bb8cb03bb6..3561843ea7 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -13,33 +13,33 @@ https://github.com/dotnet/blazor cc449601d638ffaab58ae9487f0fd010bb178a12 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 - + https://github.com/dotnet/efcore - 0afeb9279ca72d0a5aa6738adf902fe6a30ba5c4 + c30bdb128c392634cc70e5b8191c77aa851c4ad8 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 8cf181bad7..e26f372496 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -131,13 +131,13 @@ 3.2.0 - 5.0.0-preview.6.20279.1 - 5.0.0-preview.6.20279.1 - 5.0.0-preview.6.20279.1 - 5.0.0-preview.6.20279.1 - 5.0.0-preview.6.20279.1 - 5.0.0-preview.6.20279.1 - 5.0.0-preview.6.20279.1 + 5.0.0-preview.6.20301.2 + 5.0.0-preview.6.20301.2 + 5.0.0-preview.6.20301.2 + 5.0.0-preview.6.20301.2 + 5.0.0-preview.6.20301.2 + 5.0.0-preview.6.20301.2 + 5.0.0-preview.6.20301.2 3.2.0 - 5.0.0-preview.6.20301.2 - 5.0.0-preview.6.20301.2 - 5.0.0-preview.6.20301.2 - 5.0.0-preview.6.20301.2 - 5.0.0-preview.6.20301.2 - 5.0.0-preview.6.20301.2 - 5.0.0-preview.6.20301.2 + 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20301.3 - - diff --git a/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj b/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj index f8e0099b04..2d1a5aab26 100644 --- a/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj +++ b/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj @@ -8,7 +8,6 @@ - diff --git a/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj b/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj index bcbc066c95..0d2fecc272 100644 --- a/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj +++ b/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj @@ -8,7 +8,6 @@ - diff --git a/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj b/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj index a37838a6bf..3b4f947e80 100644 --- a/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj +++ b/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj @@ -8,7 +8,6 @@ - diff --git a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj index 569804c90a..63fcb43fe7 100644 --- a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj +++ b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj @@ -27,7 +27,6 @@ - diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.FunctionalTest/Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj b/src/Security/Authentication/Negotiate/test/Negotiate.FunctionalTest/Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj index d0c7e5a9a2..085e3ddfd8 100644 --- a/src/Security/Authentication/Negotiate/test/Negotiate.FunctionalTest/Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj +++ b/src/Security/Authentication/Negotiate/test/Negotiate.FunctionalTest/Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj @@ -5,10 +5,6 @@ true - - - - diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.Test/Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj b/src/Security/Authentication/Negotiate/test/Negotiate.Test/Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj index 3f483fc9e1..40c623bd11 100644 --- a/src/Security/Authentication/Negotiate/test/Negotiate.Test/Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj +++ b/src/Security/Authentication/Negotiate/test/Negotiate.Test/Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj @@ -4,10 +4,6 @@ $(DefaultNetCoreTargetFramework) - - - - diff --git a/src/Security/Authentication/test/Microsoft.AspNetCore.Authentication.Test.csproj b/src/Security/Authentication/test/Microsoft.AspNetCore.Authentication.Test.csproj index 815d30e027..738515b336 100644 --- a/src/Security/Authentication/test/Microsoft.AspNetCore.Authentication.Test.csproj +++ b/src/Security/Authentication/test/Microsoft.AspNetCore.Authentication.Test.csproj @@ -33,10 +33,6 @@ - - - - diff --git a/src/Servers/IIS/IIS/test/FunctionalTest.props b/src/Servers/IIS/IIS/test/FunctionalTest.props index 8582115239..e701d2d021 100644 --- a/src/Servers/IIS/IIS/test/FunctionalTest.props +++ b/src/Servers/IIS/IIS/test/FunctionalTest.props @@ -5,8 +5,6 @@ - - diff --git a/src/Servers/Kestrel/Kestrel/test/Microsoft.AspNetCore.Server.Kestrel.Tests.csproj b/src/Servers/Kestrel/Kestrel/test/Microsoft.AspNetCore.Server.Kestrel.Tests.csproj index abf2fb6b3a..571f2cda30 100644 --- a/src/Servers/Kestrel/Kestrel/test/Microsoft.AspNetCore.Server.Kestrel.Tests.csproj +++ b/src/Servers/Kestrel/Kestrel/test/Microsoft.AspNetCore.Server.Kestrel.Tests.csproj @@ -7,7 +7,6 @@ - diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/InMemory.FunctionalTests.csproj b/src/Servers/Kestrel/test/InMemory.FunctionalTests/InMemory.FunctionalTests.csproj index cad32b08bd..952a0a9f50 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/InMemory.FunctionalTests.csproj +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/InMemory.FunctionalTests.csproj @@ -10,7 +10,6 @@ - @@ -27,4 +26,4 @@ - \ No newline at end of file + diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj b/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj index 9fff0431d9..555d7445a5 100644 --- a/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj +++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj @@ -17,7 +17,6 @@ - diff --git a/src/Servers/Kestrel/test/Libuv.BindTests/Libuv.BindTests.csproj b/src/Servers/Kestrel/test/Libuv.BindTests/Libuv.BindTests.csproj index 79752c12b2..29239ef61c 100644 --- a/src/Servers/Kestrel/test/Libuv.BindTests/Libuv.BindTests.csproj +++ b/src/Servers/Kestrel/test/Libuv.BindTests/Libuv.BindTests.csproj @@ -5,7 +5,7 @@ true Libuv.BindTests - Windows.10.Arm64;Windows.10.Arm64.Open + Windows.10.Arm64;Windows.10.Arm64.Open @@ -14,7 +14,6 @@ - diff --git a/src/Servers/Kestrel/test/Libuv.FunctionalTests/Libuv.FunctionalTests.csproj b/src/Servers/Kestrel/test/Libuv.FunctionalTests/Libuv.FunctionalTests.csproj index 65f62bd641..3358fcfdb9 100644 --- a/src/Servers/Kestrel/test/Libuv.FunctionalTests/Libuv.FunctionalTests.csproj +++ b/src/Servers/Kestrel/test/Libuv.FunctionalTests/Libuv.FunctionalTests.csproj @@ -14,7 +14,6 @@ - diff --git a/src/Servers/Kestrel/test/Sockets.BindTests/Sockets.BindTests.csproj b/src/Servers/Kestrel/test/Sockets.BindTests/Sockets.BindTests.csproj index 3ad3eb297a..0f7576c452 100644 --- a/src/Servers/Kestrel/test/Sockets.BindTests/Sockets.BindTests.csproj +++ b/src/Servers/Kestrel/test/Sockets.BindTests/Sockets.BindTests.csproj @@ -7,7 +7,6 @@ - diff --git a/src/Servers/Kestrel/test/Sockets.FunctionalTests/Sockets.FunctionalTests.csproj b/src/Servers/Kestrel/test/Sockets.FunctionalTests/Sockets.FunctionalTests.csproj index 4bc4f8fbdf..325b301e0b 100644 --- a/src/Servers/Kestrel/test/Sockets.FunctionalTests/Sockets.FunctionalTests.csproj +++ b/src/Servers/Kestrel/test/Sockets.FunctionalTests/Sockets.FunctionalTests.csproj @@ -10,7 +10,6 @@ - diff --git a/src/Shared/test/SkipOnHelixAttribute.cs b/src/Shared/test/SkipOnHelixAttribute.cs deleted file mode 100644 index e1a74467bc..0000000000 --- a/src/Shared/test/SkipOnHelixAttribute.cs +++ /dev/null @@ -1,50 +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; - -namespace Microsoft.AspNetCore.Testing.xunit -{ - /// - /// Skip test if running on helix (or a particular helix queue). - /// - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)] - public class SkipOnHelixAttribute : Attribute, ITestCondition - { - public SkipOnHelixAttribute(string issueUrl) - { - if (string.IsNullOrEmpty(issueUrl)) - { - throw new ArgumentException(); - } - IssueUrl = issueUrl; - } - - public string IssueUrl { get; } - - public bool IsMet - { - get - { - var skip = OnHelix() && (Queues == null || Queues.ToLowerInvariant().Split(";").Contains(GetTargetHelixQueue().ToLowerInvariant())); - return !skip; - } - } - - // Queues that should be skipped on, i.e. "Windows.10.Amd64.ClientRS4.VS2017.Open;OSX.1012.Amd64.Open" - public string Queues { get; set; } - - public string SkipReason - { - get - { - return $"This test is skipped on helix"; - } - } - - public static bool OnHelix() => !string.IsNullOrEmpty(GetTargetHelixQueue()); - - public static string GetTargetHelixQueue() => Environment.GetEnvironmentVariable("helix"); - } -} diff --git a/src/Shared/test/SuccessfulTests.cs b/src/Shared/test/SuccessfulTests.cs new file mode 100644 index 0000000000..9843582b17 --- /dev/null +++ b/src/Shared/test/SuccessfulTests.cs @@ -0,0 +1,39 @@ +// 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.Testing; +using Xunit; + +namespace AlwaysTestTests +{ + /// + /// Tests for every test assembly to ensure quarantined and unquarantined runs report at least one test execution. + /// + public class SuccessfulTests + { + /// + /// Test that executes in quarantined runs and always succeeds. + /// + [Fact] + [QuarantinedTest] + public void GuaranteedQuarantinedTest() + { + } + + /// + /// Test that executes in unquarantined runs and always succeeds. + /// + /// + /// applied to ensure test runs even if assembly is quarantined overall. + /// dotnet test --filter, dotnet vstest --testcasefilter, and + /// vstest.console.exe --testcasefilter handle the "no Quarantined=true trait OR Quarantined=false" case + /// e.g. "Quarantined!=true|Quarantined=false. But, xunit.console.exe doesn't have a syntax to + /// make it work (yet?). + /// + [Fact] + [Trait("Quarantined", "false")] + public void GuaranteedUnquarantinedTest() + { + } + } +} diff --git a/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj b/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj index dd470dbf37..c276d7d020 100644 --- a/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj +++ b/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj @@ -6,7 +6,6 @@ - diff --git a/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj b/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj index 288c651ed3..1d216328e8 100644 --- a/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj +++ b/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj @@ -12,7 +12,6 @@ - diff --git a/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj b/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj index 219f55d6f4..71ebe061da 100644 --- a/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj +++ b/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj @@ -9,7 +9,6 @@ - From d68ff6182ec3ab4d7dc702947b3c3050c3078f0d Mon Sep 17 00:00:00 2001 From: Ajay Bhargav B Date: Tue, 2 Jun 2020 12:21:44 -0700 Subject: [PATCH 14/46] Add IVT from Razor.Language to LanguageServerClient.Razor assembly (#22474) --- .../src/Properties/AssemblyInfo.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs index 1ca6548f16..5bac654632 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Properties/AssemblyInfo.cs @@ -15,6 +15,7 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Remote.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServerClient.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Mvc.Razor.Extensions.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] @@ -28,6 +29,7 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] +[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServerClient.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Performance, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] From 15015d51626a679d851de43a5de5eb7b67200ae4 Mon Sep 17 00:00:00 2001 From: Brennan Date: Tue, 2 Jun 2020 12:34:13 -0700 Subject: [PATCH 15/46] Remove temp SDK on Helix (#22475) --- eng/helix/content/runtests.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eng/helix/content/runtests.sh b/eng/helix/content/runtests.sh index 808ee8ac44..a1bf932706 100644 --- a/eng/helix/content/runtests.sh +++ b/eng/helix/content/runtests.sh @@ -92,4 +92,8 @@ echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10} exit_code=$? echo "Finished tests...exit_code=$exit_code" + +# dotnet-install.sh leaves the temporary SDK archive on the helix machine which slowly fills the disk, we'll be nice and clean it until the script fixes the issue +rm -r -f ${TMPDIR:-/tmp}/dotnet.* + exit $exit_code From b5e37866d5f71c062293cc7f9bb5af1034262d05 Mon Sep 17 00:00:00 2001 From: Brennan Date: Tue, 2 Jun 2020 13:01:54 -0700 Subject: [PATCH 16/46] Quarantine flaky tests (#22450) --- .../test/IntegrationTests/StaticWebAssetsIntegrationTest.cs | 1 + src/Servers/Kestrel/test/FunctionalTests/RequestTests.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/StaticWebAssetsIntegrationTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/StaticWebAssetsIntegrationTest.cs index 37ac8ef8ec..ae994bc0cf 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/StaticWebAssetsIntegrationTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/StaticWebAssetsIntegrationTest.cs @@ -105,6 +105,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests } [Fact] + [QuarantinedTest] [InitializeTestProject("AppWithPackageAndP2PReference", additionalProjects: new[] { "ClassLibrary", "ClassLibrary2" })] public async Task Publish_WithBuildReferencesDisabled_CopiesStaticWebAssetsToDestinationFolder() { diff --git a/src/Servers/Kestrel/test/FunctionalTests/RequestTests.cs b/src/Servers/Kestrel/test/FunctionalTests/RequestTests.cs index 11495cbe03..717ca3f688 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/RequestTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/RequestTests.cs @@ -499,6 +499,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } [Theory] + [QuarantinedTest] [MemberData(nameof(ConnectionMiddlewareData))] public async Task ConnectionClosedTokenFiresOnClientFIN(ListenOptions listenOptions) { From 7af5e5d25a8c442051adfcfbdd3df399ccf67c77 Mon Sep 17 00:00:00 2001 From: Brennan Date: Tue, 2 Jun 2020 13:02:26 -0700 Subject: [PATCH 17/46] Move all quarantined tests to the aspnetcore-quarantined-tests pipeline (#22445) --- .azure/pipelines/ci.yml | 38 ------- .azure/pipelines/quarantined-tests.yml | 104 +++++++++++++++++- .../BlazorWasmTemplateTest.cs | 23 +++- 3 files changed, 118 insertions(+), 47 deletions(-) diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 0bd64368b0..5226c46c48 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -503,16 +503,6 @@ stages: beforeBuild: - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" displayName: Setup IISExpress test certificates and schema - afterBuild: - - powershell: "& ./build.ps1 -CI -nobl -NoBuild -Test /p:RunQuarantinedTests=true" - displayName: Run Quarantined Tests - continueOnError: true - - task: PublishTestResults@2 - displayName: Publish Quarantined Test Results - inputs: - testResultsFormat: 'xUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined' artifacts: - name: Windows_Test_Dumps path: artifacts/dumps/ @@ -566,20 +556,6 @@ stages: beforeBuild: - bash: "./eng/scripts/install-nginx-mac.sh" displayName: Installing Nginx - afterBuild: - - bash: ./build.sh --ci --nobl --pack --no-build --no-restore --no-build-deps - displayName: Pack Packages (for Template tests) - - bash: ./src/ProjectTemplates/build.sh --ci --nobl --pack --no-restore --no-build-deps - displayName: Pack Templates (for Template tests) - - bash: ./build.sh --no-build --ci --nobl --test -p:RunQuarantinedTests=true - displayName: Run Quarantined Tests - continueOnError: true - - task: PublishTestResults@2 - displayName: Publish Quarantined Test Results - inputs: - testResultsFormat: 'xUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined' artifacts: - name: MacOS_Test_Logs path: artifacts/log/ @@ -604,20 +580,6 @@ stages: displayName: Installing Nginx - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p" displayName: Increase inotify limit - afterBuild: - - bash: ./build.sh --ci --nobl --pack --no-build --no-restore --no-build-deps - displayName: Pack Packages (for Template tests) - - bash: ./src/ProjectTemplates/build.sh --ci --nobl --pack --no-restore --no-build-deps - displayName: Pack Templates (for Template tests) - - bash: ./build.sh --no-build --ci --nobl --test -p:RunQuarantinedTests=true - displayName: Run Quarantined Tests - continueOnError: true - - task: PublishTestResults@2 - displayName: Publish Quarantined Test Results - inputs: - testResultsFormat: 'xUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined' artifacts: - name: Linux_Test_Logs path: artifacts/log/ diff --git a/.azure/pipelines/quarantined-tests.yml b/.azure/pipelines/quarantined-tests.yml index 355c94268f..a50d61ebc6 100644 --- a/.azure/pipelines/quarantined-tests.yml +++ b/.azure/pipelines/quarantined-tests.yml @@ -25,10 +25,10 @@ variables: jobs: - template: jobs/default-build.yml parameters: - jobName: Helix_quarantine_x64 - jobDisplayName: 'Tests: Helix Quarantine x64' + jobName: Helix_quarantined_x64 + jobDisplayName: 'Tests: Helix' agentOs: Windows - timeoutInMinutes: 240 + timeoutInMinutes: 180 steps: # Build the shared framework - script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log @@ -46,3 +46,101 @@ jobs: - name: Helix_logs path: artifacts/log/ publishOnError: true + +- template: jobs/default-build.yml + parameters: + jobName: Windows_Quarantined_x64 + jobDisplayName: 'Tests: Windows x64' + agentOs: Windows + timeoutInMinutes: 180 + isTestingJob: true + steps: + - powershell: "& ./build.ps1 -CI -nobl -all -pack -NoBuildJava" + displayName: Build + # The templates part can be removed when the Blazor Templates run on Helix + - script: ./src/ProjectTemplates/build.cmd -ci -nobl -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true" + displayName: Pack Templates + - script: ./build.cmd -ci -nobl -test -NoRestore -NoBuild -NoBuilddeps "/p:RunTemplateTests=true /p:RunQuarantinedTests=true /p:SkipHelixReadyTests=true" + displayName: Run Quarantined Tests + condition: always() + - task: PublishTestResults@2 + displayName: Publish Quarantined Test Results + inputs: + testResultsFormat: 'xUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined' + condition: always() + artifacts: + - name: Windows_Quarantined_Test_Logs + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Windows_Quarantined_Test_Results + path: artifacts/TestResults/ + publishOnError: true + includeForks: true + +- template: jobs/default-build.yml + parameters: + jobName: MacOS_Quarantined_Test + jobDisplayName: "Tests: macOS 10.14" + agentOs: macOS + timeoutInMinutes: 180 + isTestingJob: true + steps: + - bash: ./build.sh --all --pack --ci --nobl --no-build-java + displayName: Build + # The templates part can be removed when the Blazor Templates run on Helix + - bash: ./src/ProjectTemplates/build.sh --ci --nobl --pack --no-restore --no-build-deps + displayName: Pack Templates (for Template tests) + - bash: ./build.sh --no-build --ci --nobl --test -p:RunTemplateTests=true -p:RunQuarantinedTests=true -p:SkipHelixReadyTests=true + displayName: Run Quarantined Tests + - task: PublishTestResults@2 + displayName: Publish Quarantined Test Results + inputs: + testResultsFormat: 'xUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined' + condition: always() + artifacts: + - name: MacOS_Quarantined_Test_Logs + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: MacOS_Quarantined_Test_Results + path: artifacts/TestResults/ + publishOnError: true + includeForks: true + +- template: jobs/default-build.yml + parameters: + jobName: Linux_Quarantined_Test + jobDisplayName: "Tests: Ubuntu 16.04 x64" + agentOs: Linux + timeoutInMinutes: 180 + isTestingJob: true + useHostedUbuntu: false + steps: + - bash: ./build.sh --all --pack --ci --nobl --no-build-java + displayName: Build + # The templates part can be removed when the Blazor Templates run on Helix + - bash: ./src/ProjectTemplates/build.sh --ci --nobl --pack --no-restore --no-build-deps + displayName: Pack Templates (for Template tests) + - bash: ./build.sh --no-build --ci --nobl --test -p:RunTemplateTests=true -p:RunQuarantinedTests=true -p:SkipHelixReadyTests=true + displayName: Run Quarantined Tests + - task: PublishTestResults@2 + displayName: Publish Quarantined Test Results + inputs: + testResultsFormat: 'xUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/Quarantined' + condition: always() + artifacts: + - name: Linux_Quarantined_Test_Logs + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_Quarantined_Test_Results + path: artifacts/TestResults/ + publishOnError: true + includeForks: true \ No newline at end of file diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs index b822df15d3..9050f00b15 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs @@ -250,10 +250,21 @@ namespace Templates.Test TestBasicNavigation(project.ProjectName, skipFetchData: skipFetchData); } - [Theory] - [InlineData(true)] - [InlineData(false)] - public async Task BlazorWasmHostedTemplate_IndividualAuth_Works(bool useLocalDb) + [ConditionalFact] + // LocalDB doesn't work on non Windows platforms + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithLocalDB() + { + return BlazorWasmHostedTemplate_IndividualAuth_Works(true); + } + + [Fact] + public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithOutLocalDB() + { + return BlazorWasmHostedTemplate_IndividualAuth_Works(false); + } + + private async Task BlazorWasmHostedTemplate_IndividualAuth_Works(bool useLocalDb) { var project = await ProjectFactory.GetOrCreateProject("blazorhostedindividual" + (useLocalDb ? "uld" : ""), Output); @@ -268,11 +279,11 @@ namespace Templates.Test Assert.Contains(".db", serverProjectFileContents); } - var appSettings = ReadFile(serverProject.TemplateOutputDir, "appSettings.json"); + var appSettings = ReadFile(serverProject.TemplateOutputDir, "appsettings.json"); var element = JsonSerializer.Deserialize(appSettings); var clientsProperty = element.GetProperty("IdentityServer").EnumerateObject().Single().Value.EnumerateObject().Single(); var replacedSection = element.GetRawText().Replace(clientsProperty.Name, serverProject.ProjectName.Replace(".Server", ".Client")); - var appSettingsPath = Path.Combine(serverProject.TemplateOutputDir, "appSettings.json"); + var appSettingsPath = Path.Combine(serverProject.TemplateOutputDir, "appsettings.json"); File.WriteAllText(appSettingsPath, replacedSection); var publishResult = await serverProject.RunDotNetPublishAsync(); From 7de516e7500437189f52e65b4b8fb1e5d1a23ab3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2020 21:47:53 +0000 Subject: [PATCH 18/46] [master] Update dependencies from dotnet/runtime (#22387) * Update dependencies from https://github.com/dotnet/runtime build 20200529.7 System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Drawing.Common , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Http , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.Platforms , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.IO.Pipelines , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.ServiceProcess.ServiceController , System.Security.Principal.Windows , System.Security.Permissions , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml From Version 5.0.0-preview.6.20278.9 -> To Version 5.0.0-preview.6.20279.7 * Update dependencies from https://github.com/dotnet/runtime build 20200530.5 System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Http , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.Platforms , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.Drawing.Common , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.ServiceProcess.ServiceController , System.Security.Permissions , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Principal.Windows From Version 5.0.0-preview.6.20278.9 -> To Version 5.0.0-preview.6.20280.5 * Update dependencies from https://github.com/dotnet/runtime build 20200531.6 System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Http , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.Platforms , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.Drawing.Common , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.ServiceProcess.ServiceController , System.Security.Permissions , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Principal.Windows From Version 5.0.0-preview.6.20278.9 -> To Version 5.0.0-preview.6.20281.6 * Fixup test * Update dependencies from https://github.com/dotnet/runtime build 20200602.1 System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Logging , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Http , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Hosting , Microsoft.Extensions.Configuration.Json , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.Platforms , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.Drawing.Common , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.ServiceProcess.ServiceController , System.Security.Principal.Windows , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions From Version 5.0.0-preview.6.20278.9 -> To Version 5.0.0-preview.7.20302.1 * React to ReferenceHandling rename Co-authored-by: dotnet-maestro[bot] Co-authored-by: Pranav K --- eng/Version.Details.xml | 244 +++++++++--------- eng/Versions.props | 122 ++++----- .../test/RuntimeDependenciesResolverTest.cs | 11 + .../SystemTextJsonOutputFormatterTest.cs | 2 +- 4 files changed, 195 insertions(+), 184 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 603fdc4dd3..1fe5dae12f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -41,256 +41,256 @@ https://github.com/dotnet/efcore 888ebd504b96567728b01c05c1659e495ae090c6 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 - + https://github.com/dotnet/runtime - 567a7a2bb62e180ddb224ba820297e48b1879df1 + 3f776fb77c58df952636eed3722f67cbbf627070 https://github.com/dotnet/arcade diff --git a/eng/Versions.props b/eng/Versions.props index 808698445a..2b0965b1d7 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -66,68 +66,68 @@ 3.7.0-3.20271.4 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 - 5.0.0-preview.6.20278.9 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20302.1 - 5.0.0-preview.6.20278.9 + 5.0.0-preview.7.20302.1 3.2.0 diff --git a/src/Components/WebAssembly/Build/test/RuntimeDependenciesResolverTest.cs b/src/Components/WebAssembly/Build/test/RuntimeDependenciesResolverTest.cs index a4c802e321..424800f75a 100644 --- a/src/Components/WebAssembly/Build/test/RuntimeDependenciesResolverTest.cs +++ b/src/Components/WebAssembly/Build/test/RuntimeDependenciesResolverTest.cs @@ -69,12 +69,17 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build "StandaloneApp.dll", "System.dll", "System.Buffers.dll", + "System.Collections.Concurrent.dll", + "System.Collections.dll", "System.ComponentModel.Annotations.dll", "System.ComponentModel.DataAnnotations.dll", "System.ComponentModel.Composition.dll", "System.Core.dll", "System.Data.dll", "System.Data.DataSetExtensions.dll", + "System.Diagnostics.Debug.dll", + "System.Diagnostics.DiagnosticSource.dll", + "System.Diagnostics.Tracing.dll", "System.Drawing.Common.dll", "System.IO.Compression.dll", "System.IO.Compression.FileSystem.dll", @@ -84,11 +89,17 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build "System.Net.Http.WebAssemblyHttpHandler.dll", "System.Numerics.dll", "System.Numerics.Vectors.dll", + "System.Reflection.dll", + "System.Resources.ResourceManager.dll", + "System.Runtime.Extensions.dll", + "System.Runtime.InteropServices.dll", "System.Runtime.CompilerServices.Unsafe.dll", "System.Runtime.Serialization.dll", + "System.Runtime.dll", "System.ServiceModel.Internals.dll", "System.Text.Encodings.Web.dll", "System.Text.Json.dll", + "System.Threading.dll", "System.Threading.Tasks.Extensions.dll", "System.Transactions.dll", "System.Xml.dll", diff --git a/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs b/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs index 7687845593..35ab869d9b 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters { // Arrange var formatter = GetOutputFormatter(); - ((SystemTextJsonOutputFormatter)formatter).SerializerOptions.ReferenceHandling = ReferenceHandling.Preserve; + ((SystemTextJsonOutputFormatter)formatter).SerializerOptions.ReferenceHandler = ReferenceHandler.Preserve; var expectedContent = "{\"$id\":\"1\",\"name\":\"Person\",\"child\":{\"$id\":\"2\",\"name\":\"Child\",\"child\":null,\"parent\":{\"$ref\":\"1\"}},\"parent\":null}"; var person = new Person { From 8009350176386b6caefbcc5a9926f177d51d3f52 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Wed, 3 Jun 2020 10:11:06 +1200 Subject: [PATCH 19/46] Log message when connection reaches maximum concurrent streams (#22452) --- .../src/Internal/Http2/Http2Connection.cs | 8 ++++++- .../Internal/Infrastructure/IKestrelTrace.cs | 2 ++ .../Internal/Infrastructure/KestrelTrace.cs | 9 ++++++++ .../Kestrel.Performance/Mocks/MockTrace.cs | 1 + .../shared/test/CompositeKestrelTrace.cs | 6 +++++ .../Http2/Http2ConnectionTests.cs | 22 +++++++++++++++++++ 6 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs index cfbc209af2..fc97e00068 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs @@ -971,7 +971,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 throw new Http2StreamErrorException(_currentHeadersStream.StreamId, CoreStrings.Http2ErrorMissingMandatoryPseudoHeaderFields, Http2ErrorCode.PROTOCOL_ERROR); } - if (_clientActiveStreamCount > _serverSettings.MaxConcurrentStreams) + if (_clientActiveStreamCount == _serverSettings.MaxConcurrentStreams) + { + // Provide feedback in server logs that the client hit the number of maximum concurrent streams, + // and that the client is likely waiting for existing streams to be completed before it can continue. + Log.Http2MaxConcurrentStreamsReached(_context.ConnectionId); + } + else if (_clientActiveStreamCount > _serverSettings.MaxConcurrentStreams) { // The protocol default stream limit is infinite so the client can exceed our limit at the start of the connection. // Refused streams can be retried, by which time the client must have received our settings frame with our limit information. diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/IKestrelTrace.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/IKestrelTrace.cs index 54a8392fae..72442fa962 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/IKestrelTrace.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/IKestrelTrace.cs @@ -74,5 +74,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure void Http2FrameReceived(string connectionId, Http2Frame frame); void Http2FrameSending(string connectionId, Http2Frame frame); + + void Http2MaxConcurrentStreamsReached(string connectionId); } } diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelTrace.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelTrace.cs index 6edaf7b599..5a85007aab 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelTrace.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelTrace.cs @@ -113,6 +113,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure private static readonly Action _connectionAccepted = LoggerMessage.Define(LogLevel.Debug, new EventId(39, nameof(ConnectionAccepted)), @"Connection id ""{ConnectionId}"" accepted."); + private static readonly Action _http2MaxConcurrentStreamsReached = + LoggerMessage.Define(LogLevel.Debug, new EventId(40, nameof(Http2MaxConcurrentStreamsReached)), + @"Connection id ""{ConnectionId}"" reached the maximum number of concurrent HTTP/2 streams allowed."); + protected readonly ILogger _logger; public KestrelTrace(ILogger logger) @@ -286,6 +290,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure } } + public void Http2MaxConcurrentStreamsReached(string connectionId) + { + _http2MaxConcurrentStreamsReached(_logger, connectionId, null); + } + public virtual void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) => _logger.Log(logLevel, eventId, state, exception, formatter); diff --git a/src/Servers/Kestrel/perf/Kestrel.Performance/Mocks/MockTrace.cs b/src/Servers/Kestrel/perf/Kestrel.Performance/Mocks/MockTrace.cs index 76a5c9443d..a8e1b76a9b 100644 --- a/src/Servers/Kestrel/perf/Kestrel.Performance/Mocks/MockTrace.cs +++ b/src/Servers/Kestrel/perf/Kestrel.Performance/Mocks/MockTrace.cs @@ -55,5 +55,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance public void Http2ConnectionClosed(string connectionId, int highestOpenedStreamId) { } public void Http2FrameReceived(string connectionId, Http2Frame frame) { } public void Http2FrameSending(string connectionId, Http2Frame frame) { } + public void Http2MaxConcurrentStreamsReached(string connectionId) { } } } diff --git a/src/Servers/Kestrel/shared/test/CompositeKestrelTrace.cs b/src/Servers/Kestrel/shared/test/CompositeKestrelTrace.cs index 363da59c9d..f22ebc810b 100644 --- a/src/Servers/Kestrel/shared/test/CompositeKestrelTrace.cs +++ b/src/Servers/Kestrel/shared/test/CompositeKestrelTrace.cs @@ -229,5 +229,11 @@ namespace Microsoft.AspNetCore.Testing _trace1.Http2FrameSending(connectionId, frame); _trace2.Http2FrameSending(connectionId, frame); } + + public void Http2MaxConcurrentStreamsReached(string connectionId) + { + _trace1.Http2MaxConcurrentStreamsReached(connectionId); + _trace2.Http2MaxConcurrentStreamsReached(connectionId); + } } } diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs index 452ad4bb90..2517a55b15 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs @@ -28,6 +28,28 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests { public class Http2ConnectionTests : Http2TestBase { + [Fact] + public async Task MaxConcurrentStreamsLogging_ReachLimit_MessageLogged() + { + await InitializeConnectionAsync(_echoApplication); + + _connection.ServerSettings.MaxConcurrentStreams = 2; + + await StartStreamAsync(1, _browserRequestHeaders, endStream: false); + Assert.Equal(0, TestApplicationErrorLogger.Messages.Count(m => m.EventId.Name == "Http2MaxConcurrentStreamsReached")); + + // Log message because we've reached the stream limit + await StartStreamAsync(3, _browserRequestHeaders, endStream: false); + Assert.Equal(1, TestApplicationErrorLogger.Messages.Count(m => m.EventId.Name == "Http2MaxConcurrentStreamsReached")); + + // This stream will error because it exceeds max concurrent streams + await StartStreamAsync(5, _browserRequestHeaders, endStream: true); + await WaitForStreamErrorAsync(5, Http2ErrorCode.REFUSED_STREAM, CoreStrings.Http2ErrorMaxStreams); + Assert.Equal(1, TestApplicationErrorLogger.Messages.Count(m => m.EventId.Name == "Http2MaxConcurrentStreamsReached")); + + await StopConnectionAsync(expectedLastStreamId: 5, ignoreNonGoAwayFrames: false); + } + [Fact] public async Task FlowControl_NoAvailability_ResponseHeadersStillFlushed() { From faf60675fe721805fa0da7780e35c0802494629d Mon Sep 17 00:00:00 2001 From: Pranav K Date: Tue, 2 Jun 2020 16:27:54 -0700 Subject: [PATCH 20/46] Add nullability to HtmlAbstractions (#22275) Addresses #5680 --- ...rosoft.AspNetCore.Html.Abstractions.csproj | 1 + ...AspNetCore.Html.Abstractions.netcoreapp.cs | 13 +++++---- .../Abstractions/src/HtmlContentBuilder.cs | 28 ++++++++----------- .../Abstractions/src/HtmlFormattableString.cs | 14 +++++----- src/Html/Abstractions/src/HtmlString.cs | 4 +-- ...rosoft.AspNetCore.Html.Abstractions.csproj | 3 +- .../test/HtmlContentBuilderTest.cs | 6 ++-- ....AspNetCore.Html.Abstractions.Tests.csproj | 1 + 8 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.csproj b/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.csproj index e27f9b2415..2b1b278a3f 100644 --- a/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.csproj +++ b/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.csproj @@ -2,6 +2,7 @@ $(DefaultNetCoreTargetFramework) + annotations diff --git a/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.netcoreapp.cs b/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.netcoreapp.cs index 206b2611d1..389c89c233 100644 --- a/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.netcoreapp.cs +++ b/src/Html/Abstractions/ref/Microsoft.AspNetCore.Html.Abstractions.netcoreapp.cs @@ -3,15 +3,16 @@ namespace Microsoft.AspNetCore.Html { + [System.Diagnostics.DebuggerDisplayAttribute("{DebuggerToString()}")] public partial class HtmlContentBuilder : Microsoft.AspNetCore.Html.IHtmlContent, Microsoft.AspNetCore.Html.IHtmlContentBuilder, Microsoft.AspNetCore.Html.IHtmlContentContainer { public HtmlContentBuilder() { } public HtmlContentBuilder(System.Collections.Generic.IList entries) { } public HtmlContentBuilder(int capacity) { } public int Count { get { throw null; } } - public Microsoft.AspNetCore.Html.IHtmlContentBuilder Append(string unencoded) { throw null; } - public Microsoft.AspNetCore.Html.IHtmlContentBuilder AppendHtml(Microsoft.AspNetCore.Html.IHtmlContent htmlContent) { throw null; } - public Microsoft.AspNetCore.Html.IHtmlContentBuilder AppendHtml(string encoded) { throw null; } + public Microsoft.AspNetCore.Html.IHtmlContentBuilder Append(string? unencoded) { throw null; } + public Microsoft.AspNetCore.Html.IHtmlContentBuilder AppendHtml(Microsoft.AspNetCore.Html.IHtmlContent? htmlContent) { throw null; } + public Microsoft.AspNetCore.Html.IHtmlContentBuilder AppendHtml(string? encoded) { throw null; } public Microsoft.AspNetCore.Html.IHtmlContentBuilder Clear() { throw null; } public void CopyTo(Microsoft.AspNetCore.Html.IHtmlContentBuilder destination) { } public void MoveTo(Microsoft.AspNetCore.Html.IHtmlContentBuilder destination) { } @@ -32,7 +33,7 @@ namespace Microsoft.AspNetCore.Html [System.Diagnostics.DebuggerDisplayAttribute("{DebuggerToString()}")] public partial class HtmlFormattableString : Microsoft.AspNetCore.Html.IHtmlContent { - public HtmlFormattableString(System.IFormatProvider formatProvider, string format, params object[] args) { } + public HtmlFormattableString(System.IFormatProvider? formatProvider, string format, params object[] args) { } public HtmlFormattableString(string format, params object[] args) { } public void WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) { } } @@ -40,8 +41,8 @@ namespace Microsoft.AspNetCore.Html { public static readonly Microsoft.AspNetCore.Html.HtmlString Empty; public static readonly Microsoft.AspNetCore.Html.HtmlString NewLine; - public HtmlString(string value) { } - public string Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } + public HtmlString(string? value) { } + public string? Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } public override string ToString() { throw null; } public void WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) { } } diff --git a/src/Html/Abstractions/src/HtmlContentBuilder.cs b/src/Html/Abstractions/src/HtmlContentBuilder.cs index e61d9f7dc8..626dfcea98 100644 --- a/src/Html/Abstractions/src/HtmlContentBuilder.cs +++ b/src/Html/Abstractions/src/HtmlContentBuilder.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Text.Encodings.Web; @@ -11,6 +12,7 @@ namespace Microsoft.AspNetCore.Html /// /// An implementation using an in memory list. /// + [DebuggerDisplay("{DebuggerToString()}")] public class HtmlContentBuilder : IHtmlContentBuilder { /// @@ -61,7 +63,7 @@ namespace Microsoft.AspNetCore.Html internal IList Entries { get; } /// - public IHtmlContentBuilder Append(string unencoded) + public IHtmlContentBuilder Append(string? unencoded) { if (!string.IsNullOrEmpty(unencoded)) { @@ -72,7 +74,7 @@ namespace Microsoft.AspNetCore.Html } /// - public IHtmlContentBuilder AppendHtml(IHtmlContent htmlContent) + public IHtmlContentBuilder AppendHtml(IHtmlContent? htmlContent) { if (htmlContent == null) { @@ -84,7 +86,7 @@ namespace Microsoft.AspNetCore.Html } /// - public IHtmlContentBuilder AppendHtml(string encoded) + public IHtmlContentBuilder AppendHtml(string? encoded) { if (!string.IsNullOrEmpty(encoded)) { @@ -113,13 +115,11 @@ namespace Microsoft.AspNetCore.Html { var entry = Entries[i]; - string entryAsString; - IHtmlContentContainer entryAsContainer; - if ((entryAsString = entry as string) != null) + if (entry is string entryAsString) { destination.Append(entryAsString); } - else if ((entryAsContainer = entry as IHtmlContentContainer) != null) + else if (entry is IHtmlContentContainer entryAsContainer) { // Since we're copying, do a deep flatten. entryAsContainer.CopyTo(destination); @@ -144,13 +144,11 @@ namespace Microsoft.AspNetCore.Html { var entry = Entries[i]; - string entryAsString; - IHtmlContentContainer entryAsContainer; - if ((entryAsString = entry as string) != null) + if (entry is string entryAsString) { destination.Append(entryAsString); } - else if ((entryAsContainer = entry as IHtmlContentContainer) != null) + else if (entry is IHtmlContentContainer entryAsContainer) { // Since we're moving, do a deep flatten. entryAsContainer.MoveTo(destination); @@ -197,11 +195,9 @@ namespace Microsoft.AspNetCore.Html private string DebuggerToString() { - using (var writer = new StringWriter()) - { - WriteTo(writer, HtmlEncoder.Default); - return writer.ToString(); - } + using var writer = new StringWriter(); + WriteTo(writer, HtmlEncoder.Default); + return writer.ToString(); } } } diff --git a/src/Html/Abstractions/src/HtmlFormattableString.cs b/src/Html/Abstractions/src/HtmlFormattableString.cs index 24bc7c5e2f..f69c976863 100644 --- a/src/Html/Abstractions/src/HtmlFormattableString.cs +++ b/src/Html/Abstractions/src/HtmlFormattableString.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; @@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Html /// An object that provides culture-specific formatting information. /// A composite format string. /// An array that contains objects to format. - public HtmlFormattableString(IFormatProvider formatProvider, string format, params object[] args) + public HtmlFormattableString(IFormatProvider? formatProvider, string format, params object[] args) { if (format == null) { @@ -94,7 +94,7 @@ namespace Microsoft.AspNetCore.Html private readonly HtmlEncoder _encoder; private readonly IFormatProvider _formatProvider; - private StringWriter _writer; + private StringWriter? _writer; public EncodingFormatProvider(IFormatProvider formatProvider, HtmlEncoder encoder) { @@ -105,7 +105,7 @@ namespace Microsoft.AspNetCore.Html _encoder = encoder; } - public string Format(string format, object arg, IFormatProvider formatProvider) + public string Format(string? format, object? arg, IFormatProvider? formatProvider) { // These are the cases we need to special case. We trust the HtmlString or IHtmlContent instance // to do the right thing with encoding. @@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Html var htmlContent = arg as IHtmlContent; if (htmlContent != null) { - _writer = _writer ?? new StringWriter(); + _writer ??= new StringWriter(); htmlContent.WriteTo(_writer, _encoder); @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Html // // First check for an ICustomFormatter - if the IFormatProvider is a CultureInfo, then it's likely // that ICustomFormatter will be null. - var customFormatter = (ICustomFormatter)_formatProvider.GetFormat(typeof(ICustomFormatter)); + var customFormatter = (ICustomFormatter?)_formatProvider.GetFormat(typeof(ICustomFormatter)); if (customFormatter != null) { var result = customFormatter.Format(format, arg, _formatProvider); @@ -170,7 +170,7 @@ namespace Microsoft.AspNetCore.Html return string.Empty; } - public object GetFormat(Type formatType) + public object? GetFormat(Type? formatType) { if (formatType == typeof(ICustomFormatter)) { diff --git a/src/Html/Abstractions/src/HtmlString.cs b/src/Html/Abstractions/src/HtmlString.cs index e7a516bd04..888ba44973 100644 --- a/src/Html/Abstractions/src/HtmlString.cs +++ b/src/Html/Abstractions/src/HtmlString.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Html /// Creates a new . /// /// The HTML encoded value. - public HtmlString(string value) + public HtmlString(string? value) { Value = value; } @@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Html /// /// Gets the HTML encoded value. /// - public string Value { get; } + public string? Value { get; } /// public void WriteTo(TextWriter writer, HtmlEncoder encoder) diff --git a/src/Html/Abstractions/src/Microsoft.AspNetCore.Html.Abstractions.csproj b/src/Html/Abstractions/src/Microsoft.AspNetCore.Html.Abstractions.csproj index 0fce64a89d..9f3710febf 100644 --- a/src/Html/Abstractions/src/Microsoft.AspNetCore.Html.Abstractions.csproj +++ b/src/Html/Abstractions/src/Microsoft.AspNetCore.Html.Abstractions.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core HTML abstractions used for building HTML content. @@ -11,6 +11,7 @@ Microsoft.AspNetCore.Html.IHtmlContent true aspnetcore false + enable diff --git a/src/Html/Abstractions/test/HtmlContentBuilderTest.cs b/src/Html/Abstractions/test/HtmlContentBuilderTest.cs index c3cb7d1954..22823375dc 100644 --- a/src/Html/Abstractions/test/HtmlContentBuilderTest.cs +++ b/src/Html/Abstractions/test/HtmlContentBuilderTest.cs @@ -256,7 +256,7 @@ namespace Microsoft.Extensions.Internal return _content.GetHashCode(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { var other = obj as TestHtmlContent; if (other != null) @@ -267,9 +267,9 @@ namespace Microsoft.Extensions.Internal return base.Equals(obj); } - public bool Equals(TestHtmlContent other) + public bool Equals(TestHtmlContent? other) { - return string.Equals(_content, other._content); + return other != null && string.Equals(_content, other._content); } } } diff --git a/src/Html/Abstractions/test/Microsoft.AspNetCore.Html.Abstractions.Tests.csproj b/src/Html/Abstractions/test/Microsoft.AspNetCore.Html.Abstractions.Tests.csproj index 849d9f5bf1..0c9196c21f 100644 --- a/src/Html/Abstractions/test/Microsoft.AspNetCore.Html.Abstractions.Tests.csproj +++ b/src/Html/Abstractions/test/Microsoft.AspNetCore.Html.Abstractions.Tests.csproj @@ -2,6 +2,7 @@ $(DefaultNetCoreTargetFramework) + enable From bdc051a08aa9f852e77407e8349cee8d8d9deb97 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Tue, 2 Jun 2020 17:06:57 -0700 Subject: [PATCH 21/46] Clarify summary for ValidateSecurityStamp (#22483) --- src/Identity/Core/src/SignInManager.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Identity/Core/src/SignInManager.cs b/src/Identity/Core/src/SignInManager.cs index e54c0f6155..5aa7aad531 100644 --- a/src/Identity/Core/src/SignInManager.cs +++ b/src/Identity/Core/src/SignInManager.cs @@ -296,12 +296,12 @@ namespace Microsoft.AspNetCore.Identity } /// - /// Validates the security stamp for the specified . Will always return false - /// if the userManager does not support security stamps. + /// Validates the security stamp for the specified . If no user is specified, or if the store + /// does not support security stamps, validation is considered successful. /// /// The user whose stamp should be validated. /// The expected security stamp value. - /// True if the stamp matches the persisted value, otherwise it will return false. + /// The result of the validation. public virtual async Task ValidateSecurityStampAsync(TUser user, string securityStamp) => user != null && // Only validate the security stamp if the store supports it From 646dfc63e491da02f0641087c0ee2508eac0b5fe Mon Sep 17 00:00:00 2001 From: Pranav K Date: Tue, 2 Jun 2020 17:45:52 -0700 Subject: [PATCH 22/46] Minor tweaks for better Ignitor debugability (#22446) --- src/Components/Ignitor/src/ComponentNode.cs | 2 ++ src/Components/Ignitor/src/Node.cs | 5 ++++ src/Components/Ignitor/src/NodeSerializer.cs | 31 +++++++++++++++++--- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/Components/Ignitor/src/ComponentNode.cs b/src/Components/Ignitor/src/ComponentNode.cs index a6829bb307..f10a75b0ba 100644 --- a/src/Components/Ignitor/src/ComponentNode.cs +++ b/src/Components/Ignitor/src/ComponentNode.cs @@ -11,5 +11,7 @@ namespace Ignitor { _componentId = componentId; } + + public int ComponentId => _componentId; } } diff --git a/src/Components/Ignitor/src/Node.cs b/src/Components/Ignitor/src/Node.cs index 04b2559333..8ce08e8463 100644 --- a/src/Components/Ignitor/src/Node.cs +++ b/src/Components/Ignitor/src/Node.cs @@ -3,11 +3,16 @@ #nullable enable +using System.Diagnostics; + namespace Ignitor { + [DebuggerDisplay("{SerializedValue}")] public abstract class Node { public virtual ContainerNode? Parent { get; set; } + + public string SerializedValue => NodeSerializer.Serialize(this); } } diff --git a/src/Components/Ignitor/src/NodeSerializer.cs b/src/Components/Ignitor/src/NodeSerializer.cs index 4d5919ce94..814635f6d5 100644 --- a/src/Components/Ignitor/src/NodeSerializer.cs +++ b/src/Components/Ignitor/src/NodeSerializer.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using System.IO; #nullable enable @@ -20,11 +21,22 @@ namespace Ignitor } } + public static string Serialize(Node node) + { + using (var writer = new StringWriter()) + { + var serializer = new Serializer(writer); + serializer.Serialize(node); + return writer.ToString(); + } + } + private class Serializer { private readonly TextWriter _writer; private int _depth; private bool _atStartOfLine; + private HashSet _visited = new HashSet(); public Serializer(TextWriter writer) { @@ -35,14 +47,25 @@ namespace Ignitor { foreach (var kvp in hive.Components) { - SerializeComponent(kvp.Key, kvp.Value); + Serialize(kvp.Value); } } - private void Serialize(Node node) + public void Serialize(Node node) { + if (!_visited.Add(node)) + { + // This is a child component of a previously seen component. Don't repeat it + return; + } + switch (node) { + case ComponentNode componentNode: + { + SerializeComponent(componentNode); + break; + } case ElementNode elementNode: { SerializeElement(elementNode); @@ -155,10 +178,10 @@ namespace Ignitor } } - private void SerializeComponent(int id, ComponentNode component) + private void SerializeComponent(ComponentNode component) { Write("[Component ( "); - Write(id.ToString()); + Write(component.ComponentId.ToString()); WriteLine(" )]"); _depth++; SerializeChildren(component); From 902e735b27dea536ad868d13aa74d0e12017fa0f Mon Sep 17 00:00:00 2001 From: Pranav K Date: Tue, 2 Jun 2020 17:48:56 -0700 Subject: [PATCH 23/46] Configure the page handler / controller instance as the container when validating top-level properties (#22164) Validation attributes such as a CompareAttribute require a container to be configured in ValidationContext. This change configures uses the controller or page handler instance that the property is being bound on when binding top-level properties. Fixes https://github.com/dotnet/aspnetcore/issues/4895 --- ...icrosoft.AspNetCore.Mvc.Core.netcoreapp.cs | 5 +- .../ControllerBinderDelegateProvider.cs | 6 +- .../src/ModelBinding/ObjectModelValidator.cs | 24 +++++++- .../src/ModelBinding/ParameterBinder.cs | 35 ++++++++++-- .../Validation/ValidationVisitor.cs | 21 +++++++ src/Mvc/Mvc.Core/src/Resources.resx | 57 ++++++++++--------- .../ControllerBinderDelegateProviderTest.cs | 5 +- .../src/Infrastructure/PageBinderFactory.cs | 6 +- .../Infrastructure/PageBinderFactoryTest.cs | 9 +-- .../test/Mvc.FunctionalTests/BasicTests.cs | 28 ++++++++- .../RazorPagesWithBasePathTest.cs | 11 ++++ .../BindPropertiesWithValidationController.cs | 35 ++++++++++++ .../Validation/PageWithCompareValidation.cs | 27 +++++++++ .../PageWithCompareValidation.cshtml | 3 + 14 files changed, 227 insertions(+), 45 deletions(-) create mode 100644 src/Mvc/test/WebSites/BasicWebSite/Controllers/BindPropertiesWithValidationController.cs create mode 100644 src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cs create mode 100644 src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cshtml diff --git a/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp.cs b/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp.cs index 2aaa567743..d4672abb31 100644 --- a/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp.cs +++ b/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp.cs @@ -2685,13 +2685,15 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding public abstract Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor GetValidationVisitor(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache validatorCache, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState); public virtual void Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model) { } public virtual void Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) { } + public virtual void Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object container) { } } public partial class ParameterBinder { public ParameterBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory modelBinderFactory, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator validator, Microsoft.Extensions.Options.IOptions mvcOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) { } protected Microsoft.Extensions.Logging.ILogger Logger { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } - [System.Diagnostics.DebuggerStepThroughAttribute] public virtual System.Threading.Tasks.Task BindModelAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder modelBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor parameter, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object value) { throw null; } + [System.Diagnostics.DebuggerStepThroughAttribute] + public virtual System.Threading.Tasks.ValueTask BindModelAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder modelBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor parameter, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object value, object container) { throw null; } } public partial class PrefixContainer { @@ -3246,6 +3248,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation protected virtual void SuppressValidation(string key) { } public bool Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model) { throw null; } public virtual bool Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel) { throw null; } + public virtual bool Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container) { throw null; } protected virtual bool ValidateNode() { throw null; } protected virtual bool Visit(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model) { throw null; } protected virtual bool VisitChildren(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy strategy) { throw null; } diff --git a/src/Mvc/Mvc.Core/src/Controllers/ControllerBinderDelegateProvider.cs b/src/Mvc/Mvc.Core/src/Controllers/ControllerBinderDelegateProvider.cs index e7668e7b96..a590b6b19d 100644 --- a/src/Mvc/Mvc.Core/src/Controllers/ControllerBinderDelegateProvider.cs +++ b/src/Mvc/Mvc.Core/src/Controllers/ControllerBinderDelegateProvider.cs @@ -84,7 +84,8 @@ namespace Microsoft.AspNetCore.Mvc.Controllers valueProvider, parameter, modelMetadata, - value: null); + value: null, + container: null); // Parameters do not have containers. if (result.IsModelSet) { @@ -110,7 +111,8 @@ namespace Microsoft.AspNetCore.Mvc.Controllers valueProvider, property, modelMetadata, - value: null); + value: null, + container: controller); if (result.IsModelSet) { diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/ObjectModelValidator.cs b/src/Mvc/Mvc.Core/src/ModelBinding/ObjectModelValidator.cs index 43785d55cd..dbcd90376c 100644 --- a/src/Mvc/Mvc.Core/src/ModelBinding/ObjectModelValidator.cs +++ b/src/Mvc/Mvc.Core/src/ModelBinding/ObjectModelValidator.cs @@ -77,6 +77,28 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding string prefix, object model, ModelMetadata metadata) + => Validate(actionContext, validationState, prefix, model, metadata, container: null); + + /// + /// Validates the provided object model. + /// If is and the 's + /// is , will add one or more + /// model state errors that + /// would not. + /// + /// The . + /// The . + /// The model prefix key. + /// The model object. + /// The . + /// The model container + public virtual void Validate( + ActionContext actionContext, + ValidationStateDictionary validationState, + string prefix, + object model, + ModelMetadata metadata, + object container) { var visitor = GetValidationVisitor( actionContext, @@ -85,7 +107,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding _modelMetadataProvider, validationState); - visitor.Validate(metadata, prefix, model, alwaysValidateAtTopLevel: metadata.IsRequired); + visitor.Validate(metadata, prefix, model, alwaysValidateAtTopLevel: metadata.IsRequired, container); } /// diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/ParameterBinder.cs b/src/Mvc/Mvc.Core/src/ModelBinding/ParameterBinder.cs index 77942ea538..c39ac3192a 100644 --- a/src/Mvc/Mvc.Core/src/ModelBinding/ParameterBinder.cs +++ b/src/Mvc/Mvc.Core/src/ModelBinding/ParameterBinder.cs @@ -82,13 +82,34 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// The . /// The initial model value. /// The result of model binding. - public virtual async Task BindModelAsync( + public virtual Task BindModelAsync( ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMetadata metadata, object value) + => BindModelAsync(actionContext, modelBinder, valueProvider, parameter, metadata, value, container: null).AsTask(); + + /// + /// Binds a model specified by using as the initial value. + /// + /// The . + /// The . + /// The . + /// The + /// The . + /// The initial model value. + /// The container for the model. + /// The result of model binding. + public virtual async ValueTask BindModelAsync( + ActionContext actionContext, + IModelBinder modelBinder, + IValueProvider valueProvider, + ParameterDescriptor parameter, + ModelMetadata metadata, + object value, + object container) { if (actionContext == null) { @@ -164,7 +185,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding parameter, metadata, modelBindingContext, - modelBindingResult); + modelBindingResult, + container); Logger.DoneAttemptingToValidateParameterOrProperty(parameter, metadata); } @@ -192,7 +214,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding ParameterDescriptor parameter, ModelMetadata metadata, ModelBindingContext modelBindingContext, - ModelBindingResult modelBindingResult) + ModelBindingResult modelBindingResult, + object container) { RecalculateModelMetadata(parameter, modelBindingResult, ref metadata); @@ -211,7 +234,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding modelBindingContext.ValidationState, modelBindingContext.ModelName, modelBindingResult.Model, - metadata); + metadata, + container); } else if (metadata.IsRequired) { @@ -240,7 +264,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding modelBindingContext.ValidationState, modelName, modelBindingResult.Model, - metadata); + metadata, + container); } } diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs b/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs index 963db52af1..ba2bbcf214 100644 --- a/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs +++ b/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs @@ -133,7 +133,24 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation /// If true, applies validation rules even if the top-level value is null. /// true if the object is valid, otherwise false. public virtual bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel) + => Validate(metadata, key, model, alwaysValidateAtTopLevel, container: null); + + /// + /// Validates a object. + /// + /// The associated with the model. + /// The model prefix key. + /// The model object. + /// If true, applies validation rules even if the top-level value is null. + /// The model container. + /// true if the object is valid, otherwise false. + public virtual bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container) { + if (container != null && metadata.MetadataKind != ModelMetadataKind.Property) + { + throw new ArgumentException(Resources.FormatValidationVisitor_ContainerCannotBeSpecified(metadata.MetadataKind)); + } + if (model == null && key != null && !alwaysValidateAtTopLevel) { var entry = ModelState[key]; @@ -148,6 +165,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation return true; } + // Container is non-null only when validation top-level properties. Start off by treating "container" as the "Model" instance. + // Invoking StateManager.Recurse later in this invocation will result in it being correctly used as the container instance during the + // validation of "model". + Model = container; return Visit(metadata, key, model); } diff --git a/src/Mvc/Mvc.Core/src/Resources.resx b/src/Mvc/Mvc.Core/src/Resources.resx index 147aa93602..2450503a43 100644 --- a/src/Mvc/Mvc.Core/src/Resources.resx +++ b/src/Mvc/Mvc.Core/src/Resources.resx @@ -1,17 +1,17 @@  - @@ -516,4 +516,7 @@ Failed to read the request form. {0} + + A container cannot be specified when the ModelMetada is of kind '{0}'. + \ No newline at end of file diff --git a/src/Mvc/Mvc.Core/test/Controllers/ControllerBinderDelegateProviderTest.cs b/src/Mvc/Mvc.Core/test/Controllers/ControllerBinderDelegateProviderTest.cs index 97f879169e..0fc291db31 100644 --- a/src/Mvc/Mvc.Core/test/Controllers/ControllerBinderDelegateProviderTest.cs +++ b/src/Mvc/Mvc.Core/test/Controllers/ControllerBinderDelegateProviderTest.cs @@ -1151,8 +1151,9 @@ namespace Microsoft.AspNetCore.Mvc.Controllers It.IsAny(), It.IsAny(), It.IsAny(), + null, null)) - .Returns((ActionContext context, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor descriptor, ModelMetadata metadata, object v) => + .Returns((ActionContext context, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor descriptor, ModelMetadata metadata, object v, object c) => { ModelBindingResult result; if (descriptor.Name == "accountId") @@ -1172,7 +1173,7 @@ namespace Microsoft.AspNetCore.Mvc.Controllers result = ModelBindingResult.Failed(); } - return Task.FromResult(result); + return new ValueTask(result); }); var controllerContext = GetControllerContext(actionDescriptor); diff --git a/src/Mvc/Mvc.RazorPages/src/Infrastructure/PageBinderFactory.cs b/src/Mvc/Mvc.RazorPages/src/Infrastructure/PageBinderFactory.cs index aab346896f..72b72fdef8 100644 --- a/src/Mvc/Mvc.RazorPages/src/Infrastructure/PageBinderFactory.cs +++ b/src/Mvc/Mvc.RazorPages/src/Infrastructure/PageBinderFactory.cs @@ -78,7 +78,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure valueProvider, property, modelMetadata, - value: null); + value: null, + container: instance); if (result.IsModelSet) { @@ -159,7 +160,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure valueProvider, parameter, modelMetadata, - value: null); + value: null, + container: null); // Parameters do not have containers. if (result.IsModelSet) { diff --git a/src/Mvc/Mvc.RazorPages/test/Infrastructure/PageBinderFactoryTest.cs b/src/Mvc/Mvc.RazorPages/test/Infrastructure/PageBinderFactoryTest.cs index ca9078bd72..d32c3d96cb 100644 --- a/src/Mvc/Mvc.RazorPages/test/Infrastructure/PageBinderFactoryTest.cs +++ b/src/Mvc/Mvc.RazorPages/test/Infrastructure/PageBinderFactoryTest.cs @@ -827,22 +827,23 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure public IList Descriptors { get; } = new List(); - public override Task BindModelAsync( + public override ValueTask BindModelAsync( ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMetadata metadata, - object value) + object value, + object container) { Descriptors.Add(parameter); if (_args.TryGetValue(parameter.Name, out var result)) { - return Task.FromResult(ModelBindingResult.Success(result)); + return new ValueTask(ModelBindingResult.Success(result)); } - return Task.FromResult(ModelBindingResult.Failed()); + return new ValueTask(ModelBindingResult.Failed()); } } diff --git a/src/Mvc/test/Mvc.FunctionalTests/BasicTests.cs b/src/Mvc/test/Mvc.FunctionalTests/BasicTests.cs index 7af4c54524..d935f9a2a5 100644 --- a/src/Mvc/test/Mvc.FunctionalTests/BasicTests.cs +++ b/src/Mvc/test/Mvc.FunctionalTests/BasicTests.cs @@ -3,13 +3,15 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Net.Http.Json; using System.Reflection; +using System.Text.Json; using System.Threading.Tasks; using BasicWebSite.Models; -using System.Text.Json; using Xunit; namespace Microsoft.AspNetCore.Mvc.FunctionalTests @@ -627,6 +629,30 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests Assert.Equal("OnGetTestName", content); } + [Fact] + public async Task BindPropertiesAppliesValidation() + { + // Act + var response = await Client.GetAsync("BindPropertiesWithValidation/Action?Password=Test&ConfirmPassword=different"); + + // Assert + await response.AssertStatusCodeAsync(HttpStatusCode.BadRequest); + var problem = await response.Content.ReadFromJsonAsync(); + + Assert.Collection( + problem.Errors.OrderBy(e => e.Key), + kvp => + { + Assert.Equal("ConfirmPassword", kvp.Key); + Assert.Equal("Password and confirm password do not match.", Assert.Single(kvp.Value)); + }, + kvp => + { + Assert.Equal("UserName", kvp.Key); + Assert.Equal("User name is required.", Assert.Single(kvp.Value)); + }); + } + [Fact] public async Task InvalidForm_ResultsInModelError() { diff --git a/src/Mvc/test/Mvc.FunctionalTests/RazorPagesWithBasePathTest.cs b/src/Mvc/test/Mvc.FunctionalTests/RazorPagesWithBasePathTest.cs index 2435142f2f..6318eb76ea 100644 --- a/src/Mvc/test/Mvc.FunctionalTests/RazorPagesWithBasePathTest.cs +++ b/src/Mvc/test/Mvc.FunctionalTests/RazorPagesWithBasePathTest.cs @@ -510,6 +510,17 @@ Hello from /Pages/Shared/"; Assert.Contains("18 ≤ Age ≤ 60", response); } + [Fact] + public async Task CompareValidationAttributes_OnTopLevelProperties() + { + // Act + var response = await Client.GetStringAsync("/Validation/PageWithCompareValidation?password=test&comparePassword=different"); + + // Assert + Assert.Contains("User name is required", response); + Assert.Contains("Password and confirm password do not match.", response); + } + [Fact] public async Task ValidationAttributes_OnHandlerParameters() { diff --git a/src/Mvc/test/WebSites/BasicWebSite/Controllers/BindPropertiesWithValidationController.cs b/src/Mvc/test/WebSites/BasicWebSite/Controllers/BindPropertiesWithValidationController.cs new file mode 100644 index 0000000000..810226de2b --- /dev/null +++ b/src/Mvc/test/WebSites/BasicWebSite/Controllers/BindPropertiesWithValidationController.cs @@ -0,0 +1,35 @@ +// 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.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ModelBinding; + +namespace BasicWebSite +{ + [BindProperties(SupportsGet = true)] + public class BindPropertiesWithValidationController : Controller + { + [Required(ErrorMessage = "User name is required.")] + public string UserName { get; set; } + + [Required] + public string Password { get; set; } + + [Compare(nameof(Password), ErrorMessage = "Password and confirm password do not match.")] + public string ConfirmPassword { get; set; } + + [BindNever] + public string BindNeverProperty { get; set; } + + public IActionResult Action() + { + if (!ModelState.IsValid) + { + return ValidationProblem(); + } + + return Ok(); + } + } +} diff --git a/src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cs b/src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cs new file mode 100644 index 0000000000..8ca3f8dd2e --- /dev/null +++ b/src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cs @@ -0,0 +1,27 @@ +// 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.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace RazorPagesWebSite +{ + public class PageWithCompareValidation : PageModel + { + [BindProperty(SupportsGet = true)] + [Required(ErrorMessage = "User name is required.")] + public string UserName { get; set; } + + [BindProperty(SupportsGet = true)] + [Required(ErrorMessage = "Password is required.")] + public string Password { get; set; } + + [BindProperty(SupportsGet = true)] + [Compare(nameof(Password), ErrorMessage = "Password and confirm password do not match.")] + public int ConfirmPassword { get; set; } + + [Required] // Here to make sure we do not validate an unbound property. + public string NotBoundProperty { get; set; } + } +} diff --git a/src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cshtml b/src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cshtml new file mode 100644 index 0000000000..2e4d157977 --- /dev/null +++ b/src/Mvc/test/WebSites/RazorPagesWebSite/Pages/Validation/PageWithCompareValidation.cshtml @@ -0,0 +1,3 @@ +@page +@model PageWithCompareValidation +
From 7043b022b4a04bae6488d82153c50bb72344afb6 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2020 13:31:45 +0000 Subject: [PATCH 24/46] Update dependencies from https://github.com/dotnet/runtime build 20200603.1 (#22492) System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Logging , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Http , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Hosting , Microsoft.Extensions.Configuration.Json , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.Platforms , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.Drawing.Common , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.ServiceProcess.ServiceController , System.Security.Principal.Windows , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions From Version 5.0.0-preview.7.20302.1 -> To Version 5.0.0-preview.7.20303.1 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 244 ++++++++++++++++++++-------------------- eng/Versions.props | 122 ++++++++++---------- 2 files changed, 183 insertions(+), 183 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1fe5dae12f..fe1663cb06 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -41,256 +41,256 @@ https://github.com/dotnet/efcore 888ebd504b96567728b01c05c1659e495ae090c6 - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef - + https://github.com/dotnet/runtime - 3f776fb77c58df952636eed3722f67cbbf627070 + e25517ea27311297c1e3946acb3b4382d5fa7fef https://github.com/dotnet/arcade diff --git a/eng/Versions.props b/eng/Versions.props index 2b0965b1d7..0010c94715 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -66,68 +66,68 @@ 3.7.0-3.20271.4 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 - 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20302.1 + 5.0.0-preview.7.20303.1 3.2.0 From e7ca49c95e5a8f9ae5f7a4817e1e34283d56bf61 Mon Sep 17 00:00:00 2001 From: Scott Addie <10702007+scottaddie@users.noreply.github.com> Date: Wed, 3 Jun 2020 08:42:53 -0500 Subject: [PATCH 25/46] Improve XML docs for ActionResultObjectValueAttribute (#22479) --- .../ActionResultObjectValueAttribute.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs b/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs index dc1891561a..7743399b0d 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs @@ -6,19 +6,33 @@ using System; namespace Microsoft.AspNetCore.Mvc.Infrastructure { /// - /// Attribute annoted on ActionResult constructor, helper method parameters, and properties to indicate + /// Attribute annotated on ActionResult constructor, helper method parameters, and properties to indicate /// that the parameter or property is used to set the "value" for ActionResult. /// /// Analyzers match this parameter by type name. This allows users to annotate custom results \ custom helpers - /// with a user defined attribute without having to expose this type. + /// with a user-defined attribute without having to expose this type. /// /// /// This attribute is intentionally marked Inherited=false since the analyzer does not walk the inheritance graph. /// /// /// - /// BadObjectResult([ActionResultObjectValueAttribute] object value) - /// ObjectResult { [ActionResultObjectValueAttribute] public object Value { get; set; } } + /// Annotated constructor parameter: + /// + /// public BadRequestObjectResult([ActionResultObjectValue] object error) + /// :base(error) + /// { + /// StatusCode = DefaultStatusCode; + /// } + /// + /// Annotated property: + /// + /// public class ObjectResult : ActionResult, IStatusCodeActionResult + /// { + /// [ActionResultObjectValue] + /// public object Value { get; set; } + /// } + /// /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] public sealed class ActionResultObjectValueAttribute : Attribute From d8733c2a55c8155c45c990f5b401cca5916ec7ee Mon Sep 17 00:00:00 2001 From: Matt Mitchell Date: Wed, 3 Jun 2020 07:14:38 -0700 Subject: [PATCH 26/46] Build time changes (#22362) * Build time changes A few changes for build time - Don't build tests with SkipTestBuild=true and use that for official build legs. This cuts 40%-50% off the msbuild invocations for build. The longest build leg drops by about 30 mins. - Skip logging of some task parameters and their metadata. This reduces overall binlog size, which is a major contributor to build time. Unfortunately, this does not mean we can yet turn binlogs back on. This change can actually increase the overall binlog size due to logging of more project started arguments. There is another optimization for this in progress. Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com> --- .azure/pipelines/ci.yml | 5 +-- Directory.Build.props | 36 +++++++++++++++++++ Directory.Build.targets | 10 ++++++ .../Web.JS/dist/Release/blazor.server.js | 4 +-- .../src/ReferenceBlazorBuildFromSource.props | 2 +- src/Servers/IIS/IIS/test/FunctionalTest.props | 2 +- ...tCore.Server.IntegrationTesting.IIS.csproj | 2 +- .../signalr.client.java.Tests.javaproj | 4 +-- .../dotnet-microsoft.openapi.Tests.csproj | 4 +-- .../test/dotnet-watch.Tests.csproj | 4 +-- 10 files changed, 60 insertions(+), 13 deletions(-) diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 5226c46c48..0b9d556127 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -35,7 +35,7 @@ variables: - name: _UseHelixOpenQueues value: 'true' - name: _BuildArgs - value: '' + value: '/p:SkipTestBuild=true' - name: _PublishArgs value: '' - name: _SignType @@ -66,6 +66,7 @@ variables: - name: _BuildArgs value: /p:TeamName=$(_TeamName) /p:OfficialBuildId=$(Build.BuildNumber) + /p:SkipTestBuild=true - name: _SignType value: real @@ -81,7 +82,7 @@ variables: - ${{ if in(variables['Build.Reason'], 'PullRequest') }}: - name: _BuildArgs - value: '' + value: '/p:SkipTestBuild=true' - name: _SignType value: test - name: _PublishArgs diff --git a/Directory.Build.props b/Directory.Build.props index 010f6b68fb..d901404a13 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -36,6 +36,42 @@ true + + + + true + + $(TrimTaskParameters) + + + $(TrimTaskParameters) + $(TrimTaskParameters) + + + $(TrimTaskParameters) + $(TrimTaskParameters) + + + $(TrimTaskParameters) + $(TrimTaskParameters) + + + $(TrimTaskParameters) + $(TrimTaskParameters) + $(TrimTaskParameters) + $(TrimTaskParameters) + diff --git a/Directory.Build.targets b/Directory.Build.targets index 5c0c27b516..695ae02995 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -5,6 +5,16 @@ true + + + true diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index 7a180cf367..d1ebb80407 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -1,4 +1,4 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=51)}([function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(r||(r={}))},function(e,t,n){"use strict";(function(e){n.d(t,"e",(function(){return c})),n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return l})),n.d(t,"g",(function(){return f})),n.d(t,"i",(function(){return h})),n.d(t,"j",(function(){return p})),n.d(t,"f",(function(){return d})),n.d(t,"d",(function(){return g})),n.d(t,"b",(function(){return y})),n.d(t,"h",(function(){return v}));var r=n(0),o=n(4),i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(12))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(42);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(12))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(42);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(9),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(66),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(7))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(35)).Stream=t,t.Readable=t,t.Writable=n(40),t.Duplex=n(8),t.Transform=n(41),t.PassThrough=n(70)},function(e,t,n){"use strict";e.exports=i;var r=n(41),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(14),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(34).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(32),o=n(31),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(15),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(9),o=n(10),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(9),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(66),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(7))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(35)).Stream=t,t.Readable=t,t.Writable=n(40),t.Duplex=n(8),t.Transform=n(41),t.PassThrough=n(70)},function(e,t,n){"use strict";e.exports=i;var r=n(41),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(14),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(34).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(32),o=n(31),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(15),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(9),o=n(10),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-ci"}]); \ No newline at end of file diff --git a/src/Components/WebAssembly/Build/src/ReferenceBlazorBuildFromSource.props b/src/Components/WebAssembly/Build/src/ReferenceBlazorBuildFromSource.props index d480df7f95..2083ec2891 100644 --- a/src/Components/WebAssembly/Build/src/ReferenceBlazorBuildFromSource.props +++ b/src/Components/WebAssembly/Build/src/ReferenceBlazorBuildFromSource.props @@ -17,7 +17,7 @@ <_BlazorToolsDir>$(MSBuildThisFileDirectory)bin\$(BlazorBuildConfiguration)\tools\ - + diff --git a/src/Servers/IIS/IIS/test/FunctionalTest.props b/src/Servers/IIS/IIS/test/FunctionalTest.props index e701d2d021..0c23788a84 100644 --- a/src/Servers/IIS/IIS/test/FunctionalTest.props +++ b/src/Servers/IIS/IIS/test/FunctionalTest.props @@ -8,7 +8,7 @@ - + diff --git a/src/Servers/IIS/IntegrationTesting.IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj b/src/Servers/IIS/IntegrationTesting.IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj index c5686a0ebc..33bb78dc4b 100644 --- a/src/Servers/IIS/IntegrationTesting.IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj +++ b/src/Servers/IIS/IntegrationTesting.IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj @@ -29,7 +29,7 @@ - + diff --git a/src/SignalR/clients/java/signalr/signalr.client.java.Tests.javaproj b/src/SignalR/clients/java/signalr/signalr.client.java.Tests.javaproj index 6a1851569e..5c3cc77e73 100644 --- a/src/SignalR/clients/java/signalr/signalr.client.java.Tests.javaproj +++ b/src/SignalR/clients/java/signalr/signalr.client.java.Tests.javaproj @@ -42,7 +42,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj b/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj index 1d216328e8..59ae536be3 100644 --- a/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj +++ b/src/Tools/Microsoft.dotnet-openapi/test/dotnet-microsoft.openapi.Tests.csproj @@ -40,11 +40,11 @@ - + - + diff --git a/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj b/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj index 71ebe061da..200f875a30 100644 --- a/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj +++ b/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj @@ -28,14 +28,14 @@ - + - + From 381ac51af6cb834bd446cf9bace7432243e83490 Mon Sep 17 00:00:00 2001 From: Brennan Date: Wed, 3 Jun 2020 07:48:35 -0700 Subject: [PATCH 27/46] Fix nullable warning in IntegrationTestBase (#22487) --- .../Language/IntegrationTests/IntegrationTestBase.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.Test.Common/Language/IntegrationTests/IntegrationTestBase.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.Test.Common/Language/IntegrationTests/IntegrationTestBase.cs index fa8d6cf1a5..4cb0df598b 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.Test.Common/Language/IntegrationTests/IntegrationTestBase.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.Test.Common/Language/IntegrationTests/IntegrationTestBase.cs @@ -1,6 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +#nullable enable + using System; using System.Collections.Generic; using System.IO; @@ -117,7 +119,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests { } - protected CSharpSyntaxTree AddCSharpSyntaxTree(string text, string filePath = null) + protected CSharpSyntaxTree AddCSharpSyntaxTree(string text, string? filePath = null) { var syntaxTree = (CSharpSyntaxTree)CSharpSyntaxTree.ParseText(text, CSharpParseOptions, path: filePath); CSharpSyntaxTrees.Add(syntaxTree); @@ -164,7 +166,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests return projectItem; } - protected RazorProjectItem CreateProjectItemFromFile(string filePath = null, string fileKind = null) + protected RazorProjectItem CreateProjectItemFromFile(string? filePath = null, string? fileKind = null) { if (FileName == null) { @@ -297,14 +299,14 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests return compilation; } - protected RazorProjectEngine CreateProjectEngine(Action configure = null) + protected RazorProjectEngine CreateProjectEngine(Action? configure = null) { var compilation = CreateCompilation(); var references = compilation.References.Concat(new[] { compilation.ToMetadataReference(), }).ToArray(); return CreateProjectEngine(Configuration, references, configure); } - private RazorProjectEngine CreateProjectEngine(RazorConfiguration configuration, MetadataReference[] references, Action configure) + private RazorProjectEngine CreateProjectEngine(RazorConfiguration configuration, MetadataReference[] references, Action? configure) { return RazorProjectEngine.Create(configuration, FileSystem, b => { From 77ef004db4c0268b99aa719e74b50ff2044d2f3f Mon Sep 17 00:00:00 2001 From: Huei Feng <34702552+hueifeng@users.noreply.github.com> Date: Wed, 3 Jun 2020 23:43:08 +0800 Subject: [PATCH 28/46] Update async Dispose and methods references (#22407) * Update async Dispose and methods references - `Dispose` can be changed to `DisposeAsync` - The methods in the following code snippet are not available, it causes duplicate references ``` /// /// is invoked /// /// The to invoke protected void Write(HelperResult result) { Write(result); } ``` * Update BaseView.cs --- src/Shared/RazorViews/BaseView.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Shared/RazorViews/BaseView.cs b/src/Shared/RazorViews/BaseView.cs index 97a089267f..04b112a1c1 100644 --- a/src/Shared/RazorViews/BaseView.cs +++ b/src/Shared/RazorViews/BaseView.cs @@ -69,7 +69,7 @@ namespace Microsoft.Extensions.RazorViews Output = new StreamWriter(buffer, UTF8NoBOM, 4096, leaveOpen: true); await ExecuteAsync(); await Output.FlushAsync(); - Output.Dispose(); + await Output.DisposeAsync(); buffer.Seek(0, SeekOrigin.Begin); await buffer.CopyToAsync(stream); } @@ -87,7 +87,7 @@ namespace Microsoft.Extensions.RazorViews Output = new StreamWriter(buffer, UTF8NoBOM, 4096, leaveOpen: true); await ExecuteAsync(); await Output.FlushAsync(); - Output.Dispose(); + await Output.DisposeAsync(); buffer.Seek(0, SeekOrigin.Begin); await buffer.CopyToAsync(Response.Body); } @@ -244,13 +244,13 @@ namespace Microsoft.Extensions.RazorViews WriteLiteral(trailer); } - /// + /// /// is invoked /// /// The to invoke protected void Write(HelperResult result) { - Write(result); + result.WriteTo(Output); } /// From 544afc00789717fbbdf5c9ad2061d6dce22cc9db Mon Sep 17 00:00:00 2001 From: Huei Feng <34702552+hueifeng@users.noreply.github.com> Date: Thu, 4 Jun 2020 00:54:10 +0800 Subject: [PATCH 29/46] Added `#nullable enable` with `StackTraceHelper` (#22419) * Added `#nullable enable` with `StackTraceHelper` --- src/Shared/StackTrace/StackFrame/StackTraceHelper.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs b/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs index 48f72438eb..27aaf67ea1 100644 --- a/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs +++ b/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs @@ -10,12 +10,13 @@ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using Microsoft.Extensions.Internal; +#nullable enable namespace Microsoft.Extensions.StackTrace.Sources { internal class StackTraceHelper { - public static IList GetFrames(Exception exception, out AggregateException error) + public static IList GetFrames(Exception exception, out AggregateException? error) { var frames = new List(); @@ -35,7 +36,7 @@ namespace Microsoft.Extensions.StackTrace.Sources return frames; } - List exceptions = null; + List? exceptions = null; for (var i = 0; i < stackFrames.Length; i++) { @@ -69,7 +70,7 @@ namespace Microsoft.Extensions.StackTrace.Sources return frames; } - internal static MethodDisplayInfo GetMethodDisplayString(MethodBase method) + internal static MethodDisplayInfo? GetMethodDisplayString(MethodBase? method) { // Special case: no method available if (method == null) @@ -145,7 +146,7 @@ namespace Microsoft.Extensions.StackTrace.Sources return methodDisplayInfo; } - private static bool ShowInStackTrace(MethodBase method) + private static bool ShowInStackTrace(MethodBase? method) { Debug.Assert(method != null); @@ -191,7 +192,7 @@ namespace Microsoft.Extensions.StackTrace.Sources return true; } - private static bool TryResolveStateMachineMethod(ref MethodBase method, out Type declaringType) + private static bool TryResolveStateMachineMethod(ref MethodBase method, out Type? declaringType) { Debug.Assert(method != null); Debug.Assert(method.DeclaringType != null); From 9eaef28b31bbb878218a8206271a6969fdeec046 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Wed, 3 Jun 2020 10:02:03 -0700 Subject: [PATCH 30/46] Attempt to capture binlogs when test times out (#22468) --- .../IntegrationTests/MSBuildProcessManager.cs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/MSBuildProcessManager.cs b/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/MSBuildProcessManager.cs index 2f2ddc2d46..e9a9216782 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/MSBuildProcessManager.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/MSBuildProcessManager.cs @@ -50,7 +50,31 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests processStartInfo.EnvironmentVariables["DOTNET_SKIP_FIRST_TIME_EXPERIENCE"] = "true"; } - var processResult = await RunProcessCoreAsync(processStartInfo, timeout); + ProcessResult processResult; + try + { + processResult = await RunProcessCoreAsync(processStartInfo, timeout); + } + catch (TimeoutException ex) + { + // Copy the binlog to the artifacts directory if executing MSBuild throws. + // This would help diagnosing failures on the CI. + var binaryLogFile = Path.Combine(project.ProjectFilePath, "msbuild.binlog"); + + var artifactsLogDir = Assembly.GetExecutingAssembly() + .GetCustomAttributes() + .FirstOrDefault(ama => ama.Key == "ArtifactsLogDir")?.Value; + + if (!string.IsNullOrEmpty(artifactsLogDir) && File.Exists(binaryLogFile)) + { + var targetPath = Path.Combine(artifactsLogDir, Path.GetFileNameWithoutExtension(project.ProjectFilePath) + "." + Path.GetRandomFileName() + ".binlog"); + File.Copy(binaryLogFile, targetPath); + + throw new TimeoutException(ex.Message + $"{Environment.NewLine}Captured binlog at {targetPath}"); + } + + throw; + } return new MSBuildResult(project, processResult.FileName, processResult.Arguments, processResult.ExitCode, processResult.Output); } From 3f83cebeb0fef46b74686046118a00fbf70ef956 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Wed, 3 Jun 2020 12:58:03 -0700 Subject: [PATCH 31/46] [Helix] Go back to 1604 for now (#22514) 1804 doesn't have enough cores to support our volume right now --- eng/targets/Helix.Common.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/targets/Helix.Common.props b/eng/targets/Helix.Common.props index 36b0e0ca84..63f8d06a2d 100644 --- a/eng/targets/Helix.Common.props +++ b/eng/targets/Helix.Common.props @@ -20,7 +20,7 @@ - + @@ -29,7 +29,7 @@ - + From 675bceca57d560547834dd0bc834e1a3049f3d57 Mon Sep 17 00:00:00 2001 From: Martin Costello Date: Wed, 3 Jun 2020 21:25:23 +0100 Subject: [PATCH 32/46] Reuse model binders (#22391) * Reuse model binders Reuse the same model binders for CancellationTokens and services, rather than allocating a new one for every request with such a parameter. --- .../Binders/CancellationTokenModelBinderProvider.cs | 6 +++++- .../src/ModelBinding/Binders/ServicesModelBinderProvider.cs | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/Binders/CancellationTokenModelBinderProvider.cs b/src/Mvc/Mvc.Core/src/ModelBinding/Binders/CancellationTokenModelBinderProvider.cs index b3ee6f7361..6819805276 100644 --- a/src/Mvc/Mvc.Core/src/ModelBinding/Binders/CancellationTokenModelBinderProvider.cs +++ b/src/Mvc/Mvc.Core/src/ModelBinding/Binders/CancellationTokenModelBinderProvider.cs @@ -11,6 +11,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders /// public class CancellationTokenModelBinderProvider : IModelBinderProvider { + // CancellationTokenModelBinder does not have any state. Re-use the same instance for binding. + + private readonly CancellationTokenModelBinder _modelBinder = new CancellationTokenModelBinder(); + /// public IModelBinder GetBinder(ModelBinderProviderContext context) { @@ -21,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders if (context.Metadata.ModelType == typeof(CancellationToken)) { - return new CancellationTokenModelBinder(); + return _modelBinder; } return null; diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/Binders/ServicesModelBinderProvider.cs b/src/Mvc/Mvc.Core/src/ModelBinding/Binders/ServicesModelBinderProvider.cs index 2dea775a0a..b09d625c4d 100644 --- a/src/Mvc/Mvc.Core/src/ModelBinding/Binders/ServicesModelBinderProvider.cs +++ b/src/Mvc/Mvc.Core/src/ModelBinding/Binders/ServicesModelBinderProvider.cs @@ -10,6 +10,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders /// public class ServicesModelBinderProvider : IModelBinderProvider { + // ServicesModelBinder does not have any state. Re-use the same instance for binding. + + private readonly ServicesModelBinder _modelBinder = new ServicesModelBinder(); + /// public IModelBinder GetBinder(ModelBinderProviderContext context) { @@ -21,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders if (context.BindingInfo.BindingSource != null && context.BindingInfo.BindingSource.CanAcceptDataFrom(BindingSource.Services)) { - return new ServicesModelBinder(); + return _modelBinder; } return null; From eccd6272b3e80361b970372af0336894b4461fc1 Mon Sep 17 00:00:00 2001 From: Steve Gordon Date: Wed, 3 Jun 2020 21:26:24 +0100 Subject: [PATCH 33/46] Fix comment typo (#22409) --- src/Mvc/Mvc.Core/src/Routing/ConsumesMatcherPolicy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mvc/Mvc.Core/src/Routing/ConsumesMatcherPolicy.cs b/src/Mvc/Mvc.Core/src/Routing/ConsumesMatcherPolicy.cs index dbc65f26f4..0425443a8e 100644 --- a/src/Mvc/Mvc.Core/src/Routing/ConsumesMatcherPolicy.cs +++ b/src/Mvc/Mvc.Core/src/Routing/ConsumesMatcherPolicy.cs @@ -65,7 +65,7 @@ namespace Microsoft.AspNetCore.Mvc.Routing throw new ArgumentNullException(nameof(candidates)); } - // We want to return a 415 iff we eliminated ALL of the currently valid endpoints due to content type + // We want to return a 415 if we eliminated ALL of the currently valid endpoints due to content type // mismatch. bool? needs415Endpoint = null; From b817a39caef0f472807aa188e3fbfc487b15d635 Mon Sep 17 00:00:00 2001 From: William Godbe Date: Wed, 3 Jun 2020 14:18:17 -0700 Subject: [PATCH 34/46] Don't explicitly import Arcade SDK in AfterSigning.targets (#22429) * Don't explicitly import Arcade SDK in AfterSigning.targets * Only import sdk.targets * Set _SuppressSdkImports * Undo whitespace --- eng/AfterSigning.targets | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/eng/AfterSigning.targets b/eng/AfterSigning.targets index 4bbb0dcf03..3b11f73941 100644 --- a/eng/AfterSigning.targets +++ b/eng/AfterSigning.targets @@ -1,12 +1,10 @@ - - - $(ArtifactsDir.Substring(0, $([MSBuild]::Subtract($(ArtifactsDir.Length), 1)))) $(ArtifactsDir)\installers\ + <_SuppressSdkImports>false Date: Wed, 3 Jun 2020 16:04:29 -0700 Subject: [PATCH 35/46] Reduce Razor SDK copy retries (#22448) * Retry fewer times when building locally * Fail as usual when building in CI --- .../src/Microsoft.NET.Sdk.Razor.csproj | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj index 123aed68a6..49721facfc 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj +++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj @@ -61,14 +61,24 @@ Targets="Build" Condition="'$(NoBuild)' != 'true'" ContinueOnError="true" /> - + + + <_ContinueOnError>true + <_Retries>1 + + + + <_ContinueOnError>false + <_Retries>10 + + - - + + @@ -80,7 +90,7 @@ - + From 4b713b9a53f09c0e6ba475c70b363aa19224ce56 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2020 01:23:30 +0000 Subject: [PATCH 36/46] Update dependencies from https://github.com/dotnet/efcore build 20200603.6 (#22525) Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.SqlServer , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.InMemory From Version 5.0.0-preview.7.20301.3 -> To Version 5.0.0-preview.7.20303.6 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 14 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index fe1663cb06..592cf98ae2 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -13,33 +13,33 @@ https://github.com/dotnet/blazor cc449601d638ffaab58ae9487f0fd010bb178a12 - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef - + https://github.com/dotnet/efcore - 888ebd504b96567728b01c05c1659e495ae090c6 + 3ff4d5937ce0c51088de38580b75d136d6a953ef https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 0010c94715..9b290917d7 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -131,13 +131,13 @@ 3.2.0 - 5.0.0-preview.7.20301.3 - 5.0.0-preview.7.20301.3 - 5.0.0-preview.7.20301.3 - 5.0.0-preview.7.20301.3 - 5.0.0-preview.7.20301.3 - 5.0.0-preview.7.20301.3 - 5.0.0-preview.7.20301.3 + 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20303.6 3.2.0 - 5.0.0-preview.7.20303.6 - 5.0.0-preview.7.20303.6 - 5.0.0-preview.7.20303.6 - 5.0.0-preview.7.20303.6 - 5.0.0-preview.7.20303.6 - 5.0.0-preview.7.20303.6 - 5.0.0-preview.7.20303.6 + 5.0.0-preview.7.20304.1 + 5.0.0-preview.7.20304.1 + 5.0.0-preview.7.20304.1 + 5.0.0-preview.7.20304.1 + 5.0.0-preview.7.20304.1 + 5.0.0-preview.7.20304.1 + 5.0.0-preview.7.20304.1 - + + From e204911c3c6f5356163d541957cbcd5426a19ca8 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2020 19:32:35 +0000 Subject: [PATCH 40/46] Update dependencies from https://github.com/dotnet/runtime build 20200603.11 (#22539) System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Logging , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Http , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Hosting , Microsoft.Extensions.Configuration.Json , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.Platforms , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.Drawing.Common , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.ServiceProcess.ServiceController , System.Security.Principal.Windows , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions From Version 5.0.0-preview.7.20303.1 -> To Version 5.0.0-preview.7.20303.11 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 244 ++++++++++++++++++++-------------------- eng/Versions.props | 122 ++++++++++---------- 2 files changed, 183 insertions(+), 183 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 91afcf2863..3c79b83a40 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -41,256 +41,256 @@ https://github.com/dotnet/efcore a5efd9a8d8ef0c4315a52cdf6aa9bf98c898d53a - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc - + https://github.com/dotnet/runtime - e25517ea27311297c1e3946acb3b4382d5fa7fef + 4a4e347b964a2c8d2216ec382e4fb481965bb2fc https://github.com/dotnet/arcade diff --git a/eng/Versions.props b/eng/Versions.props index 8aa044a310..f8a84bd52f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -66,68 +66,68 @@ 3.7.0-3.20271.4 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 - 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 + 5.0.0-preview.7.20303.11 - 5.0.0-preview.7.20303.1 + 5.0.0-preview.7.20303.11 3.2.0 From 5a856437d0bde6f9eeecdc2354953168f5056305 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Thu, 4 Jun 2020 14:54:17 -0700 Subject: [PATCH 41/46] Show logout button if logged in on logout (#22444) * Show logout button if logged in on logout * Remove stuff --- .../Areas/Identity/Pages/V3/Account/Logout.cshtml | 13 ++++++++++++- .../Areas/Identity/Pages/V4/Account/Logout.cshtml | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Logout.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Logout.cshtml index 8e57434001..234123aa83 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Logout.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Logout.cshtml @@ -6,5 +6,16 @@

@ViewData["Title"]

-

You have successfully logged out of the application.

+ @{ + if (User.Identity.IsAuthenticated) + { +
+ +
+ } + else + { +

You have successfully logged out of the application.

+ } + }
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Logout.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Logout.cshtml index 8e57434001..234123aa83 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Logout.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Logout.cshtml @@ -6,5 +6,16 @@

@ViewData["Title"]

-

You have successfully logged out of the application.

+ @{ + if (User.Identity.IsAuthenticated) + { +
+ +
+ } + else + { +

You have successfully logged out of the application.

+ } + }
From a352ac4bb851cc5b6521dfad9981c2f9738dc61b Mon Sep 17 00:00:00 2001 From: Pranav K Date: Thu, 4 Jun 2020 15:04:30 -0700 Subject: [PATCH 42/46] Update blazor benchmarks to point to master (#22524) --- .../benchmarkapps/Wasm.Performance/benchmarks.compose.json | 4 ++-- src/Components/benchmarkapps/Wasm.Performance/dockerfile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Components/benchmarkapps/Wasm.Performance/benchmarks.compose.json b/src/Components/benchmarkapps/Wasm.Performance/benchmarks.compose.json index 442346e79c..67ad05c767 100644 --- a/src/Components/benchmarkapps/Wasm.Performance/benchmarks.compose.json +++ b/src/Components/benchmarkapps/Wasm.Performance/benchmarks.compose.json @@ -11,11 +11,11 @@ "blazorwasmbenchmark": { "source": { "repository": "https://github.com/dotnet/AspNetCore.git", - "branchOrCommit": "blazor-wasm", + "branchOrCommit": "master", "dockerfile": "src/Components/benchmarkapps/Wasm.Performance/dockerfile" }, "buildArguments": [ - "gitBranch=blazor-wasm" + "gitBranch=master" ], "waitForExit": true, "readyStateText": "Application started." diff --git a/src/Components/benchmarkapps/Wasm.Performance/dockerfile b/src/Components/benchmarkapps/Wasm.Performance/dockerfile index 843a0eed21..8237cb9e59 100644 --- a/src/Components/benchmarkapps/Wasm.Performance/dockerfile +++ b/src/Components/benchmarkapps/Wasm.Performance/dockerfile @@ -12,7 +12,7 @@ RUN apt-get update \ nodejs \ git -ARG gitBranch=blazor-wasm +ARG gitBranch=master WORKDIR /src ADD https://api.github.com/repos/dotnet/aspnetcore/git/ref/heads/${gitBranch} /aspnetcore.commit From c329dc555af44ae54fa80d11712d96f98b2f0af2 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav B Date: Thu, 4 Jun 2020 15:24:23 -0700 Subject: [PATCH 43/46] Quarantined flaky RazorSDK tests (#22553) --- .vscode/extensions.json | 2 +- .../Build/test/BuildIntegrationTests/BuildIntegrationTest.cs | 2 ++ .../Build/test/BuildIntegrationTests/PublishIntegrationTest.cs | 2 ++ .../test/IntegrationTests/BuildIntegrationTestLegacy.cs | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index a869097c1c..dc07887436 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,6 +1,6 @@ { "recommendations": [ - "ms-vscode.csharp", + "ms-dotnettools.csharp", "ms-vscode.PowerShell", "EditorConfig.EditorConfig" ] diff --git a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/BuildIntegrationTest.cs b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/BuildIntegrationTest.cs index c18f888583..c9184b649d 100644 --- a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/BuildIntegrationTest.cs +++ b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/BuildIntegrationTest.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text.Json; using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; using Xunit; using static Microsoft.AspNetCore.Components.WebAssembly.Build.WebAssemblyRuntimePackage; @@ -203,6 +204,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build } [Fact] + [QuarantinedTest] public async Task Build_SatelliteAssembliesAreCopiedToBuildOutput() { // Arrange diff --git a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs index 3d1cf2f568..b4b34470ea 100644 --- a/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs +++ b/src/Components/WebAssembly/Build/test/BuildIntegrationTests/PublishIntegrationTest.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Blazor.Build; +using Microsoft.AspNetCore.Testing; using Xunit; using ResourceHashesByNameDictionary = System.Collections.Generic.Dictionary; using static Microsoft.AspNetCore.Components.WebAssembly.Build.WebAssemblyRuntimePackage; @@ -284,6 +285,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Build } [Fact] + [QuarantinedTest] public async Task Publish_HostedApp_WithLinkOnBuildTrue_Works() { // Arrange diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/BuildIntegrationTestLegacy.cs b/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/BuildIntegrationTestLegacy.cs index f72de92966..222ad70710 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/BuildIntegrationTestLegacy.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/test/IntegrationTests/BuildIntegrationTestLegacy.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests @@ -30,6 +31,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests } [Fact] + [QuarantinedTest] public virtual async Task Building_Project() { using (CreateTestProject()) From da52d6b6366cb0913713a47128f5e37ec5dbdee9 Mon Sep 17 00:00:00 2001 From: Todd Grunke Date: Thu, 4 Jun 2020 16:56:50 -0700 Subject: [PATCH 44/46] Move IsSpacingToken perf optimizations down to base class (#22555) This gives the HtmlMarkupParser the same non-allocating behavior for it's IsSpacing* method invocations. Profile from following feedback ticket showed ~100ms time spent doing these allocations: https://developercommunity.visualstudio.com/content/problem/1006207/vs-2019-constant-freezing-please-wait-for-an-edito.html?childToView=1065769 --- .../src/Legacy/CSharpCodeParser.cs | 21 ----------------- .../src/Legacy/HtmlMarkupParser.cs | 23 ++++++++----------- .../src/Legacy/TokenizerBackedParser.cs | 21 +++++++++++++++++ 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/CSharpCodeParser.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/CSharpCodeParser.cs index 7339e9149f..9daadf3714 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/CSharpCodeParser.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/CSharpCodeParser.cs @@ -16,27 +16,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' }); - // Following four high traffic methods cached as using method groups would cause allocation on every invocation. - protected static readonly Func IsSpacingToken = (token) => - { - return token.Kind == SyntaxKind.Whitespace; - }; - - protected static readonly Func IsSpacingTokenIncludingNewLines = (token) => - { - return IsSpacingToken(token) || token.Kind == SyntaxKind.NewLine; - }; - - protected static readonly Func IsSpacingTokenIncludingComments = (token) => - { - return IsSpacingToken(token) || token.Kind == SyntaxKind.CSharpComment; - }; - - protected static readonly Func IsSpacingTokenIncludingNewLinesAndComments = (token) => - { - return IsSpacingTokenIncludingNewLines(token) || token.Kind == SyntaxKind.CSharpComment; - }; - private static readonly Func IsValidStatementSpacingToken = IsSpacingTokenIncludingNewLinesAndComments; diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlMarkupParser.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlMarkupParser.cs index 8c416986ec..d94d608d8b 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlMarkupParser.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlMarkupParser.cs @@ -128,7 +128,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy return null; } - AcceptWhile(IsSpacingToken(includeNewLines: true)); + AcceptWhile(IsSpacingTokenIncludingNewLines); builder.Add(OutputAsMarkupLiteral()); if (At(SyntaxKind.OpenAngle)) @@ -683,7 +683,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var bookmark = CurrentStart.AbsoluteIndex; // Skip whitespace - ReadWhile(IsSpacingToken(includeNewLines: true)); + ReadWhile(IsSpacingTokenIncludingNewLines); // Open Angle if (At(SyntaxKind.OpenAngle) && NextIs(SyntaxKind.ForwardSlash)) @@ -754,7 +754,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy SyntaxToken forwardSlashToken = null; SyntaxToken closeAngleToken = null; - AcceptWhile(IsSpacingToken(includeNewLines: false)); + AcceptWhile(IsSpacingToken); miscAttributeContentBuilder.Add(OutputAsMarkupLiteral()); if (At(SyntaxKind.CloseAngle) || @@ -1442,7 +1442,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy private void ParseDoubleTransition(in SyntaxListBuilder builder) { - AcceptWhile(IsSpacingToken(includeNewLines: true)); + AcceptWhile(IsSpacingTokenIncludingNewLines); builder.Add(OutputAsMarkupLiteral()); // First transition @@ -1463,7 +1463,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // We don't want to write it to output. Context.NullGenerateWhitespaceAndNewLine = false; SpanContext.ChunkGenerator = SpanChunkGenerator.Null; - AcceptWhile(IsSpacingToken(includeNewLines: false)); + AcceptWhile(IsSpacingToken); if (At(SyntaxKind.NewLine)) { AcceptAndMoveNext(); @@ -1549,7 +1549,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // We don't want to write it to output. Context.NullGenerateWhitespaceAndNewLine = false; SpanContext.ChunkGenerator = SpanChunkGenerator.Null; - AcceptWhile(IsSpacingToken(includeNewLines: false)); + AcceptWhile(IsSpacingToken); if (At(SyntaxKind.NewLine)) { AcceptAndMoveNext(); @@ -1596,7 +1596,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy (At(SyntaxKind.NewLine) || (At(SyntaxKind.Whitespace) && NextIs(SyntaxKind.NewLine)))) { - AcceptWhile(IsSpacingToken(includeNewLines: false)); + AcceptWhile(IsSpacingToken); AcceptAndMoveNext(); SpanContext.ChunkGenerator = SpanChunkGenerator.Null; builder.Add(OutputAsMarkupEphemeralLiteral()); @@ -1611,7 +1611,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // We don't want to write it to output. Context.NullGenerateWhitespaceAndNewLine = false; SpanContext.ChunkGenerator = SpanChunkGenerator.Null; - AcceptWhile(IsSpacingToken(includeNewLines: false)); + AcceptWhile(IsSpacingToken); if (At(SyntaxKind.NewLine)) { AcceptAndMoveNext(); @@ -1620,7 +1620,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy builder.Add(OutputAsMarkupEphemeralLiteral()); } - AcceptWhile(IsSpacingToken(includeNewLines: true)); + AcceptWhile(IsSpacingTokenIncludingNewLines); } private bool ScriptTagExpectsHtml(MarkupStartTagSyntax tagBlock) @@ -2111,11 +2111,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy return false; } - protected static Func IsSpacingToken(bool includeNewLines) - { - return token => token.Kind == SyntaxKind.Whitespace || (includeNewLines && token.Kind == SyntaxKind.NewLine); - } - internal static bool IsHyphen(SyntaxToken token) { return token.Kind == SyntaxKind.Text && token.Content == "-"; diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TokenizerBackedParser.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TokenizerBackedParser.cs index 2cf825d005..00e49d87ec 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TokenizerBackedParser.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TokenizerBackedParser.cs @@ -16,6 +16,27 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy private readonly TokenizerView _tokenizer; private SyntaxListBuilder? _tokenBuilder; + // Following four high traffic methods cached as using method groups would cause allocation on every invocation. + protected static readonly Func IsSpacingToken = (token) => + { + return token.Kind == SyntaxKind.Whitespace; + }; + + protected static readonly Func IsSpacingTokenIncludingNewLines = (token) => + { + return IsSpacingToken(token) || token.Kind == SyntaxKind.NewLine; + }; + + protected static readonly Func IsSpacingTokenIncludingComments = (token) => + { + return IsSpacingToken(token) || token.Kind == SyntaxKind.CSharpComment; + }; + + protected static readonly Func IsSpacingTokenIncludingNewLinesAndComments = (token) => + { + return IsSpacingTokenIncludingNewLines(token) || token.Kind == SyntaxKind.CSharpComment; + }; + protected TokenizerBackedParser(LanguageCharacteristics language, ParserContext context) : base(context) { From 2bf3960deabf23bb66ffa0ac70731e9a381696ca Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Thu, 4 Jun 2020 18:34:21 -0700 Subject: [PATCH 45/46] Optional client certificates sample (#21484) * Add an optional client certs example * Add the Challenge event * PR cleanup --- .../Certificate.Optional.Sample.csproj | 18 ++++++ .../Certificate.Optional.Sample/Program.cs | 44 +++++++++++++ .../Properties/launchSettings.json | 20 ++++++ .../Certificate.Optional.Sample/README.md | 12 ++++ .../Certificate.Optional.Sample/Startup.cs | 61 +++++++++++++++++++ .../appsettings.json | 10 +++ .../src/CertificateAuthenticationHandler.cs | 12 +++- .../Events/CertificateAuthenticationEvents.cs | 10 +++ .../src/Events/CertificateChallengeContext.cs | 37 +++++++++++ src/Security/Security.sln | 7 +++ 10 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Certificate.Optional.Sample.csproj create mode 100644 src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Program.cs create mode 100644 src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Properties/launchSettings.json create mode 100644 src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/README.md create mode 100644 src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Startup.cs create mode 100644 src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/appsettings.json create mode 100644 src/Security/Authentication/Certificate/src/Events/CertificateChallengeContext.cs diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Certificate.Optional.Sample.csproj b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Certificate.Optional.Sample.csproj new file mode 100644 index 0000000000..c89c416ab8 --- /dev/null +++ b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Certificate.Optional.Sample.csproj @@ -0,0 +1,18 @@ + + + + $(DefaultNetCoreTargetFramework) + OutOfProcess + + + + + + + + + + + + + diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Program.cs b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Program.cs new file mode 100644 index 0000000000..0edba882f7 --- /dev/null +++ b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Program.cs @@ -0,0 +1,44 @@ +using System.Net; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Server.Kestrel.Https; +using Microsoft.Extensions.Hosting; + +namespace Certificate.Optional.Sample +{ + public class Program + { + public const string HostWithoutCert = "127.0.0.1"; + public const string HostWithCert = "127.0.0.2"; + + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + webBuilder.ConfigureKestrel((context, options) => + { + // Kestrel can't have different ssl settings for different hosts on the same IP because there's no way to change them based on SNI. + // https://github.com/dotnet/runtime/issues/31097 + options.Listen(IPAddress.Parse(HostWithoutCert), 5001, listenOptions => + { + listenOptions.UseHttps(httpsOptions => + { + httpsOptions.ClientCertificateMode = ClientCertificateMode.NoCertificate; + }); + }); + options.Listen(IPAddress.Parse(HostWithCert), 5001, listenOptions => + { + listenOptions.UseHttps(httpsOptions => + { + httpsOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + }); + }); + }); + } +} diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Properties/launchSettings.json b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Properties/launchSettings.json new file mode 100644 index 0000000000..eae26333a3 --- /dev/null +++ b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Properties/launchSettings.json @@ -0,0 +1,20 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "https://localhost:44331/", + "sslPort": 44331 + } + }, + "profiles": { + "Certificate.Optional.Sample": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://127.0.0.1:5001/" + } + } +} diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/README.md b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/README.md new file mode 100644 index 0000000000..805fe3f2d7 --- /dev/null +++ b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/README.md @@ -0,0 +1,12 @@ +Optional certificates sample +============================ + +Client certificates are relatively easy to configure when they're required for all requests, you configure it in the server bindings as required and add the auth handler to validate it. Things are much trickier when you only want to require client certificates for some parts of your application. + +Client certificates are not an HTTP feature, they're a TLS feature. As such they're not included in the HTTP request structure like headers, they're negotiated when establishing the connection. This makes it impossible to require a certificate for some requests but not others on a given connection. + +There's an old way to renegotiate a connection if you find you need a client cert after it's established. It's a TLS action that pauses all traffic, redoes the TLS handshake, and allows you to request a client certificate. This caused a number of problems including weakening security, TCP deadlocks for POST requests, etc.. HTTP/2 has since disallowed this mechanism. + +This example shows an pattern for requiring client certificates only in some parts of your site by using different host bindings. The application is set up using two host names, mydomain.com and cert.mydomain.com (I've cheated and used 127.0.0.1 and 127.0.0.2 here instead to avoid setting up DNS). cert.mydomain.com is configured in the server to require client certificates, but mydomain.com is not. When you request part of the site that requires a client certificate it can redirect to the cert.mydomain.com while preserving the request path and query and the client will prompt for a certificate. + +Redirecting back to mydomain.com does not accomplish a real sign-out because the browser still caches the client cert selected for cert.mydomain.com. The only way to clear the browser cache is to close the browser. diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Startup.cs b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Startup.cs new file mode 100644 index 0000000000..df4204b966 --- /dev/null +++ b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/Startup.cs @@ -0,0 +1,61 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication.Certificate; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Certificate.Optional.Sample +{ + public class Startup + { + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) + { + services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme) + .AddCertificate(options => + { + options.Events = new CertificateAuthenticationEvents() + { + // If there is no certificate we must be on HostWithoutCert that does not require one. Redirect to HostWithCert to prompt for a certificate. + OnChallenge = context => + { + var request = context.Request; + var redirect = UriHelper.BuildAbsolute("https", + new HostString(Program.HostWithCert, context.HttpContext.Connection.LocalPort), + request.PathBase, request.Path, request.QueryString); + context.Response.Redirect(redirect, permanent: false, preserveMethod: true); + context.HandleResponse(); // Don't do the default behavior that would send a 403 response. + return Task.CompletedTask; + } + }; + }); + + services.AddAuthorization(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + app.UseRouting(); + + app.UseAuthentication(); + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.Map("/auth", context => + { + return context.Response.WriteAsync($"Hello {context.User.Identity.Name} at {context.Request.Host}"); + }).RequireAuthorization(); + + endpoints.Map("{*url}", context => + { + return context.Response.WriteAsync($"Hello {context.User.Identity.Name} at {context.Request.Host}. Try /auth"); + }); + }); + } + } +} diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/appsettings.json b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/appsettings.json new file mode 100644 index 0000000000..5ad1d76f0e --- /dev/null +++ b/src/Security/Authentication/Certificate/samples/Certificate.Optional.Sample/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Debug", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/src/Security/Authentication/Certificate/src/CertificateAuthenticationHandler.cs b/src/Security/Authentication/Certificate/src/CertificateAuthenticationHandler.cs index a33b05ceb8..e8f053d7ed 100644 --- a/src/Security/Authentication/Certificate/src/CertificateAuthenticationHandler.cs +++ b/src/Security/Authentication/Certificate/src/CertificateAuthenticationHandler.cs @@ -130,11 +130,19 @@ namespace Microsoft.AspNetCore.Authentication.Certificate } } - protected override Task HandleChallengeAsync(AuthenticationProperties properties) + protected override async Task HandleChallengeAsync(AuthenticationProperties properties) { + var authenticationChallengedContext = new CertificateChallengeContext(Context, Scheme, Options, properties); + await Events.Challenge(authenticationChallengedContext); + + if (authenticationChallengedContext.Handled) + { + return; + } + // Certificate authentication takes place at the connection level. We can't prompt once we're in // user code, so the best thing to do is Forbid, not Challenge. - return HandleForbiddenAsync(properties); + await HandleForbiddenAsync(properties); } private X509ChainPolicy BuildChainPolicy(X509Certificate2 certificate) diff --git a/src/Security/Authentication/Certificate/src/Events/CertificateAuthenticationEvents.cs b/src/Security/Authentication/Certificate/src/Events/CertificateAuthenticationEvents.cs index bf6e559e5f..b839aca90f 100644 --- a/src/Security/Authentication/Certificate/src/Events/CertificateAuthenticationEvents.cs +++ b/src/Security/Authentication/Certificate/src/Events/CertificateAuthenticationEvents.cs @@ -28,6 +28,11 @@ namespace Microsoft.AspNetCore.Authentication.Certificate /// public Func OnCertificateValidated { get; set; } = context => Task.CompletedTask; + /// + /// Invoked before a challenge is sent back to the caller. + /// + public Func OnChallenge { get; set; } = context => Task.CompletedTask; + /// /// Invoked when a certificate fails authentication. /// @@ -41,5 +46,10 @@ namespace Microsoft.AspNetCore.Authentication.Certificate /// /// public virtual Task CertificateValidated(CertificateValidatedContext context) => OnCertificateValidated(context); + + /// + /// Invoked before a challenge is sent back to the caller. + /// + public virtual Task Challenge(CertificateChallengeContext context) => OnChallenge(context); } } diff --git a/src/Security/Authentication/Certificate/src/Events/CertificateChallengeContext.cs b/src/Security/Authentication/Certificate/src/Events/CertificateChallengeContext.cs new file mode 100644 index 0000000000..e7f9b8f207 --- /dev/null +++ b/src/Security/Authentication/Certificate/src/Events/CertificateChallengeContext.cs @@ -0,0 +1,37 @@ +// 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.Http; + +namespace Microsoft.AspNetCore.Authentication.Certificate +{ + /// + /// State for the Challenge event. + /// + public class CertificateChallengeContext : PropertiesContext + { + /// + /// Creates a new . + /// + /// + /// + /// + /// + public CertificateChallengeContext( + HttpContext context, + AuthenticationScheme scheme, + CertificateAuthenticationOptions options, + AuthenticationProperties properties) + : base(context, scheme, options, properties) { } + + /// + /// If true, will skip any default logic for this challenge. + /// + public bool Handled { get; private set; } + + /// + /// Skips any default logic for this challenge. + /// + public void HandleResponse() => Handled = true; + } +} diff --git a/src/Security/Security.sln b/src/Security/Security.sln index 32566c7143..30eafcc0ee 100644 --- a/src/Security/Security.sln +++ b/src/Security/Security.sln @@ -164,6 +164,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys", "..\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{D6C3C4A9-197B-47B5-8B72-35047CBC4F22}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Certificate.Optional.Sample", "Authentication\Certificate\samples\Certificate.Optional.Sample\Certificate.Optional.Sample.csproj", "{1B6960CF-0421-405A-B357-4CCC42255CA7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -426,6 +428,10 @@ Global {D6C3C4A9-197B-47B5-8B72-35047CBC4F22}.Debug|Any CPU.Build.0 = Debug|Any CPU {D6C3C4A9-197B-47B5-8B72-35047CBC4F22}.Release|Any CPU.ActiveCfg = Release|Any CPU {D6C3C4A9-197B-47B5-8B72-35047CBC4F22}.Release|Any CPU.Build.0 = Release|Any CPU + {1B6960CF-0421-405A-B357-4CCC42255CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B6960CF-0421-405A-B357-4CCC42255CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B6960CF-0421-405A-B357-4CCC42255CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B6960CF-0421-405A-B357-4CCC42255CA7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -507,6 +513,7 @@ Global {A665A1F8-D1A4-42AC-B8E9-71B6F57481D8} = {A3766414-EB5C-40F7-B031-121804ED5D0A} {666AFB4D-68A5-4621-BB55-2CD82F0FB1F8} = {A3766414-EB5C-40F7-B031-121804ED5D0A} {D6C3C4A9-197B-47B5-8B72-35047CBC4F22} = {A3766414-EB5C-40F7-B031-121804ED5D0A} + {1B6960CF-0421-405A-B357-4CCC42255CA7} = {4DF524BF-D9A9-46F2-882C-68C48FF5FF33} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {ABF8089E-43D0-4010-84A7-7A9DCFE49357} From ce328923873dc3d7bb0dcbfb620ddde09cdf9f2f Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 5 Jun 2020 13:39:44 +1200 Subject: [PATCH 46/46] Remove allocations by changing AsTask to GetAsTask (#22557) --- .../Kestrel/Core/src/Internal/Http2/Http2Connection.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs index fc97e00068..6c31c51827 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs @@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.FlowControl; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Internal; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 { @@ -752,7 +753,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 // the new size. _frameWriter.UpdateMaxHeaderTableSize(Math.Min(_clientSettings.HeaderTableSize, (uint)Limits.Http2.HeaderTableSize)); - return ackTask.AsTask(); + return ackTask.GetAsTask(); } catch (Http2SettingsParameterOutOfRangeException ex) { @@ -785,7 +786,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 return Task.CompletedTask; } - return _frameWriter.WritePingAsync(Http2PingFrameFlags.ACK, payload).AsTask(); + return _frameWriter.WritePingAsync(Http2PingFrameFlags.ACK, payload).GetAsTask(); } private Task ProcessGoAwayFrameAsync()