From 56193850b9276591486ca5d921c4c3fd915ed935 Mon Sep 17 00:00:00 2001 From: John Luo Date: Mon, 29 Jul 2019 14:08:23 -0700 Subject: [PATCH 01/12] Update branding to preview 9 (#12698) --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 8f27f6529a..0a57dfb4a2 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -9,7 +9,7 @@ 3 0 0 - 8 + 9 preview$(PreReleasePreviewNumber) Preview $(PreReleasePreviewNumber) $(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion) From 82478eac6b23ed069b1e7d60811d4449a05b4440 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Sat, 27 Jul 2019 16:48:17 -0700 Subject: [PATCH 02/12] Blazor API Review: Forms Fixes: #12549 --- ...ft.AspNetCore.Components.netstandard2.0.cs | 35 ++++++++-------- .../Components/src/Forms/EditContext.cs | 19 +++++++++ .../EditContextDataAnnotationsExtensions.cs | 2 +- .../Forms/EditContextExpressionExtensions.cs | 35 ---------------- .../src/Forms/FieldChangedEventArgs.cs | 18 +++++--- .../Components/src/Forms/FieldIdentifier.cs | 13 ++++-- .../src/Forms/ValidationMessageStore.cs | 25 ++++++++++- ...idationMessageStoreExpressionExtensions.cs | 41 ------------------- .../src/Forms/ValidationRequestedEventArgs.cs | 14 +++++-- .../Forms/ValidationStateChangedEventArgs.cs | 14 +++++-- .../test/Forms/ValidationMessageStoreTest.cs | 4 +- ...spNetCore.Components.Web.netstandard2.0.cs | 7 ++-- .../Forms/EditContextFieldClassExtensions.cs | 10 ++--- src/Components/Web/src/Forms/InputBase.cs | 4 +- .../Web/src/Forms/ValidationMessage.cs | 5 +++ .../Web/src/Forms/ValidationSummary.cs | 5 +++ .../Web/test/Forms/InputBaseTest.cs | 11 +---- ...fyPropertyChangedValidationComponent.razor | 4 +- .../FormsTest/SimpleValidationComponent.razor | 4 +- 19 files changed, 132 insertions(+), 138 deletions(-) delete mode 100644 src/Components/Components/src/Forms/EditContextExpressionExtensions.cs delete mode 100644 src/Components/Components/src/Forms/ValidationMessageStoreExpressionExtensions.cs diff --git a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs index a4d8a9c9be..c9276fab24 100644 --- a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs +++ b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs @@ -419,8 +419,10 @@ namespace Microsoft.AspNetCore.Components.Forms public Microsoft.AspNetCore.Components.Forms.FieldIdentifier Field(string fieldName) { throw null; } public System.Collections.Generic.IEnumerable GetValidationMessages() { throw null; } public System.Collections.Generic.IEnumerable GetValidationMessages(Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; } + public System.Collections.Generic.IEnumerable GetValidationMessages(System.Linq.Expressions.Expression> accessor) { throw null; } public bool IsModified() { throw null; } public bool IsModified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; } + public bool IsModified(System.Linq.Expressions.Expression> accessor) { throw null; } public void MarkAsUnmodified() { } public void MarkAsUnmodified(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { } public void NotifyFieldChanged(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { } @@ -431,24 +433,20 @@ namespace Microsoft.AspNetCore.Components.Forms { public static Microsoft.AspNetCore.Components.Forms.EditContext AddDataAnnotationsValidation(this Microsoft.AspNetCore.Components.Forms.EditContext editContext) { throw null; } } - public static partial class EditContextExpressionExtensions + public sealed partial class FieldChangedEventArgs : System.EventArgs { - public static System.Collections.Generic.IEnumerable GetValidationMessages(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression> accessor) { throw null; } - public static bool IsModified(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression> accessor) { throw null; } - } - public sealed partial class FieldChangedEventArgs - { - internal FieldChangedEventArgs() { } + public FieldChangedEventArgs(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { } public Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } } [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] - public readonly partial struct FieldIdentifier + public readonly partial struct FieldIdentifier : System.IEquatable { private readonly object _dummy; public FieldIdentifier(object model, string fieldName) { throw null; } public string FieldName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } public static Microsoft.AspNetCore.Components.Forms.FieldIdentifier Create(System.Linq.Expressions.Expression> accessor) { throw null; } + public bool Equals(Microsoft.AspNetCore.Components.Forms.FieldIdentifier otherIdentifier) { throw null; } public override bool Equals(object obj) { throw null; } public override int GetHashCode() { throw null; } } @@ -457,24 +455,23 @@ namespace Microsoft.AspNetCore.Components.Forms public ValidationMessageStore(Microsoft.AspNetCore.Components.Forms.EditContext editContext) { } public System.Collections.Generic.IEnumerable this[Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier] { get { throw null; } } public System.Collections.Generic.IEnumerable this[System.Linq.Expressions.Expression> accessor] { get { throw null; } } + public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, System.Collections.Generic.IEnumerable messages) { } public void Add(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, string message) { } - public void AddRange(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier, System.Collections.Generic.IEnumerable messages) { } + public void Add(System.Linq.Expressions.Expression> accessor, System.Collections.Generic.IEnumerable messages) { } + public void Add(System.Linq.Expressions.Expression> accessor, string message) { } public void Clear() { } public void Clear(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { } + public void Clear(System.Linq.Expressions.Expression> accessor) { } } - public static partial class ValidationMessageStoreExpressionExtensions + public sealed partial class ValidationRequestedEventArgs : System.EventArgs { - public static void Add(this Microsoft.AspNetCore.Components.Forms.ValidationMessageStore store, System.Linq.Expressions.Expression> accessor, string message) { } - public static void AddRange(this Microsoft.AspNetCore.Components.Forms.ValidationMessageStore store, System.Linq.Expressions.Expression> accessor, System.Collections.Generic.IEnumerable messages) { } - public static void Clear(this Microsoft.AspNetCore.Components.Forms.ValidationMessageStore store, System.Linq.Expressions.Expression> accessor) { } + public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs Empty; + public ValidationRequestedEventArgs() { } } - public sealed partial class ValidationRequestedEventArgs + public sealed partial class ValidationStateChangedEventArgs : System.EventArgs { - internal ValidationRequestedEventArgs() { } - } - public sealed partial class ValidationStateChangedEventArgs - { - internal ValidationStateChangedEventArgs() { } + public static readonly new Microsoft.AspNetCore.Components.Forms.ValidationStateChangedEventArgs Empty; + public ValidationStateChangedEventArgs() { } } } namespace Microsoft.AspNetCore.Components.Rendering diff --git a/src/Components/Components/src/Forms/EditContext.cs b/src/Components/Components/src/Forms/EditContext.cs index fd09a241f4..caaf677c37 100644 --- a/src/Components/Components/src/Forms/EditContext.cs +++ b/src/Components/Components/src/Forms/EditContext.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; namespace Microsoft.AspNetCore.Components.Forms { @@ -158,6 +159,16 @@ namespace Microsoft.AspNetCore.Components.Forms } } + /// + /// Gets the current validation messages for the specified field. + /// + /// This method does not perform validation itself. It only returns messages determined by previous validation actions. + /// + /// Identifies the field whose current validation messages should be returned. + /// The current validation messages for the specified field. + public IEnumerable GetValidationMessages(Expression> accessor) + => GetValidationMessages(FieldIdentifier.Create(accessor)); + /// /// Determines whether the specified fields in this has been modified. /// @@ -167,6 +178,14 @@ namespace Microsoft.AspNetCore.Components.Forms ? state.IsModified : false; + /// + /// Determines whether the specified fields in this has been modified. + /// + /// Identifies the field whose current validation messages should be returned. + /// True if the field has been modified; otherwise false. + public bool IsModified(Expression> accessor) + => IsModified(FieldIdentifier.Create(accessor)); + /// /// Validates this . /// diff --git a/src/Components/Components/src/Forms/EditContextDataAnnotationsExtensions.cs b/src/Components/Components/src/Forms/EditContextDataAnnotationsExtensions.cs index 6542114a8d..9fce473a41 100644 --- a/src/Components/Components/src/Forms/EditContextDataAnnotationsExtensions.cs +++ b/src/Components/Components/src/Forms/EditContextDataAnnotationsExtensions.cs @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Components.Forms Validator.TryValidateProperty(propertyValue, validationContext, results); messages.Clear(fieldIdentifier); - messages.AddRange(fieldIdentifier, results.Select(result => result.ErrorMessage)); + messages.Add(fieldIdentifier, results.Select(result => result.ErrorMessage)); // We have to notify even if there were no messages before and are still no messages now, // because the "state" that changed might be the completion of some async validation task diff --git a/src/Components/Components/src/Forms/EditContextExpressionExtensions.cs b/src/Components/Components/src/Forms/EditContextExpressionExtensions.cs deleted file mode 100644 index 3d856e241f..0000000000 --- a/src/Components/Components/src/Forms/EditContextExpressionExtensions.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Linq.Expressions; - -namespace Microsoft.AspNetCore.Components.Forms -{ - /// - /// Provides extension methods to simplify using with expressions. - /// - public static class EditContextExpressionExtensions - { - /// - /// Gets the current validation messages for the specified field. - /// - /// This method does not perform validation itself. It only returns messages determined by previous validation actions. - /// - /// The . - /// Identifies the field whose current validation messages should be returned. - /// The current validation messages for the specified field. - public static IEnumerable GetValidationMessages(this EditContext editContext, Expression> accessor) - => editContext.GetValidationMessages(FieldIdentifier.Create(accessor)); - - /// - /// Determines whether the specified fields in this has been modified. - /// - /// The . - /// Identifies the field whose current validation messages should be returned. - /// True if the field has been modified; otherwise false. - public static bool IsModified(this EditContext editContext, Expression> accessor) - => editContext.IsModified(FieldIdentifier.Create(accessor)); - } -} diff --git a/src/Components/Components/src/Forms/FieldChangedEventArgs.cs b/src/Components/Components/src/Forms/FieldChangedEventArgs.cs index 9bf18dd486..780a91a01d 100644 --- a/src/Components/Components/src/Forms/FieldChangedEventArgs.cs +++ b/src/Components/Components/src/Forms/FieldChangedEventArgs.cs @@ -1,21 +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; + namespace Microsoft.AspNetCore.Components.Forms { /// /// Provides information about the event. /// - public sealed class FieldChangedEventArgs + public sealed class FieldChangedEventArgs : EventArgs { + /// + /// Creates a new instance of . + /// + /// The + public FieldChangedEventArgs(in FieldIdentifier fieldIdentifier) + { + FieldIdentifier = fieldIdentifier; + } + /// /// Identifies the field whose value has changed. /// public FieldIdentifier FieldIdentifier { get; } - - internal FieldChangedEventArgs(in FieldIdentifier fieldIdentifier) - { - FieldIdentifier = fieldIdentifier; - } } } diff --git a/src/Components/Components/src/Forms/FieldIdentifier.cs b/src/Components/Components/src/Forms/FieldIdentifier.cs index a113cccbe7..fa3fb72dad 100644 --- a/src/Components/Components/src/Forms/FieldIdentifier.cs +++ b/src/Components/Components/src/Forms/FieldIdentifier.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Components.Forms /// Uniquely identifies a single field that can be edited. This may correspond to a property on a /// model object, or can be any other named value. /// - public readonly struct FieldIdentifier + public readonly struct FieldIdentifier : IEquatable { /// /// Initializes a new instance of the structure. @@ -68,8 +68,15 @@ namespace Microsoft.AspNetCore.Components.Forms /// public override bool Equals(object obj) => obj is FieldIdentifier otherIdentifier - && otherIdentifier.Model == Model - && string.Equals(otherIdentifier.FieldName, FieldName, StringComparison.Ordinal); + && Equals(otherIdentifier); + + /// + public bool Equals(FieldIdentifier otherIdentifier) + { + return + otherIdentifier.Model == Model && + string.Equals(otherIdentifier.FieldName, FieldName, StringComparison.Ordinal); + } private static void ParseAccessor(Expression> accessor, out object model, out string fieldName) { diff --git a/src/Components/Components/src/Forms/ValidationMessageStore.cs b/src/Components/Components/src/Forms/ValidationMessageStore.cs index 2b520d68df..a8b0664bec 100644 --- a/src/Components/Components/src/Forms/ValidationMessageStore.cs +++ b/src/Components/Components/src/Forms/ValidationMessageStore.cs @@ -33,14 +33,30 @@ namespace Microsoft.AspNetCore.Components.Forms public void Add(in FieldIdentifier fieldIdentifier, string message) => GetOrCreateMessagesListForField(fieldIdentifier).Add(message); + /// + /// Adds a validation message for the specified field. + /// + /// Identifies the field for which to add the message. + /// The validation message. + public void Add(Expression> accessor, string message) + => Add(FieldIdentifier.Create(accessor), message); + /// /// Adds the messages from the specified collection for the specified field. /// /// The identifier for the field. /// The validation messages to be added. - public void AddRange(in FieldIdentifier fieldIdentifier, IEnumerable messages) + public void Add(in FieldIdentifier fieldIdentifier, IEnumerable messages) => GetOrCreateMessagesListForField(fieldIdentifier).AddRange(messages); + /// + /// Adds the messages from the specified collection for the specified field. + /// + /// Identifies the field for which to add the messages. + /// The validation messages to be added. + public void Add(Expression> accessor, IEnumerable messages) + => Add(FieldIdentifier.Create(accessor), messages); + /// /// Gets the validation messages within this for the specified field. /// @@ -74,6 +90,13 @@ namespace Microsoft.AspNetCore.Components.Forms _messages.Clear(); } + /// + /// Removes all messages within this for the specified field. + /// + /// Identifies the field for which to remove the messages. + public void Clear(Expression> accessor) + => Clear(FieldIdentifier.Create(accessor)); + /// /// Removes all messages within this for the specified field. /// diff --git a/src/Components/Components/src/Forms/ValidationMessageStoreExpressionExtensions.cs b/src/Components/Components/src/Forms/ValidationMessageStoreExpressionExtensions.cs deleted file mode 100644 index 6304c6e2c3..0000000000 --- a/src/Components/Components/src/Forms/ValidationMessageStoreExpressionExtensions.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Linq.Expressions; - -namespace Microsoft.AspNetCore.Components.Forms -{ - /// - /// Provides extension methods to simplify using with expressions. - /// - public static class ValidationMessageStoreExpressionExtensions - { - /// - /// Adds a validation message for the specified field. - /// - /// The . - /// Identifies the field for which to add the message. - /// The validation message. - public static void Add(this ValidationMessageStore store, Expression> accessor, string message) - => store.Add(FieldIdentifier.Create(accessor), message); - - /// - /// Adds the messages from the specified collection for the specified field. - /// - /// The . - /// Identifies the field for which to add the messages. - /// The validation messages to be added. - public static void AddRange(this ValidationMessageStore store, Expression> accessor, IEnumerable messages) - => store.AddRange(FieldIdentifier.Create(accessor), messages); - - /// - /// Removes all messages within this for the specified field. - /// - /// The . - /// Identifies the field for which to remove the messages. - public static void Clear(this ValidationMessageStore store, Expression> accessor) - => store.Clear(FieldIdentifier.Create(accessor)); - } -} diff --git a/src/Components/Components/src/Forms/ValidationRequestedEventArgs.cs b/src/Components/Components/src/Forms/ValidationRequestedEventArgs.cs index cd7f0db2b6..52efde8de5 100644 --- a/src/Components/Components/src/Forms/ValidationRequestedEventArgs.cs +++ b/src/Components/Components/src/Forms/ValidationRequestedEventArgs.cs @@ -1,16 +1,24 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components.Forms { /// /// Provides information about the event. /// - public sealed class ValidationRequestedEventArgs + public sealed class ValidationRequestedEventArgs : EventArgs { - internal static readonly ValidationRequestedEventArgs Empty = new ValidationRequestedEventArgs(); + /// + /// Gets a shared empty instance of . + /// + public static new readonly ValidationRequestedEventArgs Empty = new ValidationRequestedEventArgs(); - internal ValidationRequestedEventArgs() + /// + /// Creates a new instance of . + /// + public ValidationRequestedEventArgs() { } } diff --git a/src/Components/Components/src/Forms/ValidationStateChangedEventArgs.cs b/src/Components/Components/src/Forms/ValidationStateChangedEventArgs.cs index 0ac4af6658..fd8dbb8d69 100644 --- a/src/Components/Components/src/Forms/ValidationStateChangedEventArgs.cs +++ b/src/Components/Components/src/Forms/ValidationStateChangedEventArgs.cs @@ -1,16 +1,24 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components.Forms { /// /// Provides information about the event. /// - public sealed class ValidationStateChangedEventArgs + public sealed class ValidationStateChangedEventArgs : EventArgs { - internal static readonly ValidationStateChangedEventArgs Empty = new ValidationStateChangedEventArgs(); + /// + /// Gets a shared empty instance of . + /// + public new static readonly ValidationStateChangedEventArgs Empty = new ValidationStateChangedEventArgs(); - internal ValidationStateChangedEventArgs() + /// + /// Creates a new instance of + /// + public ValidationStateChangedEventArgs() { } } diff --git a/src/Components/Components/test/Forms/ValidationMessageStoreTest.cs b/src/Components/Components/test/Forms/ValidationMessageStoreTest.cs index 75e4ef3452..5264e254bd 100644 --- a/src/Components/Components/test/Forms/ValidationMessageStoreTest.cs +++ b/src/Components/Components/test/Forms/ValidationMessageStoreTest.cs @@ -42,7 +42,7 @@ namespace Microsoft.AspNetCore.Components.Forms } [Fact] - public void CanAddMessagesByRange() + public void CanAddMessagesMultiple() { // Arrange var messages = new ValidationMessageStore(new EditContext(new object())); @@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Components.Forms var entries = new[] { "A", "B", "C" }; // Act - messages.AddRange(field1, entries); + messages.Add(field1, entries); // Assert Assert.Equal(entries, messages[field1]); diff --git a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs index f577a47088..c64178d486 100644 --- a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs +++ b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs @@ -276,8 +276,8 @@ namespace Microsoft.AspNetCore.Components.Forms { public static partial class EditContextFieldClassExtensions { - public static string FieldClass(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; } - public static string FieldClass(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression> accessor) { throw null; } + public static string FieldCssClass(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; } + public static string FieldCssClass(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression> accessor) { throw null; } } public partial class EditForm : Microsoft.AspNetCore.Components.ComponentBase { @@ -308,7 +308,6 @@ namespace Microsoft.AspNetCore.Components.Forms protected T CurrentValue { get { throw null; } set { } } protected string CurrentValueAsString { get { throw null; } set { } } protected Microsoft.AspNetCore.Components.Forms.EditContext EditContext { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } - protected string FieldClass { get { throw null; } } protected Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] public T Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } @@ -372,6 +371,7 @@ namespace Microsoft.AspNetCore.Components.Forms [Microsoft.AspNetCore.Components.ParameterAttribute] public System.Linq.Expressions.Expression> For { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { } + protected virtual void Dispose(bool disposing) { } protected override void OnParametersSet() { } void System.IDisposable.Dispose() { } } @@ -381,6 +381,7 @@ namespace Microsoft.AspNetCore.Components.Forms [Microsoft.AspNetCore.Components.ParameterAttribute(CaptureUnmatchedValues=true)] public System.Collections.Generic.IReadOnlyDictionary AdditionalAttributes { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { } + protected virtual void Dispose(bool disposing) { } protected override void OnParametersSet() { } void System.IDisposable.Dispose() { } } diff --git a/src/Components/Web/src/Forms/EditContextFieldClassExtensions.cs b/src/Components/Web/src/Forms/EditContextFieldClassExtensions.cs index bd92563535..687328043a 100644 --- a/src/Components/Web/src/Forms/EditContextFieldClassExtensions.cs +++ b/src/Components/Web/src/Forms/EditContextFieldClassExtensions.cs @@ -14,23 +14,23 @@ namespace Microsoft.AspNetCore.Components.Forms public static class EditContextFieldClassExtensions { /// - /// Gets a string that indicates the status of the specified field. This will include + /// Gets a string that indicates the status of the specified field as a CSS class. This will include /// some combination of "modified", "valid", or "invalid", depending on the status of the field. /// /// The . /// An identifier for the field. /// A string that indicates the status of the field. - public static string FieldClass(this EditContext editContext, Expression> accessor) - => FieldClass(editContext, FieldIdentifier.Create(accessor)); + public static string FieldCssClass(this EditContext editContext, Expression> accessor) + => FieldCssClass(editContext, FieldIdentifier.Create(accessor)); /// - /// Gets a string that indicates the status of the specified field. This will include + /// Gets a string that indicates the status of the specified field as a CSS class. This will include /// some combination of "modified", "valid", or "invalid", depending on the status of the field. /// /// The . /// An identifier for the field. /// A string that indicates the status of the field. - public static string FieldClass(this EditContext editContext, in FieldIdentifier fieldIdentifier) + public static string FieldCssClass(this EditContext editContext, in FieldIdentifier fieldIdentifier) { var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any(); if (editContext.IsModified(fieldIdentifier)) diff --git a/src/Components/Web/src/Forms/InputBase.cs b/src/Components/Web/src/Forms/InputBase.cs index b103ad0d8b..4202aec396 100644 --- a/src/Components/Web/src/Forms/InputBase.cs +++ b/src/Components/Web/src/Forms/InputBase.cs @@ -143,8 +143,8 @@ namespace Microsoft.AspNetCore.Components.Forms /// Gets a string that indicates the status of the field being edited. This will include /// some combination of "modified", "valid", or "invalid", depending on the status of the field. /// - protected string FieldClass - => EditContext.FieldClass(FieldIdentifier); + private string FieldClass + => EditContext.FieldCssClass(FieldIdentifier); /// /// Gets a CSS class string that combines the class attribute and diff --git a/src/Components/Web/src/Forms/ValidationMessage.cs b/src/Components/Web/src/Forms/ValidationMessage.cs index 6102843f44..f4676d7921 100644 --- a/src/Components/Web/src/Forms/ValidationMessage.cs +++ b/src/Components/Web/src/Forms/ValidationMessage.cs @@ -85,9 +85,14 @@ namespace Microsoft.AspNetCore.Components.Forms StateHasChanged(); } + protected virtual void Dispose(bool disposing) + { + } + void IDisposable.Dispose() { DetachValidationStateChangedListener(); + Dispose(disposing: true); } private void DetachValidationStateChangedListener() diff --git a/src/Components/Web/src/Forms/ValidationSummary.cs b/src/Components/Web/src/Forms/ValidationSummary.cs index dc119a4f36..b0ed6596cd 100644 --- a/src/Components/Web/src/Forms/ValidationSummary.cs +++ b/src/Components/Web/src/Forms/ValidationSummary.cs @@ -82,9 +82,14 @@ namespace Microsoft.AspNetCore.Components.Forms StateHasChanged(); } + protected virtual void Dispose(bool disposing) + { + } + void IDisposable.Dispose() { DetachValidationStateChangedListener(); + Dispose(disposing: true); } private void DetachValidationStateChangedListener() diff --git a/src/Components/Web/test/Forms/InputBaseTest.cs b/src/Components/Web/test/Forms/InputBaseTest.cs index 71deade2b3..8be8525365 100644 --- a/src/Components/Web/test/Forms/InputBaseTest.cs +++ b/src/Components/Web/test/Forms/InputBaseTest.cs @@ -213,28 +213,23 @@ namespace Microsoft.AspNetCore.Components.Forms // Act/Assert: Initally, it's valid and unmodified var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); - Assert.Equal("valid", inputComponent.FieldClass); - Assert.Equal("valid", inputComponent.CssClass); // Same because no Class was specified + Assert.Equal("valid", inputComponent.CssClass); // no Class was specified // Act/Assert: Modify the field rootComponent.EditContext.NotifyFieldChanged(fieldIdentifier); - Assert.Equal("modified valid", inputComponent.FieldClass); Assert.Equal("modified valid", inputComponent.CssClass); // Act/Assert: Make it invalid var messages = new ValidationMessageStore(rootComponent.EditContext); messages.Add(fieldIdentifier, "I do not like this value"); - Assert.Equal("modified invalid", inputComponent.FieldClass); Assert.Equal("modified invalid", inputComponent.CssClass); // Act/Assert: Clear the modification flag rootComponent.EditContext.MarkAsUnmodified(fieldIdentifier); - Assert.Equal("invalid", inputComponent.FieldClass); Assert.Equal("invalid", inputComponent.CssClass); // Act/Assert: Make it valid messages.Clear(); - Assert.Equal("valid", inputComponent.FieldClass); Assert.Equal("valid", inputComponent.CssClass); } @@ -256,12 +251,10 @@ namespace Microsoft.AspNetCore.Components.Forms // Act/Assert var inputComponent = await RenderAndGetTestInputComponentAsync(rootComponent); - Assert.Equal("valid", inputComponent.FieldClass); Assert.Equal("my-class other-class valid", inputComponent.CssClass); // Act/Assert: Retains custom class when changing field class rootComponent.EditContext.NotifyFieldChanged(fieldIdentifier); - Assert.Equal("modified valid", inputComponent.FieldClass); Assert.Equal("my-class other-class modified valid", inputComponent.CssClass); } @@ -393,8 +386,6 @@ namespace Microsoft.AspNetCore.Components.Forms public new FieldIdentifier FieldIdentifier => base.FieldIdentifier; - public new string FieldClass => base.FieldClass; - protected override bool TryParseValueFromString(string value, out T result, out string validationErrorMessage) { throw new NotImplementedException(); diff --git a/src/Components/test/testassets/BasicTestApp/FormsTest/NotifyPropertyChangedValidationComponent.razor b/src/Components/test/testassets/BasicTestApp/FormsTest/NotifyPropertyChangedValidationComponent.razor index 8cc8859ad9..1fd89a851f 100644 --- a/src/Components/test/testassets/BasicTestApp/FormsTest/NotifyPropertyChangedValidationComponent.razor +++ b/src/Components/test/testassets/BasicTestApp/FormsTest/NotifyPropertyChangedValidationComponent.razor @@ -18,11 +18,11 @@

User name: - +

Accept terms: - +

diff --git a/src/Components/test/testassets/BasicTestApp/FormsTest/SimpleValidationComponent.razor b/src/Components/test/testassets/BasicTestApp/FormsTest/SimpleValidationComponent.razor index 5182f53a49..aa8ccfbe54 100644 --- a/src/Components/test/testassets/BasicTestApp/FormsTest/SimpleValidationComponent.razor +++ b/src/Components/test/testassets/BasicTestApp/FormsTest/SimpleValidationComponent.razor @@ -5,10 +5,10 @@

- User name: + User name:

- Accept terms: + Accept terms:

From 3919dd55c62c639491a596aa355adc86192b7ec2 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Sat, 27 Jul 2019 11:20:52 -0700 Subject: [PATCH 03/12] Fix globalization for `@bind-value` Fixes: #12631 These mappings were missing and adding them restores the correct behaviour. Mixing up the usage of `@bind` vs `@bind-value` so we have more coverage of this. --- ...oft.AspNetCore.Components.Web.netstandard2.0.cs | 2 ++ src/Components/Web/src/BindAttributes.cs | 2 ++ .../BasicTestApp/BindCasesComponent.razor | 14 ++++++++------ .../BasicTestApp/GlobalizationBindCases.razor | 10 ++++++---- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs index c64178d486..30fc3e3d99 100644 --- a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs +++ b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs @@ -6,7 +6,9 @@ namespace Microsoft.AspNetCore.Components [Microsoft.AspNetCore.Components.BindElementAttribute("select", null, "value", "onchange")] [Microsoft.AspNetCore.Components.BindElementAttribute("textarea", null, "value", "onchange")] [Microsoft.AspNetCore.Components.BindInputElementAttribute("checkbox", null, "checked", "onchange", false, null)] + [Microsoft.AspNetCore.Components.BindInputElementAttribute("date", "value", "value", "onchange", true, "yyyy-MM-dd")] [Microsoft.AspNetCore.Components.BindInputElementAttribute("date", null, "value", "onchange", true, "yyyy-MM-dd")] + [Microsoft.AspNetCore.Components.BindInputElementAttribute("number", "value", "value", "onchange", true, null)] [Microsoft.AspNetCore.Components.BindInputElementAttribute("number", null, "value", "onchange", true, null)] [Microsoft.AspNetCore.Components.BindInputElementAttribute("text", null, "value", "onchange", false, null)] [Microsoft.AspNetCore.Components.BindInputElementAttribute(null, "value", "value", "onchange", false, null)] diff --git a/src/Components/Web/src/BindAttributes.cs b/src/Components/Web/src/BindAttributes.cs index 69b4720b0a..91a1ee894c 100644 --- a/src/Components/Web/src/BindAttributes.cs +++ b/src/Components/Web/src/BindAttributes.cs @@ -24,9 +24,11 @@ namespace Microsoft.AspNetCore.Components // type="number" is invariant culture [BindInputElement("number", null, "value", "onchange", isInvariantCulture: true, format: null)] + [BindInputElement("number", "value", "value", "onchange", isInvariantCulture: true, format: null)] // type="date" is invariant culture with a specific format [BindInputElement("date", null, "value", "onchange", isInvariantCulture: true, format: "yyyy-MM-dd")] + [BindInputElement("date", "value", "value", "onchange", isInvariantCulture: true, format: "yyyy-MM-dd")] [BindElement("select", null, "value", "onchange")] [BindElement("textarea", null, "value", "onchange")] diff --git a/src/Components/test/testassets/BasicTestApp/BindCasesComponent.razor b/src/Components/test/testassets/BasicTestApp/BindCasesComponent.razor index 6f132f6f6a..5cdd9087ea 100644 --- a/src/Components/test/testassets/BasicTestApp/BindCasesComponent.razor +++ b/src/Components/test/testassets/BasicTestApp/BindCasesComponent.razor @@ -1,5 +1,7 @@

Bind cases

+@* There are a mix of cases here using bind and bind-value for coverage *@ +

Textbox

Initially blank: @@ -32,7 +34,7 @@

Nullable int: - + @textboxNullableIntValue

@@ -50,7 +52,7 @@

float: - + @textboxFloatValue

@@ -74,7 +76,7 @@

decimal: - + @textboxDecimalValue

@@ -119,7 +121,7 @@

Nullable DateTime: - + @textboxNullableDateTimeValue

@@ -149,7 +151,7 @@

DateTime (format): - + @textboxDateTimeFormatValue

@@ -161,7 +163,7 @@

DateTime (format / invalid value): - + @textboxDateTimeFormatInvalidValue

diff --git a/src/Components/test/testassets/BasicTestApp/GlobalizationBindCases.razor b/src/Components/test/testassets/BasicTestApp/GlobalizationBindCases.razor index bc7a53c4a3..9f4dadf7a9 100644 --- a/src/Components/test/testassets/BasicTestApp/GlobalizationBindCases.razor +++ b/src/Components/test/testassets/BasicTestApp/GlobalizationBindCases.razor @@ -3,6 +3,8 @@

Globalization Bind Cases

Culture is: @System.Globalization.CultureInfo.CurrentCulture.Name

+@* There are a mix of cases here using bind and bind-value for coverage *@ +

Numbers using bind in text fields

@@ -10,7 +12,7 @@ @inputTypeTextInt
- decimal: + decimal: @inputTypeTextDecimal
@@ -22,7 +24,7 @@ @inputTypeTextDateTime
- DateTimeOffset: + DateTimeOffset: @inputTypeTextDateTimeOffset
@@ -34,7 +36,7 @@ @inputTypeNumberInt
- decimal: + decimal: @inputTypeNumberDecimal
@@ -47,7 +49,7 @@ @inputTypeDateDateTime
- DateTimeOffset: + DateTimeOffset: @inputTypeDateDateTimeOffset
From bef01f3e9a0910aaa3d32ed598970264218f4c68 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Sat, 27 Jul 2019 18:09:16 -0700 Subject: [PATCH 04/12] Blazor API Review: UIEventArgs types Fixes: #12550 Removes UIEventArgs in favor of EventArgs as the base class. Moving Type into all of our event args types - this is important because many of the events types are used for multiple events. The only think about this that isn't perfect is that we have keep special casing change because of how binding works. I renamed the type to drop the `UI` prefix. It's not possible to define a subclass in the Web project because of the way covariance works (or doesn't work) in .NET. --- ...rosoft.AspNetCore.Blazor.netstandard2.0.cs | 2 +- .../src/Rendering/WebAssemblyRenderer.cs | 6 +- .../ComponentRenderingRazorIntegrationTest.cs | 6 +- .../test/RenderingRazorIntegrationTest.cs | 12 +- ...ft.AspNetCore.Components.netstandard2.0.cs | 71 ++++++------ .../{UIEventArgs.cs => ChangeEventArgs.cs} | 11 +- .../EventCallbackFactoryBinderExtensions.cs | 56 +++++----- ...ventCallbackFactoryEventArgsExtensions.cs} | 20 ++-- .../Components/src/Rendering/Renderer.Log.cs | 4 +- .../Components/src/Rendering/Renderer.cs | 2 +- .../Components/src/UIChangeEventArgs.cs | 17 --- ...ventCallbackFactoryBinderExtensionsTest.cs | 66 +++++------ .../Components/test/EventCallbackTest.cs | 68 ++++++------ .../Components/test/RenderTreeBuilderTest.cs | 18 +-- .../test/RenderTreeDiffBuilderTest.cs | 10 +- .../Components/test/RendererTest.cs | 62 +++++------ .../test/Rendering/HtmlRendererTestBase.cs | 4 +- src/Components/Shared/test/AssertFrame.cs | 2 +- src/Components/Shared/test/TestRenderer.cs | 4 +- ...spNetCore.Components.Web.netstandard2.0.cs | 103 ++++++++++-------- src/Components/Web/src/EventHandlers.cs | 82 +++++++------- .../src/RendererRegistryEventDispatcher.cs | 12 +- .../Web/src/UIClipboardEventArgs.cs | 8 +- src/Components/Web/src/UIErrorEventArgs.cs | 9 +- src/Components/Web/src/UIFocusEventArgs.cs | 9 +- src/Components/Web/src/UIKeyboardEventArgs.cs | 9 +- src/Components/Web/src/UIMouseEventArgs.cs | 9 +- src/Components/Web/src/UIProgressEventArgs.cs | 9 +- src/Components/Web/src/UITouchEventArgs.cs | 9 +- ...entCallbackFactoryUIEventArgsExtensions.cs | 2 +- .../InteropReliabilityTests.cs | 2 +- .../BasicTestApp/CulturePicker.razor | 2 +- .../test/testassets/Ignitor/ElementNode.cs | 5 +- 33 files changed, 373 insertions(+), 338 deletions(-) rename src/Components/Components/src/{UIEventArgs.cs => ChangeEventArgs.cs} (58%) rename src/Components/Components/src/{EventCallbackFactoryUIEventArgsExtensions.cs => EventCallbackFactoryEventArgsExtensions.cs} (74%) delete mode 100644 src/Components/Components/src/UIChangeEventArgs.cs diff --git a/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs b/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs index 3897a0bf62..5bd3c3d0b1 100644 --- a/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs +++ b/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs @@ -62,7 +62,7 @@ namespace Microsoft.AspNetCore.Blazor.Rendering public override Microsoft.AspNetCore.Components.Dispatcher Dispatcher { get { throw null; } } public System.Threading.Tasks.Task AddComponentAsync(System.Type componentType, string domElementSelector) { throw null; } public System.Threading.Tasks.Task AddComponentAsync(string domElementSelector) where TComponent : Microsoft.AspNetCore.Components.IComponent { throw null; } - public override System.Threading.Tasks.Task DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.Rendering.EventFieldInfo eventFieldInfo, Microsoft.AspNetCore.Components.UIEventArgs eventArgs) { throw null; } + public override System.Threading.Tasks.Task DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.Rendering.EventFieldInfo eventFieldInfo, System.EventArgs eventArgs) { throw null; } protected override void Dispose(bool disposing) { } protected override void HandleException(System.Exception exception) { } protected override System.Threading.Tasks.Task UpdateDisplayAsync(in Microsoft.AspNetCore.Components.Rendering.RenderBatch batch) { throw null; } diff --git a/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs b/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs index 528816e492..d4e867621e 100644 --- a/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs +++ b/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs @@ -120,7 +120,7 @@ namespace Microsoft.AspNetCore.Blazor.Rendering } /// - public override Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo eventFieldInfo, UIEventArgs eventArgs) + public override Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo eventFieldInfo, EventArgs eventArgs) { // Be sure we only run one event handler at once. Although they couldn't run // simultaneously anyway (there's only one thread), they could run nested on @@ -185,10 +185,10 @@ namespace Microsoft.AspNetCore.Blazor.Rendering { public readonly ulong EventHandlerId; public readonly EventFieldInfo EventFieldInfo; - public readonly UIEventArgs EventArgs; + public readonly EventArgs EventArgs; public readonly TaskCompletionSource TaskCompletionSource; - public IncomingEventInfo(ulong eventHandlerId, EventFieldInfo eventFieldInfo, UIEventArgs eventArgs) + public IncomingEventInfo(ulong eventHandlerId, EventFieldInfo eventFieldInfo, EventArgs eventArgs) { EventHandlerId = eventHandlerId; EventFieldInfo = eventFieldInfo; diff --git a/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs b/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs index abfdd07793..6c0a7fab96 100644 --- a/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs @@ -253,7 +253,7 @@ namespace Test public class MyComponent : ComponentBase { [Parameter] - public Action OnClick { get; set; } + public Action OnClick { get; set; } } } ")); @@ -263,7 +263,7 @@ namespace Test @code { private int counter; - private void Increment(UIEventArgs e) { + private void Increment(EventArgs e) { counter++; } }"); @@ -280,7 +280,7 @@ namespace Test AssertFrame.Attribute(frame, "OnClick", 1); // The handler will have been assigned to a lambda - var handler = Assert.IsType>(frame.AttributeValue); + var handler = Assert.IsType>(frame.AttributeValue); Assert.Equal("Test.TestComponent", handler.Target.GetType().FullName); Assert.Equal("Increment", handler.Method.Name); }); diff --git a/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs b/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs index 8b91c024b4..990ec1db18 100644 --- a/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs @@ -332,7 +332,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test // Trigger the change event to show it updates the property // // This should always complete synchronously. - var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new UIChangeEventArgs { Value = "Modified value", })); + var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new ChangeEventArgs { Value = "Modified value", })); Assert.Equal(TaskStatus.RanToCompletion, task.Status); await task; @@ -367,7 +367,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test // Trigger the change event to show it updates the property // // This should always complete synchronously. - var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new UIChangeEventArgs { Value = "Modified value", })); + var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new ChangeEventArgs { Value = "Modified value", })); Assert.Equal(TaskStatus.RanToCompletion, task.Status); await task; @@ -404,7 +404,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test // // This should always complete synchronously. var newDateValue = new DateTime(2018, 3, 5, 4, 5, 6); - var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new UIChangeEventArgs { Value = newDateValue.ToString(), })); + var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new ChangeEventArgs { Value = newDateValue.ToString(), })); Assert.Equal(TaskStatus.RanToCompletion, task.Status); await task; @@ -440,7 +440,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test // Trigger the change event to show it updates the property // // This should always complete synchronously. - var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new UIChangeEventArgs { Value = new DateTime(2018, 3, 5).ToString(testDateFormat), })); + var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new ChangeEventArgs { Value = new DateTime(2018, 3, 5).ToString(testDateFormat), })); Assert.Equal(TaskStatus.RanToCompletion, task.Status); await task; @@ -559,7 +559,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test // Trigger the change event to show it updates the property // // This should always complete synchronously. - var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new UIChangeEventArgs() { Value = false, })); + var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new ChangeEventArgs() { Value = false, })); Assert.Equal(TaskStatus.RanToCompletion, task.Status); await task; @@ -595,7 +595,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test // Trigger the change event to show it updates the property // // This should always complete synchronously. - var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new UIChangeEventArgs { Value = MyEnum.SecondValue.ToString(), })); + var task = renderer.Dispatcher.InvokeAsync(() => setter.InvokeAsync(new ChangeEventArgs { Value = MyEnum.SecondValue.ToString(), })); Assert.Equal(TaskStatus.RanToCompletion, task.Status); await task; diff --git a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs index c9276fab24..6f24d20761 100644 --- a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs +++ b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs @@ -119,6 +119,11 @@ namespace Microsoft.AspNetCore.Components public void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { } public System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) { throw null; } } + public partial class ChangeEventArgs : System.EventArgs + { + public ChangeEventArgs() { } + public object Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + } public abstract partial class ComponentBase : Microsoft.AspNetCore.Components.IComponent, Microsoft.AspNetCore.Components.IHandleAfterRender, Microsoft.AspNetCore.Components.IHandleEvent { public ComponentBase() { } @@ -188,35 +193,35 @@ namespace Microsoft.AspNetCore.Components } public static partial class EventCallbackFactoryBinderExtensions { - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, bool existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, decimal existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, double existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, int existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, long existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, bool? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, decimal? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, double? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, int? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, long? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, float? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, float existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, string existingValue, System.Globalization.CultureInfo culture = null) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, T existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, bool existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, decimal existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, double existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, int existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, long existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, bool? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTimeOffset? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime? existingValue, string format, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, decimal? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, double? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, int? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, long? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, float? existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, float existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, string existingValue, System.Globalization.CultureInfo culture = null) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, T existingValue, System.Globalization.CultureInfo culture = null) { throw null; } } - public static partial class EventCallbackFactoryUIEventArgsExtensions + public static partial class EventCallbackFactoryEventArgsExtensions { - public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action callback) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action callback) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Func callback) { throw null; } - public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Func callback) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action callback) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action callback) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Func callback) { throw null; } + public static Microsoft.AspNetCore.Components.EventCallback Create(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Func callback) { throw null; } } [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] public readonly partial struct EventCallbackWorkItem @@ -365,16 +370,6 @@ namespace Microsoft.AspNetCore.Components public RouteAttribute(string template) { } public string Template { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } } - public partial class UIChangeEventArgs : Microsoft.AspNetCore.Components.UIEventArgs - { - public UIChangeEventArgs() { } - public object Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } - } - public partial class UIEventArgs - { - public UIEventArgs() { } - public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } - } public abstract partial class UriHelperBase : Microsoft.AspNetCore.Components.IUriHelper { protected UriHelperBase() { } @@ -516,7 +511,7 @@ namespace Microsoft.AspNetCore.Components.Rendering public event System.UnhandledExceptionEventHandler UnhandledSynchronizationException { add { } remove { } } protected internal virtual void AddToRenderQueue(int componentId, Microsoft.AspNetCore.Components.RenderFragment renderFragment) { } protected internal int AssignRootComponentId(Microsoft.AspNetCore.Components.IComponent component) { throw null; } - public virtual System.Threading.Tasks.Task DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.Rendering.EventFieldInfo fieldInfo, Microsoft.AspNetCore.Components.UIEventArgs eventArgs) { throw null; } + public virtual System.Threading.Tasks.Task DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.Rendering.EventFieldInfo fieldInfo, System.EventArgs eventArgs) { throw null; } public void Dispose() { } protected virtual void Dispose(bool disposing) { } protected abstract void HandleException(System.Exception exception); diff --git a/src/Components/Components/src/UIEventArgs.cs b/src/Components/Components/src/ChangeEventArgs.cs similarity index 58% rename from src/Components/Components/src/UIEventArgs.cs rename to src/Components/Components/src/ChangeEventArgs.cs index 8be500d2ae..e64e4c10c7 100644 --- a/src/Components/Components/src/UIEventArgs.cs +++ b/src/Components/Components/src/ChangeEventArgs.cs @@ -1,16 +1,19 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// - /// Supplies information about an event that is being raised. + /// Supplies information about an change event that is being raised. /// - public class UIEventArgs + public class ChangeEventArgs : EventArgs { /// - /// Gets or sets the type of the event. + /// Gets or sets the new value. /// - public string Type { get; set; } + public object Value { get; set; } + } } diff --git a/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs b/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs index a007c47f09..99eac1965a 100644 --- a/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs +++ b/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -107,7 +107,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -126,7 +126,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -145,7 +145,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -164,7 +164,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -183,7 +183,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -202,7 +202,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -240,7 +240,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -259,7 +259,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -278,7 +278,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -298,7 +298,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -318,7 +318,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -338,7 +338,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -358,7 +358,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -378,7 +378,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -398,7 +398,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -418,7 +418,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -439,7 +439,7 @@ namespace Microsoft.AspNetCore.Components /// /// /// - public static EventCallback CreateBinder( + public static EventCallback CreateBinder( this EventCallbackFactory factory, object receiver, Action setter, @@ -449,14 +449,14 @@ namespace Microsoft.AspNetCore.Components return CreateBinderCore(factory, receiver, setter, culture, ParserDelegateCache.Get()); } - private static EventCallback CreateBinderCore( + private static EventCallback CreateBinderCore( this EventCallbackFactory factory, object receiver, Action setter, CultureInfo culture, BindConverter.BindParser converter) { - Action callback = e => + Action callback = e => { T value = default; var converted = false; @@ -489,10 +489,10 @@ namespace Microsoft.AspNetCore.Components setter(default); } }; - return factory.Create(receiver, callback); + return factory.Create(receiver, callback); } - private static EventCallback CreateBinderCore( + private static EventCallback CreateBinderCore( this EventCallbackFactory factory, object receiver, Action setter, @@ -500,7 +500,7 @@ namespace Microsoft.AspNetCore.Components string format, BindConverter.BindParserWithFormat converter) { - Action callback = e => + Action callback = e => { T value = default; var converted = false; @@ -533,7 +533,7 @@ namespace Microsoft.AspNetCore.Components setter(default); } }; - return factory.Create(receiver, callback); + return factory.Create(receiver, callback); } } } diff --git a/src/Components/Components/src/EventCallbackFactoryUIEventArgsExtensions.cs b/src/Components/Components/src/EventCallbackFactoryEventArgsExtensions.cs similarity index 74% rename from src/Components/Components/src/EventCallbackFactoryUIEventArgsExtensions.cs rename to src/Components/Components/src/EventCallbackFactoryEventArgsExtensions.cs index bf19b94c68..d0c4aec303 100644 --- a/src/Components/Components/src/EventCallbackFactoryUIEventArgsExtensions.cs +++ b/src/Components/Components/src/EventCallbackFactoryEventArgsExtensions.cs @@ -7,9 +7,9 @@ using System.Threading.Tasks; namespace Microsoft.AspNetCore.Components { /// - /// Provides extension methods for and types. + /// Provides extension methods for and types. /// - public static class EventCallbackFactoryUIEventArgsExtensions + public static class EventCallbackFactoryEventArgsExtensions { /// /// Creates an for the provided and @@ -19,14 +19,14 @@ namespace Microsoft.AspNetCore.Components /// The event receiver. /// The event callback. /// The . - public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback) + public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } - return factory.Create(receiver, callback); + return factory.Create(receiver, callback); } /// @@ -37,14 +37,14 @@ namespace Microsoft.AspNetCore.Components /// The event receiver. /// The event callback. /// The . - public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback) + public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } - return factory.Create(receiver, callback); + return factory.Create(receiver, callback); } /// @@ -55,14 +55,14 @@ namespace Microsoft.AspNetCore.Components /// The event receiver. /// The event callback. /// The . - public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback) + public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } - return factory.Create(receiver, callback); + return factory.Create(receiver, callback); } /// @@ -73,14 +73,14 @@ namespace Microsoft.AspNetCore.Components /// The event receiver. /// The event callback. /// The . - public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback) + public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } - return factory.Create(receiver, callback); + return factory.Create(receiver, callback); } } } diff --git a/src/Components/Components/src/Rendering/Renderer.Log.cs b/src/Components/Components/src/Rendering/Renderer.Log.cs index 68a28b62a1..3b70f58973 100644 --- a/src/Components/Components/src/Rendering/Renderer.Log.cs +++ b/src/Components/Components/src/Rendering/Renderer.Log.cs @@ -56,9 +56,9 @@ namespace Microsoft.AspNetCore.Components.Rendering } } - internal static void HandlingEvent(ILogger logger, ulong eventHandlerId, UIEventArgs eventArgs) + internal static void HandlingEvent(ILogger logger, ulong eventHandlerId, EventArgs eventArgs) { - _handlingEvent(logger, eventHandlerId, eventArgs?.Type ?? "null", null); + _handlingEvent(logger, eventHandlerId, eventArgs?.GetType().Name ?? "null", null); } } } diff --git a/src/Components/Components/src/Rendering/Renderer.cs b/src/Components/Components/src/Rendering/Renderer.cs index 83505bd61e..8cbc6b78b6 100644 --- a/src/Components/Components/src/Rendering/Renderer.cs +++ b/src/Components/Components/src/Rendering/Renderer.cs @@ -206,7 +206,7 @@ namespace Microsoft.AspNetCore.Components.Rendering /// A which will complete once all asynchronous processing related to the event /// has completed. /// - public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, UIEventArgs eventArgs) + public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, EventArgs eventArgs) { EnsureSynchronizationContext(); diff --git a/src/Components/Components/src/UIChangeEventArgs.cs b/src/Components/Components/src/UIChangeEventArgs.cs deleted file mode 100644 index 79402eb55e..0000000000 --- a/src/Components/Components/src/UIChangeEventArgs.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNetCore.Components -{ - /// - /// Supplies information about an input change event that is being raised. - /// - public class UIChangeEventArgs : UIEventArgs - { - /// - /// Gets or sets the new value of the input. This may be a - /// or a . - /// - public object Value { get; set; } - } -} diff --git a/src/Components/Components/test/EventCallbackFactoryBinderExtensionsTest.cs b/src/Components/Components/test/EventCallbackFactoryBinderExtensionsTest.cs index 0a588259cc..8df5092112 100644 --- a/src/Components/Components/test/EventCallbackFactoryBinderExtensionsTest.cs +++ b/src/Components/Components/test/EventCallbackFactoryBinderExtensionsTest.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Components var binder = EventCallback.Factory.CreateBinder(component, setter, value); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "not-an-integer!", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "not-an-integer!", }); Assert.Equal(17, value); // Setter not called Assert.Equal(1, component.Count); @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Components var binder = EventCallback.Factory.CreateBinder(component, setter, value); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = string.Empty, }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = string.Empty, }); Assert.Equal(0, value); // Calls setter to apply default value for this type Assert.Equal(1, component.Count); @@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Components // Act await Assert.ThrowsAsync(() => { - return binder.InvokeAsync(new UIChangeEventArgs() { Value = "18", }); + return binder.InvokeAsync(new ChangeEventArgs() { Value = "18", }); }); Assert.Equal(1, component.Count); @@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Components var binder = EventCallback.Factory.CreateBinder(component, setter, value); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "not-an-integer!", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "not-an-integer!", }); Assert.Equal(17, value); // Setter not called Assert.Equal(1, component.Count); @@ -92,7 +92,7 @@ namespace Microsoft.AspNetCore.Components var binder = EventCallback.Factory.CreateBinder(component, setter, value); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "", }); Assert.Null(value); // Setter called Assert.Equal(1, component.Count); @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = "bye"; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue, }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue, }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -130,7 +130,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = true; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = true, }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = true, }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -149,7 +149,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (bool?)true; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = true, }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = true, }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -168,7 +168,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = 42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -187,7 +187,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (int?)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -206,7 +206,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (long)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -225,7 +225,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (long?)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -244,7 +244,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (float)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -263,7 +263,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (float?)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -282,7 +282,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (double)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -301,7 +301,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (double?)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -320,7 +320,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (decimal)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -339,7 +339,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = (decimal?)42; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -358,7 +358,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = AttributeTargets.Class; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -377,7 +377,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = AttributeTargets.Class; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -396,7 +396,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4, 1, 2, 3); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -415,7 +415,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4, 1, 2, 3); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -435,7 +435,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(format), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(format), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -455,7 +455,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(format), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(format), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -474,7 +474,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4, 1, 2, 3); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -493,7 +493,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4, 1, 2, 3); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -513,7 +513,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(format), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(format), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -533,7 +533,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new DateTime(2018, 3, 4); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(format), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(format), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -553,7 +553,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = Guid.NewGuid(); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -573,7 +573,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = Guid.NewGuid(); // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -592,7 +592,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = new SecretMessage() { Message = "TypeConverter may be old, but it still works!", }; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = expectedValue.ToString(), }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = expectedValue.ToString(), }); Assert.Equal(expectedValue.Message, value.Message); Assert.Equal(1, component.Count); @@ -627,7 +627,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = 42_000; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42 000,00", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42 000,00", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); @@ -646,7 +646,7 @@ namespace Microsoft.AspNetCore.Components var expectedValue = 42_000; // Act - await binder.InvokeAsync(new UIChangeEventArgs() { Value = "42,000.00", }); + await binder.InvokeAsync(new ChangeEventArgs() { Value = "42,000.00", }); Assert.Equal(expectedValue, value); Assert.Equal(1, component.Count); diff --git a/src/Components/Components/test/EventCallbackTest.cs b/src/Components/Components/test/EventCallbackTest.cs index 6fc1e601ca..25405c2180 100644 --- a/src/Components/Components/test/EventCallbackTest.cs +++ b/src/Components/Components/test/EventCallbackTest.cs @@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Components public async Task EventCallbackOfT_Default() { // Arrange - var callback = default(EventCallback); + var callback = default(EventCallback); // Act & Assert (Does not throw) await callback.InvokeAsync(null); @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Components { // Arrange int runCount = 0; - var callback = new EventCallback(null, (Action)(() => runCount++)); + var callback = new EventCallback(null, (Action)(() => runCount++)); // Act await callback.InvokeAsync(null); @@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -104,8 +104,8 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act await callback.InvokeAsync(null); @@ -124,11 +124,11 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -164,8 +164,8 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act & Assert await Assert.ThrowsAsync(() => @@ -202,7 +202,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -217,8 +217,8 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act await callback.InvokeAsync(null); @@ -237,11 +237,11 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -277,8 +277,8 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act & Assert await Assert.ThrowsAsync(() => @@ -294,7 +294,7 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - var callback = new EventCallback(component, (Action)(() => runCount++)); + var callback = new EventCallback(component, (Action)(() => runCount++)); // Act await callback.InvokeAsync(null); @@ -312,10 +312,10 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - var callback = new EventCallback(component, (Action)(() => runCount++)); + var callback = new EventCallback(component, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -330,8 +330,8 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act await callback.InvokeAsync(null); @@ -350,11 +350,11 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -370,7 +370,7 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); + var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act await callback.InvokeAsync(null); @@ -388,10 +388,10 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); + var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert @@ -406,8 +406,8 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act await callback.InvokeAsync(null); @@ -426,11 +426,11 @@ namespace Microsoft.AspNetCore.Components var component = new EventCountingComponent(); int runCount = 0; - UIEventArgs arg = null; - var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); + EventArgs arg = null; + var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(new UIEventArgs()); + await callback.InvokeAsync(new EventArgs()); // Assert diff --git a/src/Components/Components/test/RenderTreeBuilderTest.cs b/src/Components/Components/test/RenderTreeBuilderTest.cs index c90259f057..3e5cc0b969 100644 --- a/src/Components/Components/test/RenderTreeBuilderTest.cs +++ b/src/Components/Components/test/RenderTreeBuilderTest.cs @@ -216,7 +216,7 @@ namespace Microsoft.AspNetCore.Components.Test { // Arrange var builder = new RenderTreeBuilder(); - Action eventHandler = eventInfo => { }; + Action eventHandler = eventInfo => { }; // Act builder.OpenElement(0, "myelement"); // 0: eventHandler = eventInfo => { }; + Action eventHandler = eventInfo => { }; // Act builder.OpenElement(0, "myelement"); @@ -428,7 +428,7 @@ namespace Microsoft.AspNetCore.Components.Test { builder.OpenElement(0, "some element"); builder.AddContent(1, "hello"); - builder.AddAttribute(2, "name", new Action(eventInfo => { })); + builder.AddAttribute(2, "name", new Action(eventInfo => { })); }); } @@ -897,7 +897,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var builder = new RenderTreeBuilder(); - var value = new Action((e) => { }); + var value = new Action((e) => { }); // Act builder.OpenElement(0, "elem"); @@ -919,7 +919,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act builder.OpenElement(0, "elem"); - builder.AddAttribute(1, "attr", (Action)null); + builder.AddAttribute(1, "attr", (Action)null); builder.CloseElement(); // Assert @@ -965,7 +965,7 @@ namespace Microsoft.AspNetCore.Components.Test frame => AssertFrame.Element(frame, "elem", 1, 0)); } - public static TheoryData> EventHandlerValues => new TheoryData> + public static TheoryData> EventHandlerValues => new TheoryData> { null, (e) => { }, @@ -973,7 +973,7 @@ namespace Microsoft.AspNetCore.Components.Test [Theory] [MemberData(nameof(EventHandlerValues))] - public void AddAttribute_Component_EventHandlerValue_SetsAttributeValue(Action value) + public void AddAttribute_Component_EventHandlerValue_SetsAttributeValue(Action value) { // Arrange var builder = new RenderTreeBuilder(); @@ -1241,7 +1241,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var builder = new RenderTreeBuilder(); - var value = new Action((e) => { }); + var value = new Action((e) => { }); // Act builder.OpenElement(0, "elem"); @@ -1261,7 +1261,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var builder = new RenderTreeBuilder(); - var value = new Action((e) => { }); + var value = new Action((e) => { }); // Act builder.OpenComponent(0); diff --git a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs index 3c0edffd62..45e7fdcba1 100644 --- a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs +++ b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs @@ -835,9 +835,9 @@ namespace Microsoft.AspNetCore.Components.Test public void RecognizesAttributeEventHandlerValuesChanged() { // Arrange - Action retainedHandler = _ => { }; - Action removedHandler = _ => { }; - Action addedHandler = _ => { }; + Action retainedHandler = _ => { }; + Action removedHandler = _ => { }; + Action addedHandler = _ => { }; oldTree.OpenElement(0, "My element"); oldTree.AddAttribute(1, "onfoo", retainedHandler); oldTree.AddAttribute(2, "onbar", removedHandler); @@ -1575,7 +1575,7 @@ namespace Microsoft.AspNetCore.Components.Test public void PreservesEventHandlerIdsForRetainedEventHandlers() { // Arrange - Action retainedHandler = _ => { }; + Action retainedHandler = _ => { }; oldTree.OpenElement(0, "My element"); oldTree.AddAttribute(1, "ontest", retainedHandler); oldTree.CloseElement(); @@ -1601,7 +1601,7 @@ namespace Microsoft.AspNetCore.Components.Test public void PreservesEventHandlerIdsForRetainedEventHandlers_SlowPath() { // Arrange - Action retainedHandler = _ => { }; + Action retainedHandler = _ => { }; oldTree.OpenElement(0, "My element"); oldTree.AddAttribute(0, "ontest", retainedHandler); oldTree.CloseElement(); diff --git a/src/Components/Components/test/RendererTest.cs b/src/Components/Components/test/RendererTest.cs index c404e5360f..f895c47f10 100644 --- a/src/Components/Components/test/RendererTest.cs +++ b/src/Components/Components/test/RendererTest.cs @@ -430,7 +430,7 @@ namespace Microsoft.AspNetCore.Components.Test { // Arrange: Render a component with an event handler var renderer = new TestRenderer(); - UIEventArgs receivedArgs = null; + EventArgs receivedArgs = null; var component = new EventComponent { @@ -448,7 +448,7 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Null(receivedArgs); // Act/Assert: Event can be fired - var eventArgs = new UIEventArgs(); + var eventArgs = new EventArgs(); var task = renderer.DispatchEventAsync(eventHandlerId, eventArgs); // This should always be run synchronously @@ -460,7 +460,7 @@ namespace Microsoft.AspNetCore.Components.Test { // Arrange: Render a component with an event handler var renderer = new TestRenderer(); - UIEventArgs receivedArgs = null; + EventArgs receivedArgs = null; var component = new EventComponent { @@ -478,7 +478,7 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Null(receivedArgs); // Act/Assert: Event can be fired - var eventArgs = new UIEventArgs(); + var eventArgs = new EventArgs(); var renderTask = renderer.DispatchEventAsync(eventHandlerId, eventArgs); Assert.True(renderTask.IsCompletedSuccessfully); Assert.Same(eventArgs, receivedArgs); @@ -508,7 +508,7 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Empty(renderer.HandledExceptions); // Act/Assert: Event can be fired - var eventArgs = new UIEventArgs(); + var eventArgs = new EventArgs(); var renderTask = renderer.DispatchEventAsync(eventHandlerId, eventArgs); Assert.True(renderTask.IsCompletedSuccessfully); @@ -577,7 +577,7 @@ namespace Microsoft.AspNetCore.Components.Test [Fact] public void CanDispatchEventsToNestedComponents() { - UIEventArgs receivedArgs = null; + EventArgs receivedArgs = null; // Arrange: Render parent component var renderer = new TestRenderer(); @@ -608,7 +608,7 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Null(receivedArgs); // Act/Assert: Event can be fired - var eventArgs = new UIEventArgs(); + var eventArgs = new EventArgs(); var renderTask = renderer.DispatchEventAsync(eventHandlerId, eventArgs); Assert.True(renderTask.IsCompletedSuccessfully); Assert.Same(eventArgs, receivedArgs); @@ -619,7 +619,7 @@ namespace Microsoft.AspNetCore.Components.Test { // Arrange: Render a component with an event handler var renderer = new TestRenderer(); - UIEventArgs receivedArgs = null; + EventArgs receivedArgs = null; var state = 0; var tcs = new TaskCompletionSource(); @@ -646,7 +646,7 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Null(receivedArgs); // Act/Assert: Event can be fired - var eventArgs = new UIEventArgs(); + var eventArgs = new EventArgs(); var task = renderer.DispatchEventAsync(eventHandlerId, eventArgs); Assert.Equal(1, state); Assert.Same(eventArgs, receivedArgs); @@ -746,7 +746,7 @@ namespace Microsoft.AspNetCore.Components.Test [Fact] public async Task CanAsyncDispatchEventsToNestedComponents() { - UIEventArgs receivedArgs = null; + EventArgs receivedArgs = null; var state = 0; var tcs = new TaskCompletionSource(); @@ -786,7 +786,7 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Null(receivedArgs); // Act/Assert: Event can be fired - var eventArgs = new UIEventArgs(); + var eventArgs = new EventArgs(); var task = renderer.DispatchEventAsync(eventHandlerId, eventArgs); Assert.Equal(1, state); Assert.Same(eventArgs, receivedArgs); @@ -1774,7 +1774,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert await Assert.ThrowsAsync(() => { - return renderer.DispatchEventAsync(0, new UIEventArgs()); + return renderer.DispatchEventAsync(0, new EventArgs()); }); } @@ -2052,7 +2052,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var renderer = new TestRenderer(); var eventCount = 0; - Action origEventHandler = args => { eventCount++; }; + Action origEventHandler = args => { eventCount++; }; var component = new EventComponent { OnTest = origEventHandler }; var componentId = renderer.AssignRootComponentId(component); component.TriggerRender(); @@ -2094,7 +2094,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var renderer = new TestRenderer(); var eventCount = 0; - Action origEventHandler = args => { eventCount++; }; + Action origEventHandler = args => { eventCount++; }; var component = new EventComponent { OnTest = origEventHandler }; var componentId = renderer.AssignRootComponentId(component); component.TriggerRender(); @@ -2129,7 +2129,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var renderer = new TestRenderer(); var eventCount = 0; - Action origEventHandler = args => { eventCount++; }; + Action origEventHandler = args => { eventCount++; }; var component = new ConditionalParentComponent { IncludeChild = true, @@ -2180,7 +2180,7 @@ namespace Microsoft.AspNetCore.Components.Test // Arrange var renderer = new TestRenderer(); var eventCount = 0; - Action origEventHandler = args => { eventCount++; }; + Action origEventHandler = args => { eventCount++; }; var component = new EventComponent { OnTest = origEventHandler }; var componentId = renderer.AssignRootComponentId(component); component.TriggerRender(); @@ -2222,7 +2222,7 @@ namespace Microsoft.AspNetCore.Components.Test { builder.AddContent(0, "Child event count: " + eventCount); builder.OpenComponent(1); - builder.AddAttribute(2, nameof(EventComponent.OnTest), new Action(args => + builder.AddAttribute(2, nameof(EventComponent.OnTest), new Action(args => { eventCount++; rootComponent.TriggerRender(); @@ -2468,7 +2468,7 @@ namespace Microsoft.AspNetCore.Components.Test .AttributeEventHandlerId; // Act: Toggle the checkbox - var eventArgs = new UIChangeEventArgs { Value = true }; + var eventArgs = new ChangeEventArgs { Value = true }; var renderTask = renderer.DispatchEventAsync(checkboxChangeEventHandlerId, eventArgs); Assert.True(renderTask.IsCompletedSuccessfully); @@ -2713,7 +2713,7 @@ namespace Microsoft.AspNetCore.Components.Test }; var numEventsFired = 0; EventComponent component = null; - Action eventHandler = null; + Action eventHandler = null; eventHandler = _ => { @@ -2737,14 +2737,14 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert 1: Event can be fired for the first time var render1TCS = new TaskCompletionSource(); renderer.NextUpdateDisplayReturnTask = render1TCS.Task; - await renderer.DispatchEventAsync(eventHandlerId, new UIEventArgs()); + await renderer.DispatchEventAsync(eventHandlerId, new EventArgs()); Assert.Equal(1, numEventsFired); // Act/Assert 2: *Same* event handler ID can be reused prior to completion of // preceding UI update var render2TCS = new TaskCompletionSource(); renderer.NextUpdateDisplayReturnTask = render2TCS.Task; - await renderer.DispatchEventAsync(eventHandlerId, new UIEventArgs()); + await renderer.DispatchEventAsync(eventHandlerId, new EventArgs()); Assert.Equal(2, numEventsFired); // Act/Assert 3: After we complete the first UI update in which a given @@ -2760,7 +2760,7 @@ namespace Microsoft.AspNetCore.Components.Test await awaitableTask; var ex = await Assert.ThrowsAsync(() => { - return renderer.DispatchEventAsync(eventHandlerId, new UIEventArgs()); + return renderer.DispatchEventAsync(eventHandlerId, new EventArgs()); }); Assert.Equal($"There is no event handler with ID {eventHandlerId}", ex.Message); Assert.Equal(2, numEventsFired); @@ -3318,7 +3318,7 @@ namespace Microsoft.AspNetCore.Components.Test FieldValue = "new property value", ComponentId = componentId }; - var dispatchEventTask = renderer.DispatchEventAsync(eventHandlerId, eventFieldInfo, new UIChangeEventArgs + var dispatchEventTask = renderer.DispatchEventAsync(eventHandlerId, eventFieldInfo, new ChangeEventArgs { Value = "new property value" }); @@ -3336,7 +3336,7 @@ namespace Microsoft.AspNetCore.Components.Test // show that the diff does *not* update the BoundString value attribute. Assert.Equal(RenderTreeEditType.SetAttribute, edit.Type); var attributeFrame = batch2.ReferenceFrames[edit.ReferenceFrameIndex]; - AssertFrame.Attribute(attributeFrame, "ontestevent", typeof(Action)); + AssertFrame.Attribute(attributeFrame, "ontestevent", typeof(Action)); Assert.NotEqual(default, attributeFrame.AttributeEventHandlerId); Assert.NotEqual(eventHandlerId, attributeFrame.AttributeEventHandlerId); }); @@ -3370,7 +3370,7 @@ namespace Microsoft.AspNetCore.Components.Test ComponentId = componentId, FieldValue = newPropertyValue, }; - var dispatchEventTask = renderer.DispatchEventAsync(eventHandlerId, fieldInfo, new UIChangeEventArgs + var dispatchEventTask = renderer.DispatchEventAsync(eventHandlerId, fieldInfo, new ChangeEventArgs { Value = newPropertyValue }); @@ -3388,7 +3388,7 @@ namespace Microsoft.AspNetCore.Components.Test // show that the diff does *not* update the BoundString value attribute. Assert.Equal(RenderTreeEditType.SetAttribute, edit.Type); var attributeFrame = latestBatch.ReferenceFrames[edit.ReferenceFrameIndex]; - AssertFrame.Attribute(attributeFrame, "ontestevent", typeof(Action)); + AssertFrame.Attribute(attributeFrame, "ontestevent", typeof(Action)); Assert.NotEqual(default, attributeFrame.AttributeEventHandlerId); Assert.NotEqual(eventHandlerId, attributeFrame.AttributeEventHandlerId); }); @@ -3507,10 +3507,10 @@ namespace Microsoft.AspNetCore.Components.Test private class EventComponent : AutoRenderComponent, IComponent, IHandleEvent { [Parameter] - public Action OnTest { get; set; } + public Action OnTest { get; set; } [Parameter] - public Func OnTestAsync { get; set; } + public Func OnTestAsync { get; set; } [Parameter] public Action OnClick { get; set; } @@ -3664,7 +3664,7 @@ namespace Microsoft.AspNetCore.Components.Test => _renderHandle.Render(builder => { builder.OpenElement(0, "my button"); - builder.AddAttribute(1, "my click handler", new Action(eventArgs => OnClick(eventArgs))); + builder.AddAttribute(1, "my click handler", new Action(eventArgs => OnClick(eventArgs))); builder.CloseElement(); }); } @@ -4095,7 +4095,7 @@ namespace Microsoft.AspNetCore.Components.Test builder.OpenElement(0, "element with event"); builder.AddAttribute(1, nameof(BoundString), BoundString); - builder.AddAttribute(2, "ontestevent", new Action((UIChangeEventArgs eventArgs) => + builder.AddAttribute(2, "ontestevent", new Action((ChangeEventArgs eventArgs) => { BoundString = (string)eventArgs.Value; TriggerRender(); @@ -4106,7 +4106,7 @@ namespace Microsoft.AspNetCore.Components.Test } } - private class DerivedEventArgs : UIEventArgs + private class DerivedEventArgs : EventArgs { } } diff --git a/src/Components/Components/test/Rendering/HtmlRendererTestBase.cs b/src/Components/Components/test/Rendering/HtmlRendererTestBase.cs index 894c8d4703..d12aaf32ad 100644 --- a/src/Components/Components/test/Rendering/HtmlRendererTestBase.cs +++ b/src/Components/Components/test/Rendering/HtmlRendererTestBase.cs @@ -343,7 +343,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { rtb.OpenElement(0, "p"); rtb.OpenElement(1, "input"); - rtb.AddAttribute(2, "change", pc.GetValueOrDefault>("update")); + rtb.AddAttribute(2, "change", pc.GetValueOrDefault>("update")); rtb.AddAttribute(3, "value", pc.GetValueOrDefault("value")); rtb.CloseElement(); rtb.CloseElement(); @@ -354,7 +354,7 @@ namespace Microsoft.AspNetCore.Components.Rendering .BuildServiceProvider(); var htmlRenderer = GetHtmlRenderer(serviceProvider); - Action change = (UIChangeEventArgs changeArgs) => throw new InvalidOperationException(); + Action change = (ChangeEventArgs changeArgs) => throw new InvalidOperationException(); // Act var result = GetResult(htmlRenderer.Dispatcher.InvokeAsync(() => htmlRenderer.RenderComponentAsync( diff --git a/src/Components/Shared/test/AssertFrame.cs b/src/Components/Shared/test/AssertFrame.cs index b0cff34f41..1fb2debbf2 100644 --- a/src/Components/Shared/test/AssertFrame.cs +++ b/src/Components/Shared/test/AssertFrame.cs @@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Components.Test.Helpers Assert.Equal(attributeValue, frame.AttributeValue); } - public static void Attribute(RenderTreeFrame frame, string attributeName, Action attributeEventHandlerValue, int? sequence = null) + public static void Attribute(RenderTreeFrame frame, string attributeName, Action attributeEventHandlerValue, int? sequence = null) { AssertFrame.Attribute(frame, attributeName, sequence); Assert.Equal(attributeEventHandlerValue, frame.AttributeValue); diff --git a/src/Components/Shared/test/TestRenderer.cs b/src/Components/Shared/test/TestRenderer.cs index 6b5f751818..d5ce07bf4b 100644 --- a/src/Components/Shared/test/TestRenderer.cs +++ b/src/Components/Shared/test/TestRenderer.cs @@ -60,10 +60,10 @@ namespace Microsoft.AspNetCore.Components.Test.Helpers public new Task RenderRootComponentAsync(int componentId, ParameterView parameters) => Dispatcher.InvokeAsync(() => base.RenderRootComponentAsync(componentId, parameters)); - public Task DispatchEventAsync(ulong eventHandlerId, UIEventArgs args) + public Task DispatchEventAsync(ulong eventHandlerId, EventArgs args) => Dispatcher.InvokeAsync(() => base.DispatchEventAsync(eventHandlerId, null, args)); - public new Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo eventFieldInfo, UIEventArgs args) + public new Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo eventFieldInfo, EventArgs args) => Dispatcher.InvokeAsync(() => base.DispatchEventAsync(eventHandlerId, eventFieldInfo, args)); private static Task UnwrapTask(Task task) diff --git a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs index 30fc3e3d99..034b500218 100644 --- a/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs +++ b/src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs @@ -53,23 +53,23 @@ namespace Microsoft.AspNetCore.Components public System.Type EventArgsType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } } [Microsoft.AspNetCore.Components.EventHandlerAttribute("onabort", typeof(Microsoft.AspNetCore.Components.UIProgressEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onactivate", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforeactivate", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforecopy", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforecut", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforedeactivate", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforepaste", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onactivate", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforeactivate", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforecopy", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforecut", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforedeactivate", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onbeforepaste", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onblur", typeof(Microsoft.AspNetCore.Components.UIFocusEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncanplay", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncanplaythrough", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onchange", typeof(Microsoft.AspNetCore.Components.UIChangeEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncanplay", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncanplaythrough", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onchange", typeof(Microsoft.AspNetCore.Components.ChangeEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onclick", typeof(Microsoft.AspNetCore.Components.UIMouseEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncontextmenu", typeof(Microsoft.AspNetCore.Components.UIMouseEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncopy", typeof(Microsoft.AspNetCore.Components.UIClipboardEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncuechange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncuechange", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("oncut", typeof(Microsoft.AspNetCore.Components.UIClipboardEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondblclick", typeof(Microsoft.AspNetCore.Components.UIMouseEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondeactivate", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondeactivate", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondrag", typeof(Microsoft.AspNetCore.Components.UIDragEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondragend", typeof(Microsoft.AspNetCore.Components.UIDragEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondragenter", typeof(Microsoft.AspNetCore.Components.UIDragEventArgs))] @@ -77,24 +77,24 @@ namespace Microsoft.AspNetCore.Components [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondragover", typeof(Microsoft.AspNetCore.Components.UIDragEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondragstart", typeof(Microsoft.AspNetCore.Components.UIDragEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondrop", typeof(Microsoft.AspNetCore.Components.UIDragEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondurationchange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onemptied", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onended", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("ondurationchange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onemptied", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onended", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onerror", typeof(Microsoft.AspNetCore.Components.UIErrorEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfocus", typeof(Microsoft.AspNetCore.Components.UIFocusEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfocusin", typeof(Microsoft.AspNetCore.Components.UIFocusEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfocusout", typeof(Microsoft.AspNetCore.Components.UIFocusEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfullscreenchange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfullscreenerror", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfullscreenchange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onfullscreenerror", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ongotpointercapture", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("oninput", typeof(Microsoft.AspNetCore.Components.UIChangeEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("oninvalid", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("oninput", typeof(Microsoft.AspNetCore.Components.ChangeEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("oninvalid", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onkeydown", typeof(Microsoft.AspNetCore.Components.UIKeyboardEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onkeypress", typeof(Microsoft.AspNetCore.Components.UIKeyboardEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onkeyup", typeof(Microsoft.AspNetCore.Components.UIKeyboardEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onload", typeof(Microsoft.AspNetCore.Components.UIProgressEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onloadeddata", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onloadedmetadata", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onloadeddata", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onloadedmetadata", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onloadend", typeof(Microsoft.AspNetCore.Components.UIProgressEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onloadstart", typeof(Microsoft.AspNetCore.Components.UIProgressEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onlostpointercapture", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] @@ -105,50 +105,51 @@ namespace Microsoft.AspNetCore.Components [Microsoft.AspNetCore.Components.EventHandlerAttribute("onmouseup", typeof(Microsoft.AspNetCore.Components.UIMouseEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onmousewheel", typeof(Microsoft.AspNetCore.Components.UIWheelEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpaste", typeof(Microsoft.AspNetCore.Components.UIClipboardEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpause", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onplay", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onplaying", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpause", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onplay", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onplaying", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointercancel", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerdown", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerenter", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerleave", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerlockchange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerlockerror", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerlockchange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerlockerror", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointermove", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerout", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerover", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onpointerup", typeof(Microsoft.AspNetCore.Components.UIPointerEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onprogress", typeof(Microsoft.AspNetCore.Components.UIProgressEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onratechange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onreadystatechange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onreset", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onscroll", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onseeked", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onseeking", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onselect", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onselectionchange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onselectstart", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onstalled", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onstop", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onsubmit", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onsuspend", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onratechange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onreadystatechange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onreset", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onscroll", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onseeked", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onseeking", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onselect", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onselectionchange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onselectstart", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onstalled", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onstop", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onsubmit", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onsuspend", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeout", typeof(Microsoft.AspNetCore.Components.UIProgressEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeupdate", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeupdate", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchcancel", typeof(Microsoft.AspNetCore.Components.UITouchEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchend", typeof(Microsoft.AspNetCore.Components.UITouchEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchenter", typeof(Microsoft.AspNetCore.Components.UITouchEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchleave", typeof(Microsoft.AspNetCore.Components.UITouchEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchmove", typeof(Microsoft.AspNetCore.Components.UITouchEventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchstart", typeof(Microsoft.AspNetCore.Components.UITouchEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onvolumechange", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] - [Microsoft.AspNetCore.Components.EventHandlerAttribute("onwaiting", typeof(Microsoft.AspNetCore.Components.UIEventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onvolumechange", typeof(System.EventArgs))] + [Microsoft.AspNetCore.Components.EventHandlerAttribute("onwaiting", typeof(System.EventArgs))] [Microsoft.AspNetCore.Components.EventHandlerAttribute("onwheel", typeof(Microsoft.AspNetCore.Components.UIWheelEventArgs))] public static partial class EventHandlers { } - public partial class UIClipboardEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UIClipboardEventArgs : System.EventArgs { public UIClipboardEventArgs() { } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } public partial class UIDataTransferItem { @@ -161,19 +162,21 @@ namespace Microsoft.AspNetCore.Components public UIDragEventArgs() { } public Microsoft.AspNetCore.Components.DataTransfer DataTransfer { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } - public partial class UIErrorEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UIErrorEventArgs : System.EventArgs { public UIErrorEventArgs() { } public int Colno { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public string Filename { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public int Lineno { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public string Message { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } - public partial class UIFocusEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UIFocusEventArgs : System.EventArgs { public UIFocusEventArgs() { } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } - public partial class UIKeyboardEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UIKeyboardEventArgs : System.EventArgs { public UIKeyboardEventArgs() { } public bool AltKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } @@ -184,8 +187,9 @@ namespace Microsoft.AspNetCore.Components public bool MetaKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public bool Repeat { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public bool ShiftKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } - public partial class UIMouseEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UIMouseEventArgs : System.EventArgs { public UIMouseEventArgs() { } public bool AltKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } @@ -199,6 +203,7 @@ namespace Microsoft.AspNetCore.Components public double ScreenX { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public double ScreenY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public bool ShiftKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } public partial class UIPointerEventArgs : Microsoft.AspNetCore.Components.UIMouseEventArgs { @@ -212,14 +217,15 @@ namespace Microsoft.AspNetCore.Components public float TiltY { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public float Width { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } - public partial class UIProgressEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UIProgressEventArgs : System.EventArgs { public UIProgressEventArgs() { } public bool LengthComputable { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public long Loaded { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public long Total { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } - public partial class UITouchEventArgs : Microsoft.AspNetCore.Components.UIEventArgs + public partial class UITouchEventArgs : System.EventArgs { public UITouchEventArgs() { } public bool AltKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } @@ -230,6 +236,7 @@ namespace Microsoft.AspNetCore.Components public bool ShiftKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public Microsoft.AspNetCore.Components.UITouchPoint[] TargetTouches { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public Microsoft.AspNetCore.Components.UITouchPoint[] Touches { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public string Type { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } } public partial class UITouchPoint { diff --git a/src/Components/Web/src/EventHandlers.cs b/src/Components/Web/src/EventHandlers.cs index 0023ac1054..8df8102278 100644 --- a/src/Components/Web/src/EventHandlers.cs +++ b/src/Components/Web/src/EventHandlers.cs @@ -43,19 +43,19 @@ namespace Microsoft.AspNetCore.Components [EventHandler("onkeypress", typeof(UIKeyboardEventArgs))] // Input events - [EventHandler("onchange", typeof(UIChangeEventArgs))] - [EventHandler("oninput", typeof(UIChangeEventArgs))] - [EventHandler("oninvalid", typeof(UIEventArgs))] - [EventHandler("onreset", typeof(UIEventArgs))] - [EventHandler("onselect", typeof(UIEventArgs))] - [EventHandler("onselectstart", typeof(UIEventArgs))] - [EventHandler("onselectionchange", typeof(UIEventArgs))] - [EventHandler("onsubmit", typeof(UIEventArgs))] + [EventHandler("onchange", typeof(ChangeEventArgs))] + [EventHandler("oninput", typeof(ChangeEventArgs))] + [EventHandler("oninvalid", typeof(EventArgs))] + [EventHandler("onreset", typeof(EventArgs))] + [EventHandler("onselect", typeof(EventArgs))] + [EventHandler("onselectstart", typeof(EventArgs))] + [EventHandler("onselectionchange", typeof(EventArgs))] + [EventHandler("onsubmit", typeof(EventArgs))] // Clipboard events - [EventHandler("onbeforecopy", typeof(UIEventArgs))] - [EventHandler("onbeforecut", typeof(UIEventArgs))] - [EventHandler("onbeforepaste", typeof(UIEventArgs))] + [EventHandler("onbeforecopy", typeof(EventArgs))] + [EventHandler("onbeforecut", typeof(EventArgs))] + [EventHandler("onbeforepaste", typeof(EventArgs))] [EventHandler("oncopy", typeof(UIClipboardEventArgs))] [EventHandler("oncut", typeof(UIClipboardEventArgs))] [EventHandler("onpaste", typeof(UIClipboardEventArgs))] @@ -81,23 +81,23 @@ namespace Microsoft.AspNetCore.Components [EventHandler("onpointerup", typeof(UIPointerEventArgs))] // Media events - [EventHandler("oncanplay", typeof(UIEventArgs))] - [EventHandler("oncanplaythrough", typeof(UIEventArgs))] - [EventHandler("oncuechange", typeof(UIEventArgs))] - [EventHandler("ondurationchange", typeof(UIEventArgs))] - [EventHandler("onemptied", typeof(UIEventArgs))] - [EventHandler("onpause", typeof(UIEventArgs))] - [EventHandler("onplay", typeof(UIEventArgs))] - [EventHandler("onplaying", typeof(UIEventArgs))] - [EventHandler("onratechange", typeof(UIEventArgs))] - [EventHandler("onseeked", typeof(UIEventArgs))] - [EventHandler("onseeking", typeof(UIEventArgs))] - [EventHandler("onstalled", typeof(UIEventArgs))] - [EventHandler("onstop", typeof(UIEventArgs))] - [EventHandler("onsuspend", typeof(UIEventArgs))] - [EventHandler("ontimeupdate", typeof(UIEventArgs))] - [EventHandler("onvolumechange", typeof(UIEventArgs))] - [EventHandler("onwaiting", typeof(UIEventArgs))] + [EventHandler("oncanplay", typeof(EventArgs))] + [EventHandler("oncanplaythrough", typeof(EventArgs))] + [EventHandler("oncuechange", typeof(EventArgs))] + [EventHandler("ondurationchange", typeof(EventArgs))] + [EventHandler("onemptied", typeof(EventArgs))] + [EventHandler("onpause", typeof(EventArgs))] + [EventHandler("onplay", typeof(EventArgs))] + [EventHandler("onplaying", typeof(EventArgs))] + [EventHandler("onratechange", typeof(EventArgs))] + [EventHandler("onseeked", typeof(EventArgs))] + [EventHandler("onseeking", typeof(EventArgs))] + [EventHandler("onstalled", typeof(EventArgs))] + [EventHandler("onstop", typeof(EventArgs))] + [EventHandler("onsuspend", typeof(EventArgs))] + [EventHandler("ontimeupdate", typeof(EventArgs))] + [EventHandler("onvolumechange", typeof(EventArgs))] + [EventHandler("onwaiting", typeof(EventArgs))] // Progress events [EventHandler("onloadstart", typeof(UIProgressEventArgs))] @@ -109,19 +109,19 @@ namespace Microsoft.AspNetCore.Components [EventHandler("onerror", typeof(UIErrorEventArgs))] // General events - [EventHandler("onactivate", typeof(UIEventArgs))] - [EventHandler("onbeforeactivate", typeof(UIEventArgs))] - [EventHandler("onbeforedeactivate", typeof(UIEventArgs))] - [EventHandler("ondeactivate", typeof(UIEventArgs))] - [EventHandler("onended", typeof(UIEventArgs))] - [EventHandler("onfullscreenchange", typeof(UIEventArgs))] - [EventHandler("onfullscreenerror", typeof(UIEventArgs))] - [EventHandler("onloadeddata", typeof(UIEventArgs))] - [EventHandler("onloadedmetadata", typeof(UIEventArgs))] - [EventHandler("onpointerlockchange", typeof(UIEventArgs))] - [EventHandler("onpointerlockerror", typeof(UIEventArgs))] - [EventHandler("onreadystatechange", typeof(UIEventArgs))] - [EventHandler("onscroll", typeof(UIEventArgs))] + [EventHandler("onactivate", typeof(EventArgs))] + [EventHandler("onbeforeactivate", typeof(EventArgs))] + [EventHandler("onbeforedeactivate", typeof(EventArgs))] + [EventHandler("ondeactivate", typeof(EventArgs))] + [EventHandler("onended", typeof(EventArgs))] + [EventHandler("onfullscreenchange", typeof(EventArgs))] + [EventHandler("onfullscreenerror", typeof(EventArgs))] + [EventHandler("onloadeddata", typeof(EventArgs))] + [EventHandler("onloadedmetadata", typeof(EventArgs))] + [EventHandler("onpointerlockchange", typeof(EventArgs))] + [EventHandler("onpointerlockerror", typeof(EventArgs))] + [EventHandler("onreadystatechange", typeof(EventArgs))] + [EventHandler("onscroll", typeof(EventArgs))] public static class EventHandlers { } diff --git a/src/Components/Web/src/RendererRegistryEventDispatcher.cs b/src/Components/Web/src/RendererRegistryEventDispatcher.cs index ea4a5c0b46..7bffa1ec6e 100644 --- a/src/Components/Web/src/RendererRegistryEventDispatcher.cs +++ b/src/Components/Web/src/RendererRegistryEventDispatcher.cs @@ -54,12 +54,12 @@ namespace Microsoft.AspNetCore.Components.Web } } - private static UIEventArgs ParseEventArgsJson(string eventArgsType, string eventArgsJson) + private static EventArgs ParseEventArgsJson(string eventArgsType, string eventArgsJson) { switch (eventArgsType) { case "change": - return DeserializeUIEventChangeArgs(eventArgsJson); + return DeserializeChangeEventArgs(eventArgsJson); case "clipboard": return Deserialize(eventArgsJson); case "drag": @@ -79,7 +79,7 @@ namespace Microsoft.AspNetCore.Components.Web case "touch": return Deserialize(eventArgsJson); case "unknown": - return Deserialize(eventArgsJson); + return EventArgs.Empty; case "wheel": return Deserialize(eventArgsJson); default: @@ -92,9 +92,9 @@ namespace Microsoft.AspNetCore.Components.Web return JsonSerializer.Deserialize(eventArgsJson, JsonSerializerOptionsProvider.Options); } - private static UIChangeEventArgs DeserializeUIEventChangeArgs(string eventArgsJson) + private static ChangeEventArgs DeserializeChangeEventArgs(string eventArgsJson) { - var changeArgs = Deserialize(eventArgsJson); + var changeArgs = Deserialize(eventArgsJson); var jsonElement = (JsonElement)changeArgs.Value; switch (jsonElement.ValueKind) { @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Components.Web changeArgs.Value = jsonElement.GetBoolean(); break; default: - throw new ArgumentException($"Unsupported {nameof(UIChangeEventArgs)} value {jsonElement}."); + throw new ArgumentException($"Unsupported {nameof(ChangeEventArgs)} value {jsonElement}."); } return changeArgs; } diff --git a/src/Components/Web/src/UIClipboardEventArgs.cs b/src/Components/Web/src/UIClipboardEventArgs.cs index f4ed05d3f7..166d9221c1 100644 --- a/src/Components/Web/src/UIClipboardEventArgs.cs +++ b/src/Components/Web/src/UIClipboardEventArgs.cs @@ -1,12 +1,18 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about an clipboard event that is being raised. /// - public class UIClipboardEventArgs : UIEventArgs + public class UIClipboardEventArgs : EventArgs { + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/UIErrorEventArgs.cs b/src/Components/Web/src/UIErrorEventArgs.cs index c7b0b31a4a..6cf86b7553 100644 --- a/src/Components/Web/src/UIErrorEventArgs.cs +++ b/src/Components/Web/src/UIErrorEventArgs.cs @@ -1,12 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about an error event that is being raised. /// - public class UIErrorEventArgs : UIEventArgs + public class UIErrorEventArgs : EventArgs { /// /// Gets a a human-readable error message describing the problem. @@ -27,5 +29,10 @@ namespace Microsoft.AspNetCore.Components /// Gets the column number of the script file on which the error occurred. /// public int Colno { get; set; } + + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/UIFocusEventArgs.cs b/src/Components/Web/src/UIFocusEventArgs.cs index 1260a9e088..b120e666a8 100644 --- a/src/Components/Web/src/UIFocusEventArgs.cs +++ b/src/Components/Web/src/UIFocusEventArgs.cs @@ -1,14 +1,21 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about a focus event that is being raised. /// - public class UIFocusEventArgs : UIEventArgs + public class UIFocusEventArgs : EventArgs { // Not including support for 'relatedTarget' since we don't have a good way to represent it. // see: https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent + + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/UIKeyboardEventArgs.cs b/src/Components/Web/src/UIKeyboardEventArgs.cs index fdcb5fd462..fd66247dc4 100644 --- a/src/Components/Web/src/UIKeyboardEventArgs.cs +++ b/src/Components/Web/src/UIKeyboardEventArgs.cs @@ -1,12 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about a keyboard event that is being raised. /// - public class UIKeyboardEventArgs : UIEventArgs + public class UIKeyboardEventArgs : EventArgs { /// /// The key value of the key represented by the event. @@ -51,5 +53,10 @@ namespace Microsoft.AspNetCore.Components /// true if the meta key was down when the event was fired. false otherwise. /// public bool MetaKey { get; set; } + + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/UIMouseEventArgs.cs b/src/Components/Web/src/UIMouseEventArgs.cs index fa5327e1fd..da4d2a64ae 100644 --- a/src/Components/Web/src/UIMouseEventArgs.cs +++ b/src/Components/Web/src/UIMouseEventArgs.cs @@ -1,12 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about a mouse event that is being raised. /// - public class UIMouseEventArgs : UIEventArgs + public class UIMouseEventArgs : EventArgs { /// /// A count of consecutive clicks that happened in a short amount of time, incremented by one. @@ -73,5 +75,10 @@ namespace Microsoft.AspNetCore.Components /// true if the meta key was down when the event was fired. false otherwise. /// public bool MetaKey { get; set; } + + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/UIProgressEventArgs.cs b/src/Components/Web/src/UIProgressEventArgs.cs index 9d57a357c8..e0273c665f 100644 --- a/src/Components/Web/src/UIProgressEventArgs.cs +++ b/src/Components/Web/src/UIProgressEventArgs.cs @@ -1,12 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about a progress event that is being raised. /// - public class UIProgressEventArgs : UIEventArgs + public class UIProgressEventArgs : EventArgs { /// /// Whether or not the total size of the transfer is known. @@ -24,5 +26,10 @@ namespace Microsoft.AspNetCore.Components /// If the total size is unknown, this value is zero. /// public long Total { get; set; } + + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/UITouchEventArgs.cs b/src/Components/Web/src/UITouchEventArgs.cs index be5fe34da1..3be004b7f1 100644 --- a/src/Components/Web/src/UITouchEventArgs.cs +++ b/src/Components/Web/src/UITouchEventArgs.cs @@ -1,12 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; + namespace Microsoft.AspNetCore.Components { /// /// Supplies information about a touch event that is being raised. /// - public class UITouchEventArgs : UIEventArgs + public class UITouchEventArgs : EventArgs { /// /// A count of consecutive clicks that happened in a short amount of time, incremented by one. @@ -50,5 +52,10 @@ namespace Microsoft.AspNetCore.Components /// true if the meta key was down when the event was fired. false otherwise. /// public bool MetaKey { get; set; } + + /// + /// Gets or sets the type of the event. + /// + public string Type { get; set; } } } diff --git a/src/Components/Web/src/WebEventCallbackFactoryUIEventArgsExtensions.cs b/src/Components/Web/src/WebEventCallbackFactoryUIEventArgsExtensions.cs index 1966f20ddc..02bb5d6d58 100644 --- a/src/Components/Web/src/WebEventCallbackFactoryUIEventArgsExtensions.cs +++ b/src/Components/Web/src/WebEventCallbackFactoryUIEventArgsExtensions.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Microsoft.AspNetCore.Components { /// - /// Provides extension methods for and types. + /// Provides extension methods for and types. /// public static class WebEventCallbackFactoryUIEventArgsExtensions { diff --git a/src/Components/test/E2ETest/ServerExecutionTests/InteropReliabilityTests.cs b/src/Components/test/E2ETest/ServerExecutionTests/InteropReliabilityTests.cs index 9d9cdfc46b..bc27130792 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/InteropReliabilityTests.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/InteropReliabilityTests.cs @@ -385,7 +385,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests } [Fact] - public async Task DispatchingEventsWithInvalidUIEventArgs() + public async Task DispatchingEventsWithInvalidEventArgs() { // Arrange var (interopCalls, dotNetCompletions, batches) = ConfigureClient(); diff --git a/src/Components/test/testassets/BasicTestApp/CulturePicker.razor b/src/Components/test/testassets/BasicTestApp/CulturePicker.razor index aacf90bb12..b7d0a90739 100644 --- a/src/Components/test/testassets/BasicTestApp/CulturePicker.razor +++ b/src/Components/test/testassets/BasicTestApp/CulturePicker.razor @@ -8,7 +8,7 @@ @code { - void OnSelected(UIChangeEventArgs e) + void OnSelected(ChangeEventArgs e) { // Included fragment to preserve choice of Blazor client or server. var redirect = new Uri(UriHelper.GetAbsoluteUri()).GetComponents(UriComponents.PathAndQuery | UriComponents.Fragment, UriFormat.UriEscaped); diff --git a/src/Components/test/testassets/Ignitor/ElementNode.cs b/src/Components/test/testassets/Ignitor/ElementNode.cs index 2232ba8d08..2bb447d127 100644 --- a/src/Components/test/testassets/Ignitor/ElementNode.cs +++ b/src/Components/test/testassets/Ignitor/ElementNode.cs @@ -70,9 +70,8 @@ namespace Ignitor throw new InvalidOperationException("Element does not have a change event."); } - var sleectEventArgs = new UIChangeEventArgs() + var args = new ChangeEventArgs() { - Type = changeEventDescriptor.EventName, Value = value }; @@ -88,7 +87,7 @@ namespace Ignitor } }; - return DispatchEventCore(connection, Serialize(browserDescriptor), Serialize(sleectEventArgs)); + return DispatchEventCore(connection, Serialize(browserDescriptor), Serialize(args)); } public Task ClickAsync(HubConnection connection) From 6045c080725c612ef7c37ee869ae8fbe4ec7ed9a Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Sat, 27 Jul 2019 11:50:08 -0700 Subject: [PATCH 05/12] Blazor API Review: Built-in components Fixes: #12548 Renaming properties to drop 'Content' as a suffix. We haven't been consistent in using this, and we're removing it instead of adding it elsewhere. --- .../BlazorWasm-CSharp/Client/App.razor | 4 +-- ...ft.AspNetCore.Components.netstandard2.0.cs | 10 +++--- .../Components/src/Auth/AuthorizeViewCore.cs | 4 +-- src/Components/Components/src/PageDisplay.cs | 14 ++++---- .../Components/src/Routing/Router.cs | 26 +++++++------- .../Components/test/Auth/AuthorizeViewTest.cs | 34 +++++++++---------- .../BasicTestApp/AuthTest/AuthRouter.razor | 6 ++-- .../test/testassets/BasicTestApp/Index.razor | 1 - .../BasicTestApp/RouterTest/TestRouter.razor | 4 +-- .../RazorComponents/RouterContainer.razor | 4 +-- .../content/BlazorServerWeb-CSharp/App.razor | 4 +-- 11 files changed, 55 insertions(+), 56 deletions(-) diff --git a/src/Components/Blazor/Templates/src/content/BlazorWasm-CSharp/Client/App.razor b/src/Components/Blazor/Templates/src/content/BlazorWasm-CSharp/Client/App.razor index eb5c93b6de..c5ee6a53e2 100644 --- a/src/Components/Blazor/Templates/src/content/BlazorWasm-CSharp/Client/App.razor +++ b/src/Components/Blazor/Templates/src/content/BlazorWasm-CSharp/Client/App.razor @@ -1,5 +1,5 @@  - +

Sorry, there's nothing at this address.

-
+
diff --git a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs index 6f24d20761..22307a3200 100644 --- a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs +++ b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs @@ -306,9 +306,9 @@ namespace Microsoft.AspNetCore.Components { public PageDisplay() { } [Microsoft.AspNetCore.Components.ParameterAttribute] - public Microsoft.AspNetCore.Components.RenderFragment AuthorizingContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] - public Microsoft.AspNetCore.Components.RenderFragment NotAuthorizedContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public Microsoft.AspNetCore.Components.RenderFragment NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] public System.Type Page { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] @@ -643,11 +643,11 @@ namespace Microsoft.AspNetCore.Components.Routing [Microsoft.AspNetCore.Components.ParameterAttribute] public System.Reflection.Assembly AppAssembly { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] - public Microsoft.AspNetCore.Components.RenderFragment AuthorizingContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public Microsoft.AspNetCore.Components.RenderFragment Authorizing { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] - public Microsoft.AspNetCore.Components.RenderFragment NotAuthorizedContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public Microsoft.AspNetCore.Components.RenderFragment NotAuthorized { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } [Microsoft.AspNetCore.Components.ParameterAttribute] - public Microsoft.AspNetCore.Components.RenderFragment NotFoundContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public Microsoft.AspNetCore.Components.RenderFragment NotFound { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public void Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) { } public void Dispose() { } System.Threading.Tasks.Task Microsoft.AspNetCore.Components.IHandleAfterRender.OnAfterRenderAsync() { throw null; } diff --git a/src/Components/Components/src/Auth/AuthorizeViewCore.cs b/src/Components/Components/src/Auth/AuthorizeViewCore.cs index 8581e6fb6d..8c60078184 100644 --- a/src/Components/Components/src/Auth/AuthorizeViewCore.cs +++ b/src/Components/Components/src/Auth/AuthorizeViewCore.cs @@ -58,8 +58,8 @@ namespace Microsoft.AspNetCore.Components } else if (isAuthorized) { - var authorizedContent = Authorized ?? ChildContent; - builder.AddContent(1, authorizedContent?.Invoke(currentAuthenticationState)); + var authorized = Authorized ?? ChildContent; + builder.AddContent(1, authorized?.Invoke(currentAuthenticationState)); } else { diff --git a/src/Components/Components/src/PageDisplay.cs b/src/Components/Components/src/PageDisplay.cs index 61abc70697..14df824d13 100644 --- a/src/Components/Components/src/PageDisplay.cs +++ b/src/Components/Components/src/PageDisplay.cs @@ -36,13 +36,13 @@ namespace Microsoft.AspNetCore.Components /// The content that will be displayed if the user is not authorized. /// [Parameter] - public RenderFragment NotAuthorizedContent { get; set; } + public RenderFragment NotAuthorized { get; set; } /// /// The content that will be displayed while asynchronous authorization is in progress. /// [Parameter] - public RenderFragment AuthorizingContent { get; set; } + public RenderFragment Authorizing { get; set; } /// public void Attach(RenderHandle renderHandle) @@ -109,14 +109,14 @@ namespace Microsoft.AspNetCore.Components } // Some authorization data exists, so we do need to wrap the fragment - RenderFragment authorizedContent = context => pageFragment; + RenderFragment authorized = context => pageFragment; return builder => { builder.OpenComponent(0); builder.AddAttribute(1, nameof(AuthorizeViewWithSuppliedData.AuthorizeDataParam), authorizeData); - builder.AddAttribute(2, nameof(AuthorizeViewWithSuppliedData.Authorized), authorizedContent); - builder.AddAttribute(3, nameof(AuthorizeViewWithSuppliedData.NotAuthorized), NotAuthorizedContent ?? DefaultNotAuthorizedContent); - builder.AddAttribute(4, nameof(AuthorizeViewWithSuppliedData.Authorizing), AuthorizingContent); + builder.AddAttribute(2, nameof(AuthorizeViewWithSuppliedData.Authorized), authorized); + builder.AddAttribute(3, nameof(AuthorizeViewWithSuppliedData.NotAuthorized), NotAuthorized ?? DefaultNotAuthorized); + builder.AddAttribute(4, nameof(AuthorizeViewWithSuppliedData.Authorizing), Authorizing); builder.CloseComponent(); }; } @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Components // There has to be some default content. If we render blank by default, developers // will find it hard to guess why their UI isn't appearing. - private static RenderFragment DefaultNotAuthorizedContent(AuthenticationState authenticationState) + private static RenderFragment DefaultNotAuthorized(AuthenticationState authenticationState) => builder => builder.AddContent(0, "Not authorized"); } } diff --git a/src/Components/Components/src/Routing/Router.cs b/src/Components/Components/src/Routing/Router.cs index c1459063e7..503fd5bd96 100644 --- a/src/Components/Components/src/Routing/Router.cs +++ b/src/Components/Components/src/Routing/Router.cs @@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Components.Routing /// /// Gets or sets the type of the component that should be used as a fallback when no match is found for the requested route. /// - [Parameter] public RenderFragment NotFoundContent { get; set; } + [Parameter] public RenderFragment NotFound { get; set; } /// /// The content that will be displayed if the user is not authorized. /// - [Parameter] public RenderFragment NotAuthorizedContent { get; set; } + [Parameter] public RenderFragment NotAuthorized { get; set; } /// /// The content that will be displayed while asynchronous authorization is in progress. /// - [Parameter] public RenderFragment AuthorizingContent { get; set; } + [Parameter] public RenderFragment Authorizing { get; set; } private RouteTable Routes { get; set; } @@ -94,8 +94,8 @@ namespace Microsoft.AspNetCore.Components.Routing builder.OpenComponent(0, typeof(PageDisplay)); builder.AddAttribute(1, nameof(PageDisplay.Page), handler); builder.AddAttribute(2, nameof(PageDisplay.PageParameters), parameters); - builder.AddAttribute(3, nameof(PageDisplay.NotAuthorizedContent), NotAuthorizedContent); - builder.AddAttribute(4, nameof(PageDisplay.AuthorizingContent), AuthorizingContent); + builder.AddAttribute(3, nameof(PageDisplay.NotAuthorized), NotAuthorized); + builder.AddAttribute(4, nameof(PageDisplay.Authorizing), Authorizing); builder.CloseComponent(); } @@ -120,14 +120,14 @@ namespace Microsoft.AspNetCore.Components.Routing } else { - if (!isNavigationIntercepted && NotFoundContent != null) + if (!isNavigationIntercepted && NotFound != null) { - Log.DisplayingNotFoundContent(_logger, locationPath, _baseUri); + Log.DisplayingNotFound(_logger, locationPath, _baseUri); // We did not find a Component that matches the route. - // Only show the NotFoundContent if the application developer programatically got us here i.e we did not + // Only show the NotFound if the application developer programatically got us here i.e we did not // intercept the navigation. In all other cases, force a browser navigation since this could be non-Blazor content. - _renderHandle.Render(NotFoundContent); + _renderHandle.Render(NotFound); } else { @@ -159,8 +159,8 @@ namespace Microsoft.AspNetCore.Components.Routing private static class Log { - private static readonly Action _displayingNotFoundContent = - LoggerMessage.Define(LogLevel.Debug, new EventId(1, "DisplayingNotFoundContent"), $"Displaying {nameof(NotFoundContent)} because path '{{Path}}' with base URI '{{BaseUri}}' does not match any component route"); + private static readonly Action _displayingNotFound = + LoggerMessage.Define(LogLevel.Debug, new EventId(1, "DisplayingNotFound"), $"Displaying {nameof(NotFound)} because path '{{Path}}' with base URI '{{BaseUri}}' does not match any component route"); private static readonly Action _navigatingToComponent = LoggerMessage.Define(LogLevel.Debug, new EventId(2, "NavigatingToComponent"), "Navigating to component {ComponentType} in response to path '{Path}' with base URI '{BaseUri}'"); @@ -168,9 +168,9 @@ namespace Microsoft.AspNetCore.Components.Routing private static readonly Action _navigatingToExternalUri = LoggerMessage.Define(LogLevel.Debug, new EventId(3, "NavigatingToExternalUri"), "Navigating to non-component URI '{ExternalUri}' in response to path '{Path}' with base URI '{BaseUri}'"); - internal static void DisplayingNotFoundContent(ILogger logger, string path, string baseUri) + internal static void DisplayingNotFound(ILogger logger, string path, string baseUri) { - _displayingNotFoundContent(logger, path, baseUri, null); + _displayingNotFound(logger, path, baseUri, null); } internal static void NavigatingToComponent(ILogger logger, Type componentType, string path, string baseUri) diff --git a/src/Components/Components/test/Auth/AuthorizeViewTest.cs b/src/Components/Components/test/Auth/AuthorizeViewTest.cs index 07633ea9e4..848e68e815 100644 --- a/src/Components/Components/test/Auth/AuthorizeViewTest.cs +++ b/src/Components/Components/test/Auth/AuthorizeViewTest.cs @@ -53,13 +53,13 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void RendersNotAuthorizedContentIfNotAuthorized() + public void RendersNotAuthorizedIfNotAuthorized() { // Arrange var authorizationService = new TestAuthorizationService(); var renderer = CreateTestRenderer(authorizationService); var rootComponent = WrapInAuthorizeView( - notAuthorizedContent: + notAuthorized: context => builder => builder.AddContent(0, $"You are not authorized, even though we know you are {context.User.Identity.Name}")); rootComponent.AuthenticationState = CreateAuthenticationState("Nellie"); @@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void RendersNothingIfAuthorizedButNoChildContentOrAuthorizedContentProvided() + public void RendersNothingIfAuthorizedButNoChildContentOrAuthorizedProvided() { // Arrange var authorizationService = new TestAuthorizationService(); @@ -152,14 +152,14 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void RendersAuthorizedContentIfAuthorized() + public void RendersAuthorizedIfAuthorized() { // Arrange var authorizationService = new TestAuthorizationService(); authorizationService.NextResult = AuthorizationResult.Success(); var renderer = CreateTestRenderer(authorizationService); var rootComponent = WrapInAuthorizeView( - authorizedContent: context => builder => + authorized: context => builder => builder.AddContent(0, $"You are authenticated as {context.User.Identity.Name}")); rootComponent.AuthenticationState = CreateAuthenticationState("Nellie"); @@ -235,13 +235,13 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void ThrowsIfBothChildContentAndAuthorizedContentProvided() + public void ThrowsIfBothChildContentAndAuthorizedProvided() { // Arrange var authorizationService = new TestAuthorizationService(); var renderer = CreateTestRenderer(authorizationService); var rootComponent = WrapInAuthorizeView( - authorizedContent: context => builder => { }, + authorized: context => builder => { }, childContent: context => builder => { }); // Act/Assert @@ -260,7 +260,7 @@ namespace Microsoft.AspNetCore.Components var renderer = CreateTestRenderer(authorizationService); renderer.OnUpdateDisplayComplete = () => { @event.Set(); }; var rootComponent = WrapInAuthorizeView( - notAuthorizedContent: + notAuthorized: context => builder => builder.AddContent(0, "You are not authorized")); var authTcs = new TaskCompletionSource(); rootComponent.AuthenticationState = authTcs.Task; @@ -293,7 +293,7 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void RendersAuthorizingContentUntilAuthorizationCompleted() + public void RendersAuthorizingUntilAuthorizationCompleted() { // Arrange var @event = new ManualResetEventSlim(); @@ -302,8 +302,8 @@ namespace Microsoft.AspNetCore.Components var renderer = CreateTestRenderer(authorizationService); renderer.OnUpdateDisplayComplete = () => { @event.Set(); }; var rootComponent = WrapInAuthorizeView( - authorizingContent: builder => builder.AddContent(0, "Auth pending..."), - authorizedContent: context => builder => builder.AddContent(0, $"Hello, {context.User.Identity.Name}!")); + authorizing: builder => builder.AddContent(0, "Auth pending..."), + authorized: context => builder => builder.AddContent(0, $"Hello, {context.User.Identity.Name}!")); var authTcs = new TaskCompletionSource(); rootComponent.AuthenticationState = authTcs.Task; @@ -447,9 +447,9 @@ namespace Microsoft.AspNetCore.Components private static TestAuthStateProviderComponent WrapInAuthorizeView( RenderFragment childContent = null, - RenderFragment authorizedContent = null, - RenderFragment notAuthorizedContent = null, - RenderFragment authorizingContent = null, + RenderFragment authorized = null, + RenderFragment notAuthorized = null, + RenderFragment authorizing = null, string policy = null, string roles = null, object resource = null) @@ -458,9 +458,9 @@ namespace Microsoft.AspNetCore.Components { builder.OpenComponent(0); builder.AddAttribute(1, nameof(AuthorizeView.ChildContent), childContent); - builder.AddAttribute(2, nameof(AuthorizeView.Authorized), authorizedContent); - builder.AddAttribute(3, nameof(AuthorizeView.NotAuthorized), notAuthorizedContent); - builder.AddAttribute(4, nameof(AuthorizeView.Authorizing), authorizingContent); + builder.AddAttribute(2, nameof(AuthorizeView.Authorized), authorized); + builder.AddAttribute(3, nameof(AuthorizeView.NotAuthorized), notAuthorized); + builder.AddAttribute(4, nameof(AuthorizeView.Authorizing), authorizing); builder.AddAttribute(5, nameof(AuthorizeView.Policy), policy); builder.AddAttribute(6, nameof(AuthorizeView.Roles), roles); builder.AddAttribute(7, nameof(AuthorizeView.Resource), resource); diff --git a/src/Components/test/testassets/BasicTestApp/AuthTest/AuthRouter.razor b/src/Components/test/testassets/BasicTestApp/AuthTest/AuthRouter.razor index 73a2b6260d..d4d5cf8edb 100644 --- a/src/Components/test/testassets/BasicTestApp/AuthTest/AuthRouter.razor +++ b/src/Components/test/testassets/BasicTestApp/AuthTest/AuthRouter.razor @@ -10,12 +10,12 @@ - Authorizing... - + Authorizing... +
Sorry, @(context.User.Identity.Name ?? "anonymous"), you're not authorized.
-
+
diff --git a/src/Components/test/testassets/BasicTestApp/Index.razor b/src/Components/test/testassets/BasicTestApp/Index.razor index df71e0cb93..f024f70c3c 100644 --- a/src/Components/test/testassets/BasicTestApp/Index.razor +++ b/src/Components/test/testassets/BasicTestApp/Index.razor @@ -58,7 +58,6 @@ - diff --git a/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouter.razor b/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouter.razor index 8edad02521..3dbc49bce3 100644 --- a/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouter.razor +++ b/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouter.razor @@ -1,6 +1,6 @@ @using Microsoft.AspNetCore.Components.Routing - +
Oops, that component wasn't found!
-
+
diff --git a/src/Mvc/test/WebSites/BasicWebSite/RazorComponents/RouterContainer.razor b/src/Mvc/test/WebSites/BasicWebSite/RazorComponents/RouterContainer.razor index 9adb768cb8..20d8ef2991 100644 --- a/src/Mvc/test/WebSites/BasicWebSite/RazorComponents/RouterContainer.razor +++ b/src/Mvc/test/WebSites/BasicWebSite/RazorComponents/RouterContainer.razor @@ -1,7 +1,7 @@ @using Microsoft.AspNetCore.Components.Routing Router component - +

Route not found

-
+
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/App.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/App.razor index b913345932..52dc3c98d9 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/App.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/App.razor @@ -1,7 +1,7 @@  - +

Sorry, there's nothing at this address.

-
+
From b2e11d77e8a808b39f0833f2943f85c1790b83a5 Mon Sep 17 00:00:00 2001 From: Phil Henning Date: Tue, 30 Jul 2019 16:00:08 -0700 Subject: [PATCH 06/12] Insert seed localization for templates. (#11040) * Insert seed localization for templates. * Updated loc strings for Worker for some langs * Update en string.json for Blazor project template * Refresh strings for initial seeding --- .../.template.config/cs-CZ/strings.json | 7 +++++++ .../.template.config/de-DE/strings.json | 7 +++++++ .../.template.config/en/strings.json | 7 +++++++ .../.template.config/es-ES/strings.json | 7 +++++++ .../.template.config/fr-FR/strings.json | 7 +++++++ .../.template.config/it-IT/strings.json | 7 +++++++ .../.template.config/ja-JP/strings.json | 7 +++++++ .../.template.config/ko-KR/strings.json | 7 +++++++ .../.template.config/pl-PL/strings.json | 7 +++++++ .../.template.config/pt-BR/strings.json | 7 +++++++ .../.template.config/ru-RU/strings.json | 7 +++++++ .../.template.config/tr-TR/strings.json | 7 +++++++ .../.template.config/zh-CN/strings.json | 7 +++++++ .../.template.config/zh-TW/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/en/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../EmptyWeb-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/de-DE/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/en/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/es-ES/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/it-IT/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../EmptyWeb-FSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/en/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../GrpcService-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../.template.config/cs-CZ/strings.json | 7 +++++++ .../.template.config/de-DE/strings.json | 7 +++++++ .../.template.config/en/strings.json | 7 +++++++ .../.template.config/es-ES/strings.json | 7 +++++++ .../.template.config/fr-FR/strings.json | 7 +++++++ .../.template.config/it-IT/strings.json | 7 +++++++ .../.template.config/ja-JP/strings.json | 7 +++++++ .../.template.config/ko-KR/strings.json | 7 +++++++ .../.template.config/pl-PL/strings.json | 7 +++++++ .../.template.config/pt-BR/strings.json | 7 +++++++ .../.template.config/ru-RU/strings.json | 7 +++++++ .../.template.config/tr-TR/strings.json | 7 +++++++ .../.template.config/zh-CN/strings.json | 7 +++++++ .../.template.config/zh-TW/strings.json | 7 +++++++ .../.template.config/cs-CZ/strings.json | 7 +++++++ .../.template.config/de-DE/strings.json | 7 +++++++ .../.template.config/en/strings.json | 7 +++++++ .../.template.config/es-ES/strings.json | 7 +++++++ .../.template.config/fr-FR/strings.json | 7 +++++++ .../.template.config/it-IT/strings.json | 7 +++++++ .../.template.config/ja-JP/strings.json | 7 +++++++ .../.template.config/ko-KR/strings.json | 7 +++++++ .../.template.config/pl-PL/strings.json | 7 +++++++ .../.template.config/pt-BR/strings.json | 7 +++++++ .../.template.config/ru-RU/strings.json | 7 +++++++ .../.template.config/tr-TR/strings.json | 7 +++++++ .../.template.config/zh-CN/strings.json | 7 +++++++ .../.template.config/zh-TW/strings.json | 7 +++++++ .../.template.config/cs-CZ/strings.json | 7 +++++++ .../.template.config/de-DE/strings.json | 7 +++++++ .../RazorPagesWeb-CSharp/.template.config/en/strings.json | 7 +++++++ .../.template.config/es-ES/strings.json | 7 +++++++ .../.template.config/fr-FR/strings.json | 7 +++++++ .../.template.config/it-IT/strings.json | 7 +++++++ .../.template.config/ja-JP/strings.json | 7 +++++++ .../.template.config/ko-KR/strings.json | 7 +++++++ .../.template.config/pl-PL/strings.json | 7 +++++++ .../.template.config/pt-BR/strings.json | 7 +++++++ .../.template.config/ru-RU/strings.json | 7 +++++++ .../.template.config/tr-TR/strings.json | 7 +++++++ .../.template.config/zh-CN/strings.json | 7 +++++++ .../.template.config/zh-TW/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/en/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../StarterWeb-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../content/WebApi-CSharp/.template.config/en/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../WebApi-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/de-DE/strings.json | 7 +++++++ .../content/WebApi-FSharp/.template.config/en/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/es-ES/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/it-IT/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../WebApi-FSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../content/Worker-CSharp/.template.config/en/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../Worker-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/en/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../Angular-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../React-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../React-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../content/React-CSharp/.template.config/en/strings.json | 7 +++++++ .../React-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../React-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../React-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../React-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../React-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../React-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../React-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../React-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../React-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../React-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../React-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/cs-CZ/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/de-DE/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/en/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/es-ES/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/fr-FR/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/it-IT/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/ja-JP/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/ko-KR/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/pl-PL/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/pt-BR/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/ru-RU/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/tr-TR/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/zh-CN/strings.json | 7 +++++++ .../ReactRedux-CSharp/.template.config/zh-TW/strings.json | 7 +++++++ 196 files changed, 1372 insertions(+) create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-TW/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/cs-CZ/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/de-DE/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/en/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/es-ES/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/fr-FR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/it-IT/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ja-JP/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ko-KR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pl-PL/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pt-BR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ru-RU/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/tr-TR/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-CN/strings.json create mode 100644 src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-TW/strings.json diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..38c6d2b468 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Serverová aplikace Blazor", + "description": "Šablona projektu pro vytvoření serverové aplikace Blazor, která běží na straně serveru uvnitř aplikace ASP.NET Core a zpracovává interakce uživatele přes připojení SignalR. Tato šablona se dá využít pro webové aplikace s propracovanými dynamickými uživatelskými rozhraními (UI)." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..6a5f34a9b5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor-Server-App", + "description": "Eine Projektvorlage für das Erstellen einer Blazor-Server-App, die serverseitig innerhalb einer ASP.NET Core-App ausgeführt wird und die Benutzerinteraktionen über eine SignalR-Verbindung verarbeitet. Diese Vorlage kann für Web-Apps mit umfangreichen dynamischen Benutzeroberflächen verwendet werden." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..ed226a610d --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor Server App", + "description": "A project template for creating a Blazor server app that runs server-side inside an ASP.NET Core app and handles user interactions over a SignalR connection. This template can be used for web apps with rich dynamic user interfaces (UIs)." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..36511c90dd --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicación de servidor Blazor", + "description": "Plantilla de proyecto para crear una aplicación de servidor de Blazor que se ejecuta del lado servidor dentro de una aplicación de ASP.NET Core y controla las interacciones de los usuarios a través de una conexión de SignalR. Esta plantilla se puede usar para las aplicaciones web con interfaces de usuario dinámicas enriquecidas." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..2da0a5b82f --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Application serveur Blazor", + "description": "Modèle de projet permettant de créer une application serveur Blazor qui s'exécute côté serveur dans une application ASP.NET Core, et qui gère les interactions utilisateur via une connexion SignalR. Vous pouvez utiliser ce modèle pour les applications web ayant des IU (interfaces utilisateur) dynamiques riches." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..024f28b174 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "App server Blazor", + "description": "Modello di progetto per la creazione di un'app server Blazor che viene eseguita lato server all'interno di un'app ASP.NET Core e gestisce le interazioni utente in una connessione SignalR. Questo modello può essere usato per app Web con interfacce utente dinamiche." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..1ea3f456cb --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor サーバー アプリ", + "description": "ASP.NET Core アプリ内のサーバー側で実行され、SignalR 接続を介してユーザー操作を処理する Blazor サーバー アプリを作成するためのプロジェクト テンプレート。このテンプレートは、高度でダイナミックなユーザー インターフェイス (UI) を備えた Web アプリに使用できます。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..a6a6f13e6a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor 서버 앱", + "description": "ASP.NET Core 앱 내에서 서버 쪽을 실행하고 SignalR 연결을 통해 사용자 상호 작용을 처리하는 Blazor 서버 앱을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿을 사용하여 다양한 동적 UI(사용자 인터페이스)가 포함된 웹앱을 만들 수 있습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..0a9b2a7f5d --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplikacja serwera Blazor", + "description": "Szablon projektu służący do tworzenia aplikacji serwera Blazor działającej po stronie serwera wewnątrz aplikacji platformy ASP.NET Core i obsługującej interakcje z użytkownikami za pośrednictwem połączenia SignalR. Ten szablon może być używany dla aplikacji internetowych z rozbudowanymi, dynamicznymi interfejsami użytkowników." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..e3a9e7fc47 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicativo de Servidor Blazor", + "description": "Um modelo de projeto para criar um aplicativo para servidores Blazor que é executado do lado do servidor em um aplicativo ASP.NET Core e manipula as interações com o usuário em uma conexão SignalR. Esse modelo pode ser usado para aplicativos Web com UIs (interfaces do usuário) completas e dinâmicas." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..4af3f83889 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Серверное приложение Blazor", + "description": "Шаблон проекта для создания серверного приложения Blazor, которое запускается на стороне сервера в приложении ASP.NET Core и обрабатывает взаимодействие с пользователем через подключение SignalR. Этот шаблон можно использовать для веб-приложений с полнофункциональными динамическими пользовательскими интерфейсами." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..efa7e0ab1a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor Sunucu Uygulaması", + "description": "Bir ASP.NET Core uygulaması içinde sunucu tarafında çalışan ve bir SignalR bağlantısı üzerinden kullanıcı etkileşimlerini işleyen bir Blazor sunucu uygulaması oluşturmaya yönelik proje şablonu. Bu şablon, zengin dinamik kullanıcı arabirimlerine (UI) sahip web uygulamaları için kullanılabilir." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..3ce9132e17 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor Server 应用", + "description": "用于创建 Blazor 服务器应用的项目模板,该应用会在 ASP.NET Core 应用内运行服务器端并对通过 SignalR 连接进行用户交互进行处理。此模板可用于具有丰富动态用户界面(UI)的 Web 应用。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..d4f0b1e441 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor 伺服器應用程式", + "description": "用來建立 Blazor 伺服器應用程式的專案範本,該應用程式會在 ASP.NET Core 應用程式內執行伺服器端,並透過 SignalR 連線處理使用者互動。此範本可用於具有豐富動態使用者介面 (UI) 的 Web 應用程式。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..89b528ee55 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Prázdné", + "description": "Prázdná šablona projektu pro vytvoření aplikace ASP.NET Core. V této šabloně není žádný obsah." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..7ffc47ddc8 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Leer", + "description": "Eine leere Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung. Diese Vorlage umfasst keine Inhalte." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..a4f99a9bc2 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Empty", + "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..5cd4817bbe --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vacío", + "description": "Una plantilla de proyecto vacía para crear una aplicación ASP.NET Core. Esta plantilla no incluye ningún contenido." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..a1c07b1cba --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vide", + "description": "Modèle de projet vide pour la création d'une application ASP.NET Core. Ce modèle n'a aucun contenu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..b677d00575 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vuoto", + "description": "Modello di progetto vuoto per la creazione di un'applicazione ASP.NET Core. Questo modello non include alcun contenuto." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..5867c1072a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "空", + "description": "ASP.NET Core アプリケーションを作成するための空のプロジェクト テンプレートです。このテンプレートにはコンテンツが一切含まれていません。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..d9d4548187 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "비어 있음", + "description": "ASP.NET Core 응용 프로그램을 만들기 위한 빈 프로젝트 템플릿입니다. 이 템플릿에는 내용이 없습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..7356b2efdd --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Pusty", + "description": "Pusty szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core. Ten szablon nie ma żadnej zawartości." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..e80e042bb2 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vazio", + "description": "Um modelo de projeto vazio para a criação de um aplicativo ASP.NET Core. Esse modelo não tem nenhum conteúdo." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..d3d230162b --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Пустой", + "description": "Пустой шаблон проекта для создания приложения ASP.NET Core. Этот шаблон не имеет содержимого." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..b8fd3fc105 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Boş", + "description": "ASP.NET Core uygulaması oluşturmaya yönelik boş bir proje şablonu. Bu şablonda içerik yoktur." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..99f98b1926 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "空", + "description": "用于创建 ASP.NET Core 应用程序的空项目模板。此模板中没有任何内容。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..c01d527c8f --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "空白", + "description": "可用於建立 ASP.NET Core 應用程式的空白專案範本。此範本不含任何內容。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..89b528ee55 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Prázdné", + "description": "Prázdná šablona projektu pro vytvoření aplikace ASP.NET Core. V této šabloně není žádný obsah." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..7ffc47ddc8 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Leer", + "description": "Eine leere Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung. Diese Vorlage umfasst keine Inhalte." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..a4f99a9bc2 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Empty", + "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..5cd4817bbe --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vacío", + "description": "Una plantilla de proyecto vacía para crear una aplicación ASP.NET Core. Esta plantilla no incluye ningún contenido." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..a1c07b1cba --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vide", + "description": "Modèle de projet vide pour la création d'une application ASP.NET Core. Ce modèle n'a aucun contenu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..b677d00575 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vuoto", + "description": "Modello di progetto vuoto per la creazione di un'applicazione ASP.NET Core. Questo modello non include alcun contenuto." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..5867c1072a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "空", + "description": "ASP.NET Core アプリケーションを作成するための空のプロジェクト テンプレートです。このテンプレートにはコンテンツが一切含まれていません。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..d9d4548187 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "비어 있음", + "description": "ASP.NET Core 응용 프로그램을 만들기 위한 빈 프로젝트 템플릿입니다. 이 템플릿에는 내용이 없습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..7356b2efdd --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Pusty", + "description": "Pusty szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core. Ten szablon nie ma żadnej zawartości." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..e80e042bb2 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Vazio", + "description": "Um modelo de projeto vazio para a criação de um aplicativo ASP.NET Core. Esse modelo não tem nenhum conteúdo." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..d3d230162b --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Пустой", + "description": "Пустой шаблон проекта для создания приложения ASP.NET Core. Этот шаблон не имеет содержимого." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..b8fd3fc105 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Boş", + "description": "ASP.NET Core uygulaması oluşturmaya yönelik boş bir proje şablonu. Bu şablonda içerik yoktur." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..99f98b1926 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "空", + "description": "用于创建 ASP.NET Core 应用程序的空项目模板。此模板中没有任何内容。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..c01d527c8f --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "空白", + "description": "可用於建立 ASP.NET Core 應用程式的空白專案範本。此範本不含任何內容。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..8d9977a3e4 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Služba gRPC", + "description": "Šablona projektu pro vytvoření služby gRPC ASP.NET Core" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..908fa21805 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC-Dienst", + "description": "Eine Projektvorlage für das Erstellen eines gRPC-ASP.NET Core-Diensts." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..b732b471d4 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC Service", + "description": "A project template for creating a gRPC ASP.NET Core service." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..49f091e7df --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Servicio gRPC", + "description": "Plantilla de proyecto para crear un servicio gRPC de ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..38f9e9eafe --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Service gRPC", + "description": "Modèle de projet pour la création d'un service gRPC ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..366d11d92c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Servizio gRPC", + "description": "Modello di progetto per la creazione di un servizio ASP.NET Core gRPC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..a0476d1b05 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC サービス", + "description": "gRPC ASP.NET Core サービスを作成するためのプロジェクト テンプレート。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..322840f8df --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC 서비스", + "description": "gRPC ASP.NET Core 서비스를 만들기 위한 프로젝트 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..8fed044604 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Usługa gRPC", + "description": "Szablon projektu służący do tworzenia usługi gRPC platformy ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..eeceecfcc0 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Serviço gRPC", + "description": "Um modelo de projeto para criar um serviço gRPC ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..48f4f67f14 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Служба gRPC", + "description": "Шаблон проекта для создания службы gRPC ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..e1f43117f9 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC Uygulaması", + "description": "gRPC ASP.NET Core hizmeti oluşturmaya yönelik proje şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..cd40268b9c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC 服务", + "description": "用于创建 gRPC ASP.NET Core 服务的项目模板。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..bb00579615 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "gRPC 服務", + "description": "用來建立 gRPC ASP.NET Core 服務的專案範本。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..b87b21d59c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Knihovna tříd Razor", + "description": "Projekt šablony pro vytvoření knihovny tříd Razor" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..4ee471d2b7 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor-Klassenbibliothek", + "description": "Eine Projektvorlage zum Erstellen einer Razor-Klassenbibliothek." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..a95f7f0ae4 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor Class Library", + "description": "A project template for creating a Razor class library." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..fd48afa6e8 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Biblioteca de clases de Razor", + "description": "Plantilla de proyecto para crear una biblioteca de clases de Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..66b937b0a1 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Bibliothèque de classes Razor", + "description": "Modèle de projet pour créer une bibliothèque de classes Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..da09949234 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Libreria di classi Razor", + "description": "Modello di progetto per la creazione di una libreria di classi Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..858f722396 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor クラス ライブラリ", + "description": "Razor クラス ライブラリを作成するためのプロジェクト テンプレートです。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..a0a11cd02d --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor 클래스 라이브러리", + "description": "Razor 클래스 라이브러리를 만들기 위한 프로젝트 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..da8e0fe500 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Biblioteka klas Razor", + "description": "Szablon projektu do tworzenia biblioteki klas Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..90f9fc4b8c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Biblioteca de Classes Razor", + "description": "Um modelo de projeto para criar uma biblioteca de classes Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..b025f1e0ec --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Библиотека классов Razor", + "description": "Шаблон проекта для создания библиотеки классов Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..aef6961ad5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor Sınıf Kitaplığı", + "description": "Razor sınıf kütüphanesi yaratma projesi şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..1c511b7f65 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor 类库", + "description": "用于创建 Razor 类库的项目模板。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..5abee44995 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Razor 類別庫", + "description": "用於建立 Razor 類別庫的專案範本。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..d9e0ef4f69 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Serverová aplikace Blazor", + "description": "Šablona projektu pro vytvoření aplikace Blazor, která běží na straně serveru uvnitř aplikace ASP.NET Core. Tato šablona se dá využít pro webové aplikace s propracovanými dynamickými uživatelskými rozhraními (UI)." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..fbfd18918b --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor-Server-App", + "description": "Eine Projektvorlage für das Erstellen einer Blazor-Anwendung, die serverseitig innerhalb einer ASP.NET Core-Anwendung ausgeführt wird. Diese Vorlage kann für Webanwendungen mit umfangreichen dynamischen Benutzeroberflächen verwendet werden." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..e435bbf677 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor Server App", + "description": "A project template for creating a Blazor server app that runs server-side inside an ASP.NET Core app and handles user interactions over a SignalR connection. This template can be used for web apps with rich dynamic user interfaces (UIs)." + } +} diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..cab2e5fff7 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicación de servidor Blazor", + "description": "Plantilla de proyecto para crear una aplicación Blazor que se ejecuta del lado servidor dentro de una aplicación de ASP.NET Core. Esta plantilla se puede usar para las aplicaciones web con interfaces de usuario dinámicas enriquecidas." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..8125fff887 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Application serveur Blazor", + "description": "Modèle de projet pour la création d'une application Blazor qui s'exécute côté serveur dans une application ASP.NET Core. Vous pouvez utiliser ce modèle pour les applications web ayant des IU (interfaces utilisateur) dynamiques riches." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..1ad3eb5ec9 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "App server Blazor", + "description": "Modello di progetto per la creazione di un'applicazione Blazor che viene eseguita lato server all'interno di un'applicazione ASP.NET Core. Questo modello può essere usato per applicazioni Web con interfacce utente dinamiche." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..e61ed03649 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor サーバー アプリ", + "description": "ASP.NET Core アプリケーション内のサーバー側で実行される Blazor アプリケーションを作成するためのプロジェクト テンプレート。このテンプレートは、リッチでダイナミックなユーザー インターフェイス (UI) を備えた Web アプリケーションに使用できます。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..92444cf0c0 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor 서버 앱", + "description": "ASP.NET Core 애플리케이션 내에서 서버 쪽을 실행하는 Blazor 애플리케이션을 만들기 위한 프로젝트 템플릿입니다. 이 템플릿을 사용하여 다양한 동적 UI(사용자 인터페이스)가 포함된 웹 애플리케이션을 만들 수 있습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..3339fc3378 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplikacja serwera Blazor", + "description": "Szablon projektu służący do tworzenia aplikacji Blazor działającej po stronie serwera wewnątrz aplikacji platformy ASP.NET Core. Ten szablon może być używany dla aplikacji internetowych z rozbudowanymi, dynamicznymi interfejsami użytkowników." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..76edb169fa --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicativo de Servidor Blazor", + "description": "Um modelo de projeto para criar um aplicativo Blazor que é executado no lado do servidor de um aplicativo ASP.NET Core. Esse modelo pode ser usado para aplicativos Web com interfaces do usuário completas e dinâmicas." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..3356df6fd1 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Серверное приложение Blazor", + "description": "Шаблон проекта для создания приложения Blazor, которое запускается на стороне сервера в приложении ASP.NET Core. Этот шаблон можно использовать для веб-приложений с полнофункциональными динамическими пользовательскими интерфейсами." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..2816c29912 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor Sunucu Uygulaması", + "description": "Bir ASP.NET Core uygulaması içinde sunucu tarafında çalışan bir Blazor uygulaması oluşturmaya yönelik proje şablonu. Bu şablon, zengin dinamik kullanıcı arabirimlerine (UI) sahip web uygulamaları için kullanılabilir." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..99bda9b276 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor Server 应用", + "description": "用于创建 ASP.NET Core 应用程序内运行服务器端的 Blazor 应用程序的项目模板。此模板可用于具有丰富动态用户界面(UI)的 web 应用程序。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..0281c56dd8 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorComponentsWeb-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Blazor 伺服器應用程式", + "description": "用來建立 ASP.NET Core 應用程式內執行伺服器端之 Blazor 應用程式的專案範本。具有豐富動態使用者介面 (UI) 的 Web 應用程式可使用此範本。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..73f26d1802 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Webová aplikace", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core s ukázkou obsahu ASP.NET Core Razor Pages." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..f12b3653cd --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Webanwendung", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit Beispielinhalt für ASP.NET Core-Razor-Seiten." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..7372441def --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web Application", + "description": "A project template for creating an ASP.NET Core application with example ASP.NET Razor Pages content." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..7b7f0d1c1d --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicación web", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con contenido de páginas de Razor de ASP.NET Core de ejemplo." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..38fa60c72c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Application web", + "description": "Modèle de projet permettant de créer une application ASP.NET Core avec un exemple de contenu ASP.NET Core Razor Pages." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..6cdcde72ff --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Applicazione Web", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con contenuto di pagine Razor ASP.NET Core di esempio." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..7e12fd630a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web アプリケーション", + "description": "ASP.NET Core アプリケーションを、サンプルの ASP.NET Core Razor ページ コンテンツで作成するためのプロジェクト テンプレートです。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..a3ec9723d4 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "웹 응용 프로그램", + "description": "예제 ASP.NET Core Razor 페이지 콘텐츠를 사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..721e1c1f1c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplikacja internetowa", + "description": "Szablon projektu służący do tworzenia aplikacji ASP.NET Core z przykładowymi stronami ASP.NET Core Razor." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..8239975966 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicativo Web", + "description": "Um modelo de projeto para criar um aplicativo ASP.NET Core com conteúdo de Razor Pages do ASP.NET Core de exemplo." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..a8d97c26a5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Веб-приложение", + "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом содержимого ASP.NET Core Razor Pages." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..b1a39b12a7 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web Uygulaması", + "description": "ASP.NET Core Razor Sayfalar içeriği örneğiyle ASP.NET Core uygulaması oluşturmak için proje şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..fe5c769458 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web 应用程序", + "description": "用于创建包含示例 ASP.NET Core Razor 页面内容的 ASP.NET Core 应用程序的项目模板。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..13fd1e0997 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web 應用程式", + "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 ASP.NET Core 的 Razor 頁面內容。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..04a8c0903b --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Webová aplikace (model-zobrazení-kontroler)", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core s ukázkovými zobrazeními a kontrolery ASP.NET Core MVC. Tato šablona se dá použít i pro služby RESTful HTTP." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..a71d8d329f --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Webanwendung (Model-View-Controller)", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit Beispielen für ASP.NET Core-MVC-Ansichten und -Controller. Diese Vorlage kann auch für RESTful HTTP-Dienste verwendet werden." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..73131cff4c --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web Application (Model-View-Controller)", + "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core MVC Views and Controllers. This template can also be used for RESTful HTTP services." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..60e5334d79 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicación web (controlador de vista de modelos)", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con controladores y vistas de ASP.NET Core MVC de ejemplo. Esta plantilla también puede usarse para servicios RESTful HTTP." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..6db74bff3e --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Application web (Model-View-Controller)", + "description": "Modèle de projet permettant de créer une application ASP.NET Core avec des exemples de vues et de contrôleurs ASP.NET Core MVC. Vous pouvez également utiliser ce modèle pour les services HTTP RESTful." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..e2edc362b4 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Applicazione Web (MVC)", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con viste e controller ASP.NET Core MVC di esempio. È possibile usare questo modello anche per i servizi HTTP RESTful." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..479f13fa87 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web アプリケーション (モデル ビュー コントローラー)", + "description": "ASP.NET Core MVC のサンプル ビューとコントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは RESTful HTTP サービスでも使用できます。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..15c3c2733d --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "웹 응용 프로그램(모델-뷰-컨트롤러)", + "description": "예제 ASP.NET Core MVC 뷰 및 컨트롤러를 사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 RESTful HTTP 서비스에도 사용할 수 있습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..28b43749ea --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplikacja internetowa (Model-View-Controller)", + "description": "Szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core z przykładowymi widokami i kontrolerami platformy ASP.NET Core MVC. Tego szablonu można także użyć dla usług HTTP RESTful." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..872204a6ad --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Aplicativo Web (Modelo-Exibição-Controlador)", + "description": "Um modelo de projeto para criar um aplicativo ASP.NET Core com Controladores e Exibições do ASP.NET Core MVC de exemplo. Esse modelo também pode ser usado para serviços HTTP RESTful." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..1ae57b0c6f --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Веб-приложение (модель-представление-контроллер)", + "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом представлений MVC и контроллеров ASP.NET Core. Этот шаблон можно также использовать для служб HTTP RESTful." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..a4d7ef87c4 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web Uygulaması (Model-View-Controller)", + "description": "Örnek ASP.NET Core MVC Görünümleri ve Denetleyicileri içeren bir ASP.NET Core uygulaması oluşturmaya yönelik proje şablonu. Bu şablon aynı zamanda RESTful HTTP hizmetleri için de kullanılabilir." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..660b44d088 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web 应用程序(模型视图控制器)", + "description": "用于创建包含示例 ASP.NET Core MVC 视图和控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 RESTful HTTP 服务。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..9ea22231c6 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Web 應用程式 (模型-檢視-控制器)", + "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 ASP.NET Core MVC 的檢視及控制器範例。此範本也可用於 RESTful HTTP 服務。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..ee51997532 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Rozhraní API", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core s ukázkovým kontrolerem pro službu RESTful HTTP. Tato šablona se dá použít i pro zobrazení a kontrolery ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..b362eb0448 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit einem Beispielcontroller für einen RESTful HTTP-Dienst. Diese Vorlage kann auch für ASP.NET Core-MVC-Ansichten und -Controller verwendet werden." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..9d10e71706 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "A project template for creating an ASP.NET Core application with an example Controller for a RESTful HTTP service. This template can also be used for ASP.NET Core MVC Views and Controllers." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..80938f4094 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con un controlador de ejemplo para un servicio RESTful HTTP. Esta plantilla también puede usarse para controladores y vistas de ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..2501a2d4e5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Modèle de projet permettant de créer une application ASP.NET Core avec un exemple de contrôleur pour un service HTTP RESTful. Vous pouvez également utiliser ce modèle pour les vues et contrôleurs ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..7fa4be6166 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con un controller di esempio per un servizio HTTP RESTful. È possibile usare questo modello anche per i controller e le viste di ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..163de00278 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "RESTful HTTP サービスのサンプル コントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは ASP.NET Core MVC のビューとコントローラーでも使用できます。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..a43cde9b52 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "RESTful HTTP 서비스용 예제 컨트롤러를 사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 ASP.NET Core MVC 뷰 및 컨트롤러에도 사용할 수 있습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..7aef862a3a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core z przykładowym kontrolerem obsługującym usługę HTTP RESTful. Tego szablonu można także użyć dla widoków i kontrolerów platformy ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..6afbc6a4c1 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Um modelo de projeto para criar um aplicativo ASP.NET Core com um Controlador de exemplo para um serviço HTTP RESTful. Esse modelo também pode ser usado para Controladores e Exibições do ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..0f77746cd5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом контроллера для службы HTTP RESTful. Этот шаблон можно также использовать для представлений MVC и контроллеров ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..a588625310 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "RESTful HTTP hizmetine ait örnek bir Denetleyici içeren bir ASP.NET Core uygulaması oluşturmaya yönelik proje şablonu. Bu şablon aynı zamanda ASP.NET Core MVC Görünümleri ve Denetleyicileri için de kullanılabilir." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..95b0fec840 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "用于创建包含 RESTful HTTP 服务示例控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 ASP.NET Core MVC 视图和控制器。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..1bf1a9edfe --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 RESTful HTTP 服務的控制器範例。此範本也可用於 ASP.NET Core MVC 的檢視及控制器。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..ee51997532 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Rozhraní API", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core s ukázkovým kontrolerem pro službu RESTful HTTP. Tato šablona se dá použít i pro zobrazení a kontrolery ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..b362eb0448 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit einem Beispielcontroller für einen RESTful HTTP-Dienst. Diese Vorlage kann auch für ASP.NET Core-MVC-Ansichten und -Controller verwendet werden." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..9d10e71706 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "A project template for creating an ASP.NET Core application with an example Controller for a RESTful HTTP service. This template can also be used for ASP.NET Core MVC Views and Controllers." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..80938f4094 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con un controlador de ejemplo para un servicio RESTful HTTP. Esta plantilla también puede usarse para controladores y vistas de ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..2501a2d4e5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Modèle de projet permettant de créer une application ASP.NET Core avec un exemple de contrôleur pour un service HTTP RESTful. Vous pouvez également utiliser ce modèle pour les vues et contrôleurs ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..7fa4be6166 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con un controller di esempio per un servizio HTTP RESTful. È possibile usare questo modello anche per i controller e le viste di ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..163de00278 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "RESTful HTTP サービスのサンプル コントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは ASP.NET Core MVC のビューとコントローラーでも使用できます。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..a43cde9b52 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "RESTful HTTP 서비스용 예제 컨트롤러를 사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 ASP.NET Core MVC 뷰 및 컨트롤러에도 사용할 수 있습니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..7aef862a3a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core z przykładowym kontrolerem obsługującym usługę HTTP RESTful. Tego szablonu można także użyć dla widoków i kontrolerów platformy ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..6afbc6a4c1 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Um modelo de projeto para criar um aplicativo ASP.NET Core com um Controlador de exemplo para um serviço HTTP RESTful. Esse modelo também pode ser usado para Controladores e Exibições do ASP.NET Core MVC." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..0f77746cd5 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом контроллера для службы HTTP RESTful. Этот шаблон можно также использовать для представлений MVC и контроллеров ASP.NET Core." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..a588625310 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "RESTful HTTP hizmetine ait örnek bir Denetleyici içeren bir ASP.NET Core uygulaması oluşturmaya yönelik proje şablonu. Bu şablon aynı zamanda ASP.NET Core MVC Görünümleri ve Denetleyicileri için de kullanılabilir." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..95b0fec840 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "用于创建包含 RESTful HTTP 服务示例控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 ASP.NET Core MVC 视图和控制器。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..1bf1a9edfe --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "API", + "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 RESTful HTTP 服務的控制器範例。此範本也可用於 ASP.NET Core MVC 的檢視及控制器。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..848fb37c87 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Služba pracovního procesu", + "description": "Šablona prázdného projektu pro vytvoření služby pracovního procesu" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..ecec877156 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Workerdienst", + "description": "Eine leere Projektvorlage zum Erstellen eines Workerdiensts." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..0b13cebb97 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Worker Service", + "description": "An empty project template for creating a worker service." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..4e3cf14930 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Servicio de trabajo", + "description": "Una plantilla de proyecto vacío para crear un servicio de trabajo." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..fd4416d5fe --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Service Worker", + "description": "Modèle de projet vide pour la création d'un service Worker." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..7bdfc52e86 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Servizio di ruolo di lavoro", + "description": "Modello di progetto vuoto per la creazione di servizio del ruolo di lavoro." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..2de2e6b432 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "ワーカー サービス", + "description": "ワーカー サービスを作成するための空のプロジェクト テンプレート。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..4c48bf1283 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "작업자 서비스", + "description": "작업자 서비스를 만들기 위한 빈 프로젝트의 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..e4b11c845e --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Usługa procesu roboczego", + "description": "Szablon pustego projektu służący do tworzenia usługi procesu roboczego." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..d61f922597 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Serviço de Trabalho", + "description": "Um modelo de projeto vazio para criar um serviço de trabalho." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..457c379060 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Служба рабочих ролей", + "description": "Шаблон пустого проекта для создания службы рабочих ролей." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..9a2afe2425 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Çalışan Hizmeti", + "description": "Çalışan hizmeti oluşturmaya yönelik bir boş proje şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..2767f38f9a --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "辅助角色服务", + "description": "用于创建辅助角色服务的空项目模板。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..53135ee645 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "背景工作服務", + "description": "用於建立背景工作服務的空白專案範本。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..05f88eebcf --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core pomocí Angularu" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..e4cb44441d --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..a993f86deb --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "A project template for creating an ASP.NET Core application with Angular" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..560729b7ea --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..055e9736ab --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Modèle de projet permettant de créer une application ASP.NET Core avec Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..2f64d18c1c --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..5e679187af --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "ASP.NET Core アプリケーションを Angular で作成するためのプロジェクト テンプレートです。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..31b13ddaf7 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Angular를 사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..6d0ff0d6fb --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Szablon projektu umożliwiający tworzenie aplikacji ASP.NET Core z użyciem platformy Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..0de7fbbffc --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Um modelo de projeto para a criação de um aplicativo ASP.NET Core com Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..2a9f6cebf8 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Шаблон проекта для создания приложения ASP.NET Core с Angular." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..dc278f546f --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "Angular ile bir ASP.NET Core uygulaması oluşturmak için proje şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..4d8cae8b44 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "用于创建 ASP.NET Core 应用程序的项目模板,其中包含 Angular。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..a0ba6fd6b6 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "Angular", + "description": "用於建立具有 Angular 的 ASP.NET Core 應用程式之專案範本。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..d396732e51 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core pomocí React.js" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..9ec28759ba --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..fd5d6d4e58 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "A project template for creating an ASP.NET Core application with React.js" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..f8df196403 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..7fe2562b68 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Modèle de projet permettant de créer une application ASP.NET Core avec React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..fe6bac2dd3 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..da321fd312 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "ASP.NET Core アプリケーションを React.js で作成するためのプロジェクト テンプレートです。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..010948ea75 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "React.js를사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..94b9b071a8 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Szablon projektu umożliwiający tworzenie aplikacji ASP.NET Core z użyciem biblioteki React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..a44518c374 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Um modelo de projeto para a criação de um aplicativo ASP.NET Core com React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..581659c9a9 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "Шаблон проекта для создания приложения ASP.NET Core с React.js." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..d86876a2c9 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "React.js ile bir ASP.NET Core uygulaması oluşturmak için proje şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..e98e579875 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "用于创建 ASP.NET Core 应用程序的项目模板,其中包含 React.js。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..47eaed2902 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js", + "description": "用於建立具有 React.js 的 ASP.NET Core 應用程式之專案範本。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/cs-CZ/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/cs-CZ/strings.json new file mode 100644 index 0000000000..947c74c06c --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/cs-CZ/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js a Redux", + "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core pomocí React.js a Reduxu" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/de-DE/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/de-DE/strings.json new file mode 100644 index 0000000000..619f9eaeff --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/de-DE/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js und Redux", + "description": "Eine Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung mit React.js und Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/en/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/en/strings.json new file mode 100644 index 0000000000..1642995d41 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/en/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js and Redux", + "description": "A project template for creating an ASP.NET Core application with React.js and Redux" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/es-ES/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/es-ES/strings.json new file mode 100644 index 0000000000..48a7d64f82 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/es-ES/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js y Redux", + "description": "Una plantilla de proyecto para crear una aplicación ASP.NET Core con React.js y Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/fr-FR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/fr-FR/strings.json new file mode 100644 index 0000000000..842087db1d --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/fr-FR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js et Redux", + "description": "Modèle de projet pour créer une application ASP.NET Core avec React.js et Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/it-IT/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/it-IT/strings.json new file mode 100644 index 0000000000..26bbd4d5fa --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/it-IT/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js e Redux", + "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con React.js e Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ja-JP/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ja-JP/strings.json new file mode 100644 index 0000000000..c0c566985c --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ja-JP/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js と Redux", + "description": "ASP.NET Core アプリケーションを React.js と Redux で作成するためのプロジェクト テンプレートです。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ko-KR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ko-KR/strings.json new file mode 100644 index 0000000000..693b822110 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ko-KR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js 및 Redux", + "description": "React.js 및 Redux를 사용하여 ASP.NET Core 응용 프로그램을 만드는 데 사용되는 프로젝트 템플릿입니다." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pl-PL/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pl-PL/strings.json new file mode 100644 index 0000000000..b64b96b49a --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pl-PL/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js i Redux", + "description": "Szablon projektu umożliwiający tworzenie aplikacji ASP.NET Core z użyciem biblioteki React.js i kontenera Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pt-BR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pt-BR/strings.json new file mode 100644 index 0000000000..f0ad7e6860 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/pt-BR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js e Redux", + "description": "Um modelo de projeto para a criação de um aplicativo ASP.NET Core com React.js. e Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ru-RU/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ru-RU/strings.json new file mode 100644 index 0000000000..6c2cf5f5ad --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/ru-RU/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js и Redux", + "description": "Шаблон проекта для создания приложения ASP.NET Core с React.js и Redux." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/tr-TR/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/tr-TR/strings.json new file mode 100644 index 0000000000..a935e0fc83 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/tr-TR/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js ve Redux", + "description": "React.js ve Redux ile bir ASP.NET Core uygulaması oluşturmak için proje şablonu." + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-CN/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-CN/strings.json new file mode 100644 index 0000000000..db46a3de01 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-CN/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js 和 Redux", + "description": "用于创建 ASP.NET Core 应用程序的项目模板,其中包含 React.js 和 Redux。" + } +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-TW/strings.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-TW/strings.json new file mode 100644 index 0000000000..89f1571ac1 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/zh-TW/strings.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0.0", + "strings": { + "name": "React.js 與 Redux", + "description": "用於建立具有 React.js 與 Redux 的 ASP.NET Core 應用程式之專案範本。" + } +} \ No newline at end of file From 7a0a286ce6ff5945e690c9747079e61d4e6f31d8 Mon Sep 17 00:00:00 2001 From: Javier Calvarro Nelson Date: Wed, 31 Jul 2019 13:17:00 +0200 Subject: [PATCH 07/12] [Blazor][Fixes #12197] Dispose the circuit on graceful disconnections (#12449) * Immediately releases the circuit when the client disconnects gracefully. * This functionality is limited to websockets. * We are able to release the circuit in the following situations: * The user closes the browser. * The user navigates away. * The user reloads the page. --- .../Server/src/Circuits/CircuitRegistry.cs | 19 +++ src/Components/Server/src/ComponentHub.cs | 31 ++++- .../ToggleExecutionModeServerFixture.cs | 15 ++- .../CircuitGracefulTerminationTests.cs | 113 ++++++++++++++++++ src/Shared/E2ETesting/BrowserTestBase.cs | 9 +- 5 files changed, 182 insertions(+), 5 deletions(-) create mode 100644 src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs diff --git a/src/Components/Server/src/Circuits/CircuitRegistry.cs b/src/Components/Server/src/Circuits/CircuitRegistry.cs index 091d993548..9fe25c5b68 100644 --- a/src/Components/Server/src/Circuits/CircuitRegistry.cs +++ b/src/Components/Server/src/Circuits/CircuitRegistry.cs @@ -81,6 +81,15 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits } } + public void PermanentDisconnect(CircuitHost circuitHost) + { + if (ConnectedCircuits.TryRemove(circuitHost.CircuitId, out _)) + { + Log.CircuitDisconnectedPermanently(_logger, circuitHost.CircuitId); + circuitHost.Client.SetDisconnected(); + } + } + public virtual Task DisconnectAsync(CircuitHost circuitHost, string connectionId) { Log.CircuitDisconnectStarted(_logger, circuitHost.CircuitId, connectionId); @@ -314,6 +323,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits private static readonly Action _circuitNotActive; private static readonly Action _circuitConnectedToDifferentConnection; private static readonly Action _circuitMarkedDisconnected; + private static readonly Action _circuitDisconnectedPermanently; private static readonly Action _circuitEvicted; private static class EventIds @@ -330,6 +340,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits public static readonly EventId CircuitConnectedToDifferentConnection = new EventId(109, "CircuitConnectedToDifferentConnection"); public static readonly EventId CircuitMarkedDisconnected = new EventId(110, "CircuitMarkedDisconnected"); public static readonly EventId CircuitEvicted = new EventId(111, "CircuitEvicted"); + public static readonly EventId CircuitDisconnectedPermanently = new EventId(112, "CircuitDisconnectedPermanently"); } static Log() @@ -394,6 +405,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits EventIds.CircuitMarkedDisconnected, "Circuit with id {CircuitId} is disconnected."); + _circuitDisconnectedPermanently = LoggerMessage.Define( + LogLevel.Debug, + EventIds.CircuitDisconnectedPermanently, + "Circuit with id {CircuitId} has been removed from the registry for permanent disconnection."); + _circuitEvicted = LoggerMessage.Define( LogLevel.Debug, EventIds.CircuitEvicted, @@ -436,6 +452,9 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits public static void CircuitMarkedDisconnected(ILogger logger, string circuitId) => _circuitMarkedDisconnected(logger, circuitId, null); + public static void CircuitDisconnectedPermanently(ILogger logger, string circuitId) => + _circuitDisconnectedPermanently(logger, circuitId, null); + public static void CircuitEvicted(ILogger logger, string circuitId, EvictionReason evictionReason) => _circuitEvicted(logger, circuitId, evictionReason, null); } diff --git a/src/Components/Server/src/ComponentHub.cs b/src/Components/Server/src/ComponentHub.cs index ed796e73a1..b4d0d061a2 100644 --- a/src/Components/Server/src/ComponentHub.cs +++ b/src/Components/Server/src/ComponentHub.cs @@ -66,7 +66,32 @@ namespace Microsoft.AspNetCore.Components.Server } CircuitHost = null; - return _circuitRegistry.DisconnectAsync(circuitHost, Context.ConnectionId); + if (exception != null) + { + return _circuitRegistry.DisconnectAsync(circuitHost, Context.ConnectionId); + } + else + { + // The client will gracefully disconnect when using websockets by correctly closing the TCP connection. + // This happens when the user closes a tab, navigates away from the page or reloads the page. + // In these situations we know the user is done with the circuit, so we can get rid of it at that point. + // This is important to be able to more efficiently manage resources, specially memory. + return TerminateCircuitGracefully(circuitHost); + } + } + + private async Task TerminateCircuitGracefully(CircuitHost circuitHost) + { + try + { + Log.CircuitTerminatedGracefully(_logger, circuitHost.CircuitId); + _circuitRegistry.PermanentDisconnect(circuitHost); + await circuitHost.DisposeAsync(); + } + catch (Exception e) + { + Log.UnhandledExceptionInCircuit(_logger, circuitHost.CircuitId, e); + } } /// @@ -248,6 +273,8 @@ namespace Microsoft.AspNetCore.Components.Server private static readonly Action _circuitHostNotInitialized = LoggerMessage.Define(LogLevel.Debug, new EventId(6, "CircuitHostNotInitialized"), "Call to '{CallSite}' received before the circuit host initialization."); + private static readonly Action _circuitTerminatedGracefully = + LoggerMessage.Define(LogLevel.Debug, new EventId(7, "CircuitTerminatedGracefully"), "Circuit '{CircuitId}' terminated gracefully."); public static void NoComponentsRegisteredInEndpoint(ILogger logger, string endpointDisplayName) { @@ -272,6 +299,8 @@ namespace Microsoft.AspNetCore.Components.Server public static void CircuitAlreadyInitialized(ILogger logger, string circuitId) => _circuitAlreadyInitialized(logger, circuitId, null); public static void CircuitHostNotInitialized(ILogger logger, [CallerMemberName] string callSite = "") => _circuitHostNotInitialized(logger, callSite, null); + + public static void CircuitTerminatedGracefully(ILogger logger, string circuitId) => _circuitTerminatedGracefully(logger, circuitId, null); } } } diff --git a/src/Components/test/E2ETest/Infrastructure/ServerFixtures/ToggleExecutionModeServerFixture.cs b/src/Components/test/E2ETest/Infrastructure/ServerFixtures/ToggleExecutionModeServerFixture.cs index 56be3c9256..cda7c50420 100644 --- a/src/Components/test/E2ETest/Infrastructure/ServerFixtures/ToggleExecutionModeServerFixture.cs +++ b/src/Components/test/E2ETest/Infrastructure/ServerFixtures/ToggleExecutionModeServerFixture.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using Microsoft.AspNetCore.Hosting; namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures { @@ -11,6 +12,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures { public string PathBase { get; set; } + public IWebHost Host { get; set; } + public ExecutionMode ExecutionMode { get; set; } = ExecutionMode.Client; private AspNetSiteServerFixture.BuildWebHost _buildWebHostMethod; @@ -32,7 +35,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures var underlying = new DevHostServerFixture(); underlying.PathBase = PathBase; _serverToDispose = underlying; - return underlying.RootUri.AbsoluteUri; + var uri = underlying.RootUri.AbsoluteUri; // As a side-effect, this starts the server + + Host = underlying.Host; + + return uri; } else { @@ -41,7 +48,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures underlying.AdditionalArguments.AddRange(AspNetFixtureAdditionalArguments); underlying.BuildWebHostMethod = _buildWebHostMethod; _serverToDispose = underlying; - return underlying.RootUri.AbsoluteUri; + var uri = underlying.RootUri.AbsoluteUri; // As a side-effect, this starts the server + + Host = underlying.Host; + + return uri; } } diff --git a/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs b/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs new file mode 100644 index 0000000000..970f9a9ae0 --- /dev/null +++ b/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs @@ -0,0 +1,113 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using BasicTestApp; +using Castle.DynamicProxy.Contributors; +using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; +using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; +using Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests; +using Microsoft.AspNetCore.E2ETesting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging.Testing; +using OpenQA.Selenium; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.AspNetCore.Components.E2ETests.ServerExecutionTests +{ + public class CircuitGracefulTerminationTests : BasicTestAppTestBase, IDisposable + { + public CircuitGracefulTerminationTests( + BrowserFixture browserFixture, + ToggleExecutionModeServerFixture serverFixture, + ITestOutputHelper output) + : base(browserFixture, serverFixture.WithServerExecution(), output) + { + } + + public TaskCompletionSource GracefulDisconnectCompletionSource { get; private set; } + public TestSink Sink { get; private set; } + public List<(Extensions.Logging.LogLevel level, string eventIdName)> Messages { get; private set; } + + public override async Task InitializeAsync() + { + // These tests manipulate the browser in ways that make it impossible to use the same browser + // instance across tests (One of the tests closes the browser). For that reason we simply create + // a new browser instance for every test in this class sos that there are no issues when running + // them together. + await base.InitializeAsync(Guid.NewGuid().ToString()); + } + + protected override void InitializeAsyncCore() + { + Navigate(ServerPathBase, noReload: false); + MountTestComponent(); + Browser.Equal("Current count: 0", () => Browser.FindElement(By.TagName("p")).Text); + + GracefulDisconnectCompletionSource = new TaskCompletionSource(TaskContinuationOptions.RunContinuationsAsynchronously); + Sink = _serverFixture.Host.Services.GetRequiredService(); + Messages = new List<(Extensions.Logging.LogLevel level, string eventIdName)>(); + Sink.MessageLogged += Log; + } + + [Fact] + public async Task ReloadingThePage_GracefullyDisconnects_TheCurrentCircuit() + { + // Arrange & Act + _ = ((IJavaScriptExecutor)Browser).ExecuteScript("location.reload()"); + await Task.WhenAny(Task.Delay(10000), GracefulDisconnectCompletionSource.Task); + + // Assert + Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitTerminatedGracefully"), Messages); + Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitDisconnectedPermanently"), Messages); + } + + [Fact] + public async Task ClosingTheBrowserWindow_GracefullyDisconnects_TheCurrentCircuit() + { + // Arrange & Act + Browser.Close(); + // Set to null so that other tests in this class can create a new browser if necessary so + // that tests don't fail when running together. + Browser = null; + + await Task.WhenAny(Task.Delay(10000), GracefulDisconnectCompletionSource.Task); + + // Assert + Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitTerminatedGracefully"), Messages); + Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitDisconnectedPermanently"), Messages); + } + + [Fact] + public async Task ClosingTheBrowserWindow_GracefullyDisconnects_WhenNavigatingAwayFromThePage() + { + // Arrange & Act + Browser.Navigate().GoToUrl("about:blank"); + await Task.WhenAny(Task.Delay(10000), GracefulDisconnectCompletionSource.Task); + + // Assert + Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitTerminatedGracefully"), Messages); + Assert.Contains((Extensions.Logging.LogLevel.Debug, "CircuitDisconnectedPermanently"), Messages); + } + + private void Log(WriteContext wc) + { + if ((Extensions.Logging.LogLevel.Debug, "CircuitTerminatedGracefully") == (wc.LogLevel, wc.EventId.Name)) + { + GracefulDisconnectCompletionSource.TrySetResult(null); + } + Messages.Add((wc.LogLevel, wc.EventId.Name)); + } + + public void Dispose() + { + if (Sink != null) + { + Sink.MessageLogged -= Log; + } + } + } +} diff --git a/src/Shared/E2ETesting/BrowserTestBase.cs b/src/Shared/E2ETesting/BrowserTestBase.cs index 509501a4f5..bcec5ae2e3 100644 --- a/src/Shared/E2ETesting/BrowserTestBase.cs +++ b/src/Shared/E2ETesting/BrowserTestBase.cs @@ -37,9 +37,14 @@ namespace Microsoft.AspNetCore.E2ETesting return Task.CompletedTask; } - public virtual async Task InitializeAsync() + public virtual Task InitializeAsync() { - var (browser, logs) = await BrowserFixture.GetOrCreateBrowserAsync(Output); + return InitializeAsync(""); + } + + public virtual async Task InitializeAsync(string isolationContext) + { + var (browser, logs) = await BrowserFixture.GetOrCreateBrowserAsync(Output, isolationContext); _asyncBrowser.Value = browser; _logs.Value = logs; From aab75e8dda91f59192d9f81f029504def06d170f Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 31 Jul 2019 07:45:36 -0700 Subject: [PATCH 08/12] Decrement activeStreamCount earlier s.t. client view matches the server. (#12704) --- src/Servers/Kestrel/Core/src/CoreStrings.resx | 57 +++++++++--------- .../src/Internal/Http2/Http2Connection.cs | 44 +++++++++++--- .../src/Internal/Http2/Http2OutputProducer.cs | 9 ++- .../Core/src/Internal/Http2/Http2Stream.cs | 23 +++++++ .../Http2/IHttp2StreamLifetimeHandler.cs | 1 + .../Http2/Http2ConnectionTests.cs | 60 +++++++++++++++++++ 6 files changed, 157 insertions(+), 37 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/CoreStrings.resx b/src/Servers/Kestrel/Core/src/CoreStrings.resx index 7e7b2dbb56..e2b784ae3a 100644 --- a/src/Servers/Kestrel/Core/src/CoreStrings.resx +++ b/src/Servers/Kestrel/Core/src/CoreStrings.resx @@ -1,17 +1,17 @@ - @@ -614,4 +614,7 @@ For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?l The HTTP/2 stream was reset by the application with error code {errorCode}. + + A new stream was refused because this connection has too many streams that haven't finished processing. This may happen if many streams are aborted but not yet cleaned up. + diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs index 481f869acc..4bfba159dd 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs @@ -64,7 +64,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 private bool _gracefulCloseStarted; private readonly Dictionary _streams = new Dictionary(); - private int _activeStreamCount = 0; + private int _clientActiveStreamCount = 0; + private int _serverActiveStreamCount = 0; // The following are the only fields that can be modified outside of the ProcessRequestsAsync loop. private readonly ConcurrentQueue _completedStreams = new ConcurrentQueue(); @@ -219,6 +220,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 Log.Http2StreamError(ConnectionId, ex); // The client doesn't know this error is coming, allow draining additional frames for now. AbortStream(_incomingFrame.StreamId, new IOException(ex.Message, ex)); + await _frameWriter.WriteRstStreamAsync(ex.StreamId, ex.ErrorCode); } finally @@ -232,7 +234,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 catch (ConnectionResetException ex) { // Don't log ECONNRESET errors when there are no active streams on the connection. Browsers like IE will reset connections regularly. - if (_activeStreamCount > 0) + if (_clientActiveStreamCount > 0) { Log.RequestProcessingError(ConnectionId, ex); } @@ -287,7 +289,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 stream.Abort(new IOException(CoreStrings.Http2StreamAborted, connectionError)); } - while (_activeStreamCount > 0) + // Use the server _serverActiveStreamCount to drain all requests on the server side. + // Can't use _clientActiveStreamCount now as we now decrement that count earlier/ + // Can't use _streams.Count as we wait for RST/END_STREAM before removing the stream from the dictionary + while (_serverActiveStreamCount > 0) { await _streamCompletionAwaitable; UpdateCompletedStreams(); @@ -897,11 +902,21 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 throw new Http2StreamErrorException(_currentHeadersStream.StreamId, CoreStrings.Http2ErrorMissingMandatoryPseudoHeaderFields, Http2ErrorCode.PROTOCOL_ERROR); } - if (_activeStreamCount >= _serverSettings.MaxConcurrentStreams) + if (_clientActiveStreamCount >= _serverSettings.MaxConcurrentStreams) { throw new Http2StreamErrorException(_currentHeadersStream.StreamId, CoreStrings.Http2ErrorMaxStreams, Http2ErrorCode.REFUSED_STREAM); } + // We don't use the _serverActiveRequestCount here as during shutdown, it and the dictionary + // counts get out of sync during shutdown. The streams still exist in the dictionary until the client responds with a RST or END_STREAM. + // Also, we care about the dictionary size for too much memory consumption. + if (_streams.Count >= _serverSettings.MaxConcurrentStreams * 2) + { + // Server is getting hit hard with connection resets. + // Tell client to calm down. + // TODO consider making when to send ENHANCE_YOUR_CALM configurable? + throw new Http2StreamErrorException(_currentHeadersStream.StreamId, CoreStrings.Http2TellClientToCalmDown, Http2ErrorCode.ENHANCE_YOUR_CALM); + } // This must be initialized before we offload the request or else we may start processing request body frames without it. _currentHeadersStream.InputRemaining = _currentHeadersStream.RequestHeaders.ContentLength; @@ -911,8 +926,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 _currentHeadersStream.OnEndStreamReceived(); } - _activeStreamCount++; _streams[_incomingFrame.StreamId] = _currentHeadersStream; + IncrementActiveClientStreamCount(); + _serverActiveStreamCount++; // Must not allow app code to block the connection handling loop. ThreadPool.UnsafeQueueUserWorkItem(_currentHeadersStream, preferLocal: false); } @@ -950,6 +966,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 { if (_streams.TryGetValue(streamId, out var stream)) { + stream.DecrementActiveClientStreamCount(); stream.Abort(error); } } @@ -982,8 +999,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 if (stream.DrainExpirationTicks == default) { - // This is our first time checking this stream. - _activeStreamCount--; + _serverActiveStreamCount--; stream.DrainExpirationTicks = now + Constants.RequestBodyDrainTimeout.Ticks; } @@ -1022,13 +1038,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 Log.Http2ConnectionClosing(_context.ConnectionId); - if (_gracefulCloseInitiator == GracefulCloseInitiator.Server && _activeStreamCount > 0) + if (_gracefulCloseInitiator == GracefulCloseInitiator.Server && _clientActiveStreamCount > 0) { _frameWriter.WriteGoAwayAsync(int.MaxValue, Http2ErrorCode.NO_ERROR); } } - if (_activeStreamCount == 0) + if (_clientActiveStreamCount == 0) { if (_gracefulCloseStarted) { @@ -1235,6 +1251,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 return false; } + public void IncrementActiveClientStreamCount() + { + Interlocked.Increment(ref _clientActiveStreamCount); + } + + public void DecrementActiveClientStreamCount() + { + Interlocked.Decrement(ref _clientActiveStreamCount); + } + private class StreamCloseAwaitable : ICriticalNotifyCompletion { private static readonly Action _callbackCompleted = () => { }; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2OutputProducer.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2OutputProducer.cs index ac647b4db7..1e5f09732a 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2OutputProducer.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2OutputProducer.cs @@ -164,6 +164,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 if (appCompleted && !_startedWritingDataFrames && (_stream.ResponseTrailers == null || _stream.ResponseTrailers.Count == 0)) { _streamEnded = true; + _stream.DecrementActiveClientStreamCount(); http2HeadersFrame = Http2HeadersFrameFlags.END_STREAM; } else @@ -378,6 +379,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 } _stream.ResponseTrailers.SetReadOnly(); + _stream.DecrementActiveClientStreamCount(); flushResult = await _frameWriter.WriteResponseTrailers(_streamId, _stream.ResponseTrailers); } else if (readResult.IsCompleted && _streamEnded) @@ -392,7 +394,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 } else { - flushResult = await _frameWriter.WriteDataAsync(_streamId, _flowControl, readResult.Buffer, endStream: readResult.IsCompleted); + var endStream = readResult.IsCompleted; + if (endStream) + { + _stream.DecrementActiveClientStreamCount(); + } + flushResult = await _frameWriter.WriteDataAsync(_streamId, _flowControl, readResult.Buffer, endStream); } _pipeReader.AdvanceTo(readResult.Buffer.End); diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Stream.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Stream.cs index 752a70fe4b..b6de8ab79d 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Stream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Stream.cs @@ -24,6 +24,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 private readonly StreamInputFlowControl _inputFlowControl; private readonly StreamOutputFlowControl _outputFlowControl; + private bool _decrementCalled; public Pipe RequestBodyPipe { get; } internal long DrainExpirationTicks { get; set; } @@ -97,6 +98,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 var (oldState, newState) = ApplyCompletionFlag(StreamCompletionFlags.Aborted); if (oldState != newState) { + Debug.Assert(!_decrementCalled); // Don't block on IO. This never faults. _ = _http2Output.WriteRstStreamAsync(Http2ErrorCode.NO_ERROR); RequestBodyPipe.Writer.Complete(); @@ -419,6 +421,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 public void AbortRstStreamReceived() { + // Client sent a reset stream frame, decrement total count. + DecrementActiveClientStreamCount(); + ApplyCompletionFlag(StreamCompletionFlags.RstStreamReceived); Abort(new IOException(CoreStrings.Http2StreamResetByClient)); } @@ -460,6 +465,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 Log.Http2StreamResetAbort(TraceIdentifier, error, abortReason); + DecrementActiveClientStreamCount(); // Don't block on IO. This never faults. _ = _http2Output.WriteRstStreamAsync(error); @@ -481,6 +487,23 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 _inputFlowControl.Abort(); } + public void DecrementActiveClientStreamCount() + { + // Decrement can be called twice, via calling CompleteAsync and then Abort on the HttpContext. + // Only decrement once total. + lock (_completionLock) + { + if (_decrementCalled) + { + return; + } + + _decrementCalled = true; + } + + _context.StreamLifetimeHandler.DecrementActiveClientStreamCount(); + } + private Pipe CreateRequestBodyPipe(uint windowSize) => new Pipe(new PipeOptions ( diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/IHttp2StreamLifetimeHandler.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/IHttp2StreamLifetimeHandler.cs index d838d48a85..f1be1964e6 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/IHttp2StreamLifetimeHandler.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/IHttp2StreamLifetimeHandler.cs @@ -6,5 +6,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 internal interface IHttp2StreamLifetimeHandler { void OnStreamCompleted(Http2Stream stream); + void DecrementActiveClientStreamCount(); } } diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs index 46008abdf3..a294d65225 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs @@ -916,6 +916,66 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests }); } + [Fact] + public async Task Frame_MultipleStreams_CanBeCreatedIfClientCountIsLessThanActualMaxStreamCount() + { + _serviceContext.ServerOptions.Limits.Http2.MaxStreamsPerConnection = 1; + var firstRequestBlock = new TaskCompletionSource(); + var firstRequestReceived = new TaskCompletionSource(); + var makeFirstRequestWait = false; + await InitializeConnectionAsync(async context => + { + if (!makeFirstRequestWait) + { + makeFirstRequestWait = true; + firstRequestReceived.SetResult(null); + await firstRequestBlock.Task.DefaultTimeout(); + } + }); + + await StartStreamAsync(1, _browserRequestHeaders, endStream: true); + await SendRstStreamAsync(1); + + await firstRequestReceived.Task.DefaultTimeout(); + + await StartStreamAsync(3, _browserRequestHeaders, endStream: true); + + await ExpectAsync(Http2FrameType.HEADERS, + withLength: 55, + withFlags: (byte)(Http2HeadersFrameFlags.END_HEADERS | Http2HeadersFrameFlags.END_STREAM), + withStreamId: 3); + + firstRequestBlock.SetResult(null); + + await StopConnectionAsync(3, ignoreNonGoAwayFrames: false); + } + + [Fact] + public async Task Frame_MultipleStreams_RequestsNotFinished_EnhanceYourCalm() + { + _serviceContext.ServerOptions.Limits.Http2.MaxStreamsPerConnection = 1; + var tcs = new TaskCompletionSource(); + await InitializeConnectionAsync(async context => + { + await tcs.Task.DefaultTimeout(); + }); + + await StartStreamAsync(1, _browserRequestHeaders, endStream: false); + await SendRstStreamAsync(1); + await StartStreamAsync(3, _browserRequestHeaders, endStream: true); + await SendRstStreamAsync(3); + await StartStreamAsync(5, _browserRequestHeaders, endStream: true); + + await WaitForStreamErrorAsync( + expectedStreamId: 5, + expectedErrorCode: Http2ErrorCode.ENHANCE_YOUR_CALM, + expectedErrorMessage: CoreStrings.Http2TellClientToCalmDown); + + tcs.SetResult(null); + + await StopConnectionAsync(5, ignoreNonGoAwayFrames: false); + } + [Fact] public async Task DATA_Received_StreamClosedImplicitly_ConnectionError() { From 9e6924235ea9a21cc300eec4989301e45ce85281 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Wed, 31 Jul 2019 12:18:31 -0700 Subject: [PATCH 09/12] Add logging to RemoteRenderer to time a round-trip (#12638) --- ...rosoft.AspNetCore.Components.Server.csproj | 2 +- .../Server/src/Circuits/RemoteRenderer.cs | 32 ++++++++++++------- ...rosoft.AspNetCore.Components.Server.csproj | 5 +-- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/Components/Server/ref/Microsoft.AspNetCore.Components.Server.csproj b/src/Components/Server/ref/Microsoft.AspNetCore.Components.Server.csproj index e27f07cc33..491c5b8cff 100644 --- a/src/Components/Server/ref/Microsoft.AspNetCore.Components.Server.csproj +++ b/src/Components/Server/ref/Microsoft.AspNetCore.Components.Server.csproj @@ -7,11 +7,11 @@ - + diff --git a/src/Components/Server/src/Circuits/RemoteRenderer.cs b/src/Components/Server/src/Circuits/RemoteRenderer.cs index 198780db22..8b9ebb341a 100644 --- a/src/Components/Server/src/Circuits/RemoteRenderer.cs +++ b/src/Components/Server/src/Circuits/RemoteRenderer.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Concurrent; +using System.Diagnostics; using System.Linq; using System.Text.Encodings.Web; using System.Threading; @@ -10,6 +11,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Components.Server.Circuits; using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; using Microsoft.JSInterop; @@ -138,7 +140,8 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering pendingRender = new UnacknowledgedRenderBatch( renderId, arrayBuilder, - new TaskCompletionSource()); + new TaskCompletionSource(), + ValueStopwatch.StartNew()); // Buffer the rendered batches no matter what. We'll send it down immediately when the client // is connected or right after the client reconnects. @@ -256,13 +259,14 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering private void ProcessPendingBatch(string errorMessageOrNull, UnacknowledgedRenderBatch entry) { + var elapsedTime = entry.ValueStopwatch.GetElapsedTime(); if (errorMessageOrNull == null) { - Log.CompletingBatchWithoutError(_logger, entry.BatchId); + Log.CompletingBatchWithoutError(_logger, entry.BatchId, elapsedTime); } else { - Log.CompletingBatchWithError(_logger, entry.BatchId, errorMessageOrNull); + Log.CompletingBatchWithError(_logger, entry.BatchId, errorMessageOrNull, elapsedTime); } entry.Data.Dispose(); @@ -283,16 +287,18 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering internal readonly struct UnacknowledgedRenderBatch { - public UnacknowledgedRenderBatch(long batchId, ArrayBuilder data, TaskCompletionSource completionSource) + public UnacknowledgedRenderBatch(long batchId, ArrayBuilder data, TaskCompletionSource completionSource, ValueStopwatch valueStopwatch) { BatchId = batchId; Data = data; CompletionSource = completionSource; + ValueStopwatch = valueStopwatch; } public long BatchId { get; } public ArrayBuilder Data { get; } public TaskCompletionSource CompletionSource { get; } + public ValueStopwatch ValueStopwatch { get; } } private void CaptureAsyncExceptions(Task task) @@ -312,8 +318,8 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering private static readonly Action _beginUpdateDisplayAsync; private static readonly Action _bufferingRenderDisconnectedClient; private static readonly Action _sendBatchDataFailed; - private static readonly Action _completingBatchWithError; - private static readonly Action _completingBatchWithoutError; + private static readonly Action _completingBatchWithError; + private static readonly Action _completingBatchWithoutError; private static readonly Action _receivedDuplicateBatchAcknowledgement; private static class EventIds @@ -349,15 +355,15 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering EventIds.SendBatchDataFailed, "Sending data for batch failed: {Message}"); - _completingBatchWithError = LoggerMessage.Define( + _completingBatchWithError = LoggerMessage.Define( LogLevel.Debug, EventIds.CompletingBatchWithError, - "Completing batch {BatchId} with error: {ErrorMessage}"); + "Completing batch {BatchId} with error: {ErrorMessage} in {ElapsedMilliseconds}ms."); - _completingBatchWithoutError = LoggerMessage.Define( + _completingBatchWithoutError = LoggerMessage.Define( LogLevel.Debug, EventIds.CompletingBatchWithoutError, - "Completing batch {BatchId} without error"); + "Completing batch {BatchId} without error in {ElapsedMilliseconds}ms."); _receivedDuplicateBatchAcknowledgement = LoggerMessage.Define( LogLevel.Debug, @@ -396,20 +402,22 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering null); } - public static void CompletingBatchWithError(ILogger logger, long batchId, string errorMessage) + public static void CompletingBatchWithError(ILogger logger, long batchId, string errorMessage, TimeSpan elapsedTime) { _completingBatchWithError( logger, batchId, errorMessage, + elapsedTime.TotalMilliseconds, null); } - public static void CompletingBatchWithoutError(ILogger logger, long batchId) + public static void CompletingBatchWithoutError(ILogger logger, long batchId, TimeSpan elapsedTime) { _completingBatchWithoutError( logger, batchId, + elapsedTime.TotalMilliseconds, null); } diff --git a/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj b/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj index ffa9a5ffb4..3f87bd43af 100644 --- a/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj +++ b/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.0 @@ -14,12 +14,13 @@ - + + From 2969001a75ff77cc66a7c42df118de278aaf3a8b Mon Sep 17 00:00:00 2001 From: Javier Calvarro Nelson Date: Wed, 31 Jul 2019 21:58:10 +0200 Subject: [PATCH 10/12] [Identity] Fix flaky test (#12771) --- .../Bootstrap3Tests/UIFramewrokAttributeTest.cs | 2 +- .../Identity.FunctionalTests/Infrastructure/ServerFactory.cs | 5 +---- .../testassets/Identity.DefaultUI.WebSite/Program.cs | 5 ++--- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Identity/test/Identity.FunctionalTests/Bootstrap3Tests/UIFramewrokAttributeTest.cs b/src/Identity/test/Identity.FunctionalTests/Bootstrap3Tests/UIFramewrokAttributeTest.cs index c771f8becf..97e5764d72 100644 --- a/src/Identity/test/Identity.FunctionalTests/Bootstrap3Tests/UIFramewrokAttributeTest.cs +++ b/src/Identity/test/Identity.FunctionalTests/Bootstrap3Tests/UIFramewrokAttributeTest.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Identity.FunctionalTests.Bootstrap3Tests var hasV3Part = false; var hasV4Part = false; var factory = Factory.WithWebHostBuilder( - whb => whb.UseStartup().ConfigureServices( + whb => whb.ConfigureServices( services => services.AddMvc().ConfigureApplicationPartManager( apm => (hasV3Part, hasV4Part) = (HasPart(apm, "V3"), HasPart(apm, "V4"))))); diff --git a/src/Identity/test/Identity.FunctionalTests/Infrastructure/ServerFactory.cs b/src/Identity/test/Identity.FunctionalTests/Infrastructure/ServerFactory.cs index 95fafbedd1..8258bb2e74 100644 --- a/src/Identity/test/Identity.FunctionalTests/Infrastructure/ServerFactory.cs +++ b/src/Identity/test/Identity.FunctionalTests/Infrastructure/ServerFactory.cs @@ -37,13 +37,10 @@ namespace Microsoft.AspNetCore.Identity.FunctionalTests } public string BootstrapFrameworkVersion { get; set; } = "V4"; - private bool IsHelixCI => typeof(ServerFactory<,>).Assembly.GetCustomAttributes() - .Any(a => a.Key == "Microsoft.AspNetCore.Testing.IsHelixCI"); protected override IHostBuilder CreateHostBuilder() { - Program.UseStartup = false; - return base.CreateHostBuilder(); + return Program.CreateHostBuilder(new[] { "--use-startup=false" }); } protected override void ConfigureWebHost(IWebHostBuilder builder) diff --git a/src/Identity/testassets/Identity.DefaultUI.WebSite/Program.cs b/src/Identity/testassets/Identity.DefaultUI.WebSite/Program.cs index 44d81e4099..fcb1275b56 100644 --- a/src/Identity/testassets/Identity.DefaultUI.WebSite/Program.cs +++ b/src/Identity/testassets/Identity.DefaultUI.WebSite/Program.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.IO; +using System.Linq; using System.Reflection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -17,13 +18,11 @@ namespace Identity.DefaultUI.WebSite CreateHostBuilder(args).Build().Run(); } - public static bool UseStartup { get; set; } = true; - public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { - if (UseStartup) + if (!args.Contains("--use-startup=false")) { webBuilder.UseStartup(); } From 1434e239d62ed7f2f44840b248216cbe42403c5b Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Thu, 1 Aug 2019 08:30:56 +1200 Subject: [PATCH 11/12] Change OSX to macOS in error message (#12756) --- src/ProjectTemplates/test/GrpcTemplateTest.cs | 4 ++-- src/Servers/Kestrel/Core/src/CoreStrings.resx | 2 +- .../Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ProjectTemplates/test/GrpcTemplateTest.cs b/src/ProjectTemplates/test/GrpcTemplateTest.cs index 13c7d36e20..4713a7a9c4 100644 --- a/src/ProjectTemplates/test/GrpcTemplateTest.cs +++ b/src/ProjectTemplates/test/GrpcTemplateTest.cs @@ -44,7 +44,7 @@ namespace Templates.Test if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { Assert.True(serverProcess.Process.HasExited, "built"); - Assert.Contains("System.NotSupportedException: HTTP/2 over TLS is not supported on OSX due to missing ALPN support.", + Assert.Contains("System.NotSupportedException: HTTP/2 over TLS is not supported on macOS due to missing ALPN support.", ErrorMessages.GetFailedProcessMessageOrEmpty("Run built service", Project, serverProcess.Process)); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && Environment.OSVersion.Version < new Version(6, 2)) @@ -68,7 +68,7 @@ namespace Templates.Test if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { Assert.True(aspNetProcess.Process.HasExited, "published"); - Assert.Contains("System.NotSupportedException: HTTP/2 over TLS is not supported on OSX due to missing ALPN support.", + Assert.Contains("System.NotSupportedException: HTTP/2 over TLS is not supported on macOS due to missing ALPN support.", ErrorMessages.GetFailedProcessMessageOrEmpty("Run published service", Project, aspNetProcess.Process)); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && Environment.OSVersion.Version < new Version(6, 2)) diff --git a/src/Servers/Kestrel/Core/src/CoreStrings.resx b/src/Servers/Kestrel/Core/src/CoreStrings.resx index e2b784ae3a..0f49dedc81 100644 --- a/src/Servers/Kestrel/Core/src/CoreStrings.resx +++ b/src/Servers/Kestrel/Core/src/CoreStrings.resx @@ -606,7 +606,7 @@ For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?l The request trailers are not available yet. They may not be available until the full request body is read. - HTTP/2 over TLS is not supported on OSX due to missing ALPN support. + HTTP/2 over TLS is not supported on macOS due to missing ALPN support. HTTP/2 over TLS is not supported on Windows 7 due to missing ALPN support. diff --git a/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs b/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs index 67281c9e93..c24898ff28 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 }); })); - Assert.Equal("HTTP/2 over TLS is not supported on OSX due to missing ALPN support.", ex.Message); + Assert.Equal("HTTP/2 over TLS is not supported on macOS due to missing ALPN support.", ex.Message); } From b42ebf119dac5b718f8aa1b769bd6d9152e786c1 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 31 Jul 2019 09:00:03 -0700 Subject: [PATCH 12/12] Fix incrementalism of Blazor solution --- .../Build/src/ReferenceFromSource.props | 13 ++++---- ...crosoft.AspNetCore.Blazor.Templates.csproj | 32 ++++++++++++------- .../Microsoft.AspNetCore.Server.IIS.csproj | 4 ++- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/Components/Blazor/Build/src/ReferenceFromSource.props b/src/Components/Blazor/Build/src/ReferenceFromSource.props index 6c708e4cab..927ec8c757 100644 --- a/src/Components/Blazor/Build/src/ReferenceFromSource.props +++ b/src/Components/Blazor/Build/src/ReferenceFromSource.props @@ -46,12 +46,11 @@ true TargetFramework + + false + + true + TargetFramework + - - - - true - diff --git a/src/Components/Blazor/Templates/src/Microsoft.AspNetCore.Blazor.Templates.csproj b/src/Components/Blazor/Templates/src/Microsoft.AspNetCore.Blazor.Templates.csproj index b0120ab08b..c91a32128d 100644 --- a/src/Components/Blazor/Templates/src/Microsoft.AspNetCore.Blazor.Templates.csproj +++ b/src/Components/Blazor/Templates/src/Microsoft.AspNetCore.Blazor.Templates.csproj @@ -1,5 +1,4 @@ - - + netstandard2.0 Microsoft.AspNetCore.Blazor.Templates.nuspec @@ -16,18 +15,31 @@ false - - + + + + + <_TemplateConfigMainFile Include="content\**\.template.config.src\template.json" /> - <_TemplateConfigDir Include="@(_TemplateConfigMainFile->'$([System.IO.Path]::GetDirectoryName('%(_TemplateConfigMainFile.FullPath)'))')" /> + <_TemplateConfigDir Include="@(_TemplateConfigMainFile->'$([System.IO.Path]::GetDirectoryName('%(_TemplateConfigMainFile.FullPath)'))')" /> <_TemplateConfigFileToCopy Include="%(_TemplateConfigDir.Identity)\**\*.*"> $([System.IO.Path]::GetDirectoryName('%(_TemplateConfigDir.Identity)'))\.template.config\ + + + + + @@ -49,8 +61,4 @@ - - - - diff --git a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj index 15d5544122..c4a57c8afd 100644 --- a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj +++ b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj @@ -10,7 +10,6 @@ aspnetcore;iis true netcoreapp3.0 - True @@ -44,6 +43,9 @@ + + +