Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/aspnetcore.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMackinnon Buck <mackinnon.buck@gmail.com>2022-07-10 21:11:05 +0300
committerMackinnon Buck <mackinnon.buck@gmail.com>2022-07-10 21:11:05 +0300
commit08bc4f0cfc7ee8c575112430639173799bdd4610 (patch)
treec9caf3dd9796432accb1c724acb84ea85eded144
parent298117a74c802f9aa8d9c6dcc0332dacc4270b88 (diff)
parente6dd3946f1f14e4182c70ac532dda10dd0f25f4b (diff)
Merge branch 'main' into mbuck/navigation-cancellation
-rw-r--r--.azure/pipelines/localization.yml28
-rw-r--r--AspNetCore.sln22
-rw-r--r--eng/ProjectReferences.props2
-rw-r--r--eng/TrimmableProjects.props1
-rw-r--r--eng/Version.Details.xml292
-rw-r--r--eng/Versions.props148
-rw-r--r--eng/test-configuration.json1
-rw-r--r--global.json8
-rw-r--r--src/Azure/Azure.slnf6
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Controllers/AccountController.cs45
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml10
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml.cs23
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml23
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml.cs39
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml10
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml.cs30
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/_ViewImports.cshtml2
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/_ViewStart.cshtml13
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAccountControllerFeatureProvider.cs21
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAuthenticationBuilderExtensions.cs204
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADCookieOptionsConfiguration.cs58
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADDefaults.cs44
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs58
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOpenIdConnectOptionsConfiguration.cs60
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptions.cs72
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsConfiguration.cs38
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsValidation.cs20
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADSchemeOptions.cs22
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj20
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/Properties/AssemblyInfo.cs6
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt47
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt1
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs497
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/test/Controllers/AccountControllerTests.cs276
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/test/Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj20
-rw-r--r--src/Azure/AzureAD/Authentication.AzureAD.UI/test/xunit.runner.json3
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Controllers/AccountController.cs81
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml10
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml.cs23
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml23
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml.cs39
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml10
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml.cs30
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/_ViewImports.cshtml2
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/_ViewStart.cshtml13
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CAccountControllerFeatureProvider.cs21
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CCookieOptionsConfiguration.cs53
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CJwtBearerOptionsConfiguration.cs53
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2COpenIdConnectOptionsConfiguration.cs75
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CAuthenticationBuilderExtensions.cs223
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CDefaults.cs49
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COpenIDConnectEventHandlers.cs84
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptions.cs87
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptionsConfiguration.cs38
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CSchemeOptions.cs22
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj20
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Properties/AssemblyInfo.cs6
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt53
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt1
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2CAuthenticationBuilderExtensionsTests.cs419
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs169
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Controllers/AccountControllerTests.cs383
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj20
-rw-r--r--src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/xunit.runner.json3
-rw-r--r--src/Azure/AzureAD/Directory.Build.props7
-rw-r--r--src/Azure/AzureAD/README.md4
-rw-r--r--src/Azure/AzureAD/test/FunctionalTests/ApiAuthenticationTests.cs88
-rw-r--r--src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj21
-rw-r--r--src/Azure/AzureAD/test/FunctionalTests/WebAuthenticationTests.cs210
-rw-r--r--src/Azure/AzureAD/test/FunctionalTests/xunit.runner.json3
-rw-r--r--src/Azure/AzureAD/test/testassets/AzureAD.WebSite/AzureAD.WebSite.csproj16
-rw-r--r--src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Controllers/TestController.cs14
-rw-r--r--src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Program.cs20
-rw-r--r--src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Properties/launchSettings.json12
-rw-r--r--src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Startup.cs26
-rw-r--r--src/Components/Components/src/NavigationManager.cs16
-rw-r--r--src/Components/Components/src/NavigationOptions.cs5
-rw-r--r--src/Components/Components/src/PublicAPI.Unshipped.txt5
-rw-r--r--src/Components/Components/src/Routing/LocationChangedEventArgs.cs5
-rw-r--r--src/Components/Components/test/Routing/RouterTest.cs2
-rw-r--r--src/Components/Server/src/Circuits/CircuitHost.cs4
-rw-r--r--src/Components/Server/src/Circuits/RemoteNavigationManager.cs3
-rw-r--r--src/Components/Server/src/ComponentHub.cs4
-rw-r--r--src/Components/Server/test/Circuits/ComponentHubTest.cs2
-rw-r--r--src/Components/Web.JS/src/Boot.Server.ts4
-rw-r--r--src/Components/Web.JS/src/Boot.WebAssembly.ts3
-rw-r--r--src/Components/Web.JS/src/Platform/WebView/WebViewIpcSender.ts4
-rw-r--r--src/Components/Web.JS/src/Services/NavigationManager.ts20
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/src/Interop/AuthenticationService.ts12
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/src/Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj5
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/src/Models/RemoteAuthenticationStatus.cs3
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/src/QueryStringHelper.cs73
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/src/RemoteAuthenticatorViewCore.cs59
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/src/Services/RemoteAuthenticationService.cs117
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticationServiceTests.cs58
-rw-r--r--src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticatorCoreTests.cs62
-rw-r--r--src/Components/WebAssembly/WebAssembly/src/Infrastructure/JSInteropMethods.cs11
-rw-r--r--src/Components/WebAssembly/WebAssembly/src/PublicAPI.Unshipped.txt1
-rw-r--r--src/Components/WebAssembly/WebAssembly/src/Services/WebAssemblyNavigationManager.cs3
-rw-r--r--src/Components/WebView/WebView/src/IpcReceiver.cs6
-rw-r--r--src/Components/WebView/WebView/src/Services/WebViewNavigationManager.cs3
-rw-r--r--src/Components/benchmarkapps/Wasm.Performance/dockerfile2
-rw-r--r--src/Components/test/E2ETest/Tests/RoutingTest.cs70
-rw-r--r--src/Components/test/testassets/BasicTestApp/RouterTest/Other.razor2
-rw-r--r--src/Components/test/testassets/BasicTestApp/RouterTest/ProgrammaticNavigationCases.razor12
-rw-r--r--src/DataProtection/DataProtection/src/Repositories/DefaultKeyStorageDirectories.cs21
-rw-r--r--src/DefaultBuilder/src/ConfigureWebHostBuilder.cs2
-rw-r--r--src/DefaultBuilder/src/Microsoft.AspNetCore.csproj2
-rw-r--r--src/DefaultBuilder/src/PublicAPI.Unshipped.txt1
-rw-r--r--src/DefaultBuilder/src/StartupLinkerOptions.cs12
-rw-r--r--src/DefaultBuilder/src/WebApplicationAuthenticationBuilder.cs48
-rw-r--r--src/DefaultBuilder/src/WebApplicationBuilder.cs23
-rw-r--r--src/DefaultBuilder/src/WebHost.cs3
-rw-r--r--src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs4
-rw-r--r--src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs45
-rw-r--r--src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs9
-rw-r--r--src/Framework/AspNetCoreAnalyzers/src/Analyzers/WebApplicationBuilder/WebApplicationBuilderAnalyzer.cs38
-rw-r--r--src/Framework/AspNetCoreAnalyzers/test/WebApplicationBuilder/DisallowConfigureServicesTest.cs412
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/AnyConverter.cs20
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForMessage.cs38
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForWellKnownTypes.cs16
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterHelper.cs110
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageConverter.cs187
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageTypeInfoResolver.cs177
-rw-r--r--src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/JsonRequestHelpers.cs1
-rw-r--r--src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterReadTests.cs22
-rw-r--r--src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterWriteTests.cs12
-rw-r--r--src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/Proto/transcoding.proto1
-rw-r--r--src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs24
-rw-r--r--src/Hosting/Hosting/test/HostingApplicationTests.cs4
-rw-r--r--src/Hosting/Server.IntegrationTesting/src/Common/DeploymentResult.cs4
-rw-r--r--src/Http/Authentication.Abstractions/src/AuthenticationOptions.cs18
-rw-r--r--src/Http/Authentication.Abstractions/src/Properties/AssemblyInfo.cs8
-rw-r--r--src/Http/Authentication.Abstractions/src/PublicAPI.Unshipped.txt1
-rw-r--r--src/Http/Authentication.Core/src/AuthenticationSchemeProvider.cs23
-rw-r--r--src/Http/Authentication.Core/src/AuthenticationService.cs11
-rw-r--r--src/Http/Authentication.Core/test/AuthenticationSchemeProviderTests.cs101
-rw-r--r--src/Http/Http.Abstractions/src/HttpResults/IContentTypeHttpResult.cs16
-rw-r--r--src/Http/Http.Abstractions/src/HttpResults/IFileHttpResult.cs20
-rw-r--r--src/Http/Http.Abstractions/src/HttpResults/INestedHttpResult.cs17
-rw-r--r--src/Http/Http.Abstractions/src/HttpResults/IResult.cs (renamed from src/Http/Http.Abstractions/src/IResult.cs)0
-rw-r--r--src/Http/Http.Abstractions/src/HttpResults/IStatusCodeHttpResult.cs16
-rw-r--r--src/Http/Http.Abstractions/src/HttpResults/IValueHttpResult.cs28
-rw-r--r--src/Http/Http.Abstractions/src/PublicAPI.Unshipped.txt13
-rw-r--r--src/Http/Http.Results/src/Accepted.cs2
-rw-r--r--src/Http/Http.Results/src/AcceptedAtRoute.cs2
-rw-r--r--src/Http/Http.Results/src/AcceptedAtRouteOfT.cs4
-rw-r--r--src/Http/Http.Results/src/AcceptedOfT.cs4
-rw-r--r--src/Http/Http.Results/src/BadRequest.cs2
-rw-r--r--src/Http/Http.Results/src/BadRequestOfT.cs4
-rw-r--r--src/Http/Http.Results/src/Conflict.cs2
-rw-r--r--src/Http/Http.Results/src/ConflictOfT.cs4
-rw-r--r--src/Http/Http.Results/src/ContentHttpResult.cs4
-rw-r--r--src/Http/Http.Results/src/Created.cs2
-rw-r--r--src/Http/Http.Results/src/CreatedAtRoute.cs2
-rw-r--r--src/Http/Http.Results/src/CreatedAtRouteOfT.cs4
-rw-r--r--src/Http/Http.Results/src/CreatedOfT.cs4
-rw-r--r--src/Http/Http.Results/src/FileContentHttpResult.cs2
-rw-r--r--src/Http/Http.Results/src/FileStreamHttpResult.cs2
-rw-r--r--src/Http/Http.Results/src/JsonHttpResultOfT.cs6
-rw-r--r--src/Http/Http.Results/src/NoContent.cs2
-rw-r--r--src/Http/Http.Results/src/NotFound.cs2
-rw-r--r--src/Http/Http.Results/src/NotFoundOfT.cs4
-rw-r--r--src/Http/Http.Results/src/Ok.cs2
-rw-r--r--src/Http/Http.Results/src/OkOfT.cs4
-rw-r--r--src/Http/Http.Results/src/PhysicalFileHttpResult.cs2
-rw-r--r--src/Http/Http.Results/src/ProblemHttpResult.cs8
-rw-r--r--src/Http/Http.Results/src/PublicAPI.Unshipped.txt2
-rw-r--r--src/Http/Http.Results/src/PushStreamHttpResult.cs2
-rw-r--r--src/Http/Http.Results/src/ResultsOfT.Generated.cs10
-rw-r--r--src/Http/Http.Results/src/StatusCodeHttpResult.cs2
-rw-r--r--src/Http/Http.Results/src/UnauthorizedHttpResult.cs2
-rw-r--r--src/Http/Http.Results/src/UnprocessableEntity.cs2
-rw-r--r--src/Http/Http.Results/src/UnprocessableEntityOfT.cs4
-rw-r--r--src/Http/Http.Results/src/ValidationProblem.cs6
-rw-r--r--src/Http/Http.Results/src/VirtualFileHttpResult.cs2
-rw-r--r--src/Http/Http.Results/test/AcceptedAtRouteOfTResultTests.cs49
-rw-r--r--src/Http/Http.Results/test/AcceptedAtRouteResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/AcceptedOfTResultTests.cs33
-rw-r--r--src/Http/Http.Results/test/AcceptedResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/BadRequestOfTResultTests.cs33
-rw-r--r--src/Http/Http.Results/test/BadRequestResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/ConflictOfTResultTests.cs32
-rw-r--r--src/Http/Http.Results/test/ConflictResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/ContentResultTests.cs33
-rw-r--r--src/Http/Http.Results/test/CreatedAtRouteOfTResultTests.cs46
-rw-r--r--src/Http/Http.Results/test/CreatedAtRouteResultTests.cs13
-rw-r--r--src/Http/Http.Results/test/CreatedOfTResultTests.cs37
-rw-r--r--src/Http/Http.Results/test/CreatedResultTests.cs11
-rw-r--r--src/Http/Http.Results/test/FileContentResultTests.cs25
-rw-r--r--src/Http/Http.Results/test/HttpFileStreamResultTests.cs25
-rw-r--r--src/Http/Http.Results/test/JsonResultTests.cs59
-rw-r--r--src/Http/Http.Results/test/NoContentResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/NotFoundOfTResultTests.cs32
-rw-r--r--src/Http/Http.Results/test/NotFoundResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/OkOfTResultTests.cs32
-rw-r--r--src/Http/Http.Results/test/OkResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/PhysicalFileResultTest.cs25
-rw-r--r--src/Http/Http.Results/test/ProblemResultTests.cs48
-rw-r--r--src/Http/Http.Results/test/PushStreamResultTests.cs25
-rw-r--r--src/Http/Http.Results/test/StatusCodeResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/UnauthorizedResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/UnprocessableEntityOfTResultTests.cs34
-rw-r--r--src/Http/Http.Results/test/UnprocessableEntityResultTests.cs8
-rw-r--r--src/Http/Http.Results/test/ValidationProblemResultTests.cs44
-rw-r--r--src/Http/Http.Results/test/VirtualFileResultTests.cs25
-rw-r--r--src/Http/Http.Results/tools/ResultsOfTGenerator/Program.cs2
-rw-r--r--src/Http/Http.Results/tools/ResultsOfTGenerator/ResultsOfTGenerator.csproj1
-rw-r--r--src/Http/HttpAbstractions.slnf14
-rw-r--r--src/Http/Routing/src/Builder/EndpointRouteBuilderExtensions.cs14
-rw-r--r--src/Http/Routing/test/UnitTests/Builder/RequestDelegateEndpointRouteBuilderExtensionsTest.cs22
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml2
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ExternalLogin.cshtml6
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Login.cshtml14
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWith2fa.cshtml16
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWithRecoveryCode.cshtml4
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/ChangePassword.cshtml12
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/DeletePersonalData.cshtml4
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Email.cshtml12
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/EnableAuthenticator.cshtml4
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Index.cshtml8
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/PersonalData.cshtml2
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/SetPassword.cshtml8
-rw-r--r--src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ResetPassword.cshtml10
-rw-r--r--src/ProjectTemplates/README.md9
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.cs.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.de.json2
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.es.json2
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.fr.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.it.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ja.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ko.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pl.json2
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pt-BR.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ru.json10
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.tr.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hans.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hant.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.cs.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.de.json4
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.es.json4
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.fr.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.it.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ja.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ko.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pl.json4
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pt-BR.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ru.json10
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.tr.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hans.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hant.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.cs.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.de.json4
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.es.json4
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.fr.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.it.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ja.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ko.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pl.json4
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pt-BR.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ru.json10
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.tr.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hans.json8
-rw-r--r--src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hant.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.cs.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.de.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.es.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.fr.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.it.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ja.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ko.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pl.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pt-BR.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ru.json12
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.tr.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hans.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hant.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.cs.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.de.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.es.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.fr.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.it.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ja.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ko.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pl.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pt-BR.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ru.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.tr.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hans.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hant.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.cs.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.de.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.es.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.fr.json12
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.it.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ja.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ko.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pl.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pt-BR.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ru.json16
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.tr.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hans.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hant.json14
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.cs.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.de.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.es.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.fr.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.it.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ja.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ko.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pl.json4
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pt-BR.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ru.json10
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.tr.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hans.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hant.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.cs.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.de.json2
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.es.json2
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.fr.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.it.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ja.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ko.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pl.json2
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pt-BR.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ru.json8
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.tr.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hans.json6
-rw-r--r--src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hant.json6
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj2
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json80
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json90
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json88
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json10
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json42
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json42
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json40
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json40
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json42
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json40
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json44
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json42
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json42
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json42
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.cs.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.de.json16
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.es.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.fr.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.it.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ja.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ko.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pl.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ru.json34
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.tr.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json32
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.cs.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.de.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.es.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.fr.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.it.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ja.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ko.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pl.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ru.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.tr.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.cs.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.de.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.es.json20
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.fr.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.it.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ja.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ko.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pl.json20
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pt-BR.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ru.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.tr.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hans.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hant.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.cs.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.de.json10
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.es.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.fr.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.it.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ja.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ko.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pl.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pt-BR.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ru.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.tr.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hans.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hant.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.cs.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.de.json20
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.es.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.fr.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.it.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ja.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ko.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pl.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ru.json80
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.tr.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.cs.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.de.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.es.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.fr.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.it.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ja.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ko.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pl.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ru.json80
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.tr.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json78
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.cs.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.de.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.es.json16
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.fr.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.it.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ja.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ko.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pl.json16
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ru.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.tr.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/cs/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/cs-CZ/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/de/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/de-DE/strings.json)6
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/en/strings.json8
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/es/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/es-ES/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/fr/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/fr-FR/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/it/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/it-IT/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ja/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ja-JP/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ko/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ko-KR/strings.json)6
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.cs.json72
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.de.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.es.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.fr.json72
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.it.json72
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ja.json70
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ko.json72
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pl.json24
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pt-BR.json72
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ru.json74
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.tr.json72
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hans.json70
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hant.json70
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pl/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pl-PL/strings.json)6
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/pt-BR/strings.json4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ru/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/ru-RU/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/tr/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/tr-TR/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-Hans/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-CN/strings.json)8
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-Hant/strings.json (renamed from src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/zh-TW/strings.json)4
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.cs.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.de.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.es.json20
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.fr.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.it.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ja.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ko.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pl.json20
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pt-BR.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ru.json30
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.tr.json28
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hans.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hant.json26
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.cs.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.de.json16
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.es.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.fr.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.it.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ja.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ko.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pl.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pt-BR.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ru.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.tr.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hans.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hant.json22
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.cs.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.de.json12
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.es.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.fr.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.it.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ja.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ko.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pl.json14
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pt-BR.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ru.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.tr.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hans.json18
-rw-r--r--src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hant.json18
-rw-r--r--src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs3
-rw-r--r--src/Security/Authentication/Core/src/AuthenticationConfigureOptions.cs29
-rw-r--r--src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs2
-rw-r--r--src/Security/Authentication/JwtBearer/samples/MinimalJwtBearerSample/Program.cs10
-rw-r--r--src/Security/Authentication/JwtBearer/src/JwtBearerConfigureOptions.cs9
-rw-r--r--src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs2
-rw-r--r--src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs4
-rw-r--r--src/Security/Authentication/Negotiate/test/Negotiate.Test/ServerDeferralTests.cs2
-rw-r--r--src/Security/Authentication/test/AuthenticationMiddlewareTests.cs26
-rw-r--r--src/Security/Authentication/test/CertificateTests.cs4
-rw-r--r--src/Security/Authentication/test/CookieTests.cs120
-rw-r--r--src/Security/Authentication/test/FacebookTests.cs6
-rwxr-xr-xsrc/Security/Authentication/test/JwtBearerTests.cs35
-rw-r--r--src/Security/Authentication/test/OAuthTests.cs10
-rw-r--r--src/Security/Authentication/test/SharedAuthenticationTests.cs89
-rw-r--r--src/Security/Authorization/Core/src/AuthorizationBuilder.cs149
-rw-r--r--src/Security/Authorization/Core/src/AuthorizationOptions.cs2
-rw-r--r--src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt12
-rw-r--r--src/Security/Authorization/Policy/src/AuthorizationAppBuilderExtensions.cs3
-rw-r--r--src/Security/Authorization/Policy/src/PolicyServiceCollectionExtensions.cs8
-rw-r--r--src/Security/Authorization/Policy/src/PublicAPI.Unshipped.txt1
-rw-r--r--src/Security/Authorization/test/AuthorizationBuilderTests.cs116
-rw-r--r--src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs111
-rw-r--r--src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj37
-rw-r--r--src/Servers/IIS/IIS/src/Core/IISConfigurationData.cs74
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/AspNetCorePortTests.cs97
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/GlobalVersionTests.cs150
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/FunctionalTestsBase.cs8
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/IISFunctionalTestBase.cs8
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/Inprocess/MaxRequestBodySizeTests.cs83
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/Latin1Tests.cs61
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/LoggingTests.cs230
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs50
-rw-r--r--src/Servers/IIS/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs20
-rw-r--r--src/Servers/IIS/IIS/test/Common.LongTests/ShutdownTests.cs469
-rw-r--r--src/Servers/IIS/IIS/test/Common.LongTests/StartupTests.cs866
-rw-r--r--src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/ApplicationInitializationTests.cs28
-rw-r--r--src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/StdOutRedirectionTests.cs105
-rw-r--r--src/Servers/IIS/IntegrationTesting.IIS/src/IISDeployer.cs6
-rw-r--r--src/Servers/IIS/IntegrationTesting.IIS/src/IISExpressDeployer.cs25
-rw-r--r--src/Servers/Kestrel/Core/src/Internal/Http/HttpParser.cs5
-rw-r--r--src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs5
-rw-r--r--src/Servers/Kestrel/Kestrel.slnf22
-rw-r--r--src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs21
-rw-r--r--src/Servers/Kestrel/Transport.Quic/test/QuicStreamContextTests.cs9
-rw-r--r--src/Servers/Kestrel/test/Interop.FunctionalTests/Http3/Http3TlsTests.cs6
-rw-r--r--src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs8
-rw-r--r--src/Shared/CertificateGeneration/MacOSCertificateManager.cs4
-rw-r--r--src/Shared/PropertyAsParameterInfo.cs4
-rw-r--r--src/Shared/QueryStringEnumerable.cs4
-rw-r--r--src/Tools/Tools.slnf3
-rw-r--r--src/Tools/dotnet-user-jwts/src/Commands/CreateCommand.cs2
-rw-r--r--src/Tools/dotnet-user-jwts/src/Commands/KeyCommand.cs26
-rw-r--r--src/Tools/dotnet-user-jwts/src/Helpers/DevJwtCliHelpers.cs26
-rw-r--r--src/Tools/dotnet-user-jwts/src/Helpers/DevJwtDefaults.cs3
-rw-r--r--src/Tools/dotnet-user-jwts/src/Helpers/JwtAuthenticationSchemeSettings.cs15
-rw-r--r--src/Tools/dotnet-user-jwts/src/Resources.resx62
-rw-r--r--src/Tools/dotnet-user-jwts/test/UserJwtsTestFixture.cs4
-rw-r--r--src/Tools/dotnet-user-jwts/test/UserJwtsTests.cs209
m---------src/submodules/googletest0
m---------src/submodules/spa-templates0
600 files changed, 8650 insertions, 10942 deletions
diff --git a/.azure/pipelines/localization.yml b/.azure/pipelines/localization.yml
new file mode 100644
index 0000000000..544f8ca1bb
--- /dev/null
+++ b/.azure/pipelines/localization.yml
@@ -0,0 +1,28 @@
+#
+# See https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema for details on this file.
+#
+
+schedules:
+# Cron timezone is UTC.
+- cron: "0 18 * * *"
+ displayName: Run tests daily at 6 PM UTC (11 AM PT)
+ branches:
+ include:
+ - main
+ always: true
+
+# Do not run in PR builds nor support other triggers.
+pr: none
+trigger: none
+
+variables:
+- name: _TeamName
+ value: AspNetCore
+
+jobs:
+- ${{ if and(ne(variables['System.TeamProject'], 'public'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}:
+ - template: /eng/common/templates/job/onelocbuild.yml
+ parameters:
+ LclPackageId: 'LCL-JUNO-PROD-ASPNETCORE'
+ LclSource: lclFilesFromPackage
+ MirrorRepo: aspnetcore
diff --git a/AspNetCore.sln b/AspNetCore.sln
index 28b0be916a..849a91e6cc 100644
--- a/AspNetCore.sln
+++ b/AspNetCore.sln
@@ -249,24 +249,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antifo
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Azure", "Azure", "{DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureAD", "AzureAD", "{2757D342-5E89-4C4B-9659-714AC8536FD4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.AzureAD.UI", "Authentication.AzureAD.UI", "{CE6853C2-73AE-42EB-AD8C-2A094B2A4A36}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureAD.UI", "src\Azure\AzureAD\Authentication.AzureAD.UI\src\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj", "{42E30C98-1358-497F-960B-E1AA17F46704}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureAD.UI.Test", "src\Azure\AzureAD\Authentication.AzureAD.UI\test\Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj", "{4870B11E-7F67-4757-BC9A-45E5895AC712}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.AzureADB2C.UI", "Authentication.AzureADB2C.UI", "{B95A22C8-71B7-49DE-94B2-16402A36B914}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureADB2C.UI", "src\Azure\AzureAD\Authentication.AzureADB2C.UI\src\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj", "{600BF48B-F5DF-4C9D-A5A7-635A8DD6C32A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test", "src\Azure\AzureAD\Authentication.AzureADB2C.UI\test\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj", "{27DF3ACF-F3ED-4D76-BFCB-57251892ABC0}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{16653D2A-AC79-44ED-B908-2EEB58684C50}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests", "src\Azure\AzureAD\test\FunctionalTests\Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj", "{B70B1843-4360-4731-9D5C-599189CC1198}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kestrel", "Kestrel", "{4FDDC525-4E60-4CAF-83A3-261C5B43721F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kestrel", "Kestrel", "{89472057-8BB2-44A8-B0FC-D9F3ADB1181C}"
@@ -1584,10 +1566,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Co
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Analyzers.Test", "src\Framework\AspNetCoreAnalyzers\test\Microsoft.AspNetCore.App.Analyzers.Test.csproj", "{40F493E2-FE59-4787-BE44-3AED39D585BF}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{5420BABA-BDC5-4FBF-81B4-6D7C02C4814D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureAD.WebSite", "src\Azure\AzureAD\test\testassets\AzureAD.WebSite\AzureAD.WebSite.csproj", "{05F4BC5A-060D-49B2-9069-95088402F99B}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{97F9F7E9-56DA-49FE-B672-499E68EBB9DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibraryWithPortablePdbs", "src\Middleware\Diagnostics\test\testassets\ClassLibraryWithPortablePdbs\ClassLibraryWithPortablePdbs.csproj", "{6F335C66-C1D6-45FA-8529-6503B7CD42CC}"
diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props
index e502668e67..9643ae81d3 100644
--- a/eng/ProjectReferences.props
+++ b/eng/ProjectReferences.props
@@ -120,8 +120,6 @@
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Testing" ProjectPath="$(RepoRoot)src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.ViewFeatures" ProjectPath="$(RepoRoot)src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc" ProjectPath="$(RepoRoot)src\Mvc\Mvc\src\Microsoft.AspNetCore.Mvc.csproj" />
- <ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" ProjectPath="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureAD.UI\src\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj" />
- <ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" ProjectPath="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureADB2C.UI\src\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.AzureAppServices.HostingStartup" ProjectPath="$(RepoRoot)src\Azure\AzureAppServices.HostingStartup\src\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.AzureAppServicesIntegration" ProjectPath="$(RepoRoot)src\Azure\AzureAppServicesIntegration\src\Microsoft.AspNetCore.AzureAppServicesIntegration.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Client.Core" ProjectPath="$(RepoRoot)src\SignalR\clients\csharp\Client.Core\src\Microsoft.AspNetCore.SignalR.Client.Core.csproj" />
diff --git a/eng/TrimmableProjects.props b/eng/TrimmableProjects.props
index f87e23bba2..905704f838 100644
--- a/eng/TrimmableProjects.props
+++ b/eng/TrimmableProjects.props
@@ -7,6 +7,7 @@
-->
<Project>
<ItemGroup>
+ <TrimmableProject Include="Microsoft.AspNetCore" />
<TrimmableProject Include="Microsoft.AspNetCore.DataProtection.Abstractions" />
<TrimmableProject Include="Microsoft.AspNetCore.Cryptography.Internal" />
<TrimmableProject Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" />
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index a6dae9bf1e..9d4f97ef38 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -9,305 +9,305 @@
-->
<Dependencies>
<ProductDependencies>
- <Dependency Name="dotnet-ef" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="dotnet-ef" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.EntityFrameworkCore.Design" Version="7.0.0-preview.7.22323.2">
+ <Dependency Name="Microsoft.EntityFrameworkCore.Design" Version="7.0.0-preview.7.22359.2">
<Uri>https://github.com/dotnet/efcore</Uri>
- <Sha>4129cdcca7ec4e9b152ed76955d65bc7214484f4</Sha>
+ <Sha>2740e04d51e26847937d68284ec8f88943157b54</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Configuration" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Configuration" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Hosting" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Hosting" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Http" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Http" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.Console" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.Console" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Logging" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Logging" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Options" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Options" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.Primitives" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.Primitives" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Internal.Runtime.AspNetCore.Transport" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Internal.Runtime.AspNetCore.Transport" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Configuration.ConfigurationManager" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Configuration.ConfigurationManager" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Diagnostics.DiagnosticSource" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Diagnostics.DiagnosticSource" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Diagnostics.EventLog" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Diagnostics.EventLog" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.DirectoryServices.Protocols" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.DirectoryServices.Protocols" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.IO.Pipelines" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.IO.Pipelines" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Net.Http.Json" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Net.Http.Json" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Net.Http.WinHttpHandler" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Net.Http.WinHttpHandler" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Reflection.Metadata" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Reflection.Metadata" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Resources.Extensions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Resources.Extensions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Security.Cryptography.Pkcs" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Security.Cryptography.Pkcs" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Security.Cryptography.Xml" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Security.Cryptography.Xml" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Security.Permissions" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Security.Permissions" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.ServiceProcess.ServiceController" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.ServiceProcess.ServiceController" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Text.Encodings.Web" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Text.Encodings.Web" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Text.Json" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Text.Json" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Threading.AccessControl" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Threading.AccessControl" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Threading.Channels" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Threading.Channels" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="System.Threading.RateLimiting" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="System.Threading.RateLimiting" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.Extensions.DependencyModel" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.Extensions.DependencyModel" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.NETCore.App.Ref" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NETCore.App.Ref" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.NET.Runtime.MonoAOTCompiler.Task" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NET.Runtime.MonoAOTCompiler.Task" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.NET.Runtime.WebAssembly.Sdk" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NET.Runtime.WebAssembly.Sdk" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
<!--
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
All Runtime.$rid packages should have the same version.
-->
- <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.NETCore.BrowserDebugHost.Transport" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NETCore.BrowserDebugHost.Transport" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
- <Dependency Name="Microsoft.NETCore.Platforms" Version="7.0.0-preview.6.22328.6">
+ <Dependency Name="Microsoft.NETCore.Platforms" Version="7.0.0-preview.7.22358.7">
<Uri>https://github.com/dotnet/runtime</Uri>
- <Sha>4537ce8b0d3a6e60d7d90fc146e6b4c4e4a23371</Sha>
+ <Sha>1967649721058a457157d4321af3e6fceaa5441b</Sha>
</Dependency>
- <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="7.0.0-beta.22327.1">
+ <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="7.0.0-beta.22327.2">
<Uri>https://github.com/dotnet/arcade</Uri>
- <Sha>640c1cc2a140b322c4f30f6d6b85f35f0c4c7313</Sha>
+ <Sha>a264eb13fea14125f3ef8d4056586cd66fa55309</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency>
- <Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="7.0.0-beta.22327.1">
+ <Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="7.0.0-beta.22327.2">
<Uri>https://github.com/dotnet/arcade</Uri>
- <Sha>640c1cc2a140b322c4f30f6d6b85f35f0c4c7313</Sha>
+ <Sha>a264eb13fea14125f3ef8d4056586cd66fa55309</Sha>
</Dependency>
- <Dependency Name="Microsoft.DotNet.Build.Tasks.Templating" Version="7.0.0-beta.22327.1">
+ <Dependency Name="Microsoft.DotNet.Build.Tasks.Templating" Version="7.0.0-beta.22327.2">
<Uri>https://github.com/dotnet/arcade</Uri>
- <Sha>640c1cc2a140b322c4f30f6d6b85f35f0c4c7313</Sha>
+ <Sha>a264eb13fea14125f3ef8d4056586cd66fa55309</Sha>
</Dependency>
- <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="7.0.0-beta.22327.1">
+ <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="7.0.0-beta.22327.2">
<Uri>https://github.com/dotnet/arcade</Uri>
- <Sha>640c1cc2a140b322c4f30f6d6b85f35f0c4c7313</Sha>
+ <Sha>a264eb13fea14125f3ef8d4056586cd66fa55309</Sha>
</Dependency>
</ToolsetDependencies>
</Dependencies>
diff --git a/eng/Versions.props b/eng/Versions.props
index 84f4b095bd..4d9c3b97d7 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -63,80 +63,80 @@
-->
<PropertyGroup Label="Automated">
<!-- Packages from dotnet/runtime -->
- <MicrosoftExtensionsDependencyModelVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsDependencyModelVersion>
- <MicrosoftNETCoreAppRefVersion>7.0.0-preview.6.22328.6</MicrosoftNETCoreAppRefVersion>
- <MicrosoftNETCoreAppRuntimewinx64Version>7.0.0-preview.6.22328.6</MicrosoftNETCoreAppRuntimewinx64Version>
- <MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>7.0.0-preview.6.22328.6</MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>
- <MicrosoftNETRuntimeWebAssemblySdkVersion>7.0.0-preview.6.22328.6</MicrosoftNETRuntimeWebAssemblySdkVersion>
- <MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>7.0.0-preview.6.22328.6</MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>
- <MicrosoftNETCoreBrowserDebugHostTransportVersion>7.0.0-preview.6.22328.6</MicrosoftNETCoreBrowserDebugHostTransportVersion>
- <MicrosoftExtensionsCachingAbstractionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsCachingAbstractionsVersion>
- <MicrosoftExtensionsCachingMemoryVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsCachingMemoryVersion>
- <MicrosoftExtensionsConfigurationAbstractionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationAbstractionsVersion>
- <MicrosoftExtensionsConfigurationBinderVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationBinderVersion>
- <MicrosoftExtensionsConfigurationCommandLineVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationCommandLineVersion>
- <MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>
- <MicrosoftExtensionsConfigurationFileExtensionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationFileExtensionsVersion>
- <MicrosoftExtensionsConfigurationIniVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationIniVersion>
- <MicrosoftExtensionsConfigurationJsonVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationJsonVersion>
- <MicrosoftExtensionsConfigurationVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationVersion>
- <MicrosoftExtensionsConfigurationUserSecretsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationUserSecretsVersion>
- <MicrosoftExtensionsConfigurationXmlVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsConfigurationXmlVersion>
- <MicrosoftExtensionsDependencyInjectionAbstractionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
- <MicrosoftExtensionsDependencyInjectionVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsDependencyInjectionVersion>
- <MicrosoftExtensionsFileProvidersAbstractionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsFileProvidersAbstractionsVersion>
- <MicrosoftExtensionsFileProvidersCompositeVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsFileProvidersCompositeVersion>
- <MicrosoftExtensionsFileProvidersPhysicalVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsFileProvidersPhysicalVersion>
- <MicrosoftExtensionsFileSystemGlobbingVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsFileSystemGlobbingVersion>
- <MicrosoftExtensionsHostFactoryResolverSourcesVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsHostFactoryResolverSourcesVersion>
- <MicrosoftExtensionsHostingAbstractionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsHostingAbstractionsVersion>
- <MicrosoftExtensionsHostingVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsHostingVersion>
- <MicrosoftExtensionsHttpVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsHttpVersion>
- <MicrosoftExtensionsLoggingAbstractionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingAbstractionsVersion>
- <MicrosoftExtensionsLoggingConfigurationVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingConfigurationVersion>
- <MicrosoftExtensionsLoggingConsoleVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingConsoleVersion>
- <MicrosoftExtensionsLoggingDebugVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingDebugVersion>
- <MicrosoftExtensionsLoggingEventSourceVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingEventSourceVersion>
- <MicrosoftExtensionsLoggingEventLogVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingEventLogVersion>
- <MicrosoftExtensionsLoggingVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingVersion>
- <MicrosoftExtensionsLoggingTraceSourceVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsLoggingTraceSourceVersion>
- <MicrosoftExtensionsOptionsConfigurationExtensionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>
- <MicrosoftExtensionsOptionsDataAnnotationsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsOptionsDataAnnotationsVersion>
- <MicrosoftExtensionsOptionsVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsOptionsVersion>
- <MicrosoftExtensionsPrimitivesVersion>7.0.0-preview.6.22328.6</MicrosoftExtensionsPrimitivesVersion>
- <MicrosoftInternalRuntimeAspNetCoreTransportVersion>7.0.0-preview.6.22328.6</MicrosoftInternalRuntimeAspNetCoreTransportVersion>
- <SystemConfigurationConfigurationManagerVersion>7.0.0-preview.6.22328.6</SystemConfigurationConfigurationManagerVersion>
- <SystemDiagnosticsDiagnosticSourceVersion>7.0.0-preview.6.22328.6</SystemDiagnosticsDiagnosticSourceVersion>
- <SystemDiagnosticsEventLogVersion>7.0.0-preview.6.22328.6</SystemDiagnosticsEventLogVersion>
- <SystemDirectoryServicesProtocolsVersion>7.0.0-preview.6.22328.6</SystemDirectoryServicesProtocolsVersion>
- <SystemIOPipelinesVersion>7.0.0-preview.6.22328.6</SystemIOPipelinesVersion>
- <SystemNetHttpJsonVersion>7.0.0-preview.6.22328.6</SystemNetHttpJsonVersion>
- <SystemNetHttpWinHttpHandlerVersion>7.0.0-preview.6.22328.6</SystemNetHttpWinHttpHandlerVersion>
- <SystemReflectionMetadataVersion>7.0.0-preview.6.22328.6</SystemReflectionMetadataVersion>
- <SystemResourcesExtensionsVersion>7.0.0-preview.6.22328.6</SystemResourcesExtensionsVersion>
- <SystemSecurityCryptographyPkcsVersion>7.0.0-preview.6.22328.6</SystemSecurityCryptographyPkcsVersion>
- <SystemSecurityCryptographyXmlVersion>7.0.0-preview.6.22328.6</SystemSecurityCryptographyXmlVersion>
- <SystemSecurityPermissionsVersion>7.0.0-preview.6.22328.6</SystemSecurityPermissionsVersion>
- <SystemServiceProcessServiceControllerVersion>7.0.0-preview.6.22328.6</SystemServiceProcessServiceControllerVersion>
- <SystemTextEncodingsWebVersion>7.0.0-preview.6.22328.6</SystemTextEncodingsWebVersion>
- <SystemTextJsonVersion>7.0.0-preview.6.22328.6</SystemTextJsonVersion>
- <SystemThreadingAccessControlVersion>7.0.0-preview.6.22328.6</SystemThreadingAccessControlVersion>
- <SystemThreadingChannelsVersion>7.0.0-preview.6.22328.6</SystemThreadingChannelsVersion>
- <SystemThreadingRateLimitingVersion>7.0.0-preview.6.22328.6</SystemThreadingRateLimitingVersion>
+ <MicrosoftExtensionsDependencyModelVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsDependencyModelVersion>
+ <MicrosoftNETCoreAppRefVersion>7.0.0-preview.7.22358.7</MicrosoftNETCoreAppRefVersion>
+ <MicrosoftNETCoreAppRuntimewinx64Version>7.0.0-preview.7.22358.7</MicrosoftNETCoreAppRuntimewinx64Version>
+ <MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>7.0.0-preview.7.22358.7</MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>
+ <MicrosoftNETRuntimeWebAssemblySdkVersion>7.0.0-preview.7.22358.7</MicrosoftNETRuntimeWebAssemblySdkVersion>
+ <MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>7.0.0-preview.7.22358.7</MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>
+ <MicrosoftNETCoreBrowserDebugHostTransportVersion>7.0.0-preview.7.22358.7</MicrosoftNETCoreBrowserDebugHostTransportVersion>
+ <MicrosoftExtensionsCachingAbstractionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsCachingAbstractionsVersion>
+ <MicrosoftExtensionsCachingMemoryVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsCachingMemoryVersion>
+ <MicrosoftExtensionsConfigurationAbstractionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationAbstractionsVersion>
+ <MicrosoftExtensionsConfigurationBinderVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationBinderVersion>
+ <MicrosoftExtensionsConfigurationCommandLineVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationCommandLineVersion>
+ <MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>
+ <MicrosoftExtensionsConfigurationFileExtensionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationFileExtensionsVersion>
+ <MicrosoftExtensionsConfigurationIniVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationIniVersion>
+ <MicrosoftExtensionsConfigurationJsonVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationJsonVersion>
+ <MicrosoftExtensionsConfigurationVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationVersion>
+ <MicrosoftExtensionsConfigurationUserSecretsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationUserSecretsVersion>
+ <MicrosoftExtensionsConfigurationXmlVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsConfigurationXmlVersion>
+ <MicrosoftExtensionsDependencyInjectionAbstractionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
+ <MicrosoftExtensionsDependencyInjectionVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsDependencyInjectionVersion>
+ <MicrosoftExtensionsFileProvidersAbstractionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsFileProvidersAbstractionsVersion>
+ <MicrosoftExtensionsFileProvidersCompositeVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsFileProvidersCompositeVersion>
+ <MicrosoftExtensionsFileProvidersPhysicalVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsFileProvidersPhysicalVersion>
+ <MicrosoftExtensionsFileSystemGlobbingVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsFileSystemGlobbingVersion>
+ <MicrosoftExtensionsHostFactoryResolverSourcesVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsHostFactoryResolverSourcesVersion>
+ <MicrosoftExtensionsHostingAbstractionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsHostingAbstractionsVersion>
+ <MicrosoftExtensionsHostingVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsHostingVersion>
+ <MicrosoftExtensionsHttpVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsHttpVersion>
+ <MicrosoftExtensionsLoggingAbstractionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingAbstractionsVersion>
+ <MicrosoftExtensionsLoggingConfigurationVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingConfigurationVersion>
+ <MicrosoftExtensionsLoggingConsoleVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingConsoleVersion>
+ <MicrosoftExtensionsLoggingDebugVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingDebugVersion>
+ <MicrosoftExtensionsLoggingEventSourceVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingEventSourceVersion>
+ <MicrosoftExtensionsLoggingEventLogVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingEventLogVersion>
+ <MicrosoftExtensionsLoggingVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingVersion>
+ <MicrosoftExtensionsLoggingTraceSourceVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsLoggingTraceSourceVersion>
+ <MicrosoftExtensionsOptionsConfigurationExtensionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>
+ <MicrosoftExtensionsOptionsDataAnnotationsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsOptionsDataAnnotationsVersion>
+ <MicrosoftExtensionsOptionsVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsOptionsVersion>
+ <MicrosoftExtensionsPrimitivesVersion>7.0.0-preview.7.22358.7</MicrosoftExtensionsPrimitivesVersion>
+ <MicrosoftInternalRuntimeAspNetCoreTransportVersion>7.0.0-preview.7.22358.7</MicrosoftInternalRuntimeAspNetCoreTransportVersion>
+ <SystemConfigurationConfigurationManagerVersion>7.0.0-preview.7.22358.7</SystemConfigurationConfigurationManagerVersion>
+ <SystemDiagnosticsDiagnosticSourceVersion>7.0.0-preview.7.22358.7</SystemDiagnosticsDiagnosticSourceVersion>
+ <SystemDiagnosticsEventLogVersion>7.0.0-preview.7.22358.7</SystemDiagnosticsEventLogVersion>
+ <SystemDirectoryServicesProtocolsVersion>7.0.0-preview.7.22358.7</SystemDirectoryServicesProtocolsVersion>
+ <SystemIOPipelinesVersion>7.0.0-preview.7.22358.7</SystemIOPipelinesVersion>
+ <SystemNetHttpJsonVersion>7.0.0-preview.7.22358.7</SystemNetHttpJsonVersion>
+ <SystemNetHttpWinHttpHandlerVersion>7.0.0-preview.7.22358.7</SystemNetHttpWinHttpHandlerVersion>
+ <SystemReflectionMetadataVersion>7.0.0-preview.7.22358.7</SystemReflectionMetadataVersion>
+ <SystemResourcesExtensionsVersion>7.0.0-preview.7.22358.7</SystemResourcesExtensionsVersion>
+ <SystemSecurityCryptographyPkcsVersion>7.0.0-preview.7.22358.7</SystemSecurityCryptographyPkcsVersion>
+ <SystemSecurityCryptographyXmlVersion>7.0.0-preview.7.22358.7</SystemSecurityCryptographyXmlVersion>
+ <SystemSecurityPermissionsVersion>7.0.0-preview.7.22358.7</SystemSecurityPermissionsVersion>
+ <SystemServiceProcessServiceControllerVersion>7.0.0-preview.7.22358.7</SystemServiceProcessServiceControllerVersion>
+ <SystemTextEncodingsWebVersion>7.0.0-preview.7.22358.7</SystemTextEncodingsWebVersion>
+ <SystemTextJsonVersion>7.0.0-preview.7.22358.7</SystemTextJsonVersion>
+ <SystemThreadingAccessControlVersion>7.0.0-preview.7.22358.7</SystemThreadingAccessControlVersion>
+ <SystemThreadingChannelsVersion>7.0.0-preview.7.22358.7</SystemThreadingChannelsVersion>
+ <SystemThreadingRateLimitingVersion>7.0.0-preview.7.22358.7</SystemThreadingRateLimitingVersion>
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
- <MicrosoftNETCorePlatformsVersion>7.0.0-preview.6.22328.6</MicrosoftNETCorePlatformsVersion>
+ <MicrosoftNETCorePlatformsVersion>7.0.0-preview.7.22358.7</MicrosoftNETCorePlatformsVersion>
<!-- Packages from dotnet/efcore -->
- <dotnetefVersion>7.0.0-preview.7.22323.2</dotnetefVersion>
- <MicrosoftEntityFrameworkCoreInMemoryVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreInMemoryVersion>
- <MicrosoftEntityFrameworkCoreRelationalVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreRelationalVersion>
- <MicrosoftEntityFrameworkCoreSqliteVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreSqliteVersion>
- <MicrosoftEntityFrameworkCoreSqlServerVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreSqlServerVersion>
- <MicrosoftEntityFrameworkCoreToolsVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreToolsVersion>
- <MicrosoftEntityFrameworkCoreVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreVersion>
- <MicrosoftEntityFrameworkCoreDesignVersion>7.0.0-preview.7.22323.2</MicrosoftEntityFrameworkCoreDesignVersion>
+ <dotnetefVersion>7.0.0-preview.7.22359.2</dotnetefVersion>
+ <MicrosoftEntityFrameworkCoreInMemoryVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreInMemoryVersion>
+ <MicrosoftEntityFrameworkCoreRelationalVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreRelationalVersion>
+ <MicrosoftEntityFrameworkCoreSqliteVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreSqliteVersion>
+ <MicrosoftEntityFrameworkCoreSqlServerVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreSqlServerVersion>
+ <MicrosoftEntityFrameworkCoreToolsVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreToolsVersion>
+ <MicrosoftEntityFrameworkCoreVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreVersion>
+ <MicrosoftEntityFrameworkCoreDesignVersion>7.0.0-preview.7.22359.2</MicrosoftEntityFrameworkCoreDesignVersion>
<!-- Packages from dotnet/arcade -->
- <MicrosoftDotNetBuildTasksInstallersVersion>7.0.0-beta.22327.1</MicrosoftDotNetBuildTasksInstallersVersion>
- <MicrosoftDotNetBuildTasksTemplatingVersion>7.0.0-beta.22327.1</MicrosoftDotNetBuildTasksTemplatingVersion>
+ <MicrosoftDotNetBuildTasksInstallersVersion>7.0.0-beta.22327.2</MicrosoftDotNetBuildTasksInstallersVersion>
+ <MicrosoftDotNetBuildTasksTemplatingVersion>7.0.0-beta.22327.2</MicrosoftDotNetBuildTasksTemplatingVersion>
</PropertyGroup>
<!--
@@ -268,9 +268,9 @@
<MicrosoftPlaywrightVersion>1.17.3</MicrosoftPlaywrightVersion>
<PollyExtensionsHttpVersion>3.0.0</PollyExtensionsHttpVersion>
<PollyVersion>7.2.3</PollyVersion>
- <SeleniumSupportVersion>4.1.1</SeleniumSupportVersion>
- <SeleniumWebDriverChromeDriverVersion>100.0.4896.6000</SeleniumWebDriverChromeDriverVersion>
- <SeleniumWebDriverVersion>4.1.1</SeleniumWebDriverVersion>
+ <SeleniumSupportVersion>4.3.0</SeleniumSupportVersion>
+ <SeleniumWebDriverChromeDriverVersion>103.0.5060.5300</SeleniumWebDriverChromeDriverVersion>
+ <SeleniumWebDriverVersion>4.3.0</SeleniumWebDriverVersion>
<SerilogExtensionsLoggingVersion>1.4.0</SerilogExtensionsLoggingVersion>
<SerilogSinksFileVersion>4.0.0</SerilogSinksFileVersion>
<StackExchangeRedisVersion>2.2.4</StackExchangeRedisVersion>
diff --git a/eng/test-configuration.json b/eng/test-configuration.json
index 16175855a4..9a63b3d765 100644
--- a/eng/test-configuration.json
+++ b/eng/test-configuration.json
@@ -6,6 +6,7 @@
{"testName": {"contains": "FlakyTestToEnsureRetryWorks" }},
{"testName": {"contains": "MaxRequestBufferSizeTests.LargeUpload" }},
{"testName": {"contains": "ReaderThrowsResetExceptionOnInvalidBody" }},
+ {"testName": {"contains": "AttributeRouting_RouteNameTokenReplace_Reachable" }},
{"testAssembly": {"contains": "IIS"}},
{"failureMessage": {"contains":"(Site is started but no worker process found) (Site is started but no worker process found)"}},
{"failureMessage": {"contains": "network disconnected"}}
diff --git a/global.json b/global.json
index 3c98cec4de..a53dda86ae 100644
--- a/global.json
+++ b/global.json
@@ -1,9 +1,9 @@
{
"sdk": {
- "version": "7.0.100-preview.7.22327.3"
+ "version": "7.0.100-preview.7.22357.3"
},
"tools": {
- "dotnet": "7.0.100-preview.7.22327.3",
+ "dotnet": "7.0.100-preview.7.22357.3",
"runtimes": {
"dotnet/x86": [
"$(MicrosoftNETCoreBrowserDebugHostTransportVersion)"
@@ -27,7 +27,7 @@
},
"msbuild-sdks": {
"Yarn.MSBuild": "1.22.10",
- "Microsoft.DotNet.Arcade.Sdk": "7.0.0-beta.22327.1",
- "Microsoft.DotNet.Helix.Sdk": "7.0.0-beta.22327.1"
+ "Microsoft.DotNet.Arcade.Sdk": "7.0.0-beta.22327.2",
+ "Microsoft.DotNet.Helix.Sdk": "7.0.0-beta.22327.2"
}
}
diff --git a/src/Azure/Azure.slnf b/src/Azure/Azure.slnf
index 18804c595b..2b2e575990 100644
--- a/src/Azure/Azure.slnf
+++ b/src/Azure/Azure.slnf
@@ -2,12 +2,6 @@
"solution": {
"path": "..\\..\\AspNetCore.sln",
"projects" : [
- "src\\Azure\\AzureAD\\Authentication.AzureAD.UI\\src\\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj",
- "src\\Azure\\AzureAD\\Authentication.AzureAD.UI\\test\\Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj",
- "src\\Azure\\AzureAD\\Authentication.AzureADB2C.UI\\src\\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj",
- "src\\Azure\\AzureAD\\Authentication.AzureADB2C.UI\\test\\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj",
- "src\\Azure\\AzureAD\\test\\FunctionalTests\\Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj",
- "src\\Azure\\AzureAD\\test\\testassets\\AzureAD.WebSite\\AzureAD.WebSite.csproj",
"src\\Azure\\samples\\AzureAppServicesSample\\AzureAppServicesSample.csproj",
"src\\Azure\\samples\\AzureAppServicesHostingStartupSample\\AzureAppServicesHostingStartupSample.csproj",
"src\\Servers\\Kestrel\\Kestrel\\src\\Microsoft.AspNetCore.Server.Kestrel.csproj",
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Controllers/AccountController.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Controllers/AccountController.cs
deleted file mode 100644
index c9676885e6..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Controllers/AccountController.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureAD.Controllers.Internal;
-
-[NonController]
-[AllowAnonymous]
-[Area("AzureAD")]
-[Route("[area]/[controller]/[action]")]
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AccountController : Controller
-{
- public AccountController(IOptionsMonitor<AzureADOptions> options)
- {
- Options = options;
- }
-
- public IOptionsMonitor<AzureADOptions> Options { get; }
-
- [HttpGet("{scheme?}")]
- public IActionResult SignIn([FromRoute] string scheme)
- {
- scheme = scheme ?? AzureADDefaults.AuthenticationScheme;
- var redirectUrl = Url.Content("~/");
- return Challenge(
- new AuthenticationProperties { RedirectUri = redirectUrl },
- scheme);
- }
-
- [HttpGet("{scheme?}")]
- public IActionResult SignOut([FromRoute] string scheme)
- {
- scheme = scheme ?? AzureADDefaults.AuthenticationScheme;
- var options = Options.Get(scheme);
- var callbackUrl = Url.Page("/Account/SignedOut", pageHandler: null, values: null, protocol: Request.Scheme);
- return SignOut(
- new AuthenticationProperties { RedirectUri = callbackUrl },
- options.CookieSchemeName,
- options.OpenIdConnectSchemeName);
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml
deleted file mode 100644
index 591045d3cd..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml
+++ /dev/null
@@ -1,10 +0,0 @@
-@page
-@model AccessDeniedModel
-@{
- ViewData["Title"] = "Access denied";
-}
-
-<header>
- <h1 id="AzureADAccessDeniedTitle" class="text-danger">@ViewData["Title"]</h1>
- <p id="AzureADAccessDeniedText" class="text-danger">You do not have access to this resource.</p>
-</header>
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml.cs
deleted file mode 100644
index 744f9d9159..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/AccessDenied.cshtml.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal;
-
-/// <summary>
-/// This API supports infrastructure and is not intended to be used
-/// directly from your code.This API may change or be removed in future releases
-/// </summary>
-[AllowAnonymous]
-public class AccessDeniedModel : PageModel
-{
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public void OnGet()
- {
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml
deleted file mode 100644
index 173f083425..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml
+++ /dev/null
@@ -1,23 +0,0 @@
-@page
-@model ErrorModel
-@{
- ViewData["Title"] = "Error";
-}
-
-<h1 id="AzureADErrorTitle" class="text-danger">Error.</h1>
-<h2 id="AzureADErrorSub" class="text-danger">An error occurred while processing your request.</h2>
-
-@if (Model.ShowRequestId)
-{
-<p id="AzureADErrorRequestId">
- <strong>Request ID:</strong> <code>@Model.RequestId</code>
-</p>
-}
-
-<h3 id="AzureADErrorDevNoticeTitle">Development Mode</h3>
-<p id="AzureADErrorDevNoticeText1">
- Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
-</p>
-<p id="AzureADErrorDevNoticeText2">
- <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
-</p>
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml.cs
deleted file mode 100644
index cae1f97746..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/Error.cshtml.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Diagnostics;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal;
-
-/// <summary>
-/// This API supports infrastructure and is not intended to be used
-/// directly from your code.This API may change or be removed in future releases
-/// </summary>
-[AllowAnonymous]
-[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
-public class ErrorModel : PageModel
-{
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public string RequestId { get; set; }
-
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
-
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public void OnGet()
- {
- RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml
deleted file mode 100644
index 92ede3a145..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml
+++ /dev/null
@@ -1,10 +0,0 @@
-@page
-@model SignedOutModel
-@{
- ViewData["Title"] = "Signed out";
-}
-
-<h2 id="AzureADSignedOutTitle">@ViewData["Title"]</h2>
-<p id="AzureADSignedOutText">
- You have successfully signed out.
-</p>
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml.cs
deleted file mode 100644
index 5d4b01e8b5..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/SignedOut.cshtml.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal;
-
-/// <summary>
-/// This API supports infrastructure and is not intended to be used
-/// directly from your code.This API may change or be removed in future releases
-/// </summary>
-[AllowAnonymous]
-public class SignedOutModel : PageModel
-{
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public IActionResult OnGet()
- {
- if (User.Identity.IsAuthenticated)
- {
- return LocalRedirect("~/");
- }
-
- return Page();
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/_ViewImports.cshtml b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/_ViewImports.cshtml
deleted file mode 100644
index 69cc620e98..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/Account/_ViewImports.cshtml
+++ /dev/null
@@ -1,2 +0,0 @@
-@using Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal
-@namespace Microsoft.AspNetCore.Authentication.AzureAD.UI.Pages.Internal \ No newline at end of file
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/_ViewStart.cshtml b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/_ViewStart.cshtml
deleted file mode 100644
index c51721cd40..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Areas/AzureAD/Pages/_ViewStart.cshtml
+++ /dev/null
@@ -1,13 +0,0 @@
-@using Microsoft.AspNetCore.Hosting
-@using Microsoft.AspNetCore.Mvc.ViewEngines
-
-@inject IWebHostEnvironment Environment
-@inject ICompositeViewEngine Engine
-
-@{
- var result = Engine.FindView(ViewContext, "_Layout", isMainPage: false);
- if (result.Success)
- {
- Layout = "_Layout";
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAccountControllerFeatureProvider.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAccountControllerFeatureProvider.cs
deleted file mode 100644
index dde1a1b8e5..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAccountControllerFeatureProvider.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Reflection;
-using Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureAD.Controllers.Internal;
-using Microsoft.AspNetCore.Mvc.ApplicationParts;
-using Microsoft.AspNetCore.Mvc.Controllers;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADAccountControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>, IApplicationFeatureProvider
-{
- public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
- {
- if (!feature.Controllers.Contains(typeof(AccountController).GetTypeInfo()))
- {
- feature.Controllers.Add(typeof(AccountController).GetTypeInfo());
- }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAuthenticationBuilderExtensions.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAuthenticationBuilderExtensions.cs
deleted file mode 100644
index 893910fda1..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAuthenticationBuilderExtensions.cs
+++ /dev/null
@@ -1,204 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.AzureAD.UI;
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.DependencyInjection.Extensions;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-/// <summary>
-/// Extension methods to add Azure Active Directory Authentication to your application.
-/// </summary>
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-public static class AzureADAuthenticationBuilderExtensions
-{
- /// <summary>
- /// Adds JWT Bearer authentication to your app for Azure Active Directory Applications.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADOptions}"/> to configure the
- /// <see cref="AzureADOptions"/>.
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureADBearer(this AuthenticationBuilder builder, Action<AzureADOptions> configureOptions) =>
- builder.AddAzureADBearer(
- AzureADDefaults.BearerAuthenticationScheme,
- AzureADDefaults.JwtBearerAuthenticationScheme,
- configureOptions);
-
- /// <summary>
- /// Adds JWT Bearer authentication to your app for Azure Active Directory Applications.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="scheme">The identifier for the virtual scheme.</param>
- /// <param name="jwtBearerScheme">The identifier for the underlying JWT Bearer scheme.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADOptions}"/> to configure the
- /// <see cref="AzureADOptions"/>.
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureADBearer(
- this AuthenticationBuilder builder,
- string scheme,
- string jwtBearerScheme,
- Action<AzureADOptions> configureOptions)
- {
-
- builder.AddPolicyScheme(scheme, displayName: null, configureOptions: o =>
- {
- o.ForwardDefault = jwtBearerScheme;
- });
-
- builder.Services.Configure(TryAddJwtBearerSchemeMapping(scheme, jwtBearerScheme));
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<AzureADOptions>, AzureADOptionsConfiguration>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IValidateOptions<AzureADOptions>, AzureADOptionsValidation>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<JwtBearerOptions>, AzureADJwtBearerOptionsConfiguration>());
-
- builder.Services.Configure(scheme, configureOptions);
- builder.AddJwtBearer(jwtBearerScheme, o => { });
-
- return builder;
- }
-
- /// <summary>
- /// Adds Azure Active Directory Authentication to your application.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADOptions}"/> to configure the
- /// <see cref="AzureADOptions"/>
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureAD(this AuthenticationBuilder builder, Action<AzureADOptions> configureOptions) =>
- builder.AddAzureAD(
- AzureADDefaults.AuthenticationScheme,
- AzureADDefaults.OpenIdScheme,
- AzureADDefaults.CookieScheme,
- AzureADDefaults.DisplayName,
- configureOptions);
-
- /// <summary>
- /// Adds Azure Active Directory Authentication to your application.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="scheme">The identifier for the virtual scheme.</param>
- /// <param name="openIdConnectScheme">The identifier for the underlying Open ID Connect scheme.</param>
- /// <param name="cookieScheme">The identifier for the underlying cookie scheme.</param>
- /// <param name="displayName">The display name for the scheme.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADOptions}"/> to configure the
- /// <see cref="AzureADOptions"/>
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureAD(
- this AuthenticationBuilder builder,
- string scheme,
- string openIdConnectScheme,
- string cookieScheme,
- string displayName,
- Action<AzureADOptions> configureOptions)
- {
- AddAdditionalMvcApplicationParts(builder.Services);
- builder.AddPolicyScheme(scheme, displayName, o =>
- {
- o.ForwardDefault = cookieScheme;
- o.ForwardChallenge = openIdConnectScheme;
- });
-
- builder.Services.Configure(TryAddOpenIDCookieSchemeMappings(scheme, openIdConnectScheme, cookieScheme));
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<AzureADOptions>, AzureADOptionsConfiguration>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IValidateOptions<AzureADOptions>, AzureADOptionsValidation>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<OpenIdConnectOptions>, AzureADOpenIdConnectOptionsConfiguration>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<CookieAuthenticationOptions>, AzureADCookieOptionsConfiguration>());
-
- builder.Services.Configure(scheme, configureOptions);
-
- builder.AddOpenIdConnect(openIdConnectScheme, null, o => { });
- builder.AddCookie(cookieScheme, null, o => { });
-
- return builder;
- }
-
- private static Action<AzureADSchemeOptions> TryAddJwtBearerSchemeMapping(string scheme, string jwtBearerScheme)
- {
- return TryAddMapping;
-
- void TryAddMapping(AzureADSchemeOptions o)
- {
- if (o.JwtBearerMappings.ContainsKey(scheme))
- {
- throw new InvalidOperationException($"A scheme with the name '{scheme}' was already added.");
- }
- foreach (var mapping in o.JwtBearerMappings)
- {
- if (mapping.Value.JwtBearerScheme == jwtBearerScheme)
- {
- throw new InvalidOperationException(
- $"The JSON Web Token Bearer scheme '{jwtBearerScheme}' can't be associated with the Azure Active Directory scheme '{scheme}'. " +
- $"The JSON Web Token Bearer scheme '{jwtBearerScheme}' is already mapped to the Azure Active Directory scheme '{mapping.Key}'");
- }
- }
- o.JwtBearerMappings.Add(scheme, new AzureADSchemeOptions.JwtBearerSchemeMapping
- {
- JwtBearerScheme = jwtBearerScheme
- });
- };
- }
-
- private static Action<AzureADSchemeOptions> TryAddOpenIDCookieSchemeMappings(string scheme, string openIdConnectScheme, string cookieScheme)
- {
- return TryAddMapping;
-
- void TryAddMapping(AzureADSchemeOptions o)
- {
- if (o.OpenIDMappings.ContainsKey(scheme))
- {
- throw new InvalidOperationException($"A scheme with the name '{scheme}' was already added.");
- }
- foreach (var mapping in o.OpenIDMappings)
- {
- if (mapping.Value.CookieScheme == cookieScheme)
- {
- throw new InvalidOperationException(
- $"The cookie scheme '{cookieScheme}' can't be associated with the Azure Active Directory scheme '{scheme}'. " +
- $"The cookie scheme '{cookieScheme}' is already mapped to the Azure Active Directory scheme '{mapping.Key}'");
- }
-
- if (mapping.Value.OpenIdConnectScheme == openIdConnectScheme)
- {
- throw new InvalidOperationException(
- $"The Open ID Connect scheme '{openIdConnectScheme}' can't be associated with the Azure Active Directory scheme '{scheme}'. " +
- $"The Open ID Connect scheme '{openIdConnectScheme}' is already mapped to the Azure Active Directory scheme '{mapping.Key}'");
- }
- }
- o.OpenIDMappings.Add(scheme, new AzureADSchemeOptions.AzureADOpenIDSchemeMapping
- {
- OpenIdConnectScheme = openIdConnectScheme,
- CookieScheme = cookieScheme
- });
- };
- }
-
- private static void AddAdditionalMvcApplicationParts(IServiceCollection services)
- {
- var mvcBuilder = services
- .AddMvc()
- .ConfigureApplicationPartManager(apm =>
- {
- apm.FeatureProviders.Add(new AzureADAccountControllerFeatureProvider());
- });
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADCookieOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADCookieOptionsConfiguration.cs
deleted file mode 100644
index 13a3b8bbd3..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADCookieOptionsConfiguration.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADCookieOptionsConfiguration : IConfigureNamedOptions<CookieAuthenticationOptions>
-{
- private readonly IOptions<AzureADSchemeOptions> _schemeOptions;
- private readonly IOptionsMonitor<AzureADOptions> _AzureADOptions;
-
- public AzureADCookieOptionsConfiguration(IOptions<AzureADSchemeOptions> schemeOptions, IOptionsMonitor<AzureADOptions> AzureADOptions)
- {
- _schemeOptions = schemeOptions;
- _AzureADOptions = AzureADOptions;
- }
-
- public void Configure(string name, CookieAuthenticationOptions options)
- {
- var AzureADScheme = GetAzureADScheme(name);
- if (AzureADScheme is null)
- {
- return;
- }
-
- var AzureADOptions = _AzureADOptions.Get(AzureADScheme);
- if (name != AzureADOptions.CookieSchemeName)
- {
- return;
- }
-
- options.LoginPath = $"/AzureAD/Account/SignIn/{AzureADScheme}";
- options.LogoutPath = $"/AzureAD/Account/SignOut/{AzureADScheme}";
- options.AccessDeniedPath = "/AzureAD/Account/AccessDenied";
- options.Cookie.SameSite = SameSiteMode.None;
- }
-
- public void Configure(CookieAuthenticationOptions options)
- {
- }
-
- private string GetAzureADScheme(string name)
- {
- foreach (var mapping in _schemeOptions.Value.OpenIDMappings)
- {
- if (mapping.Value.CookieScheme == name)
- {
- return mapping.Key;
- }
- }
-
- return null;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADDefaults.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADDefaults.cs
deleted file mode 100644
index 2365930877..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADDefaults.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-/// <summary>
-/// Constants for different Azure Active Directory authentication components.
-/// </summary>
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-public static class AzureADDefaults
-{
- /// <summary>
- /// The scheme name for Open ID Connect when using
- /// <see cref="AzureADAuthenticationBuilderExtensions.AddAzureAD(AuthenticationBuilder, System.Action{AzureADOptions})"/>.
- /// </summary>
- public const string OpenIdScheme = "AzureADOpenID";
-
- /// <summary>
- /// The scheme name for cookies when using
- /// <see cref="AzureADAuthenticationBuilderExtensions.AddAzureAD(AuthenticationBuilder, System.Action{AzureADOptions})"/>.
- /// </summary>
- public const string CookieScheme = "AzureADCookie";
-
- /// <summary>
- /// The default scheme for Azure Active Directory Bearer.
- /// </summary>
- public const string BearerAuthenticationScheme = "AzureADBearer";
-
- /// <summary>
- /// The scheme name for JWT Bearer when using
- /// <see cref="AzureADAuthenticationBuilderExtensions.AddAzureADBearer(AuthenticationBuilder, System.Action{AzureADOptions})"/>.
- /// </summary>
- public const string JwtBearerAuthenticationScheme = "AzureADJwtBearer";
-
- /// <summary>
- /// The default scheme for Azure Active Directory.
- /// </summary>
- public const string AuthenticationScheme = "AzureAD";
-
- /// <summary>
- /// The display name for Azure Active Directory.
- /// </summary>
- public static readonly string DisplayName = "Azure Active Directory";
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs
deleted file mode 100644
index cf0631073f..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.AzureAD.UI;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADJwtBearerOptionsConfiguration : IConfigureNamedOptions<JwtBearerOptions>
-{
- private readonly IOptions<AzureADSchemeOptions> _schemeOptions;
- private readonly IOptionsMonitor<AzureADOptions> _azureADOptions;
-
- public AzureADJwtBearerOptionsConfiguration(
- IOptions<AzureADSchemeOptions> schemeOptions,
- IOptionsMonitor<AzureADOptions> azureADOptions)
- {
- _schemeOptions = schemeOptions;
- _azureADOptions = azureADOptions;
- }
-
- public void Configure(string name, JwtBearerOptions options)
- {
- var azureADScheme = GetAzureADScheme(name);
- if (azureADScheme is null)
- {
- return;
- }
-
- var azureADOptions = _azureADOptions.Get(azureADScheme);
- if (name != azureADOptions.JwtBearerSchemeName)
- {
- return;
- }
-
- options.Audience = azureADOptions.ClientId;
- options.Authority = new Uri(new Uri(azureADOptions.Instance), azureADOptions.TenantId).ToString();
- }
-
- public void Configure(JwtBearerOptions options)
- {
- }
-
- private string GetAzureADScheme(string name)
- {
- foreach (var mapping in _schemeOptions.Value.JwtBearerMappings)
- {
- if (mapping.Value.JwtBearerScheme == name)
- {
- return mapping.Key;
- }
- }
-
- return null;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOpenIdConnectOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOpenIdConnectOptionsConfiguration.cs
deleted file mode 100644
index ddf4686b10..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOpenIdConnectOptionsConfiguration.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADOpenIdConnectOptionsConfiguration : IConfigureNamedOptions<OpenIdConnectOptions>
-{
- private readonly IOptions<AzureADSchemeOptions> _schemeOptions;
- private readonly IOptionsMonitor<AzureADOptions> _azureADOptions;
-
- public AzureADOpenIdConnectOptionsConfiguration(IOptions<AzureADSchemeOptions> schemeOptions, IOptionsMonitor<AzureADOptions> azureADOptions)
- {
- _schemeOptions = schemeOptions;
- _azureADOptions = azureADOptions;
- }
-
- public void Configure(string name, OpenIdConnectOptions options)
- {
- var azureADScheme = GetAzureADScheme(name);
- if (azureADScheme is null)
- {
- return;
- }
-
- var azureADOptions = _azureADOptions.Get(azureADScheme);
- if (name != azureADOptions.OpenIdConnectSchemeName)
- {
- return;
- }
-
- options.ClientId = azureADOptions.ClientId;
- options.ClientSecret = azureADOptions.ClientSecret;
- options.Authority = new Uri(new Uri(azureADOptions.Instance), azureADOptions.TenantId).ToString();
- options.CallbackPath = azureADOptions.CallbackPath ?? options.CallbackPath;
- options.SignedOutCallbackPath = azureADOptions.SignedOutCallbackPath ?? options.SignedOutCallbackPath;
- options.SignInScheme = azureADOptions.CookieSchemeName;
- options.UseTokenLifetime = true;
- }
-
- private string GetAzureADScheme(string name)
- {
- foreach (var mapping in _schemeOptions.Value.OpenIDMappings)
- {
- if (mapping.Value.OpenIdConnectScheme == name)
- {
- return mapping.Key;
- }
- }
-
- return null;
- }
-
- public void Configure(OpenIdConnectOptions options)
- {
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptions.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptions.cs
deleted file mode 100644
index 38c16e9153..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptions.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-/// <summary>
-/// Options for configuring authentication using Azure Active Directory.
-/// </summary>
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-public class AzureADOptions
-{
- /// <summary>
- /// Gets or sets the OpenID Connect authentication scheme to use for authentication with this instance
- /// of Azure Active Directory authentication.
- /// </summary>
- public string OpenIdConnectSchemeName { get; set; } = OpenIdConnectDefaults.AuthenticationScheme;
-
- /// <summary>
- /// Gets or sets the Cookie authentication scheme to use for sign in with this instance of
- /// Azure Active Directory authentication.
- /// </summary>
- public string CookieSchemeName { get; set; } = CookieAuthenticationDefaults.AuthenticationScheme;
-
- /// <summary>
- /// Gets or sets the Jwt bearer authentication scheme to use for validating access tokens for this
- /// instance of Azure Active Directory Bearer authentication.
- /// </summary>
- public string JwtBearerSchemeName { get; internal set; }
-
- /// <summary>
- /// Gets or sets the client Id.
- /// </summary>
- public string ClientId { get; set; }
-
- /// <summary>
- /// Gets or sets the client secret.
- /// </summary>
- public string ClientSecret { get; set; }
-
- /// <summary>
- /// Gets or sets the tenant Id.
- /// </summary>
- public string TenantId { get; set; }
-
- /// <summary>
- /// Gets or sets the Azure Active Directory instance.
- /// </summary>
- public string Instance { get; set; }
-
- /// <summary>
- /// Gets or sets the domain of the Azure Active Directory tenant.
- /// </summary>
- public string Domain { get; set; }
-
- /// <summary>
- /// Gets or sets the sign in callback path.
- /// </summary>
- public string CallbackPath { get; set; }
-
- /// <summary>
- /// Gets or sets the sign out callback path.
- /// </summary>
- public string SignedOutCallbackPath { get; set; }
-
- /// <summary>
- /// Gets all the underlying authentication schemes.
- /// </summary>
- public string[] AllSchemes => new[] { CookieSchemeName, OpenIdConnectSchemeName };
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsConfiguration.cs
deleted file mode 100644
index 190ecacce0..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsConfiguration.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADOptionsConfiguration : IConfigureNamedOptions<AzureADOptions>
-{
- private readonly IOptions<AzureADSchemeOptions> _schemeOptions;
-
- public AzureADOptionsConfiguration(IOptions<AzureADSchemeOptions> schemeOptions)
- {
- _schemeOptions = schemeOptions;
- }
-
- public void Configure(string name, AzureADOptions options)
- {
- // This can be called because of someone configuring JWT or someone configuring
- // Open ID + Cookie.
- if (_schemeOptions.Value.OpenIDMappings.TryGetValue(name, out var webMapping))
- {
- options.OpenIdConnectSchemeName = webMapping.OpenIdConnectScheme;
- options.CookieSchemeName = webMapping.CookieScheme;
- return;
- }
- if (_schemeOptions.Value.JwtBearerMappings.TryGetValue(name, out var mapping))
- {
- options.JwtBearerSchemeName = mapping.JwtBearerScheme;
- return;
- }
- }
-
- public void Configure(AzureADOptions options)
- {
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsValidation.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsValidation.cs
deleted file mode 100644
index 29bac36802..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOptionsValidation.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADOptionsValidation : IValidateOptions<AzureADOptions>
-{
- public ValidateOptionsResult Validate(string name, AzureADOptions options)
- {
- if (string.IsNullOrEmpty(options.Instance))
- {
- return ValidateOptionsResult.Fail($"The '{nameof(AzureADOptions.Instance)}' option must be provided.");
- }
-
- return ValidateOptionsResult.Success;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADSchemeOptions.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADSchemeOptions.cs
deleted file mode 100644
index eee02dc83f..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADSchemeOptions.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI;
-
-internal sealed class AzureADSchemeOptions
-{
- public IDictionary<string, AzureADOpenIDSchemeMapping> OpenIDMappings { get; set; } = new Dictionary<string, AzureADOpenIDSchemeMapping>();
-
- public IDictionary<string, JwtBearerSchemeMapping> JwtBearerMappings { get; set; } = new Dictionary<string, JwtBearerSchemeMapping>();
-
- public sealed class AzureADOpenIDSchemeMapping
- {
- public string OpenIdConnectScheme { get; set; }
- public string CookieScheme { get; set; }
- }
-
- public sealed class JwtBearerSchemeMapping
- {
- public string JwtBearerScheme { get; set; }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj
deleted file mode 100644
index bd90d1d641..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
-
- <PropertyGroup>
- <Description>ASP.NET Core Azure Active Directory Integration provides components for easily integrating Azure Active Directory authentication within your ASP.NET Core application.</Description>
- <RazorAssemblyDescription>Precompiled views assembly for the ASP.NET Core Azure Active Directory Integration package.</RazorAssemblyDescription>
- <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
- <PackageTags>aspnetcore;authentication;AzureAD</PackageTags>
- <GenerateDocumentationFile>true</GenerateDocumentationFile>
- <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
- <Nullable>disable</Nullable>
- </PropertyGroup>
-
- <ItemGroup>
- <Reference Include="Microsoft.AspNetCore.Mvc" />
- <Reference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
- <Reference Include="Microsoft.AspNetCore.Authentication.Cookies" />
- <Reference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
- </ItemGroup>
-
-</Project>
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Properties/AssemblyInfo.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index b1d976bdd1..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Authentication.AzureAD.UI.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt
deleted file mode 100644
index 6d3e971583..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-#nullable enable
-~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.AuthenticationScheme = "AzureAD" -> string
-~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.BearerAuthenticationScheme = "AzureADBearer" -> string
-~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.CookieScheme = "AzureADCookie" -> string
-~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.JwtBearerAuthenticationScheme = "AzureADJwtBearer" -> string
-~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.OpenIdScheme = "AzureADOpenID" -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.AllSchemes.get -> string[]
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CallbackPath.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CallbackPath.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientSecret.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientSecret.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CookieSchemeName.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CookieSchemeName.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Domain.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Domain.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Instance.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Instance.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.JwtBearerSchemeName.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.OpenIdConnectSchemeName.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.OpenIdConnectSchemeName.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.SignedOutCallbackPath.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.SignedOutCallbackPath.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.TenantId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.TenantId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.RequestId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.RequestId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.SignedOutModel.OnGet() -> Microsoft.AspNetCore.Mvc.IActionResult
-~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureAD(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string openIdConnectScheme, string cookieScheme, string displayName, System.Action<Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureAD(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action<Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureADBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string jwtBearerScheme, System.Action<Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureADBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action<Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static readonly Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.DisplayName -> string
-Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults
-Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions
-Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.AzureADOptions() -> void
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.AccessDeniedModel
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.AccessDeniedModel.AccessDeniedModel() -> void
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.AccessDeniedModel.OnGet() -> void
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.ErrorModel() -> void
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.OnGet() -> void
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.ShowRequestId.get -> bool
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.SignedOutModel
-Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.SignedOutModel.SignedOutModel() -> void
-Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt
deleted file mode 100644
index 7dc5c58110..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt
+++ /dev/null
@@ -1 +0,0 @@
-#nullable enable
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs
deleted file mode 100644
index 312f80d153..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs
+++ /dev/null
@@ -1,497 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.AzureAD.UI;
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-public class AzureADAuthenticationBuilderExtensionsTests
-{
- [Fact]
- public void AddAzureAD_AddsAllAuthenticationHandlers()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureAD(o => { });
- var provider = services.BuildServiceProvider();
-
- // Assert
- Assert.NotNull(provider.GetService<OpenIdConnectHandler>());
- Assert.NotNull(provider.GetService<CookieAuthenticationHandler>());
- Assert.NotNull(provider.GetService<PolicySchemeHandler>());
- }
-
- [Fact]
- public void AddAzureAD_ConfiguresAllOptions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureAD(o =>
- {
- o.Instance = "https://login.microsoftonline.com";
- o.ClientId = "ClientId";
- o.ClientSecret = "ClientSecret";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.TenantId = "Common";
- });
- var provider = services.BuildServiceProvider();
-
- // Assert
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
- Assert.NotNull(azureADOptionsMonitor);
- var azureADOptions = azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme);
- Assert.Equal(AzureADDefaults.OpenIdScheme, azureADOptions.OpenIdConnectSchemeName);
- Assert.Equal(AzureADDefaults.CookieScheme, azureADOptions.CookieSchemeName);
- Assert.Equal("https://login.microsoftonline.com", azureADOptions.Instance);
- Assert.Equal("ClientId", azureADOptions.ClientId);
- Assert.Equal("ClientSecret", azureADOptions.ClientSecret);
- Assert.Equal("/signin-oidc", azureADOptions.CallbackPath);
- Assert.Equal("domain.onmicrosoft.com", azureADOptions.Domain);
-
- var openIdOptionsMonitor = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
- Assert.NotNull(openIdOptionsMonitor);
- var openIdOptions = openIdOptionsMonitor.Get(AzureADDefaults.OpenIdScheme);
- Assert.Equal("ClientId", openIdOptions.ClientId);
- Assert.Equal($"https://login.microsoftonline.com/Common", openIdOptions.Authority);
- Assert.True(openIdOptions.UseTokenLifetime);
- Assert.Equal("/signin-oidc", openIdOptions.CallbackPath);
- Assert.Equal(AzureADDefaults.CookieScheme, openIdOptions.SignInScheme);
-
- var cookieAuthenticationOptionsMonitor = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
- Assert.NotNull(cookieAuthenticationOptionsMonitor);
- var cookieAuthenticationOptions = cookieAuthenticationOptionsMonitor.Get(AzureADDefaults.CookieScheme);
- Assert.Equal("/AzureAD/Account/SignIn/AzureAD", cookieAuthenticationOptions.LoginPath);
- Assert.Equal("/AzureAD/Account/SignOut/AzureAD", cookieAuthenticationOptions.LogoutPath);
- Assert.Equal("/AzureAD/Account/AccessDenied", cookieAuthenticationOptions.AccessDeniedPath);
- Assert.Equal(SameSiteMode.None, cookieAuthenticationOptions.Cookie.SameSite);
- }
-
- [Fact]
- public void AddAzureAD_AllowsOverridingCookiesAndOpenIdConnectSettings()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureAD(o =>
- {
- o.Instance = "https://login.microsoftonline.com";
- o.ClientId = "ClientId";
- o.ClientSecret = "ClientSecret";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.TenantId = "Common";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, o =>
- {
- o.Authority = "https://overriden.com";
- });
-
- services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, o =>
- {
- o.AccessDeniedPath = "/Overriden";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var openIdOptionsMonitor = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
- Assert.NotNull(openIdOptionsMonitor);
- var openIdOptions = openIdOptionsMonitor.Get(AzureADDefaults.OpenIdScheme);
- Assert.Equal("ClientId", openIdOptions.ClientId);
- Assert.Equal($"https://overriden.com", openIdOptions.Authority);
-
- var cookieAuthenticationOptionsMonitor = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
- Assert.NotNull(cookieAuthenticationOptionsMonitor);
- var cookieAuthenticationOptions = cookieAuthenticationOptionsMonitor.Get(AzureADDefaults.CookieScheme);
- Assert.Equal("/AzureAD/Account/SignIn/AzureAD", cookieAuthenticationOptions.LoginPath);
- Assert.Equal("/Overriden", cookieAuthenticationOptions.AccessDeniedPath);
- }
-
- [Fact]
- public void AddAzureAD_RegisteringAddCookiesAndAddOpenIdConnectHasNoImpactOnAzureAAExtensions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddOpenIdConnect()
- .AddCookie()
- .AddAzureAD(o =>
- {
- o.Instance = "https://login.microsoftonline.com";
- o.ClientId = "ClientId";
- o.ClientSecret = "ClientSecret";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.TenantId = "Common";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, o =>
- {
- o.Authority = "https://overriden.com";
- });
-
- services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, o =>
- {
- o.AccessDeniedPath = "/Overriden";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var openIdOptionsMonitor = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
- Assert.NotNull(openIdOptionsMonitor);
- var openIdOptions = openIdOptionsMonitor.Get(AzureADDefaults.OpenIdScheme);
- Assert.Equal("ClientId", openIdOptions.ClientId);
- Assert.Equal($"https://overriden.com", openIdOptions.Authority);
-
- var cookieAuthenticationOptionsMonitor = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
- Assert.NotNull(cookieAuthenticationOptionsMonitor);
- var cookieAuthenticationOptions = cookieAuthenticationOptionsMonitor.Get(AzureADDefaults.CookieScheme);
- Assert.Equal("/AzureAD/Account/SignIn/AzureAD", cookieAuthenticationOptions.LoginPath);
- Assert.Equal("/Overriden", cookieAuthenticationOptions.AccessDeniedPath);
- }
-
- [Fact]
- public void AddAzureAD_ThrowsForDuplicatedSchemes()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureAD(o => { })
- .AddAzureAD(o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Equal("A scheme with the name 'AzureAD' was already added.", exception.Message);
- }
-
- [Fact]
- public void AddAzureAD_ThrowsWhenOpenIdSchemeIsAlreadyInUse()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureAD(o => { })
- .AddAzureAD("Custom", AzureADDefaults.OpenIdScheme, "Cookie", null, o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- var expectedMessage = $"The Open ID Connect scheme 'AzureADOpenID' can't be associated with the Azure Active Directory scheme 'Custom'. " +
- "The Open ID Connect scheme 'AzureADOpenID' is already mapped to the Azure Active Directory scheme 'AzureAD'";
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Equal(expectedMessage, exception.Message);
- }
-
- [Fact]
- public void AddAzureAD_ThrowsWhenCookieSchemeIsAlreadyInUse()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureAD(o => { })
- .AddAzureAD("Custom", "OpenID", AzureADDefaults.CookieScheme, null, o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- var expectedMessage = $"The cookie scheme 'AzureADCookie' can't be associated with the Azure Active Directory scheme 'Custom'. " +
- "The cookie scheme 'AzureADCookie' is already mapped to the Azure Active Directory scheme 'AzureAD'";
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Equal(expectedMessage, exception.Message);
- }
-
- [Fact]
- public void AddAzureAD_ThrowsWhenInstanceIsNotSet()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureAD(o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- var expectedMessage = "The 'Instance' option must be provided.";
-
- // Act & Assert
- var exception = Assert.Throws<OptionsValidationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Contains(expectedMessage, exception.Failures);
- }
-
- [Fact]
- public void AddAzureAD_SkipsOptionsValidationForNonAzureCookies()
- {
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureAD(o => { })
- .AddCookie("other");
-
- var provider = services.BuildServiceProvider();
- var cookieAuthOptions = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
-
- Assert.NotNull(cookieAuthOptions.Get("other"));
- }
-
- [Fact]
- public void AddAzureADBearer_AddsAllAuthenticationHandlers()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADBearer(o => { });
- var provider = services.BuildServiceProvider();
-
- // Assert
- Assert.NotNull(provider.GetService<JwtBearerHandler>());
- Assert.NotNull(provider.GetService<PolicySchemeHandler>());
- }
-
- [Fact]
- public void AddAzureADBearer_ConfiguresAllOptions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.TenantId = "TenantId";
- });
- var provider = services.BuildServiceProvider();
-
- // Assert
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
- Assert.NotNull(azureADOptionsMonitor);
- var options = azureADOptionsMonitor.Get(AzureADDefaults.BearerAuthenticationScheme);
- Assert.Equal(AzureADDefaults.JwtBearerAuthenticationScheme, options.JwtBearerSchemeName);
- Assert.Equal("https://login.microsoftonline.com/", options.Instance);
- Assert.Equal("ClientId", options.ClientId);
- Assert.Equal("domain.onmicrosoft.com", options.Domain);
-
- var bearerOptionsMonitor = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
- Assert.NotNull(bearerOptionsMonitor);
- var bearerOptions = bearerOptionsMonitor.Get(AzureADDefaults.JwtBearerAuthenticationScheme);
- Assert.Equal("ClientId", bearerOptions.Audience);
- Assert.Equal($"https://login.microsoftonline.com/TenantId", bearerOptions.Authority);
- }
-
- [Fact]
- public void AddAzureADBearer_CanOverrideJwtBearerOptionsConfiguration()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.TenantId = "TenantId";
- });
-
- services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, o =>
- {
- o.Audience = "http://overriden.com";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var bearerOptionsMonitor = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
- Assert.NotNull(bearerOptionsMonitor);
- var bearerOptions = bearerOptionsMonitor.Get(AzureADDefaults.JwtBearerAuthenticationScheme);
- Assert.Equal("http://overriden.com", bearerOptions.Audience);
- Assert.Equal($"https://login.microsoftonline.com/TenantId", bearerOptions.Authority);
- }
-
- [Fact]
- public void AddAzureADBearer_RegisteringJwtBearerHasNoImpactOnAzureAAExtensions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddJwtBearer()
- .AddAzureADBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.TenantId = "TenantId";
- });
-
- services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, o =>
- {
- o.Audience = "http://overriden.com";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var bearerOptionsMonitor = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
- Assert.NotNull(bearerOptionsMonitor);
- var bearerOptions = bearerOptionsMonitor.Get(AzureADDefaults.JwtBearerAuthenticationScheme);
- Assert.Equal("http://overriden.com", bearerOptions.Audience);
- Assert.Equal($"https://login.microsoftonline.com/TenantId", bearerOptions.Authority);
- }
-
- [Fact]
- public void AddAzureADBearer_ThrowsForDuplicatedSchemes()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADBearer(o => { })
- .AddAzureADBearer(o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Equal("A scheme with the name 'AzureADBearer' was already added.", exception.Message);
- }
-
- [Fact]
- public void AddAzureADBearer_ThrowsWhenBearerSchemeIsAlreadyInUse()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADBearer(o => { })
- .AddAzureADBearer("Custom", AzureADDefaults.JwtBearerAuthenticationScheme, o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- var expectedMessage = $"The JSON Web Token Bearer scheme 'AzureADJwtBearer' can't be associated with the Azure Active Directory scheme 'Custom'. " +
- "The JSON Web Token Bearer scheme 'AzureADJwtBearer' is already mapped to the Azure Active Directory scheme 'AzureADBearer'";
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Equal(expectedMessage, exception.Message);
- }
-
- [Fact]
- public void AddAzureADBearer_ThrowsWhenInstanceIsNotSet()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADBearer(o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADOptionsMonitor = provider.GetService<IOptionsMonitor<AzureADOptions>>();
-
- var expectedMessage = "The 'Instance' option must be provided.";
-
- // Act & Assert
- var exception = Assert.Throws<OptionsValidationException>(
- () => azureADOptionsMonitor.Get(AzureADDefaults.AuthenticationScheme));
-
- Assert.Contains(expectedMessage, exception.Failures);
- }
-
- [Fact]
- public void AddAzureADBearer_SkipsOptionsValidationForNonAzureCookies()
- {
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADBearer(o => { })
- .AddJwtBearer("other", o => { });
-
- var provider = services.BuildServiceProvider();
- var jwtOptions = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
-
- Assert.NotNull(jwtOptions.Get("other"));
- }
-
- [Fact]
- public void AddAzureAD_SkipsOptionsValidationForNonAzureOpenIdConnect()
- {
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureAD(o => { })
- .AddOpenIdConnect("other", null, o =>
- {
- o.ClientId = "ClientId";
- o.Authority = "https://authority.com";
- });
-
- var provider = services.BuildServiceProvider();
- var openIdConnectOptions = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
-
- Assert.NotNull(openIdConnectOptions.Get("other"));
- }
-
- private IServiceCollection GenerateServicesForTest()
- {
- var services = new ServiceCollection();
- services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
- services.AddSingleton<IConfiguration>(new ConfigurationManager());
- return services;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/Controllers/AccountControllerTests.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/test/Controllers/AccountControllerTests.cs
deleted file mode 100644
index 688686767e..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/Controllers/AccountControllerTests.cs
+++ /dev/null
@@ -1,276 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Security.Claims;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.Abstractions;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.AspNetCore.Mvc.Routing;
-using Microsoft.AspNetCore.Routing;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Options;
-using Moq;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureAD.Controllers.Internal;
-
-public class AccountControllerTests
-{
- [Fact]
- public void SignInNoScheme_ChallengesAADAzureADDefaultScheme()
- {
- // Arrange
- var controller = new AccountController(
- new OptionsMonitor(AzureADDefaults.AuthenticationScheme, new AzureADOptions()
- {
- OpenIdConnectSchemeName = AzureADDefaults.OpenIdScheme,
- CookieSchemeName = AzureADDefaults.CookieScheme
- }))
- {
- Url = new TestUrlHelper("~/", "https://localhost/")
- };
-
- // Act
- var result = controller.SignIn(null);
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal(AzureADDefaults.AuthenticationScheme, challengedScheme);
- Assert.NotNull(challenge.Properties.RedirectUri);
- Assert.Equal("https://localhost/", challenge.Properties.RedirectUri);
- }
-
- [Fact]
- public void SignInProvidedScheme_ChallengesCustomScheme()
- {
- // Arrange
- var controller = new AccountController(new OptionsMonitor("Custom", new AzureADOptions()));
- controller.Url = new TestUrlHelper("~/", "https://localhost/");
-
- // Act
- var result = controller.SignIn("Custom");
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal("Custom", challengedScheme);
- }
-
- private ClaimsPrincipal CreateAuthenticatedPrincipal(string scheme) =>
- new ClaimsPrincipal(new ClaimsIdentity(scheme));
-
- private static ControllerContext CreateControllerContext(ClaimsPrincipal principal = null)
- {
- principal = principal ?? new ClaimsPrincipal(new ClaimsIdentity());
- var mock = new Mock<IAuthenticationService>();
- mock.Setup(authS => authS.AuthenticateAsync(It.IsAny<HttpContext>(), It.IsAny<string>()))
- .ReturnsAsync<HttpContext, string, IAuthenticationService, AuthenticateResult>(
- (ctx, scheme) =>
- {
- if (principal.Identity.IsAuthenticated)
- {
- return AuthenticateResult.Success(new AuthenticationTicket(principal, scheme));
- }
- else
- {
- return AuthenticateResult.NoResult();
- }
- });
- return new ControllerContext()
- {
- HttpContext = new DefaultHttpContext()
- {
- RequestServices = new ServiceCollection()
- .AddSingleton(mock.Object)
- .BuildServiceProvider()
- }
- };
- }
-
- [Fact]
- public void SignOutNoScheme_SignsOutDefaultCookiesAndDefaultOpenIDConnectAADAzureADSchemesAsync()
- {
- // Arrange
- var options = new AzureADOptions()
- {
- CookieSchemeName = AzureADDefaults.CookieScheme,
- OpenIdConnectSchemeName = AzureADDefaults.OpenIdScheme
- };
-
- var controllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal(AzureADDefaults.AuthenticationScheme));
-
- var descriptor = new PageActionDescriptor()
- {
- AttributeRouteInfo = new AttributeRouteInfo()
- {
- Template = "/Account/SignedOut"
- }
- };
- var controller = new AccountController(new OptionsMonitor(AzureADDefaults.AuthenticationScheme, options))
- {
- Url = new TestUrlHelper(
- controllerContext.HttpContext,
- new RouteData(),
- descriptor,
- "/Account/SignedOut",
- "https://localhost/Account/SignedOut"),
- ControllerContext = new ControllerContext()
- {
- HttpContext = controllerContext.HttpContext
- }
- };
- controller.Request.Scheme = "https";
-
- // Act
- var result = controller.SignOut(null);
-
- // Assert
- var signOut = Assert.IsAssignableFrom<SignOutResult>(result);
- Assert.Equal(new[] { AzureADDefaults.CookieScheme, AzureADDefaults.OpenIdScheme }, signOut.AuthenticationSchemes);
- Assert.NotNull(signOut.Properties.RedirectUri);
- Assert.Equal("https://localhost/Account/SignedOut", signOut.Properties.RedirectUri);
- }
-
- [Fact]
- public void SignOutProvidedScheme_SignsOutCustomCookiesAndCustomOpenIDConnectAADAzureADSchemesAsync()
- {
- // Arrange
- var options = new AzureADOptions()
- {
- CookieSchemeName = "Cookie",
- OpenIdConnectSchemeName = "OpenID"
- };
-
- var controllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal(AzureADDefaults.AuthenticationScheme));
- var descriptor = new PageActionDescriptor()
- {
- AttributeRouteInfo = new AttributeRouteInfo()
- {
- Template = "/Account/SignedOut"
- }
- };
-
- var controller = new AccountController(new OptionsMonitor("Custom", options))
- {
- Url = new TestUrlHelper(
- controllerContext.HttpContext,
- new RouteData(),
- descriptor,
- "/Account/SignedOut",
- "https://localhost/Account/SignedOut"),
- ControllerContext = new ControllerContext()
- {
- HttpContext = controllerContext.HttpContext
- }
- };
- controller.Request.Scheme = "https";
-
- // Act
- var result = controller.SignOut("Custom");
-
- // Assert
- var signOut = Assert.IsAssignableFrom<SignOutResult>(result);
- Assert.Equal(new[] { "Cookie", "OpenID" }, signOut.AuthenticationSchemes);
- }
-
- private class OptionsMonitor : IOptionsMonitor<AzureADOptions>
- {
- public OptionsMonitor(string scheme, AzureADOptions options)
- {
- Scheme = scheme;
- Options = options;
- }
-
- public AzureADOptions CurrentValue => throw new NotImplementedException();
-
- public string Scheme { get; }
- public AzureADOptions Options { get; }
-
- public AzureADOptions Get(string name)
- {
- if (name == Scheme)
- {
- return Options;
- }
-
- return null;
- }
-
- public IDisposable OnChange(Action<AzureADOptions, string> listener)
- {
- throw new NotImplementedException();
- }
- }
-
- private class TestUrlHelper : IUrlHelper
- {
- public TestUrlHelper(string contentPath, string url)
- {
- ContentPath = contentPath;
- Url = url;
- }
-
- public TestUrlHelper(
- HttpContext context,
- RouteData routeData,
- ActionDescriptor descriptor,
- string contentPath,
- string url)
- {
- HttpContext = context;
- RouteData = routeData;
- ActionDescriptor = descriptor;
- ContentPath = contentPath;
- Url = url;
- }
-
- public ActionContext ActionContext =>
- new ActionContext(HttpContext, RouteData, ActionDescriptor);
-
- public string ContentPath { get; }
- public string Url { get; }
- public HttpContext HttpContext { get; }
- public RouteData RouteData { get; }
- public ActionDescriptor ActionDescriptor { get; }
-
- public string Action(UrlActionContext actionContext)
- {
- throw new NotImplementedException();
- }
-
- public string Content(string contentPath)
- {
- if (ContentPath == contentPath)
- {
- return Url;
- }
- return "";
- }
-
- public bool IsLocalUrl(string url)
- {
- throw new NotImplementedException();
- }
-
- public string Link(string routeName, object values)
- {
- throw new NotImplementedException();
- }
-
- public string RouteUrl(UrlRouteContext routeContext)
- {
- if (routeContext.Values is RouteValueDictionary dicionary &&
- dicionary.TryGetValue("page", out var page) &&
- page is string pagePath &&
- ContentPath == pagePath)
- {
- return Url;
- }
-
- return null;
- }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj b/src/Azure/AzureAD/Authentication.AzureAD.UI/test/Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj
deleted file mode 100644
index b5daa435a5..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
- <RootNamespace>Microsoft.AspNetCore.Authentication.AzureAD.UI</RootNamespace>
- <!-- This package will be deprecated -->
- <NoWarn>$(NoWarn);CS0618</NoWarn>
- </PropertyGroup>
-
- <ItemGroup>
- <Content Include="xunit.runner.json">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- </ItemGroup>
-
- <ItemGroup>
- <Reference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" />
- </ItemGroup>
-
-</Project>
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/xunit.runner.json b/src/Azure/AzureAD/Authentication.AzureAD.UI/test/xunit.runner.json
deleted file mode 100644
index 42db7ef95e..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/xunit.runner.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "shadowCopy": false
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Controllers/AccountController.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Controllers/AccountController.cs
deleted file mode 100644
index 64ee5ee125..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Controllers/AccountController.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2C.Controllers.Internal;
-
-[NonController]
-[AllowAnonymous]
-[Area("AzureADB2C")]
-[Route("[area]/[controller]/[action]")]
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AccountController : Controller
-{
- private readonly IOptionsMonitor<AzureADB2COptions> _options;
-
- public AccountController(IOptionsMonitor<AzureADB2COptions> AzureADB2COptions)
- {
- _options = AzureADB2COptions;
- }
-
- [HttpGet("{scheme?}")]
- public IActionResult SignIn([FromRoute] string scheme)
- {
- scheme = scheme ?? AzureADB2CDefaults.AuthenticationScheme;
- var redirectUrl = Url.Content("~/");
- return Challenge(
- new AuthenticationProperties { RedirectUri = redirectUrl },
- scheme);
- }
-
- [HttpGet("{scheme?}")]
- public IActionResult ResetPassword([FromRoute] string scheme)
- {
- scheme = scheme ?? AzureADB2CDefaults.AuthenticationScheme;
- var options = _options.Get(scheme);
-
- var redirectUrl = Url.Content("~/");
- var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
- properties.Items[AzureADB2CDefaults.PolicyKey] = options.ResetPasswordPolicyId;
- return Challenge(properties, scheme);
- }
-
- [HttpGet("{scheme?}")]
- public async Task<IActionResult> EditProfile([FromRoute] string scheme)
- {
- scheme = scheme ?? AzureADB2CDefaults.AuthenticationScheme;
- var authenticated = await HttpContext.AuthenticateAsync(scheme);
- if (!authenticated.Succeeded)
- {
- return Challenge(scheme);
- }
-
- var options = _options.Get(scheme);
-
- var redirectUrl = Url.Content("~/");
- var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
- properties.Items[AzureADB2CDefaults.PolicyKey] = options.EditProfilePolicyId;
- return Challenge(properties, scheme);
- }
-
- [HttpGet("{scheme?}")]
- public async Task<IActionResult> SignOut([FromRoute] string scheme)
- {
- scheme = scheme ?? AzureADB2CDefaults.AuthenticationScheme;
- var authenticated = await HttpContext.AuthenticateAsync(scheme);
- if (!authenticated.Succeeded)
- {
- return Challenge(scheme);
- }
-
- var options = _options.Get(scheme);
-
- var callbackUrl = Url.Page("/Account/SignedOut", pageHandler: null, values: null, protocol: Request.Scheme);
- return SignOut(
- new AuthenticationProperties { RedirectUri = callbackUrl },
- options.AllSchemes);
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml
deleted file mode 100644
index 2084bbf67a..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml
+++ /dev/null
@@ -1,10 +0,0 @@
-@page
-@model AccessDeniedModel
-@{
- ViewData["Title"] = "Access denied";
-}
-
-<header>
- <h1 id="AzureADB2CAccessDeniedTitle" class="text-danger">@ViewData["Title"]</h1>
- <p id="AzureADB2CAccessDeniedText" class="text-danger">You do not have access to this resource.</p>
-</header>
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml.cs
deleted file mode 100644
index 57631fa590..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/AccessDenied.cshtml.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal;
-
-/// <summary>
-/// This API supports infrastructure and is not intended to be used
-/// directly from your code.This API may change or be removed in future releases
-/// </summary>
-[AllowAnonymous]
-public class AccessDeniedModel : PageModel
-{
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public void OnGet()
- {
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml
deleted file mode 100644
index 046fdddb56..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml
+++ /dev/null
@@ -1,23 +0,0 @@
-@page
-@model ErrorModel
-@{
- ViewData["Title"] = "Error";
-}
-
-<h1 id="AzureADB2CErrorTitle" class="text-danger">Error.</h1>
-<h2 id="AzureADB2CErrorSub" class="text-danger">An error occurred while processing your request.</h2>
-
-@if (Model.ShowRequestId)
-{
-<p id="AzureADB2CRequestId">
- <strong>Request ID:</strong> <code>@Model.RequestId</code>
-</p>
-}
-
-<h3 id="AzureADB2CErrorDevNoticeTitle">Development Mode</h3>
-<p id="AzureADB2CErrorDevNoticeText1">
- Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
-</p>
-<p id="AzureADB2CErrorDevNoticeText2">
- <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
-</p>
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml.cs
deleted file mode 100644
index c7e8d7d0d2..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/Error.cshtml.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Diagnostics;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal;
-
-/// <summary>
-/// This API supports infrastructure and is not intended to be used
-/// directly from your code.This API may change or be removed in future releases
-/// </summary>
-[AllowAnonymous]
-[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
-public class ErrorModel : PageModel
-{
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public string RequestId { get; set; }
-
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
-
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public void OnGet()
- {
- RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml
deleted file mode 100644
index 13e90c4216..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml
+++ /dev/null
@@ -1,10 +0,0 @@
-@page
-@model SignedOutModel
-@{
- ViewData["Title"] = "Signed out";
-}
-
-<h2 id="AzureADB2CSignedOutTitle">@ViewData["Title"]</h2>
-<p id="AzureADB2CSignedOutText">
- You have successfully signed out.
-</p>
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml.cs
deleted file mode 100644
index e8a607d269..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/SignedOut.cshtml.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal;
-
-/// <summary>
-/// This API supports infrastructure and is not intended to be used
-/// directly from your code.This API may change or be removed in future releases
-/// </summary>
-[AllowAnonymous]
-public class SignedOutModel : PageModel
-{
- /// <summary>
- /// This API supports infrastructure and is not intended to be used
- /// directly from your code.This API may change or be removed in future releases
- /// </summary>
- public IActionResult OnGet()
- {
- if (User.Identity.IsAuthenticated)
- {
- return LocalRedirect("~/");
- }
-
- return Page();
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/_ViewImports.cshtml b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/_ViewImports.cshtml
deleted file mode 100644
index 655317c358..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/Account/_ViewImports.cshtml
+++ /dev/null
@@ -1,2 +0,0 @@
-@using Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal
-@namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Pages.Internal \ No newline at end of file
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/_ViewStart.cshtml b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/_ViewStart.cshtml
deleted file mode 100644
index c51721cd40..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Areas/AzureADB2C/Pages/_ViewStart.cshtml
+++ /dev/null
@@ -1,13 +0,0 @@
-@using Microsoft.AspNetCore.Hosting
-@using Microsoft.AspNetCore.Mvc.ViewEngines
-
-@inject IWebHostEnvironment Environment
-@inject ICompositeViewEngine Engine
-
-@{
- var result = Engine.FindView(ViewContext, "_Layout", isMainPage: false);
- if (result.Success)
- {
- Layout = "_Layout";
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CAccountControllerFeatureProvider.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CAccountControllerFeatureProvider.cs
deleted file mode 100644
index bf4e02cb73..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CAccountControllerFeatureProvider.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Reflection;
-using Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2C.Controllers.Internal;
-using Microsoft.AspNetCore.Mvc.ApplicationParts;
-using Microsoft.AspNetCore.Mvc.Controllers;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADB2CAccountControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>, IApplicationFeatureProvider
-{
- public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
- {
- if (!feature.Controllers.Contains(typeof(AccountController).GetTypeInfo()))
- {
- feature.Controllers.Add(typeof(AccountController).GetTypeInfo());
- }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CCookieOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CCookieOptionsConfiguration.cs
deleted file mode 100644
index f6b6c77ec5..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CCookieOptionsConfiguration.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADB2CCookieOptionsConfiguration : IConfigureNamedOptions<CookieAuthenticationOptions>
-{
- private readonly IOptions<AzureADB2CSchemeOptions> _schemeOptions;
- private readonly IOptionsMonitor<AzureADB2COptions> _azureADB2COptions;
-
- public AzureADB2CCookieOptionsConfiguration(IOptions<AzureADB2CSchemeOptions> schemeOptions, IOptionsMonitor<AzureADB2COptions> azureADB2COptions)
- {
- _schemeOptions = schemeOptions;
- _azureADB2COptions = azureADB2COptions;
- }
-
- public void Configure(string name, CookieAuthenticationOptions options)
- {
- var azureADB2CScheme = GetAzureADB2CScheme(name);
- var azureADB2COptions = _azureADB2COptions.Get(azureADB2CScheme);
- if (name != azureADB2COptions.CookieSchemeName)
- {
- return;
- }
-
- options.LoginPath = $"/AzureADB2C/Account/SignIn/{azureADB2CScheme}";
- options.LogoutPath = $"/AzureADB2C/Account/SignOut/{azureADB2CScheme}";
- options.AccessDeniedPath = "/AzureADB2C/Account/AccessDenied";
- options.Cookie.SameSite = SameSiteMode.None;
- }
-
- public void Configure(CookieAuthenticationOptions options)
- {
- }
-
- private string GetAzureADB2CScheme(string name)
- {
- foreach (var mapping in _schemeOptions.Value.OpenIDMappings)
- {
- if (mapping.Value.CookieScheme == name)
- {
- return mapping.Key;
- }
- }
-
- return null;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CJwtBearerOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CJwtBearerOptionsConfiguration.cs
deleted file mode 100644
index da531f9d37..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2CJwtBearerOptionsConfiguration.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADB2CJwtBearerOptionsConfiguration : IConfigureNamedOptions<JwtBearerOptions>
-{
- private readonly IOptions<AzureADB2CSchemeOptions> _schemeOptions;
- private readonly IOptionsMonitor<AzureADB2COptions> _azureADB2COptions;
-
- public AzureADB2CJwtBearerOptionsConfiguration(
- IOptions<AzureADB2CSchemeOptions> schemeOptions,
- IOptionsMonitor<AzureADB2COptions> azureADB2COptions)
- {
- _schemeOptions = schemeOptions;
- _azureADB2COptions = azureADB2COptions;
- }
-
- public void Configure(string name, JwtBearerOptions options)
- {
- var azureADB2CScheme = GetAzureADB2CScheme(name);
- var azureADB2COptions = _azureADB2COptions.Get(azureADB2CScheme);
- if (name != azureADB2COptions.JwtBearerSchemeName)
- {
- return;
- }
-
- options.Audience = azureADB2COptions.ClientId;
- options.Authority = AzureADB2COpenIdConnectOptionsConfiguration.BuildAuthority(azureADB2COptions);
- }
-
- public void Configure(JwtBearerOptions options)
- {
- }
-
- private string GetAzureADB2CScheme(string name)
- {
- foreach (var mapping in _schemeOptions.Value.JwtBearerMappings)
- {
- if (mapping.Value.JwtBearerScheme == name)
- {
- return mapping.Key;
- }
- }
-
- return null;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2COpenIdConnectOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2COpenIdConnectOptionsConfiguration.cs
deleted file mode 100644
index 309c14d7fd..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureADB2COpenIdConnectOptionsConfiguration.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Options;
-using Microsoft.IdentityModel.Tokens;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADB2COpenIdConnectOptionsConfiguration : IConfigureNamedOptions<OpenIdConnectOptions>
-{
- private readonly IOptions<AzureADB2CSchemeOptions> _schemeOptions;
- private readonly IOptionsMonitor<AzureADB2COptions> _azureADB2COptions;
-
- public AzureADB2COpenIdConnectOptionsConfiguration(IOptions<AzureADB2CSchemeOptions> schemeOptions, IOptionsMonitor<AzureADB2COptions> azureADB2COptions)
- {
- _schemeOptions = schemeOptions;
- _azureADB2COptions = azureADB2COptions;
- }
-
- public void Configure(string name, OpenIdConnectOptions options)
- {
- var azureADB2CScheme = GetAzureADB2CScheme(name);
- var azureADB2COptions = _azureADB2COptions.Get(azureADB2CScheme);
- if (name != azureADB2COptions.OpenIdConnectSchemeName)
- {
- return;
- }
-
- options.ClientId = azureADB2COptions.ClientId;
- options.ClientSecret = azureADB2COptions.ClientSecret;
- options.Authority = BuildAuthority(azureADB2COptions);
- options.CallbackPath = azureADB2COptions.CallbackPath ?? options.CallbackPath;
- options.SignedOutCallbackPath = azureADB2COptions.SignedOutCallbackPath ?? options.SignedOutCallbackPath;
- options.SignInScheme = azureADB2COptions.CookieSchemeName;
- options.UseTokenLifetime = true;
- options.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "name" };
-
- var handlers = new AzureADB2COpenIDConnectEventHandlers(azureADB2CScheme, azureADB2COptions);
- options.Events = new OpenIdConnectEvents
- {
- OnRedirectToIdentityProvider = handlers.OnRedirectToIdentityProvider,
- OnRemoteFailure = handlers.OnRemoteFailure
- };
- }
-
- internal static string BuildAuthority(AzureADB2COptions AzureADB2COptions)
- {
- var baseUri = new Uri(AzureADB2COptions.Instance);
- var pathBase = baseUri.PathAndQuery.TrimEnd('/');
- var domain = AzureADB2COptions.Domain;
- var policy = AzureADB2COptions.DefaultPolicy;
-
- return new Uri(baseUri, new PathString($"{pathBase}/{domain}/{policy}/v2.0")).ToString();
- }
-
- private string GetAzureADB2CScheme(string name)
- {
- foreach (var mapping in _schemeOptions.Value.OpenIDMappings)
- {
- if (mapping.Value.OpenIdConnectScheme == name)
- {
- return mapping.Key;
- }
- }
-
- return null;
- }
-
- public void Configure(OpenIdConnectOptions options)
- {
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CAuthenticationBuilderExtensions.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CAuthenticationBuilderExtensions.cs
deleted file mode 100644
index 75768be528..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CAuthenticationBuilderExtensions.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Linq;
-using Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.AspNetCore.Mvc.ApplicationParts;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.DependencyInjection.Extensions;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-/// <summary>
-/// Extension methods to add Azure Active Directory B2C Authentication to your application.
-/// </summary>
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-public static class AzureADB2CAuthenticationBuilderExtensions
-{
- /// <summary>
- /// Adds JWT Bearer authentication to your app for Azure AD B2C Applications.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADB2COptions}"/> to configure the
- /// <see cref="AzureADB2COptions"/>.
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureADB2CBearer(this AuthenticationBuilder builder, Action<AzureADB2COptions> configureOptions) =>
- builder.AddAzureADB2CBearer(
- AzureADB2CDefaults.BearerAuthenticationScheme,
- AzureADB2CDefaults.JwtBearerAuthenticationScheme,
- configureOptions);
-
- /// <summary>
- /// Adds JWT Bearer authentication to your app for Azure AD B2C Applications.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="scheme">The identifier for the virtual scheme.</param>
- /// <param name="jwtBearerScheme">The identifier for the underlying JWT Bearer scheme.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADB2COptions}"/> to configure the
- /// <see cref="AzureADB2COptions"/>.
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureADB2CBearer(
- this AuthenticationBuilder builder,
- string scheme,
- string jwtBearerScheme,
- Action<AzureADB2COptions> configureOptions)
- {
- builder.AddPolicyScheme(scheme, displayName: null, configureOptions: o =>
- {
- o.ForwardDefault = jwtBearerScheme;
- });
-
- builder.Services.Configure(TryAddJwtBearerSchemeMapping(scheme, jwtBearerScheme));
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<AzureADB2COptions>, AzureADB2COptionsConfiguration>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<JwtBearerOptions>, AzureADB2CJwtBearerOptionsConfiguration>());
-
- builder.Services.Configure(scheme, configureOptions);
- builder.AddJwtBearer(jwtBearerScheme, o => { });
-
- return builder;
- }
-
- /// <summary>
- /// Adds Azure Active Directory B2C Authentication to your application.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADB2COptions}"/> to configure the
- /// <see cref="AzureADB2COptions"/>
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureADB2C(this AuthenticationBuilder builder, Action<AzureADB2COptions> configureOptions) =>
- builder.AddAzureADB2C(
- AzureADB2CDefaults.AuthenticationScheme,
- AzureADB2CDefaults.OpenIdScheme,
- AzureADB2CDefaults.CookieScheme,
- AzureADB2CDefaults.DisplayName,
- configureOptions);
-
- /// <summary>
- /// Adds Azure Active Directory B2C Authentication to your application.
- /// </summary>
- /// <param name="builder">The <see cref="AuthenticationBuilder"/>.</param>
- /// <param name="scheme">The identifier for the virtual scheme.</param>
- /// <param name="openIdConnectScheme">The identifier for the underlying Open ID Connect scheme.</param>
- /// <param name="cookieScheme">The identifier for the underlying cookie scheme.</param>
- /// <param name="displayName">The display name for the scheme.</param>
- /// <param name="configureOptions">The <see cref="Action{AzureADB2COptions}"/> to configure the
- /// <see cref="AzureADB2COptions"/>
- /// </param>
- /// <returns>The <see cref="AuthenticationBuilder"/>.</returns>
- [Obsolete("This is obsolete and will be removed in a future version. Use AddMicrosoftWebApiAuthentication from Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
- public static AuthenticationBuilder AddAzureADB2C(
- this AuthenticationBuilder builder,
- string scheme,
- string openIdConnectScheme,
- string cookieScheme,
- string displayName,
- Action<AzureADB2COptions> configureOptions)
- {
- AddAdditionalMvcApplicationParts(builder.Services);
- builder.AddPolicyScheme(scheme, displayName, o =>
- {
- o.ForwardDefault = cookieScheme;
- o.ForwardChallenge = openIdConnectScheme;
- });
-
- builder.Services.Configure(TryAddOpenIDCookieSchemeMappings(scheme, openIdConnectScheme, cookieScheme));
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<AzureADB2COptions>, AzureADB2COptionsConfiguration>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<OpenIdConnectOptions>, AzureADB2COpenIdConnectOptionsConfiguration>());
-
- builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<CookieAuthenticationOptions>, AzureADB2CCookieOptionsConfiguration>());
-
- builder.Services.Configure(scheme, configureOptions);
-
- builder.AddOpenIdConnect(openIdConnectScheme, null, o => { });
- builder.AddCookie(cookieScheme, null, o => { });
-
- return builder;
- }
-
- private static Action<AzureADB2CSchemeOptions> TryAddJwtBearerSchemeMapping(string scheme, string jwtBearerScheme)
- {
- return TryAddMapping;
-
- void TryAddMapping(AzureADB2CSchemeOptions o)
- {
- if (o.JwtBearerMappings.ContainsKey(scheme))
- {
- throw new InvalidOperationException($"A scheme with the name '{scheme}' was already added.");
- }
- foreach (var mapping in o.JwtBearerMappings)
- {
- if (mapping.Value.JwtBearerScheme == jwtBearerScheme)
- {
- throw new InvalidOperationException(
- $"The JSON Web Token Bearer scheme '{jwtBearerScheme}' can't be associated with the Azure Active Directory B2C scheme '{scheme}'. " +
- $"The JSON Web Token Bearer scheme '{jwtBearerScheme}' is already mapped to the Azure Active Directory B2C scheme '{mapping.Key}'");
- }
- }
- o.JwtBearerMappings.Add(scheme, new AzureADB2CSchemeOptions.JwtBearerSchemeMapping
- {
- JwtBearerScheme = jwtBearerScheme
- });
- };
- }
-
- private static Action<AzureADB2CSchemeOptions> TryAddOpenIDCookieSchemeMappings(string scheme, string openIdConnectScheme, string cookieScheme)
- {
- return TryAddMapping;
-
- void TryAddMapping(AzureADB2CSchemeOptions o)
- {
- if (o.OpenIDMappings.ContainsKey(scheme))
- {
- throw new InvalidOperationException($"A scheme with the name '{scheme}' was already added.");
- }
- foreach (var mapping in o.OpenIDMappings)
- {
- if (mapping.Value.CookieScheme == cookieScheme)
- {
- throw new InvalidOperationException(
- $"The cookie scheme '{cookieScheme}' can't be associated with the Azure Active Directory B2C scheme '{scheme}'. " +
- $"The cookie scheme '{cookieScheme}' is already mapped to the Azure Active Directory B2C scheme '{mapping.Key}'");
- }
-
- if (mapping.Value.OpenIdConnectScheme == openIdConnectScheme)
- {
- throw new InvalidOperationException(
- $"The Open ID Connect scheme '{openIdConnectScheme}' can't be associated with the Azure Active Directory B2C scheme '{scheme}'. " +
- $"The Open ID Connect scheme '{openIdConnectScheme}' is already mapped to the Azure Active Directory B2C scheme '{mapping.Key}'");
- }
- }
- o.OpenIDMappings.Add(scheme, new AzureADB2CSchemeOptions.AzureADB2COpenIDSchemeMapping
- {
- OpenIdConnectScheme = openIdConnectScheme,
- CookieScheme = cookieScheme
- });
- };
- }
-
- private static void AddAdditionalMvcApplicationParts(IServiceCollection services)
- {
- var additionalParts = GetAdditionalParts();
- var mvcBuilder = services
- .AddMvc()
- .ConfigureApplicationPartManager(apm =>
- {
- foreach (var part in additionalParts)
- {
- if (!apm.ApplicationParts.Any(ap => HasSameName(ap.Name, part.Name)))
- {
- apm.ApplicationParts.Add(part);
- }
- }
-
- apm.FeatureProviders.Add(new AzureADB2CAccountControllerFeatureProvider());
- });
-
- static bool HasSameName(string left, string right) => string.Equals(left, right, StringComparison.Ordinal);
- }
-
- private static IEnumerable<ApplicationPart> GetAdditionalParts()
- {
- var thisAssembly = typeof(AzureADB2CAuthenticationBuilderExtensions).Assembly;
- var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(thisAssembly, throwOnError: true);
-
- foreach (var reference in relatedAssemblies)
- {
- yield return new CompiledRazorAssemblyPart(reference);
- }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CDefaults.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CDefaults.cs
deleted file mode 100644
index 7bcfc79a11..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CDefaults.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-/// <summary>
-/// Constants for different Azure Active Directory B2C authentication components.
-/// </summary>
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-public static class AzureADB2CDefaults
-{
- /// <summary>
- /// The key for the policy used in <see cref="AuthenticationProperties"/>.
- /// </summary>
- public static readonly string PolicyKey = "Policy";
-
- /// <summary>
- /// The scheme name for Open ID Connect when using
- /// <see cref="AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C(AuthenticationBuilder, System.Action{AzureADB2COptions})"/>.
- /// </summary>
- public const string OpenIdScheme = "AzureADB2COpenID";
-
- /// <summary>
- /// The scheme name for cookies when using
- /// <see cref="AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C(AuthenticationBuilder, System.Action{AzureADB2COptions})"/>.
- /// </summary>
- public const string CookieScheme = "AzureADB2CCookie";
-
- /// <summary>
- /// The default scheme for Azure Active Directory B2C Bearer.
- /// </summary>
- public const string BearerAuthenticationScheme = "AzureADB2CBearer";
-
- /// <summary>
- /// The scheme name for JWT Bearer when using
- /// <see cref="AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2CBearer(AuthenticationBuilder, System.Action{AzureADB2COptions})"/>.
- /// </summary>
- public const string JwtBearerAuthenticationScheme = "AzureADB2CJwtBearer";
-
- /// <summary>
- /// The default scheme for Azure Active Directory B2C.
- /// </summary>
- public const string AuthenticationScheme = "AzureADB2C";
-
- /// <summary>
- /// The display name for Azure Active Directory B2C.
- /// </summary>
- public static readonly string DisplayName = "Azure Active Directory B2C";
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COpenIDConnectEventHandlers.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COpenIDConnectEventHandlers.cs
deleted file mode 100644
index 4d27566086..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COpenIDConnectEventHandlers.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.IdentityModel.Protocols.OpenIdConnect;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADB2COpenIDConnectEventHandlers
-{
- private readonly IDictionary<string, string> _policyToIssuerAddress =
- new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
-
- public AzureADB2COpenIDConnectEventHandlers(string schemeName, AzureADB2COptions options)
- {
- SchemeName = schemeName;
- Options = options;
- }
-
- public string SchemeName { get; }
-
- public AzureADB2COptions Options { get; }
-
- public Task OnRedirectToIdentityProvider(RedirectContext context)
- {
- var defaultPolicy = Options.DefaultPolicy;
- if (context.Properties.Items.TryGetValue(AzureADB2CDefaults.PolicyKey, out var policy) &&
- !string.IsNullOrEmpty(policy) &&
- !string.Equals(policy, defaultPolicy, StringComparison.OrdinalIgnoreCase))
- {
- context.ProtocolMessage.Scope = OpenIdConnectScope.OpenIdProfile;
- context.ProtocolMessage.ResponseType = OpenIdConnectResponseType.IdToken;
- context.ProtocolMessage.IssuerAddress = BuildIssuerAddress(context, defaultPolicy, policy);
- context.Properties.Items.Remove(AzureADB2CDefaults.PolicyKey);
- }
-
- return Task.CompletedTask;
- }
-
- private string BuildIssuerAddress(RedirectContext context, string defaultPolicy, string policy)
- {
- if (!_policyToIssuerAddress.TryGetValue(policy, out _))
- {
- _policyToIssuerAddress[policy] = context.ProtocolMessage.IssuerAddress.ToLowerInvariant()
- .Replace($"/{defaultPolicy.ToLowerInvariant()}/", $"/{policy.ToLowerInvariant()}/");
- }
-
- return _policyToIssuerAddress[policy];
- }
-
- public Task OnRemoteFailure(RemoteFailureContext context)
- {
- context.HandleResponse();
- // Handle the error code that Azure Active Directory B2C throws when trying to reset a password from the login page
- // because password reset is not supported by a "sign-up or sign-in policy".
- // Below is a sample error message:
- // 'access_denied', error_description: 'AADB2C90118: The user has forgotten their password.
- // Correlation ID: f99deff4-f43b-43cc-b4e7-36141dbaf0a0
- // Timestamp: 2018-03-05 02:49:35Z
- //', error_uri: 'error_uri is null'.
- if (context.Failure is OpenIdConnectProtocolException && context.Failure.Message.Contains("AADB2C90118"))
- {
- // If the user clicked the reset password link, redirect to the reset password route
- context.Response.Redirect($"{context.Request.PathBase}/AzureADB2C/Account/ResetPassword/{SchemeName}");
- }
- // Access denied errors happen when a user cancels an action on the Azure Active Directory B2C UI. We just redirect back to
- // the main page in that case.
- // Message contains error: 'access_denied', error_description: 'AADB2C90091: The user has cancelled entering self-asserted information.
- // Correlation ID: d01c8878-0732-4eb2-beb8-da82a57432e0
- // Timestamp: 2018-03-05 02:56:49Z
- // ', error_uri: 'error_uri is null'.
- else if (context.Failure is OpenIdConnectProtocolException && context.Failure.Message.Contains("access_denied"))
- {
- context.Response.Redirect($"{context.Request.PathBase}/");
- }
- else
- {
- context.Response.Redirect($"{context.Request.PathBase}/AzureADB2C/Account/Error");
- }
-
- return Task.CompletedTask;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptions.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptions.cs
deleted file mode 100644
index a1c4bf84b5..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptions.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-/// <summary>
-/// Options for configuring authentication using Azure Active Directory B2C.
-/// </summary>
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-public class AzureADB2COptions
-{
- /// <summary>
- /// Gets or sets the OpenID Connect authentication scheme to use for authentication with this instance
- /// of Azure Active Directory B2C authentication.
- /// </summary>
- public string OpenIdConnectSchemeName { get; set; } = OpenIdConnectDefaults.AuthenticationScheme;
-
- /// <summary>
- /// Gets or sets the Cookie authentication scheme to use for sign in with this instance of
- /// Azure Active Directory B2C authentication.
- /// </summary>
- public string CookieSchemeName { get; set; } = CookieAuthenticationDefaults.AuthenticationScheme;
-
- /// <summary>
- /// Gets or sets the Jwt bearer authentication scheme to use for validating access tokens for this
- /// instance of Azure Active Directory B2C Bearer authentication.
- /// </summary>
- public string JwtBearerSchemeName { get; internal set; }
-
- /// <summary>
- /// Gets or sets the client Id.
- /// </summary>
- public string ClientId { get; set; }
-
- /// <summary>
- /// Gets or sets the client secret.
- /// </summary>
- public string ClientSecret { get; set; }
-
- /// <summary>
- /// Gets or sets the Azure Active Directory B2C instance.
- /// </summary>
- public string Instance { get; set; }
-
- /// <summary>
- /// Gets or sets the domain of the Azure Active Directory B2C tenant.
- /// </summary>
- public string Domain { get; set; }
-
- /// <summary>
- /// Gets or sets the edit profile policy name.
- /// </summary>
- public string EditProfilePolicyId { get; set; }
-
- /// <summary>
- /// Gets or sets the sign up or sign in policy name.
- /// </summary>
- public string SignUpSignInPolicyId { get; set; }
-
- /// <summary>
- /// Gets or sets the reset password policy id.
- /// </summary>
- public string ResetPasswordPolicyId { get; set; }
-
- /// <summary>
- /// Gets or sets the sign in callback path.
- /// </summary>
- public string CallbackPath { get; set; }
-
- /// <summary>
- /// Gets or sets the sign out callback path.
- /// </summary>
- public string SignedOutCallbackPath { get; set; }
-
- /// <summary>
- /// Gets or sets the default policy.
- /// </summary>
- public string DefaultPolicy => SignUpSignInPolicyId;
-
- /// <summary>
- /// Gets all the underlying authentication schemes.
- /// </summary>
- public string[] AllSchemes => new[] { CookieSchemeName, OpenIdConnectSchemeName };
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptionsConfiguration.cs
deleted file mode 100644
index f20845fcdb..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2COptionsConfiguration.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-[Obsolete("This is obsolete and will be removed in a future version. Use Microsoft.Identity.Web instead. See https://aka.ms/ms-identity-web.")]
-internal sealed class AzureADB2COptionsConfiguration : IConfigureNamedOptions<AzureADB2COptions>
-{
- private readonly IOptions<AzureADB2CSchemeOptions> _schemeOptions;
-
- public AzureADB2COptionsConfiguration(IOptions<AzureADB2CSchemeOptions> schemeOptions)
- {
- _schemeOptions = schemeOptions;
- }
-
- public void Configure(string name, AzureADB2COptions options)
- {
- // This can be called because of someone configuring JWT or someone configuring
- // Open ID + Cookie.
- if (_schemeOptions.Value.OpenIDMappings.TryGetValue(name, out var webMapping))
- {
- options.OpenIdConnectSchemeName = webMapping.OpenIdConnectScheme;
- options.CookieSchemeName = webMapping.CookieScheme;
- return;
- }
- if (_schemeOptions.Value.JwtBearerMappings.TryGetValue(name, out var mapping))
- {
- options.JwtBearerSchemeName = mapping.JwtBearerScheme;
- return;
- }
- }
-
- public void Configure(AzureADB2COptions options)
- {
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CSchemeOptions.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CSchemeOptions.cs
deleted file mode 100644
index a75ad0c6c0..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/AzureAdB2CSchemeOptions.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-internal sealed class AzureADB2CSchemeOptions
-{
- public IDictionary<string, AzureADB2COpenIDSchemeMapping> OpenIDMappings { get; set; } = new Dictionary<string, AzureADB2COpenIDSchemeMapping>();
-
- public IDictionary<string, JwtBearerSchemeMapping> JwtBearerMappings { get; set; } = new Dictionary<string, JwtBearerSchemeMapping>();
-
- public sealed class AzureADB2COpenIDSchemeMapping
- {
- public string OpenIdConnectScheme { get; set; }
- public string CookieScheme { get; set; }
- }
-
- public sealed class JwtBearerSchemeMapping
- {
- public string JwtBearerScheme { get; set; }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj
deleted file mode 100644
index 4616851307..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
-
- <PropertyGroup>
- <Description>ASP.NET Core Azure Active Directory B2C Integration provides components for easily integrating Azure Active Directory B2C authentication within your ASP.NET Core application.</Description>
- <RazorAssemblyDescription>Precompiled views assembly for the ASP.NET Core Azure Active Directory B2C Integration package.</RazorAssemblyDescription>
- <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
- <PackageTags>aspnetcore;authentication;AzureADB2C</PackageTags>
- <GenerateDocumentationFile>true</GenerateDocumentationFile>
- <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
- <Nullable>disable</Nullable>
- </PropertyGroup>
-
- <ItemGroup>
- <Reference Include="Microsoft.AspNetCore.Mvc" />
- <Reference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
- <Reference Include="Microsoft.AspNetCore.Authentication.Cookies" />
- <Reference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
- </ItemGroup>
-
-</Project>
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Properties/AssemblyInfo.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index b6d8d50d08..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt
deleted file mode 100644
index 09fe171474..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-#nullable enable
-~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.AuthenticationScheme = "AzureADB2C" -> string
-~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.BearerAuthenticationScheme = "AzureADB2CBearer" -> string
-~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.CookieScheme = "AzureADB2CCookie" -> string
-~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.JwtBearerAuthenticationScheme = "AzureADB2CJwtBearer" -> string
-~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.OpenIdScheme = "AzureADB2COpenID" -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.AllSchemes.get -> string[]
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CallbackPath.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CallbackPath.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientSecret.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientSecret.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CookieSchemeName.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CookieSchemeName.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.DefaultPolicy.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Domain.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Domain.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.EditProfilePolicyId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.EditProfilePolicyId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Instance.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Instance.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.JwtBearerSchemeName.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.OpenIdConnectSchemeName.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.OpenIdConnectSchemeName.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ResetPasswordPolicyId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ResetPasswordPolicyId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignedOutCallbackPath.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignedOutCallbackPath.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignUpSignInPolicyId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignUpSignInPolicyId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.RequestId.get -> string
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.RequestId.set -> void
-~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.SignedOutModel.OnGet() -> Microsoft.AspNetCore.Mvc.IActionResult
-~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string openIdConnectScheme, string cookieScheme, string displayName, System.Action<Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action<Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2CBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string jwtBearerScheme, System.Action<Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2CBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action<Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions> configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
-~static readonly Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.DisplayName -> string
-~static readonly Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.PolicyKey -> string
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.AzureADB2COptions() -> void
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.AccessDeniedModel
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.AccessDeniedModel.AccessDeniedModel() -> void
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.AccessDeniedModel.OnGet() -> void
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.ErrorModel() -> void
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.OnGet() -> void
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.ShowRequestId.get -> bool
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.SignedOutModel
-Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.SignedOutModel.SignedOutModel() -> void
-Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt
deleted file mode 100644
index 7dc5c58110..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt
+++ /dev/null
@@ -1 +0,0 @@
-#nullable enable
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2CAuthenticationBuilderExtensionsTests.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2CAuthenticationBuilderExtensionsTests.cs
deleted file mode 100644
index 30a13934f4..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2CAuthenticationBuilderExtensionsTests.cs
+++ /dev/null
@@ -1,419 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-using Microsoft.AspNetCore.Authentication.Cookies;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-public class AzureADB2CAuthenticationBuilderExtensionsTests
-{
- [Fact]
- public void AddAzureADB2C_AddsAllAuthenticationHandlers()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADB2C(o => { });
- var provider = services.BuildServiceProvider();
-
- // Assert
- Assert.NotNull(provider.GetService<OpenIdConnectHandler>());
- Assert.NotNull(provider.GetService<CookieAuthenticationHandler>());
- Assert.NotNull(provider.GetService<PolicySchemeHandler>());
- }
-
- [Fact]
- public void AddAzureADB2C_ConfiguresAllOptions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADB2C(o =>
- {
- o.Instance = "https://login.microsoftonline.com/tfp";
- o.ClientId = "ClientId";
- o.ClientSecret = "ClientSecret";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.SignUpSignInPolicyId = "B2C_1_SiUpIn";
- o.ResetPasswordPolicyId = "B2C_1_SSPR";
- o.EditProfilePolicyId = "B2C_1_SiPe";
- });
- var provider = services.BuildServiceProvider();
-
- // Assert
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
- Assert.NotNull(azureADB2COptionsMonitor);
- var azureADB2COptions = azureADB2COptionsMonitor.Get(AzureADB2CDefaults.AuthenticationScheme);
- Assert.Equal(AzureADB2CDefaults.OpenIdScheme, azureADB2COptions.OpenIdConnectSchemeName);
- Assert.Equal(AzureADB2CDefaults.CookieScheme, azureADB2COptions.CookieSchemeName);
- Assert.Equal("https://login.microsoftonline.com/tfp", azureADB2COptions.Instance);
- Assert.Equal("ClientId", azureADB2COptions.ClientId);
- Assert.Equal("ClientSecret", azureADB2COptions.ClientSecret);
- Assert.Equal("/signin-oidc", azureADB2COptions.CallbackPath);
- Assert.Equal("domain.onmicrosoft.com", azureADB2COptions.Domain);
- Assert.Equal("B2C_1_SiUpIn", azureADB2COptions.SignUpSignInPolicyId);
- Assert.Equal("B2C_1_SSPR", azureADB2COptions.ResetPasswordPolicyId);
- Assert.Equal("B2C_1_SiPe", azureADB2COptions.EditProfilePolicyId);
-
- var openIdOptionsMonitor = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
- Assert.NotNull(openIdOptionsMonitor);
- var openIdOptions = openIdOptionsMonitor.Get(AzureADB2CDefaults.OpenIdScheme);
- Assert.Equal("ClientId", openIdOptions.ClientId);
- Assert.Equal($"https://login.microsoftonline.com/tfp/domain.onmicrosoft.com/B2C_1_SiUpIn/v2.0", openIdOptions.Authority);
- Assert.True(openIdOptions.UseTokenLifetime);
- Assert.Equal("/signin-oidc", openIdOptions.CallbackPath);
- Assert.Equal(AzureADB2CDefaults.CookieScheme, openIdOptions.SignInScheme);
- Assert.NotNull(openIdOptions.TokenValidationParameters);
- Assert.Equal("name", openIdOptions.TokenValidationParameters.NameClaimType);
- Assert.NotNull(openIdOptions.Events);
- var redirectHandler = openIdOptions.Events.OnRedirectToIdentityProvider;
- Assert.NotNull(redirectHandler);
- Assert.IsType<AzureADB2COpenIDConnectEventHandlers>(redirectHandler.Target);
- var remoteFailureHanlder = openIdOptions.Events.OnRemoteFailure;
- Assert.NotNull(remoteFailureHanlder);
- Assert.IsType<AzureADB2COpenIDConnectEventHandlers>(redirectHandler.Target);
-
- var cookieAuthenticationOptionsMonitor = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
- Assert.NotNull(cookieAuthenticationOptionsMonitor);
- var cookieAuthenticationOptions = cookieAuthenticationOptionsMonitor.Get(AzureADB2CDefaults.CookieScheme);
- Assert.Equal("/AzureADB2C/Account/SignIn/AzureADB2C", cookieAuthenticationOptions.LoginPath);
- Assert.Equal("/AzureADB2C/Account/SignOut/AzureADB2C", cookieAuthenticationOptions.LogoutPath);
- Assert.Equal("/AzureADB2C/Account/AccessDenied", cookieAuthenticationOptions.AccessDeniedPath);
- Assert.Equal(SameSiteMode.None, cookieAuthenticationOptions.Cookie.SameSite);
- }
-
- [Fact]
- public void AddAzureADB2C_AllowsOverridingCookiesAndOpenIdConnectSettings()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADB2C(o =>
- {
- o.Instance = "https://login.microsoftonline.com";
- o.ClientId = "ClientId";
- o.ClientSecret = "ClientSecret";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, o =>
- {
- o.Authority = "https://overriden.com";
- });
-
- services.Configure<CookieAuthenticationOptions>(AzureADB2CDefaults.CookieScheme, o =>
- {
- o.AccessDeniedPath = "/Overriden";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var openIdOptionsMonitor = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
- Assert.NotNull(openIdOptionsMonitor);
- var openIdOptions = openIdOptionsMonitor.Get(AzureADB2CDefaults.OpenIdScheme);
- Assert.Equal("ClientId", openIdOptions.ClientId);
- Assert.Equal($"https://overriden.com", openIdOptions.Authority);
-
- var cookieAuthenticationOptionsMonitor = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
- Assert.NotNull(cookieAuthenticationOptionsMonitor);
- var cookieAuthenticationOptions = cookieAuthenticationOptionsMonitor.Get(AzureADB2CDefaults.CookieScheme);
- Assert.Equal("/AzureADB2C/Account/SignIn/AzureADB2C", cookieAuthenticationOptions.LoginPath);
- Assert.Equal("/Overriden", cookieAuthenticationOptions.AccessDeniedPath);
- }
-
- [Fact]
- public void AddAzureADB2C_RegisteringAddCookiesAndAddOpenIdConnectHasNoImpactOnAzureAAExtensions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddCookie()
- .AddOpenIdConnect()
- .AddAzureADB2C(o =>
- {
- o.Instance = "https://login.microsoftonline.com";
- o.ClientId = "ClientId";
- o.ClientSecret = "ClientSecret";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, o =>
- {
- o.Authority = "https://overriden.com";
- });
-
- services.Configure<CookieAuthenticationOptions>(AzureADB2CDefaults.CookieScheme, o =>
- {
- o.AccessDeniedPath = "/Overriden";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var openIdOptionsMonitor = provider.GetService<IOptionsMonitor<OpenIdConnectOptions>>();
- Assert.NotNull(openIdOptionsMonitor);
- var openIdOptions = openIdOptionsMonitor.Get(AzureADB2CDefaults.OpenIdScheme);
- Assert.Equal("ClientId", openIdOptions.ClientId);
- Assert.Equal($"https://overriden.com", openIdOptions.Authority);
-
- var cookieAuthenticationOptionsMonitor = provider.GetService<IOptionsMonitor<CookieAuthenticationOptions>>();
- Assert.NotNull(cookieAuthenticationOptionsMonitor);
- var cookieAuthenticationOptions = cookieAuthenticationOptionsMonitor.Get(AzureADB2CDefaults.CookieScheme);
- Assert.Equal("/AzureADB2C/Account/SignIn/AzureADB2C", cookieAuthenticationOptions.LoginPath);
- Assert.Equal("/Overriden", cookieAuthenticationOptions.AccessDeniedPath);
- }
-
- [Fact]
- public void AddAzureADB2C_ThrowsForDuplicatedSchemes()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADB2C(o => { })
- .AddAzureADB2C(o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADB2COptionsMonitor.Get(AzureADB2CDefaults.AuthenticationScheme));
-
- Assert.Equal("A scheme with the name 'AzureADB2C' was already added.", exception.Message);
- }
-
- [Fact]
- public void AddAzureADB2C_ThrowsWhenOpenIdSchemeIsAlreadyInUse()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADB2C(o => { })
- .AddAzureADB2C("Custom", AzureADB2CDefaults.OpenIdScheme, "Cookie", null, o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
-
- var expectedMessage = $"The Open ID Connect scheme 'AzureADB2COpenID' can't be associated with the Azure Active Directory B2C scheme 'Custom'. " +
- "The Open ID Connect scheme 'AzureADB2COpenID' is already mapped to the Azure Active Directory B2C scheme 'AzureADB2C'";
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADB2COptionsMonitor.Get(AzureADB2CDefaults.AuthenticationScheme));
-
- Assert.Equal(expectedMessage, exception.Message);
- }
-
- [Fact]
- public void AddAzureADB2C_ThrowsWhenCookieSchemeIsAlreadyInUse()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADB2C(o => { })
- .AddAzureADB2C("Custom", "OpenID", AzureADB2CDefaults.CookieScheme, null, o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
-
- var expectedMessage = $"The cookie scheme 'AzureADB2CCookie' can't be associated with the Azure Active Directory B2C scheme 'Custom'. " +
- "The cookie scheme 'AzureADB2CCookie' is already mapped to the Azure Active Directory B2C scheme 'AzureADB2C'";
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADB2COptionsMonitor.Get(AzureADB2CDefaults.AuthenticationScheme));
-
- Assert.Equal(expectedMessage, exception.Message);
- }
-
- [Fact]
- public void AddAzureADB2CBearer_AddsAllAuthenticationHandlers()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADB2CBearer(o => { });
- var provider = services.BuildServiceProvider();
-
- // Assert
- Assert.NotNull(provider.GetService<JwtBearerHandler>());
- Assert.NotNull(provider.GetService<PolicySchemeHandler>());
- }
-
- [Fact]
- public void AddAzureADB2CBearer_ConfiguresAllOptions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADB2CBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/tfp";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.SignUpSignInPolicyId = "B2C_1_SiUpIn";
- });
- var provider = services.BuildServiceProvider();
-
- // Assert
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
- Assert.NotNull(azureADB2COptionsMonitor);
- var options = azureADB2COptionsMonitor.Get(AzureADB2CDefaults.BearerAuthenticationScheme);
- Assert.Equal(AzureADB2CDefaults.JwtBearerAuthenticationScheme, options.JwtBearerSchemeName);
- Assert.Equal("https://login.microsoftonline.com/tfp", options.Instance);
- Assert.Equal("ClientId", options.ClientId);
- Assert.Equal("domain.onmicrosoft.com", options.Domain);
- Assert.Equal("B2C_1_SiUpIn", options.DefaultPolicy);
-
- var bearerOptionsMonitor = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
- Assert.NotNull(bearerOptionsMonitor);
- var bearerOptions = bearerOptionsMonitor.Get(AzureADB2CDefaults.JwtBearerAuthenticationScheme);
- Assert.Equal("ClientId", bearerOptions.Audience);
- Assert.Equal($"https://login.microsoftonline.com/tfp/domain.onmicrosoft.com/B2C_1_SiUpIn/v2.0", bearerOptions.Authority);
- }
-
- [Fact]
- public void AddAzureADB2CBearer_CanOverrideJwtBearerOptionsConfiguration()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddAzureADB2CBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.SignUpSignInPolicyId = "B2C_1_SiUpIn";
- });
-
- services.Configure<JwtBearerOptions>(AzureADB2CDefaults.JwtBearerAuthenticationScheme, o =>
- {
- o.Audience = "http://overriden.com";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var bearerOptionsMonitor = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
- Assert.NotNull(bearerOptionsMonitor);
- var bearerOptions = bearerOptionsMonitor.Get(AzureADB2CDefaults.JwtBearerAuthenticationScheme);
- Assert.Equal("https://login.microsoftonline.com/domain.onmicrosoft.com/B2C_1_SiUpIn/v2.0", bearerOptions.Authority);
- Assert.Equal("http://overriden.com", bearerOptions.Audience);
- }
-
- [Fact]
- public void AddAzureADB2CBearer_RegisteringJwtBearerHasNoImpactOnAzureAAExtensions()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- // Act
- services.AddAuthentication()
- .AddJwtBearer()
- .AddAzureADB2CBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "domain.onmicrosoft.com";
- o.SignUpSignInPolicyId = "B2C_1_SiUpIn";
- });
-
- services.Configure<JwtBearerOptions>(AzureADB2CDefaults.JwtBearerAuthenticationScheme, o =>
- {
- o.Audience = "http://overriden.com";
- });
-
- var provider = services.BuildServiceProvider();
-
- // Assert
- var bearerOptionsMonitor = provider.GetService<IOptionsMonitor<JwtBearerOptions>>();
- Assert.NotNull(bearerOptionsMonitor);
- var bearerOptions = bearerOptionsMonitor.Get(AzureADB2CDefaults.JwtBearerAuthenticationScheme);
- Assert.Equal("https://login.microsoftonline.com/domain.onmicrosoft.com/B2C_1_SiUpIn/v2.0", bearerOptions.Authority);
- Assert.Equal("http://overriden.com", bearerOptions.Audience);
- }
-
- [Fact]
- public void AddAzureADB2CBearer_ThrowsForDuplicatedSchemes()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADB2CBearer(o => { })
- .AddAzureADB2CBearer(o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADB2COptionsMonitor.Get(AzureADB2CDefaults.AuthenticationScheme));
-
- Assert.Equal("A scheme with the name 'AzureADB2CBearer' was already added.", exception.Message);
- }
-
- [Fact]
- public void AddAzureADB2CBearer_ThrowsWhenBearerSchemeIsAlreadyInUse()
- {
- // Arrange
- var services = GenerateServicesForTest();
-
- services.AddAuthentication()
- .AddAzureADB2CBearer(o => { })
- .AddAzureADB2CBearer("Custom", AzureADB2CDefaults.JwtBearerAuthenticationScheme, o => { });
-
- var provider = services.BuildServiceProvider();
- var azureADB2COptionsMonitor = provider.GetService<IOptionsMonitor<AzureADB2COptions>>();
-
- var expectedMessage = $"The JSON Web Token Bearer scheme 'AzureADB2CJwtBearer' can't be associated with the Azure Active Directory B2C scheme 'Custom'. " +
- "The JSON Web Token Bearer scheme 'AzureADB2CJwtBearer' is already mapped to the Azure Active Directory B2C scheme 'AzureADB2CBearer'";
-
- // Act & Assert
- var exception = Assert.Throws<InvalidOperationException>(
- () => azureADB2COptionsMonitor.Get(AzureADB2CDefaults.AuthenticationScheme));
-
- Assert.Equal(expectedMessage, exception.Message);
- }
-
- private IServiceCollection GenerateServicesForTest()
- {
- var services = new ServiceCollection();
- services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
- services.AddSingleton<IConfiguration>(new ConfigurationManager());
- return services;
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs
deleted file mode 100644
index 5b9d701366..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs
+++ /dev/null
@@ -1,169 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.AspNetCore.Http;
-using Microsoft.IdentityModel.Protocols.OpenIdConnect;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-
-public class AzureADB2COpenIDConnectEventHandlersTests
-{
- [Fact]
- public async Task OnRedirectToIdentityProviderHandler_DoesNothingForTheDefaultPolicy()
- {
- // Arrange
- var handlers = new AzureADB2COpenIDConnectEventHandlers(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { SignUpSignInPolicyId = "B2C_1_SiUpIn" });
-
- var authenticationProperties = new AuthenticationProperties(new Dictionary<string, string>
- {
- [AzureADB2CDefaults.PolicyKey] = "B2C_1_SiUpIn"
- });
- var redirectContext = new RedirectContext(
- new DefaultHttpContext(),
- new AuthenticationScheme(AzureADB2CDefaults.AuthenticationScheme, "", typeof(OpenIdConnectHandler)),
- new OpenIdConnectOptions(),
- authenticationProperties)
- {
- ProtocolMessage = new OpenIdConnectMessage
- {
- Scope = OpenIdConnectScope.OpenId,
- ResponseType = OpenIdConnectResponseType.Code,
- IssuerAddress = "https://login.microsoftonline.com/tfp/domain.onmicrosoft.com/B2C_1_SiUpIn/v2.0"
- }
- };
-
- // Act
- await handlers.OnRedirectToIdentityProvider(redirectContext);
-
- // Assert
- Assert.Equal(OpenIdConnectScope.OpenId, redirectContext.ProtocolMessage.Scope);
- Assert.Equal(OpenIdConnectResponseType.Code, redirectContext.ProtocolMessage.ResponseType);
- Assert.Equal(
- "https://login.microsoftonline.com/tfp/domain.onmicrosoft.com/B2C_1_SiUpIn/v2.0",
- redirectContext.ProtocolMessage.IssuerAddress);
- Assert.True(authenticationProperties.Items.ContainsKey(AzureADB2CDefaults.PolicyKey));
- }
-
- [Fact]
- public async Task OnRedirectToIdentityProviderHandler_UpdatesRequestForOtherPolicies()
- {
- // Arrange
-
- var handlers = new AzureADB2COpenIDConnectEventHandlers(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { SignUpSignInPolicyId = "B2C_1_SiUpIn" });
-
- var authenticationProperties = new AuthenticationProperties(new Dictionary<string, string>
- {
- [AzureADB2CDefaults.PolicyKey] = "B2C_1_EP"
- });
- var redirectContext = new RedirectContext(
- new DefaultHttpContext(),
- new AuthenticationScheme(AzureADB2CDefaults.AuthenticationScheme, "", typeof(OpenIdConnectHandler)),
- new OpenIdConnectOptions(),
- authenticationProperties)
- {
- ProtocolMessage = new OpenIdConnectMessage
- {
- Scope = OpenIdConnectScope.OpenId,
- ResponseType = OpenIdConnectResponseType.Code,
- IssuerAddress = "https://login.microsoftonline.com/tfp/domain.onmicrosoft.com/B2C_1_EP/v2.0"
- }
- };
-
- // Act
- await handlers.OnRedirectToIdentityProvider(redirectContext);
-
- // Assert
- Assert.Equal(OpenIdConnectScope.OpenIdProfile, redirectContext.ProtocolMessage.Scope);
- Assert.Equal(OpenIdConnectResponseType.IdToken, redirectContext.ProtocolMessage.ResponseType);
- Assert.Equal(
- "https://login.microsoftonline.com/tfp/domain.onmicrosoft.com/b2c_1_ep/v2.0",
- redirectContext.ProtocolMessage.IssuerAddress);
- Assert.False(authenticationProperties.Items.ContainsKey(AzureADB2CDefaults.PolicyKey));
- }
-
- [Fact]
- public async Task OnRemoteError_HandlesResponseWhenTryingToResetPasswordFromTheLoginPage()
- {
- // Arrange
-
- var handlers = new AzureADB2COpenIDConnectEventHandlers(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { SignUpSignInPolicyId = "B2C_1_SiUpIn" });
-
- var remoteFailureContext = new RemoteFailureContext(
- new DefaultHttpContext(),
- new AuthenticationScheme(
- AzureADB2CDefaults.AuthenticationScheme,
- displayName: null,
- handlerType: typeof(OpenIdConnectHandler)),
- new OpenIdConnectOptions(),
- new OpenIdConnectProtocolException("AADB2C90118"));
-
- // Act
- await handlers.OnRemoteFailure(remoteFailureContext);
-
- // Assert
- Assert.Equal(StatusCodes.Status302Found, remoteFailureContext.Response.StatusCode);
- Assert.Equal("/AzureADB2C/Account/ResetPassword/AzureADB2C", remoteFailureContext.Response.Headers.Location);
- Assert.True(remoteFailureContext.Result.Handled);
- }
-
- [Fact]
- public async Task OnRemoteError_HandlesResponseWhenUserCancelsFlowFromTheAzureADB2CUserInterface()
- {
- // Arrange
-
- var handlers = new AzureADB2COpenIDConnectEventHandlers(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { SignUpSignInPolicyId = "B2C_1_SiUpIn" });
-
- var remoteFailureContext = new RemoteFailureContext(
- new DefaultHttpContext(),
- new AuthenticationScheme(
- AzureADB2CDefaults.AuthenticationScheme,
- displayName: null,
- handlerType: typeof(OpenIdConnectHandler)),
- new OpenIdConnectOptions(),
- new OpenIdConnectProtocolException("access_denied"));
-
- // Act
- await handlers.OnRemoteFailure(remoteFailureContext);
-
- // Assert
- Assert.Equal(StatusCodes.Status302Found, remoteFailureContext.Response.StatusCode);
- Assert.Equal("/", remoteFailureContext.Response.Headers.Location);
- Assert.True(remoteFailureContext.Result.Handled);
- }
-
- [Fact]
- public async Task OnRemoteError_HandlesResponseWhenErrorIsUnknown()
- {
- // Arrange
-
- var handlers = new AzureADB2COpenIDConnectEventHandlers(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { SignUpSignInPolicyId = "B2C_1_SiUpIn" });
-
- var remoteFailureContext = new RemoteFailureContext(
- new DefaultHttpContext(),
- new AuthenticationScheme(
- AzureADB2CDefaults.AuthenticationScheme,
- displayName: null,
- handlerType: typeof(OpenIdConnectHandler)),
- new OpenIdConnectOptions(),
- new OpenIdConnectProtocolException("some_other_error"));
-
- // Act
- await handlers.OnRemoteFailure(remoteFailureContext);
-
- // Assert
- Assert.Equal(StatusCodes.Status302Found, remoteFailureContext.Response.StatusCode);
- Assert.Equal("/AzureADB2C/Account/Error", remoteFailureContext.Response.Headers.Location);
- Assert.True(remoteFailureContext.Result.Handled);
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Controllers/AccountControllerTests.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Controllers/AccountControllerTests.cs
deleted file mode 100644
index 53034f30b7..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Controllers/AccountControllerTests.cs
+++ /dev/null
@@ -1,383 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Security.Claims;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.Abstractions;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.AspNetCore.Mvc.Routing;
-using Microsoft.AspNetCore.Routing;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Options;
-using Moq;
-
-namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2C.Controllers.Internal;
-
-public class AccountControllerTests
-{
- [Fact]
- public void SignInNoScheme_ChallengesAADAzureADB2CDefaultScheme()
- {
- // Arrange
- var controller = new AccountController(
- new OptionsMonitor(AzureADB2CDefaults.AuthenticationScheme, new AzureADB2COptions()
- {
- OpenIdConnectSchemeName = AzureADB2CDefaults.OpenIdScheme,
- CookieSchemeName = AzureADB2CDefaults.CookieScheme
- }))
- {
- Url = new TestUrlHelper("~/", "https://localhost/")
- };
-
- // Act
- var result = controller.SignIn(null);
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal(AzureADB2CDefaults.AuthenticationScheme, challengedScheme);
- Assert.NotNull(challenge.Properties.RedirectUri);
- Assert.Equal("https://localhost/", challenge.Properties.RedirectUri);
- }
-
- [Fact]
- public void SignInProvidedScheme_ChallengesCustomScheme()
- {
- // Arrange
- var controller = new AccountController(new OptionsMonitor("Custom", new AzureADB2COptions()));
- controller.Url = new TestUrlHelper("~/", "https://localhost/");
-
- // Act
- var result = controller.SignIn("Custom");
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal("Custom", challengedScheme);
- }
-
- [Fact]
- public void ResetPasswordNoScheme_ChallengesAADAzureADB2CDefaultSchemeWithResetPassworPolicyAsync()
- {
- // Arrange
- var controller = new AccountController(
- new OptionsMonitor(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { ResetPasswordPolicyId = "Reset" }))
- {
- Url = new TestUrlHelper("~/", "https://localhost/")
- };
- controller.ControllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal(AzureADB2CDefaults.AuthenticationScheme));
-
- // Act
- var result = controller.ResetPassword(null);
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal(AzureADB2CDefaults.AuthenticationScheme, challengedScheme);
- Assert.NotNull(challenge.Properties.RedirectUri);
- Assert.Equal("https://localhost/", challenge.Properties.RedirectUri);
- Assert.NotNull(challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- Assert.Equal("Reset", challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- }
-
- [Fact]
- public void ResetPasswordCustomScheme_ChallengesAADAzureADB2CDefaultSchemeWithResetPassworPolicyFromCustomSchemeAsync()
- {
- // Arrange
- var controller = new AccountController(
- new OptionsMonitor(
- "Custom",
- new AzureADB2COptions() { ResetPasswordPolicyId = "CustomReset" }))
- {
- Url = new TestUrlHelper("~/", "https://localhost/")
- };
- controller.ControllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal("Custom"));
-
- // Act
- var result = controller.ResetPassword("Custom");
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal("Custom", challengedScheme);
- Assert.NotNull(challenge.Properties.RedirectUri);
- Assert.Equal("https://localhost/", challenge.Properties.RedirectUri);
- Assert.NotNull(challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- Assert.Equal("CustomReset", challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- }
-
- [Fact]
- public async Task EditProfileNoScheme_ChallengesAADAzureADB2CCustomSchemeWithEditProfilePolicyAsync()
- {
- // Arrange
- var controller = new AccountController(
- new OptionsMonitor(
- AzureADB2CDefaults.AuthenticationScheme,
- new AzureADB2COptions() { EditProfilePolicyId = "EditProfile" }))
- {
- Url = new TestUrlHelper("~/", "https://localhost/")
- };
- controller.ControllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal(AzureADB2CDefaults.AuthenticationScheme));
-
- // Act
- var result = await controller.EditProfile(null);
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal(AzureADB2CDefaults.AuthenticationScheme, challengedScheme);
- Assert.NotNull(challenge.Properties.RedirectUri);
- Assert.Equal("https://localhost/", challenge.Properties.RedirectUri);
- Assert.NotNull(challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- Assert.Equal("EditProfile", challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- }
-
- private ClaimsPrincipal CreateAuthenticatedPrincipal(string scheme) =>
- new ClaimsPrincipal(new ClaimsIdentity(scheme));
-
- private static ControllerContext CreateControllerContext(ClaimsPrincipal principal = null)
- {
- principal = principal ?? new ClaimsPrincipal(new ClaimsIdentity());
- var mock = new Mock<IAuthenticationService>();
- mock.Setup(authS => authS.AuthenticateAsync(It.IsAny<HttpContext>(), It.IsAny<string>()))
- .ReturnsAsync<HttpContext, string, IAuthenticationService, AuthenticateResult>(
- (ctx, scheme) =>
- {
- if (principal.Identity.IsAuthenticated)
- {
- return AuthenticateResult.Success(new AuthenticationTicket(principal, scheme));
- }
- else
- {
- return AuthenticateResult.NoResult();
- }
- });
- return new ControllerContext()
- {
- HttpContext = new DefaultHttpContext()
- {
- RequestServices = new ServiceCollection()
- .AddSingleton(mock.Object)
- .BuildServiceProvider()
- }
- };
- }
-
- [Fact]
- public async Task EditProfileCustomScheme_ChallengesAADAzureADB2CCustomSchemeWithEditProfilePolicyFromCustomSchemeAsync()
- {
- // Arrange
- var controller = new AccountController(
- new OptionsMonitor(
- "Custom",
- new AzureADB2COptions() { EditProfilePolicyId = "CustomEditProfile" }))
- {
- Url = new TestUrlHelper("~/", "https://localhost/")
- };
- controller.ControllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal("Custom"));
- // Act
- var result = await controller.EditProfile("Custom");
-
- // Assert
- var challenge = Assert.IsAssignableFrom<ChallengeResult>(result);
- var challengedScheme = Assert.Single(challenge.AuthenticationSchemes);
- Assert.Equal("Custom", challengedScheme);
- Assert.NotNull(challenge.Properties.RedirectUri);
- Assert.Equal("https://localhost/", challenge.Properties.RedirectUri);
- Assert.NotNull(challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- Assert.Equal("CustomEditProfile", challenge.Properties.Items[AzureADB2CDefaults.PolicyKey]);
- }
-
- [Fact]
- public async Task SignOutNoScheme_SignsOutDefaultCookiesAndDefaultOpenIDConnectAADAzureADB2CSchemesAsync()
- {
- // Arrange
- var options = new AzureADB2COptions()
- {
- CookieSchemeName = AzureADB2CDefaults.CookieScheme,
- OpenIdConnectSchemeName = AzureADB2CDefaults.OpenIdScheme
- };
-
- var controllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal(AzureADB2CDefaults.AuthenticationScheme));
-
- var descriptor = new PageActionDescriptor()
- {
- AttributeRouteInfo = new AttributeRouteInfo()
- {
- Template = "/Account/SignedOut"
- }
- };
- var controller = new AccountController(new OptionsMonitor(AzureADB2CDefaults.AuthenticationScheme, options))
- {
- Url = new TestUrlHelper(
- controllerContext.HttpContext,
- new RouteData(),
- descriptor,
- "/Account/SignedOut",
- "https://localhost/Account/SignedOut"),
- ControllerContext = new ControllerContext()
- {
- HttpContext = controllerContext.HttpContext
- }
- };
- controller.Request.Scheme = "https";
-
- // Act
- var result = await controller.SignOut(null);
-
- // Assert
- var signOut = Assert.IsAssignableFrom<SignOutResult>(result);
- Assert.Equal(new[] { AzureADB2CDefaults.CookieScheme, AzureADB2CDefaults.OpenIdScheme }, signOut.AuthenticationSchemes);
- Assert.NotNull(signOut.Properties.RedirectUri);
- Assert.Equal("https://localhost/Account/SignedOut", signOut.Properties.RedirectUri);
- }
-
- [Fact]
- public async Task SignOutProvidedScheme_SignsOutCustomCookiesAndCustomOpenIDConnectAADAzureADB2CSchemesAsync()
- {
- // Arrange
- var options = new AzureADB2COptions()
- {
- CookieSchemeName = "Cookie",
- OpenIdConnectSchemeName = "OpenID"
- };
-
- var controllerContext = CreateControllerContext(
- CreateAuthenticatedPrincipal(AzureADB2CDefaults.AuthenticationScheme));
- var descriptor = new PageActionDescriptor()
- {
- AttributeRouteInfo = new AttributeRouteInfo()
- {
- Template = "/Account/SignedOut"
- }
- };
-
- var controller = new AccountController(new OptionsMonitor("Custom", options))
- {
- Url = new TestUrlHelper(
- controllerContext.HttpContext,
- new RouteData(),
- descriptor,
- "/Account/SignedOut",
- "https://localhost/Account/SignedOut"),
- ControllerContext = new ControllerContext()
- {
- HttpContext = controllerContext.HttpContext
- }
- };
- controller.Request.Scheme = "https";
-
- // Act
- var result = await controller.SignOut("Custom");
-
- // Assert
- var signOut = Assert.IsAssignableFrom<SignOutResult>(result);
- Assert.Equal(new[] { "Cookie", "OpenID" }, signOut.AuthenticationSchemes);
- }
-
- private class OptionsMonitor : IOptionsMonitor<AzureADB2COptions>
- {
- public OptionsMonitor(string scheme, AzureADB2COptions options)
- {
- Scheme = scheme;
- Options = options;
- }
-
- public AzureADB2COptions CurrentValue => throw new NotImplementedException();
-
- public string Scheme { get; }
- public AzureADB2COptions Options { get; }
-
- public AzureADB2COptions Get(string name)
- {
- if (name == Scheme)
- {
- return Options;
- }
-
- return null;
- }
-
- public IDisposable OnChange(Action<AzureADB2COptions, string> listener)
- {
- throw new NotImplementedException();
- }
- }
-
- private class TestUrlHelper : IUrlHelper
- {
- public TestUrlHelper(string contentPath, string url)
- {
- ContentPath = contentPath;
- Url = url;
- }
-
- public TestUrlHelper(
- HttpContext context,
- RouteData routeData,
- ActionDescriptor descriptor,
- string contentPath,
- string url)
- {
- HttpContext = context;
- RouteData = routeData;
- ActionDescriptor = descriptor;
- ContentPath = contentPath;
- Url = url;
- }
-
- public ActionContext ActionContext =>
- new ActionContext(HttpContext, RouteData, ActionDescriptor);
-
- public string ContentPath { get; }
- public string Url { get; }
- public HttpContext HttpContext { get; }
- public RouteData RouteData { get; }
- public ActionDescriptor ActionDescriptor { get; }
-
- public string Action(UrlActionContext actionContext)
- {
- throw new NotImplementedException();
- }
-
- public string Content(string contentPath)
- {
- if (ContentPath == contentPath)
- {
- return Url;
- }
- return "";
- }
-
- public bool IsLocalUrl(string url)
- {
- throw new NotImplementedException();
- }
-
- public string Link(string routeName, object values)
- {
- throw new NotImplementedException();
- }
-
- public string RouteUrl(UrlRouteContext routeContext)
- {
- if (routeContext.Values is RouteValueDictionary dicionary &&
- dicionary.TryGetValue("page", out var page) &&
- page is string pagePath &&
- ContentPath == pagePath)
- {
- return Url;
- }
-
- return null;
- }
- }
-}
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj
deleted file mode 100644
index 65c330077b..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
- <RootNamespace>Microsoft.AspNetCore.Authentication.AzureADB2C.UI</RootNamespace>
- <!-- This package will be deprecated -->
- <NoWarn>$(NoWarn);CS0618</NoWarn>
- </PropertyGroup>
-
- <ItemGroup>
- <Content Include="xunit.runner.json">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- </ItemGroup>
-
- <ItemGroup>
- <Reference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" />
- </ItemGroup>
-
-</Project>
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/xunit.runner.json b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/xunit.runner.json
deleted file mode 100644
index 42db7ef95e..0000000000
--- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/xunit.runner.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "shadowCopy": false
-}
diff --git a/src/Azure/AzureAD/Directory.Build.props b/src/Azure/AzureAD/Directory.Build.props
deleted file mode 100644
index 1bfcce80a3..0000000000
--- a/src/Azure/AzureAD/Directory.Build.props
+++ /dev/null
@@ -1,7 +0,0 @@
-<Project>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
-
- <PropertyGroup>
- <WarningsNotAsErrors>xUnit1026:$(WarningsNotAsErrors)</WarningsNotAsErrors>
- </PropertyGroup>
-</Project>
diff --git a/src/Azure/AzureAD/README.md b/src/Azure/AzureAD/README.md
deleted file mode 100644
index 6086294419..0000000000
--- a/src/Azure/AzureAD/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Azure Active Directory Integration
-==================================
-
-ASP.NET Core Azure Active Directory Integration provides seamless authentication integration with different Azure Active Directory services like Azure Active Directory and Azure Active Directory B2C for ASP.NET Core applications. \ No newline at end of file
diff --git a/src/Azure/AzureAD/test/FunctionalTests/ApiAuthenticationTests.cs b/src/Azure/AzureAD/test/FunctionalTests/ApiAuthenticationTests.cs
deleted file mode 100644
index 4386d27d71..0000000000
--- a/src/Azure/AzureAD/test/FunctionalTests/ApiAuthenticationTests.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Net;
-using AzureAD.WebSite;
-using Microsoft.AspNetCore.Authentication.AzureAD.UI;
-using Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.AspNetCore.Mvc.Testing;
-using Microsoft.AspNetCore.TestHost;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.IdentityModel.Protocols.OpenIdConnect;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests;
-
-public class ApiAuthenticationTests : IClassFixture<WebApplicationFactory<Startup>>
-{
- public ApiAuthenticationTests(WebApplicationFactory<Startup> fixture)
- {
- Factory = fixture;
- }
-
- public WebApplicationFactory<Startup> Factory { get; }
-
- [Fact]
- public async Task BearerAzureAD_Challenges_UnauthorizedRequests()
- {
- // Arrange
- var client = Factory.WithWebHostBuilder(builder => builder.ConfigureTestServices(
- services =>
- {
- services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
- .AddAzureADBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.Domain = "test.onmicrosoft.com";
- o.ClientId = "ClientId";
- o.TenantId = "TenantId";
- });
-
- services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, o =>
- {
- o.Configuration = new OpenIdConnectConfiguration()
- {
- Issuer = "https://www.example.com",
- };
- });
- })).CreateDefaultClient();
-
- // Act
- var response = await client.GetAsync("/api/get");
-
- // Assert
- Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
- }
-
- [Fact]
- public async Task BearerAzureADB2C_Challenges_UnauthorizedRequests()
- {
- // Arrange
- var client = Factory.WithWebHostBuilder(builder => builder.ConfigureTestServices(
- services =>
- {
- services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
- .AddAzureADB2CBearer(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.Domain = "test.onmicrosoft.com";
- o.ClientId = "ClientId";
- o.SignUpSignInPolicyId = "B2c_1_SiSu";
- });
-
- services.Configure<JwtBearerOptions>(AzureADB2CDefaults.JwtBearerAuthenticationScheme, o =>
- {
- o.Configuration = new OpenIdConnectConfiguration()
- {
- Issuer = "https://www.example.com",
- };
- });
- })).CreateDefaultClient();
-
- // Act
- var response = await client.GetAsync("/api/get");
-
- // Assert
- Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
- }
-}
diff --git a/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj b/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj
deleted file mode 100644
index 1fd12016e2..0000000000
--- a/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
- <!-- This test will be deprecated -->
- <NoWarn>$(NoWarn);CS0618</NoWarn>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference Include="..\testassets\AzureAD.WebSite\AzureAD.WebSite.csproj" />
- </ItemGroup>
-
- <ItemGroup>
- <None Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
- </ItemGroup>
-
- <ItemGroup>
- <Reference Include="Microsoft.AspNetCore.Mvc.Testing" />
- </ItemGroup>
-
- <Import Project="$(MvcTestingTargets)" Condition="'$(MvcTestingTargets)' != ''" />
-</Project>
diff --git a/src/Azure/AzureAD/test/FunctionalTests/WebAuthenticationTests.cs b/src/Azure/AzureAD/test/FunctionalTests/WebAuthenticationTests.cs
deleted file mode 100644
index 77f3da9701..0000000000
--- a/src/Azure/AzureAD/test/FunctionalTests/WebAuthenticationTests.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Net;
-using AzureAD.WebSite;
-using Microsoft.AspNetCore.Authentication.AzureAD.UI;
-using Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
-using Microsoft.AspNetCore.Authentication.OpenIdConnect;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc.Authorization;
-using Microsoft.AspNetCore.Mvc.Testing;
-using Microsoft.AspNetCore.TestHost;
-using Microsoft.AspNetCore.WebUtilities;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Primitives;
-using Microsoft.IdentityModel.Protocols.OpenIdConnect;
-
-namespace Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests;
-
-public class WebAuthenticationTests : IClassFixture<WebApplicationFactory<Startup>>
-{
- public WebAuthenticationTests(WebApplicationFactory<Startup> fixture)
- {
- Factory = fixture;
- }
-
- public WebApplicationFactory<Startup> Factory { get; }
-
- public static TheoryData<string> NotAddedEndpoints =>
- new TheoryData<string>()
- {
- "/AzureAD/Account/SignIn",
- "/AzureAD/Account/SignOut",
- "/AzureADB2C/Account/SignIn",
- "/AzureADB2C/Account/ResetPassword",
- "/AzureADB2C/Account/EditProfile",
- "/AzureADB2C/Account/SignOut",
- };
-
- [Theory]
- [MemberData(nameof(NotAddedEndpoints))]
- public async Task Endpoints_NotAvailable_When_Authentication_NotAdded(string endpoint)
- {
- // Act & Assert
- var response = await Factory.CreateDefaultClient().GetAsync(endpoint);
-
- // Assert
- Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
- }
-
- public static TheoryData<string, HttpStatusCode> AddedEndpointsStatusCodesAD =>
- new TheoryData<string, HttpStatusCode>()
- {
- { "/AzureAD/Account/AccessDenied", HttpStatusCode.OK },
- { "/AzureAD/Account/Error", HttpStatusCode.OK },
- { "/AzureAD/Account/SignedOut", HttpStatusCode.OK },
- { "/AzureAD/Account/SignIn", HttpStatusCode.Redirect },
- { "/AzureAD/Account/SignOut", HttpStatusCode.Redirect },
- };
-
- [Theory]
- [MemberData(nameof(AddedEndpointsStatusCodesAD))]
- public async Task ADEndpoints_AreAvailable_When_Authentication_IsAdded(string endpoint, HttpStatusCode expectedStatusCode)
- {
- // Act & Assert
- var client = Factory.WithWebHostBuilder(builder => builder.ConfigureTestServices(
- services =>
- {
- services
- .AddAuthentication(AzureADDefaults.AuthenticationScheme)
- .AddAzureAD(o =>
- {
- o.Instance = "https://login.microsoftonline.com/";
- o.Domain = "test.onmicrosoft.com";
- o.ClientId = "ClientId";
- o.TenantId = "TenantId";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, o =>
- {
- o.Configuration = new OpenIdConnectConfiguration()
- {
- Issuer = "https://www.example.com",
- TokenEndpoint = "https://www.example.com/token",
- AuthorizationEndpoint = "https://www.example.com/authorize",
- EndSessionEndpoint = "https://www.example.com/logout"
- };
- });
-
- services.AddMvc(o => o.Filters.Add(
- new AuthorizeFilter(new AuthorizationPolicyBuilder(new[] { AzureADDefaults.AuthenticationScheme })
- .RequireAuthenticatedUser().Build())));
- })).CreateDefaultClient();
-
- var response = await client.GetAsync(endpoint);
-
- // Assert
- Assert.Equal(expectedStatusCode, response.StatusCode);
- }
-
- public static TheoryData<string, HttpStatusCode> AddedEndpointsStatusCodesADB2C =>
- new TheoryData<string, HttpStatusCode>()
- {
- { "/AzureADB2C/Account/AccessDenied", HttpStatusCode.OK },
- { "/AzureADB2C/Account/Error", HttpStatusCode.OK },
- { "/AzureADB2C/Account/SignedOut", HttpStatusCode.OK },
- { "/AzureADB2C/Account/SignIn", HttpStatusCode.Redirect },
- { "/AzureADB2C/Account/ResetPassword", HttpStatusCode.Redirect },
- { "/AzureADB2C/Account/EditProfile", HttpStatusCode.Redirect },
- { "/AzureADB2C/Account/SignOut", HttpStatusCode.Redirect }
- };
-
- [Theory]
- [MemberData(nameof(AddedEndpointsStatusCodesADB2C))]
- public async Task ADB2CEndpoints_AreAvailable_When_Authentication_IsAdded(string endpoint, HttpStatusCode expectedStatusCode)
- {
- // Act & Assert
- var client = Factory.WithWebHostBuilder(builder => builder.ConfigureTestServices(
- services =>
- {
- services
- .AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
- .AddAzureADB2C(o =>
- {
- o.Instance = "https://login.microsoftonline.com/tfp/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "test.onmicrosoft.com";
- o.SignUpSignInPolicyId = "B2C_1_SiUpIn";
- o.ResetPasswordPolicyId = "B2C_1_SSPR";
- o.EditProfilePolicyId = "B2C_1_SiPe";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, o =>
- {
- o.Configuration = new OpenIdConnectConfiguration()
- {
- Issuer = "https://www.example.com",
- TokenEndpoint = "https://www.example.com/token",
- AuthorizationEndpoint = "https://www.example.com/authorize",
- EndSessionEndpoint = "https://www.example.com/logout"
- };
- });
-
- services.AddMvc(o => o.Filters.Add(
- new AuthorizeFilter(new AuthorizationPolicyBuilder(new[] { AzureADB2CDefaults.AuthenticationScheme })
- .RequireAuthenticatedUser().Build())));
- })).CreateDefaultClient();
-
- var response = await client.GetAsync(endpoint);
-
- // Assert
- Assert.Equal(expectedStatusCode, response.StatusCode);
- }
-
- [Fact]
- public async Task ADB2C_EndToEnd_PasswordReset()
- {
- var client = Factory.WithWebHostBuilder(builder => builder.ConfigureTestServices(
- services =>
- {
- services
- .AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
- .AddAzureADB2C(o =>
- {
- o.Instance = "https://login.microsoftonline.com/tfp/";
- o.ClientId = "ClientId";
- o.CallbackPath = "/signin-oidc";
- o.Domain = "test.onmicrosoft.com";
- o.SignUpSignInPolicyId = "B2C_1_SiUpIn";
- o.ResetPasswordPolicyId = "B2C_1_SSPR";
- o.EditProfilePolicyId = "B2C_1_SiPe";
- });
-
- services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, o =>
- {
- o.Configuration = new OpenIdConnectConfiguration()
- {
- Issuer = "https://www.example.com",
- TokenEndpoint = "https://www.example.com/token",
- AuthorizationEndpoint = "https://www.example.com/authorize",
- EndSessionEndpoint = "https://www.example.com/logout"
- };
- // CookieContainer doesn't allow cookies from other paths
- o.CorrelationCookie.Path = "/";
- o.NonceCookie.Path = "/";
- });
-
- services.AddMvc(o => o.Filters.Add(
- new AuthorizeFilter(new AuthorizationPolicyBuilder(new[] { AzureADB2CDefaults.AuthenticationScheme })
- .RequireAuthenticatedUser().Build())));
- })).CreateClient(new WebApplicationFactoryClientOptions() { AllowAutoRedirect = false });
-
- var response = await client.GetAsync("/api/get");
- Assert.Equal(HttpStatusCode.Redirect, response.StatusCode);
-
- var location = response.Headers.Location;
- Assert.StartsWith("https://www.example.com/authorize", location.AbsoluteUri);
- var queryString = location.Query;
- var query = QueryHelpers.ParseQuery(queryString);
- var state = query["state"];
- Assert.False(StringValues.IsNullOrEmpty(state));
-
- // Mock Authorization response
- response = await client.GetAsync($"/signin-oidc?error=access_denied&error_description=AADB2C90118&state={state}");
-
- Assert.Equal(HttpStatusCode.Redirect, response.StatusCode);
- Assert.Equal("/AzureADB2C/Account/ResetPassword/AzureADB2C", response.Headers.Location.OriginalString);
- }
-}
diff --git a/src/Azure/AzureAD/test/FunctionalTests/xunit.runner.json b/src/Azure/AzureAD/test/FunctionalTests/xunit.runner.json
deleted file mode 100644
index 42db7ef95e..0000000000
--- a/src/Azure/AzureAD/test/FunctionalTests/xunit.runner.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "shadowCopy": false
-}
diff --git a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/AzureAD.WebSite.csproj b/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/AzureAD.WebSite.csproj
deleted file mode 100644
index c00bf75a2e..0000000000
--- a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/AzureAD.WebSite.csproj
+++ /dev/null
@@ -1,16 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
- <PropertyGroup>
- <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
- </PropertyGroup>
-
- <ItemGroup>
- <Reference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" />
- <Reference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" />
- <Reference Include="Microsoft.AspNetCore.Authorization" />
- <Reference Include="Microsoft.AspNetCore.DataProtection.Extensions" />
- <Reference Include="Microsoft.AspNetCore" />
- <Reference Include="Microsoft.AspNetCore.Mvc" />
- </ItemGroup>
-
-</Project>
diff --git a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Controllers/TestController.cs b/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Controllers/TestController.cs
deleted file mode 100644
index 824605c321..0000000000
--- a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Controllers/TestController.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-
-namespace AzureAD.WebSite.Controllers;
-
-public class TestController : Controller
-{
- [Authorize]
- [HttpGet("/api/get")]
- public IActionResult Get() => Ok();
-}
diff --git a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Program.cs b/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Program.cs
deleted file mode 100644
index b1d9112629..0000000000
--- a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Program.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.AspNetCore;
-
-namespace AzureAD.WebSite;
-
-public class Program
-{
- public static void Main(string[] args)
- {
- CreateWebHostBuilder(args).Build().Run();
- }
-
- public static IWebHostBuilder CreateWebHostBuilder(string[] args)
- {
- return WebHost.CreateDefaultBuilder()
- .UseStartup<Startup>();
- }
-}
diff --git a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Properties/launchSettings.json b/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Properties/launchSettings.json
deleted file mode 100644
index 7866216261..0000000000
--- a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Properties/launchSettings.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "profiles": {
- "AzureAD.WebSite": {
- "commandName": "Project",
- "launchBrowser": true,
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- },
- "applicationUrl": "https://localhost:55927;http://localhost:55928"
- }
- }
-} \ No newline at end of file
diff --git a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Startup.cs b/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Startup.cs
deleted file mode 100644
index 72de5fc3b9..0000000000
--- a/src/Azure/AzureAD/test/testassets/AzureAD.WebSite/Startup.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace AzureAD.WebSite;
-
-public class Startup
-{
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddMvc();
- }
-
- public void Configure(IApplicationBuilder app)
- {
- app.UseRouting();
-
- app.UseAuthentication();
- app.UseAuthorization();
-
- app.UseEndpoints(endpoints =>
- {
- endpoints.MapDefaultControllerRoute();
- endpoints.MapRazorPages();
- });
- }
-}
diff --git a/src/Components/Components/src/NavigationManager.cs b/src/Components/Components/src/NavigationManager.cs
index 2d2048b031..03c62d143c 100644
--- a/src/Components/Components/src/NavigationManager.cs
+++ b/src/Components/Components/src/NavigationManager.cs
@@ -44,7 +44,6 @@ public abstract class NavigationManager
// The URI. Always represented an absolute URI.
private string? _uri;
-
private bool _isInitialized;
/// <summary>
@@ -93,6 +92,14 @@ public abstract class NavigationManager
}
/// <summary>
+ /// Gets or sets the state associated with the current navigation.
+ /// </summary>
+ /// <remarks>
+ /// Setting <see cref="HistoryEntryState" /> will not trigger the <see cref="LocationChanged" /> event.
+ /// </remarks>
+ public string? HistoryEntryState { get; protected set; }
+
+ /// <summary>
/// Navigates to the specified URI.
/// </summary>
/// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
@@ -261,7 +268,12 @@ public abstract class NavigationManager
{
try
{
- _locationChanged?.Invoke(this, new LocationChangedEventArgs(_uri!, isInterceptedLink));
+ _locationChanged?.Invoke(
+ this,
+ new LocationChangedEventArgs(_uri!, isInterceptedLink)
+ {
+ HistoryEntryState = HistoryEntryState
+ });
}
catch (Exception ex)
{
diff --git a/src/Components/Components/src/NavigationOptions.cs b/src/Components/Components/src/NavigationOptions.cs
index e7423783af..0e501b1c49 100644
--- a/src/Components/Components/src/NavigationOptions.cs
+++ b/src/Components/Components/src/NavigationOptions.cs
@@ -18,4 +18,9 @@ public readonly struct NavigationOptions
/// If false, appends the new entry to the history stack.
/// </summary>
public bool ReplaceHistoryEntry { get; init; }
+
+ /// <summary>
+ /// Gets or sets the state to append to the history entry.
+ /// </summary>
+ public string? HistoryEntryState { get; init; }
}
diff --git a/src/Components/Components/src/PublicAPI.Unshipped.txt b/src/Components/Components/src/PublicAPI.Unshipped.txt
index 0c1b058a6f..f04da00a90 100644
--- a/src/Components/Components/src/PublicAPI.Unshipped.txt
+++ b/src/Components/Components/src/PublicAPI.Unshipped.txt
@@ -1,5 +1,9 @@
#nullable enable
Microsoft.AspNetCore.Components.NavigationManager.AddLocationChangingHandler(Microsoft.AspNetCore.Components.Routing.IHandleLocationChanging! locationChangingHandler) -> void
+Microsoft.AspNetCore.Components.NavigationManager.HistoryEntryState.get -> string?
+Microsoft.AspNetCore.Components.NavigationManager.HistoryEntryState.set -> void
+Microsoft.AspNetCore.Components.NavigationOptions.HistoryEntryState.get -> string?
+Microsoft.AspNetCore.Components.NavigationOptions.HistoryEntryState.init -> void
Microsoft.AspNetCore.Components.NavigationManager.NotifyLocationChanging(string! uri, bool isNavigationIntercepted, bool forceLoad) -> System.Threading.Tasks.ValueTask<bool>
Microsoft.AspNetCore.Components.NavigationManager.RemoveLocationChangingHandler(Microsoft.AspNetCore.Components.Routing.IHandleLocationChanging! locationChangingHandler) -> bool
Microsoft.AspNetCore.Components.NavigationManager.UpdateHasLocationChangingHandlers() -> void
@@ -10,6 +14,7 @@ Microsoft.AspNetCore.Components.Routing.InternalNavigationLock
Microsoft.AspNetCore.Components.Routing.InternalNavigationLock.InternalNavigationLock() -> void
Microsoft.AspNetCore.Components.Routing.InternalNavigationLock.OnLocationChanging.get -> Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.Routing.LocationChangingContext!>
Microsoft.AspNetCore.Components.Routing.InternalNavigationLock.OnLocationChanging.set -> void
+Microsoft.AspNetCore.Components.Routing.LocationChangedEventArgs.HistoryEntryState.get -> string?
Microsoft.AspNetCore.Components.Routing.LocationChangingContext
Microsoft.AspNetCore.Components.Routing.LocationChangingContext.Cancel() -> void
Microsoft.AspNetCore.Components.Routing.LocationChangingContext.CancellationToken.get -> System.Threading.CancellationToken
diff --git a/src/Components/Components/src/Routing/LocationChangedEventArgs.cs b/src/Components/Components/src/Routing/LocationChangedEventArgs.cs
index abb9fbd002..7b865c4bc0 100644
--- a/src/Components/Components/src/Routing/LocationChangedEventArgs.cs
+++ b/src/Components/Components/src/Routing/LocationChangedEventArgs.cs
@@ -28,4 +28,9 @@ public class LocationChangedEventArgs : EventArgs
/// Gets a value that determines if navigation for the link was intercepted.
/// </summary>
public bool IsNavigationIntercepted { get; }
+
+ /// <summary>
+ /// Gets the state associated with the current history entry.
+ /// </summary>
+ public string? HistoryEntryState { get; internal init; }
}
diff --git a/src/Components/Components/test/Routing/RouterTest.cs b/src/Components/Components/test/Routing/RouterTest.cs
index d97a2800f6..01323d2568 100644
--- a/src/Components/Components/test/Routing/RouterTest.cs
+++ b/src/Components/Components/test/Routing/RouterTest.cs
@@ -203,7 +203,7 @@ public class RouterTest
public TestNavigationManager() =>
Initialize("https://www.example.com/subdir/", "https://www.example.com/subdir/jan");
- public void NotifyLocationChanged(string uri, bool intercepted)
+ public void NotifyLocationChanged(string uri, bool intercepted, string state = null)
{
Uri = uri;
NotifyLocationChanged(intercepted);
diff --git a/src/Components/Server/src/Circuits/CircuitHost.cs b/src/Components/Server/src/Circuits/CircuitHost.cs
index 7a21f253c2..671ce9b431 100644
--- a/src/Components/Server/src/Circuits/CircuitHost.cs
+++ b/src/Components/Server/src/Circuits/CircuitHost.cs
@@ -493,7 +493,7 @@ internal partial class CircuitHost : IAsyncDisposable
// OnLocationChangedAsync is used in a fire-and-forget context, so it's responsible for its own
// error handling.
- public async Task OnLocationChangedAsync(string uri, bool intercepted)
+ public async Task OnLocationChangedAsync(string uri, string state, bool intercepted)
{
AssertInitialized();
AssertNotDisposed();
@@ -504,7 +504,7 @@ internal partial class CircuitHost : IAsyncDisposable
{
Log.LocationChange(_logger, uri, CircuitId);
var navigationManager = (RemoteNavigationManager)Services.GetRequiredService<NavigationManager>();
- navigationManager.NotifyLocationChanged(uri, intercepted);
+ navigationManager.NotifyLocationChanged(uri, state, intercepted);
Log.LocationChangeSucceeded(_logger, uri, CircuitId);
});
}
diff --git a/src/Components/Server/src/Circuits/RemoteNavigationManager.cs b/src/Components/Server/src/Circuits/RemoteNavigationManager.cs
index f4a9750842..af7f359266 100644
--- a/src/Components/Server/src/Circuits/RemoteNavigationManager.cs
+++ b/src/Components/Server/src/Circuits/RemoteNavigationManager.cs
@@ -58,11 +58,12 @@ internal sealed partial class RemoteNavigationManager : NavigationManager, IHost
UpdateHasLocationChangingHandlers();
}
- public void NotifyLocationChanged(string uri, bool intercepted)
+ public void NotifyLocationChanged(string uri, string state, bool intercepted)
{
Log.ReceivedLocationChangedNotification(_logger, uri, intercepted);
Uri = uri;
+ HistoryEntryState = state;
NotifyLocationChanged(intercepted);
}
diff --git a/src/Components/Server/src/ComponentHub.cs b/src/Components/Server/src/ComponentHub.cs
index e464c7a260..afb6080821 100644
--- a/src/Components/Server/src/ComponentHub.cs
+++ b/src/Components/Server/src/ComponentHub.cs
@@ -285,7 +285,7 @@ internal sealed partial class ComponentHub : Hub
_ = circuitHost.OnRenderCompletedAsync(renderId, errorMessageOrNull);
}
- public async ValueTask OnLocationChanged(string uri, bool intercepted)
+ public async ValueTask OnLocationChanged(string uri, string? state, bool intercepted)
{
var circuitHost = await GetActiveCircuitAsync();
if (circuitHost == null)
@@ -293,7 +293,7 @@ internal sealed partial class ComponentHub : Hub
return;
}
- _ = circuitHost.OnLocationChangedAsync(uri, intercepted);
+ _ = circuitHost.OnLocationChangedAsync(uri, state, intercepted);
}
public async ValueTask<bool> OnLocationChanging(string uri, bool intercepted)
diff --git a/src/Components/Server/test/Circuits/ComponentHubTest.cs b/src/Components/Server/test/Circuits/ComponentHubTest.cs
index 9bbd9b17ff..04ad987c95 100644
--- a/src/Components/Server/test/Circuits/ComponentHubTest.cs
+++ b/src/Components/Server/test/Circuits/ComponentHubTest.cs
@@ -79,7 +79,7 @@ public class ComponentHubTest
{
var (mockClientProxy, hub) = InitializeComponentHub();
- await hub.OnLocationChanged("https://localhost:5000/subdir/page", false);
+ await hub.OnLocationChanged("https://localhost:5000/subdir/page", null, false);
var errorMessage = "Circuit not initialized.";
mockClientProxy.Verify(m => m.SendCoreAsync("JS.Error", new[] { errorMessage }, It.IsAny<CancellationToken>()), Times.Once());
diff --git a/src/Components/Web.JS/src/Boot.Server.ts b/src/Components/Web.JS/src/Boot.Server.ts
index a3da831f0f..11291ce858 100644
--- a/src/Components/Web.JS/src/Boot.Server.ts
+++ b/src/Components/Web.JS/src/Boot.Server.ts
@@ -60,8 +60,8 @@ async function boot(userOptions?: Partial<CircuitStartOptions>): Promise<void> {
const circuit = new CircuitDescriptor(components, appState || '');
// Configure navigation via SignalR
- Blazor._internal.navigationManager.listenForNavigationEvents((uri: string, intercepted: boolean): Promise<void> => {
- return connection.send('OnLocationChanged', uri, intercepted);
+ Blazor._internal.navigationManager.listenForNavigationEvents((uri: string, state: string | undefined, intercepted: boolean): Promise<void> => {
+ return connection.send('OnLocationChanged', uri, state, intercepted);
}, (uri: string, intercepted: boolean): Promise<boolean> => {
return connection.invoke('OnLocationChanging', uri, intercepted);
});
diff --git a/src/Components/Web.JS/src/Boot.WebAssembly.ts b/src/Components/Web.JS/src/Boot.WebAssembly.ts
index 62f0950f8c..38bf200895 100644
--- a/src/Components/Web.JS/src/Boot.WebAssembly.ts
+++ b/src/Components/Web.JS/src/Boot.WebAssembly.ts
@@ -79,11 +79,12 @@ async function boot(options?: Partial<WebAssemblyStartOptions>): Promise<void> {
Blazor._internal.navigationManager.getUnmarshalledBaseURI = () => BINDING.js_string_to_mono_string(getBaseUri());
Blazor._internal.navigationManager.getUnmarshalledLocationHref = () => BINDING.js_string_to_mono_string(getLocationHref());
- Blazor._internal.navigationManager.listenForNavigationEvents(async (uri: string, intercepted: boolean): Promise<void> => {
+ Blazor._internal.navigationManager.listenForNavigationEvents(async (uri: string, state: string | undefined, intercepted: boolean): Promise<void> => {
await DotNet.invokeMethodAsync(
'Microsoft.AspNetCore.Components.WebAssembly',
'NotifyLocationChanged',
uri,
+ state,
intercepted
);
}, async (uri: string, intercepted: boolean): Promise<boolean> => {
diff --git a/src/Components/Web.JS/src/Platform/WebView/WebViewIpcSender.ts b/src/Components/Web.JS/src/Platform/WebView/WebViewIpcSender.ts
index 1c3f6f4f26..d959733317 100644
--- a/src/Components/Web.JS/src/Platform/WebView/WebViewIpcSender.ts
+++ b/src/Components/Web.JS/src/Platform/WebView/WebViewIpcSender.ts
@@ -36,8 +36,8 @@ function base64EncodeByteArray(data: Uint8Array) {
return dataBase64Encoded;
}
-export function sendLocationChanged(uri: string, intercepted: boolean): Promise<void> {
- send('OnLocationChanged', uri, intercepted);
+export function sendLocationChanged(uri: string, state: string | undefined, intercepted: boolean): Promise<void> {
+ send('OnLocationChanged', uri, state, intercepted);
return Promise.resolve(); // Like in Blazor Server, we only issue the notification here - there's no need to wait for a response
}
diff --git a/src/Components/Web.JS/src/Services/NavigationManager.ts b/src/Components/Web.JS/src/Services/NavigationManager.ts
index 08f4f47586..88a67a0b1d 100644
--- a/src/Components/Web.JS/src/Services/NavigationManager.ts
+++ b/src/Components/Web.JS/src/Services/NavigationManager.ts
@@ -12,7 +12,7 @@ let currentHistoryIndex = 0;
let navigationPromptOptions: NavigationPromptOptions | null = null;
// Will be initialized once someone registers
-let notifyLocationChangedCallback: ((uri: string, intercepted: boolean) => Promise<void>) | null = null;
+let notifyLocationChangedCallback: ((uri: string, state: string | undefined, intercepted: boolean) => Promise<void>) | null = null;
let notifyLocationChangingCallback: ((uri: string, intercepted: boolean) => Promise<boolean>) | null = null;
let popStateCallback: ((state: PopStateEvent) => Promise<void> | void) = onBrowserInitiatedPopState;
@@ -29,7 +29,7 @@ export const internalFunctions = {
getLocationHref: (): string => location.href,
};
-function listenForNavigationEvents(locationChangedCallback: (uri: string, intercepted: boolean) => Promise<void>, locationChangingCallback: (uri: string, intercepted: boolean) => Promise<boolean>): void {
+function listenForNavigationEvents(locationChangedCallback: (uri: string, state: string | undefined, intercepted: boolean) => Promise<void>, locationChangingCallback: (uri: string, intercepted: boolean) => Promise<boolean>): void {
notifyLocationChangedCallback = locationChangedCallback;
notifyLocationChangingCallback = locationChangingCallback;
@@ -135,7 +135,7 @@ export function navigateTo(uri: string, forceLoadOrOptions: NavigationOptions |
: { forceLoad: forceLoadOrOptions, replaceHistoryEntry: replaceIfUsingOldOverload };
if (!options.forceLoad && isWithinBaseUriSpace(absoluteUri)) {
- performInternalNavigation(absoluteUri, false, options.replaceHistoryEntry);
+ performInternalNavigation(absoluteUri, false, options.replaceHistoryEntry, options.historyEntryState);
} else {
// For external navigation, we work in terms of the originally-supplied uri string,
// not the computed absoluteUri. This is in case there are some special URI formats
@@ -160,7 +160,7 @@ function performExternalNavigation(uri: string, replace: boolean) {
}
}
-function performInternalNavigation(absoluteInternalHref: string, interceptedLink: boolean, replace: boolean) {
+function performInternalNavigation(absoluteInternalHref: string, interceptedLink: boolean, replace: boolean, state: string | undefined = undefined) {
// By this point, the "location changing" event has had its opportunity to cancel the navigation,
// but now we need to display the navigation prompt to the user if necessary.
const navigationCanceled = displayNavigationPromptIfEnabled();
@@ -175,11 +175,16 @@ function performInternalNavigation(absoluteInternalHref: string, interceptedLink
// we render the new page. As a best approximation, wait until the next batch.
resetScrollAfterNextBatch();
+ const stateEntry = {
+ userState: state,
+ index: currentHistoryIndex,
+ };
+
if (!replace) {
currentHistoryIndex++;
- history.pushState({ index: currentHistoryIndex }, /* ignored title */ '', absoluteInternalHref);
+ history.pushState(stateEntry, /* ignored title */ '', absoluteInternalHref);
} else {
- history.replaceState({ index: currentHistoryIndex }, /* ignored title */ '', absoluteInternalHref);
+ history.replaceState(stateEntry, /* ignored title */ '', absoluteInternalHref);
}
notifyLocationChanged(interceptedLink);
@@ -251,7 +256,7 @@ async function onBrowserInitiatedPopState(state: PopStateEvent) {
async function notifyLocationChanged(interceptedLink: boolean) {
if (notifyLocationChangedCallback) {
- await notifyLocationChangedCallback(location.href, interceptedLink);
+ await notifyLocationChangedCallback(location.href, history.state?.userState, interceptedLink);
}
}
@@ -328,6 +333,7 @@ function canProcessAnchor(anchorTarget: HTMLAnchorElement) {
export interface NavigationOptions {
forceLoad: boolean;
replaceHistoryEntry: boolean;
+ historyEntryState?: string;
}
interface NavigationPromptOptions {
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/Interop/AuthenticationService.ts b/src/Components/WebAssembly/WebAssembly.Authentication/src/Interop/AuthenticationService.ts
index 67b9bf6b6f..f359b77325 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/src/Interop/AuthenticationService.ts
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/Interop/AuthenticationService.ts
@@ -35,15 +35,15 @@ export interface AccessToken {
}
export enum AccessTokenResultStatus {
- Success = 'success',
- RequiresRedirect = 'requiresRedirect'
+ Success = 'Success',
+ RequiresRedirect = 'RequiresRedirect'
}
export enum AuthenticationResultStatus {
- Redirect = 'redirect',
- Success = 'success',
- Failure = 'failure',
- OperationCompleted = 'operationCompleted'
+ Redirect = 'Redirect',
+ Success = 'Success',
+ Failure = 'Failure',
+ OperationCompleted = 'OperationCompleted'
};
export interface AuthenticationResult {
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj b/src/Components/WebAssembly/WebAssembly.Authentication/src/Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj
index 6d176db053..33439e361c 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/src/Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk.Razor">
+<Project Sdk="Microsoft.NET.Sdk.Razor">
<Import Project="Sdk.props" Sdk="Yarn.MSBuild" Condition=" '$(DotNetBuildFromSource)' != 'true'" />
@@ -9,6 +9,8 @@
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<IsTrimmable>true</IsTrimmable>
<Nullable>disable</Nullable>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <DefineConstants>DISABLE_NULLABLE;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<ItemGroup>
@@ -22,6 +24,7 @@
<ItemGroup>
<Compile Include="$(SharedSourceRoot)LinkerFlags.cs" LinkBase="Shared" />
+ <Compile Include="$(SharedSourceRoot)QueryStringEnumerable.cs" LinkBase="Shared" />
</ItemGroup>
<PropertyGroup>
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/Models/RemoteAuthenticationStatus.cs b/src/Components/WebAssembly/WebAssembly.Authentication/src/Models/RemoteAuthenticationStatus.cs
index 00039b2b70..9aaf64a98d 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/src/Models/RemoteAuthenticationStatus.cs
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/Models/RemoteAuthenticationStatus.cs
@@ -1,11 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System.Text.Json.Serialization;
+
namespace Microsoft.AspNetCore.Components.WebAssembly.Authentication;
/// <summary>
/// Represents the status of an authentication operation.
/// </summary>
+[JsonConverter(typeof(JsonStringEnumConverter))]
public enum RemoteAuthenticationStatus
{
/// <summary>
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/QueryStringHelper.cs b/src/Components/WebAssembly/WebAssembly.Authentication/src/QueryStringHelper.cs
deleted file mode 100644
index 2aca187baa..0000000000
--- a/src/Components/WebAssembly/WebAssembly.Authentication/src/QueryStringHelper.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace Microsoft.AspNetCore.Components.WebAssembly.Authentication;
-
-internal static class QueryStringHelper
-{
- public static string GetParameter(string queryString, string key)
- {
- if (string.IsNullOrEmpty(queryString) || queryString == "?")
- {
- return null;
- }
-
- var scanIndex = 0;
- if (queryString[0] == '?')
- {
- scanIndex = 1;
- }
-
- var textLength = queryString.Length;
- var equalIndex = queryString.IndexOf('=');
- if (equalIndex == -1)
- {
- equalIndex = textLength;
- }
-
- while (scanIndex < textLength)
- {
- var ampersandIndex = queryString.IndexOf('&', scanIndex);
- if (ampersandIndex == -1)
- {
- ampersandIndex = textLength;
- }
-
- if (equalIndex < ampersandIndex)
- {
- while (scanIndex != equalIndex && char.IsWhiteSpace(queryString[scanIndex]))
- {
- ++scanIndex;
- }
- var name = queryString[scanIndex..equalIndex];
- var value = queryString.Substring(equalIndex + 1, ampersandIndex - equalIndex - 1);
- var processedName = Uri.UnescapeDataString(name.Replace('+', ' '));
- if (string.Equals(processedName, key, StringComparison.OrdinalIgnoreCase))
- {
- return Uri.UnescapeDataString(value.Replace('+', ' '));
- }
-
- equalIndex = queryString.IndexOf('=', ampersandIndex);
- if (equalIndex == -1)
- {
- equalIndex = textLength;
- }
- }
- else
- {
- if (ampersandIndex > scanIndex)
- {
- var value = queryString[scanIndex..ampersandIndex];
- if (string.Equals(value, key, StringComparison.OrdinalIgnoreCase))
- {
- return string.Empty;
- }
- }
- }
-
- scanIndex = ampersandIndex + 1;
- }
-
- return null;
- }
-}
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/RemoteAuthenticatorViewCore.cs b/src/Components/WebAssembly/WebAssembly.Authentication/src/RemoteAuthenticatorViewCore.cs
index da65fb0fd1..a5a75e9d5e 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/src/RemoteAuthenticatorViewCore.cs
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/RemoteAuthenticatorViewCore.cs
@@ -4,7 +4,7 @@
using System.Diagnostics.CodeAnalysis;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Rendering;
-using Microsoft.JSInterop;
+using Microsoft.AspNetCore.Internal;
using static Microsoft.AspNetCore.Internal.LinkerFlags;
namespace Microsoft.AspNetCore.Components.WebAssembly.Authentication;
@@ -85,11 +85,6 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
[Parameter] public EventCallback<TAuthenticationState> OnLogOutSucceeded { get; set; }
/// <summary>
- /// Gets or sets the <see cref="IJSRuntime"/> to use for performing JavaScript interop.
- /// </summary>
- [Inject] internal IJSRuntime JS { get; set; }
-
- /// <summary>
/// Gets or sets the <see cref="NavigationManager"/> to use for redirecting the browser.
/// </summary>
[Inject] internal NavigationManager Navigation { get; set; }
@@ -183,7 +178,7 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
else
{
UserProfile ??= LoggingIn;
- await RedirectToProfile();
+ RedirectToProfile();
}
break;
case RemoteAuthenticationActions.Register:
@@ -194,7 +189,7 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
else
{
Registering ??= LoggingIn;
- await RedirectToRegister();
+ RedirectToRegister();
}
break;
case RemoteAuthenticationActions.LogOut:
@@ -226,7 +221,7 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
break;
case RemoteAuthenticationStatus.Success:
await OnLogInSucceeded.InvokeAsync(result.State);
- await NavigateToReturnUrl(GetReturnUrl(result.State, returnUrl));
+ NavigateToReturnUrl(GetReturnUrl(result.State, returnUrl));
break;
case RemoteAuthenticationStatus.Failure:
_message = result.ErrorMessage;
@@ -250,13 +245,13 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
throw new InvalidOperationException("Should not redirect.");
case RemoteAuthenticationStatus.Success:
await OnLogInSucceeded.InvokeAsync(result.State);
- await NavigateToReturnUrl(GetReturnUrl(result.State));
+ NavigateToReturnUrl(GetReturnUrl(result.State));
break;
case RemoteAuthenticationStatus.OperationCompleted:
break;
case RemoteAuthenticationStatus.Failure:
var uri = Navigation.ToAbsoluteUri($"{ApplicationPaths.LogInFailedPath}?message={Uri.EscapeDataString(result.ErrorMessage)}").ToString();
- await NavigateToReturnUrl(uri);
+ NavigateToReturnUrl(uri);
break;
default:
throw new InvalidOperationException($"Invalid authentication result status '{result.Status}'.");
@@ -286,7 +281,7 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
break;
case RemoteAuthenticationStatus.Success:
await OnLogOutSucceeded.InvokeAsync(result.State);
- await NavigateToReturnUrl(returnUrl);
+ NavigateToReturnUrl(returnUrl);
break;
case RemoteAuthenticationStatus.OperationCompleted:
break;
@@ -300,7 +295,7 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
}
else
{
- await NavigateToReturnUrl(returnUrl);
+ NavigateToReturnUrl(returnUrl);
}
}
@@ -315,13 +310,13 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
throw new InvalidOperationException("Should not redirect.");
case RemoteAuthenticationStatus.Success:
await OnLogOutSucceeded.InvokeAsync(result.State);
- await NavigateToReturnUrl(GetReturnUrl(result.State, Navigation.ToAbsoluteUri(ApplicationPaths.LogOutSucceededPath).ToString()));
+ NavigateToReturnUrl(GetReturnUrl(result.State, Navigation.ToAbsoluteUri(ApplicationPaths.LogOutSucceededPath).ToString()));
break;
case RemoteAuthenticationStatus.OperationCompleted:
break;
case RemoteAuthenticationStatus.Failure:
var uri = Navigation.ToAbsoluteUri($"{ApplicationPaths.LogOutFailedPath}?message={Uri.EscapeDataString(result.ErrorMessage)}").ToString();
- await NavigateToReturnUrl(uri);
+ NavigateToReturnUrl(uri);
break;
default:
throw new InvalidOperationException($"Invalid authentication result status.");
@@ -335,7 +330,7 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
return state.ReturnUrl;
}
- var fromQuery = QueryStringHelper.GetParameter(new Uri(Navigation.Uri).Query, "returnUrl");
+ var fromQuery = GetParameterFromQueryString("returnUrl");
if (!string.IsNullOrWhiteSpace(fromQuery) && !fromQuery.StartsWith(Navigation.BaseUri, StringComparison.Ordinal))
{
// This is an extra check to prevent open redirects.
@@ -343,19 +338,43 @@ public class RemoteAuthenticatorViewCore<[DynamicallyAccessedMembers(JsonSeriali
}
return fromQuery ?? defaultReturnUrl ?? Navigation.BaseUri;
+
+ }
+
+ private string GetParameterFromQueryString(ReadOnlySpan<char> parameterName)
+ {
+ var url = Navigation.Uri;
+ ReadOnlyMemory<char> query = default;
+ var queryStartPos = url.IndexOf('?');
+ if (queryStartPos >= 0)
+ {
+ var queryEndPos = url.IndexOf('#', queryStartPos);
+ query = url.AsMemory(queryStartPos..(queryEndPos < 0 ? url.Length : queryEndPos));
+ }
+
+ foreach (var parameter in new QueryStringEnumerable(query))
+ {
+ var decodedName = parameter.DecodeName().Span;
+ if (MemoryExtensions.Equals(parameterName, decodedName, StringComparison.OrdinalIgnoreCase))
+ {
+ return new string(parameter.DecodeValue().Span);
+ }
+ }
+ return null;
}
- private async Task NavigateToReturnUrl(string returnUrl) => await JS.InvokeVoidAsync("Blazor.navigateTo", returnUrl, false, true);
+ private void NavigateToReturnUrl(string returnUrl) => Navigation.NavigateTo(returnUrl, new NavigationOptions { ForceLoad = false, ReplaceHistoryEntry = true });
- private ValueTask RedirectToRegister()
+ private void RedirectToRegister()
{
var loginUrl = Navigation.ToAbsoluteUri(ApplicationPaths.LogInPath).PathAndQuery;
var registerUrl = Navigation.ToAbsoluteUri($"{ApplicationPaths.RemoteRegisterPath}?returnUrl={Uri.EscapeDataString(loginUrl)}").PathAndQuery;
- return JS.InvokeVoidAsync("location.replace", registerUrl);
+ Navigation.NavigateTo(registerUrl, new NavigationOptions { ReplaceHistoryEntry = true, ForceLoad = true });
}
- private ValueTask RedirectToProfile() => JS.InvokeVoidAsync("location.replace", Navigation.ToAbsoluteUri(ApplicationPaths.RemoteProfilePath).PathAndQuery);
+ private void RedirectToProfile() =>
+ Navigation.NavigateTo(Navigation.ToAbsoluteUri(ApplicationPaths.RemoteProfilePath).PathAndQuery, new NavigationOptions { ReplaceHistoryEntry = true, ForceLoad = true });
private static void DefaultLogInFragment(RenderTreeBuilder builder)
{
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/RemoteAuthenticationService.cs b/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/RemoteAuthenticationService.cs
index 4ffe310768..a4909c4223 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/RemoteAuthenticationService.cs
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/RemoteAuthenticationService.cs
@@ -3,6 +3,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Security.Claims;
+using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.Extensions.Options;
using Microsoft.JSInterop;
@@ -81,14 +82,8 @@ public class RemoteAuthenticationService<
RemoteAuthenticationContext<TRemoteAuthenticationState> context)
{
await EnsureAuthService();
- var internalResult = await JsRuntime.InvokeAsync<InternalRemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.signIn", context.State);
- var result = internalResult.Convert();
- if (result.Status == RemoteAuthenticationStatus.Success)
- {
- var getUserTask = GetUser();
- await getUserTask;
- UpdateUser(getUserTask);
- }
+ var result = await JsRuntime.InvokeAsync<RemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.signIn", context.State);
+ await UpdateUserOnSuccess(result);
return result;
}
@@ -98,14 +93,8 @@ public class RemoteAuthenticationService<
RemoteAuthenticationContext<TRemoteAuthenticationState> context)
{
await EnsureAuthService();
- var internalResult = await JsRuntime.InvokeAsync<InternalRemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.completeSignIn", context.Url);
- var result = internalResult.Convert();
- if (result.Status == RemoteAuthenticationStatus.Success)
- {
- var getUserTask = GetUser();
- await getUserTask;
- UpdateUser(getUserTask);
- }
+ var result = await JsRuntime.InvokeAsync<RemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.completeSignIn", context.Url);
+ await UpdateUserOnSuccess(result);
return result;
}
@@ -115,14 +104,8 @@ public class RemoteAuthenticationService<
RemoteAuthenticationContext<TRemoteAuthenticationState> context)
{
await EnsureAuthService();
- var internalResult = await JsRuntime.InvokeAsync<InternalRemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.signOut", context.State);
- var result = internalResult.Convert();
- if (result.Status == RemoteAuthenticationStatus.Success)
- {
- var getUserTask = GetUser();
- await getUserTask;
- UpdateUser(getUserTask);
- }
+ var result = await JsRuntime.InvokeAsync<RemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.signOut", context.State);
+ await UpdateUserOnSuccess(result);
return result;
}
@@ -132,14 +115,8 @@ public class RemoteAuthenticationService<
RemoteAuthenticationContext<TRemoteAuthenticationState> context)
{
await EnsureAuthService();
- var internalResult = await JsRuntime.InvokeAsync<InternalRemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.completeSignOut", context.Url);
- var result = internalResult.Convert();
- if (result.Status == RemoteAuthenticationStatus.Success)
- {
- var getUserTask = GetUser();
- await getUserTask;
- UpdateUser(getUserTask);
- }
+ var result = await JsRuntime.InvokeAsync<RemoteAuthenticationResult<TRemoteAuthenticationState>>("AuthenticationService.completeSignOut", context.Url);
+ await UpdateUserOnSuccess(result);
return result;
}
@@ -150,18 +127,10 @@ public class RemoteAuthenticationService<
await EnsureAuthService();
var result = await JsRuntime.InvokeAsync<InternalAccessTokenResult>("AuthenticationService.getAccessToken");
- if (!Enum.TryParse<AccessTokenResultStatus>(result.Status, ignoreCase: true, out var parsedStatus))
- {
- throw new InvalidOperationException($"Invalid access token result status '{result.Status ?? "(null)"}'");
- }
-
- if (parsedStatus == AccessTokenResultStatus.RequiresRedirect)
- {
- var redirectUrl = GetRedirectUrl(null);
- result.RedirectUrl = redirectUrl.ToString();
- }
-
- return new AccessTokenResult(parsedStatus, result.Token, result.RedirectUrl);
+ return new AccessTokenResult(
+ result.Status,
+ result.Token,
+ result.Status == AccessTokenResultStatus.RequiresRedirect ? GetRedirectUrl(null).ToString() : null);
}
/// <inheritdoc />
@@ -177,18 +146,10 @@ public class RemoteAuthenticationService<
await EnsureAuthService();
var result = await JsRuntime.InvokeAsync<InternalAccessTokenResult>("AuthenticationService.getAccessToken", options);
- if (!Enum.TryParse<AccessTokenResultStatus>(result.Status, ignoreCase: true, out var parsedStatus))
- {
- throw new InvalidOperationException($"Invalid access token result status '{result.Status ?? "(null)"}'");
- }
-
- if (parsedStatus == AccessTokenResultStatus.RequiresRedirect)
- {
- var redirectUrl = GetRedirectUrl(options.ReturnUrl);
- result.RedirectUrl = redirectUrl.ToString();
- }
-
- return new AccessTokenResult(parsedStatus, result.Token, result.RedirectUrl);
+ return new AccessTokenResult(
+ result.Status,
+ result.Token,
+ result.Status == AccessTokenResultStatus.RequiresRedirect ? GetRedirectUrl(options.ReturnUrl).ToString() : null);
}
private Uri GetRedirectUrl(string customReturnUrl)
@@ -234,6 +195,15 @@ public class RemoteAuthenticationService<
_initialized = true;
}
}
+ private async Task UpdateUserOnSuccess(RemoteAuthenticationResult<TRemoteAuthenticationState> result)
+ {
+ if (result.Status == RemoteAuthenticationStatus.Success)
+ {
+ var getUserTask = GetUser();
+ await getUserTask;
+ UpdateUser(getUserTask);
+ }
+ }
private void UpdateUser(Task<ClaimsPrincipal> task)
{
@@ -244,37 +214,4 @@ public class RemoteAuthenticationService<
}
// Internal for testing purposes
-internal struct InternalAccessTokenResult
-{
- public string Status { get; set; }
- public AccessToken Token { get; set; }
- public string RedirectUrl { get; set; }
-}
-
-// Internal for testing purposes
-internal struct InternalRemoteAuthenticationResult<TRemoteAuthenticationState> where TRemoteAuthenticationState : RemoteAuthenticationState
-{
- public string Status { get; set; }
-
- public string ErrorMessage { get; set; }
-
- public TRemoteAuthenticationState State { get; set; }
-
- public RemoteAuthenticationResult<TRemoteAuthenticationState> Convert()
- {
- var result = new RemoteAuthenticationResult<TRemoteAuthenticationState>();
- result.ErrorMessage = ErrorMessage;
- result.State = State;
-
- if (Status != null && Enum.TryParse<RemoteAuthenticationStatus>(Status, ignoreCase: true, out var status))
- {
- result.Status = status;
- }
- else
- {
- throw new InvalidOperationException($"Can't convert status '${Status ?? "(null)"}'.");
- }
-
- return result;
- }
-}
+internal record struct InternalAccessTokenResult([property: JsonConverter(typeof(JsonStringEnumConverter))] AccessTokenResultStatus Status, AccessToken Token);
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticationServiceTests.cs b/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticationServiceTests.cs
index 595310ff1d..fb9808828f 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticationServiceTests.cs
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticationServiceTests.cs
@@ -25,10 +25,10 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.SignInResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.SignInResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
State = state,
- Status = RemoteAuthenticationStatus.Success.ToString()
+ Status = RemoteAuthenticationStatus.Success
};
// Act
@@ -56,9 +56,9 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.SignInResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.SignInResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
- Status = value.ToString()
+ Status = value
};
// Act
@@ -83,10 +83,10 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.CompleteSignInResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.CompleteSignInResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
State = state,
- Status = RemoteAuthenticationStatus.Success.ToString()
+ Status = RemoteAuthenticationStatus.Success
};
// Act
@@ -114,9 +114,9 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.CompleteSignInResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.CompleteSignInResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
- Status = value.ToString().ToString()
+ Status = value
};
// Act
@@ -141,10 +141,10 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.SignOutResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.SignOutResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
State = state,
- Status = RemoteAuthenticationStatus.Success.ToString()
+ Status = RemoteAuthenticationStatus.Success
};
// Act
@@ -172,9 +172,9 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.SignOutResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.SignOutResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
- Status = value.ToString()
+ Status = value
};
// Act
@@ -199,10 +199,10 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.CompleteSignOutResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.CompleteSignOutResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
State = state,
- Status = RemoteAuthenticationStatus.Success.ToString()
+ Status = RemoteAuthenticationStatus.Success
};
// Act
@@ -230,9 +230,9 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.CompleteSignOutResult = new InternalRemoteAuthenticationResult<RemoteAuthenticationState>
+ testJsRuntime.CompleteSignOutResult = new RemoteAuthenticationResult<RemoteAuthenticationState>
{
- Status = value.ToString()
+ Status = value
};
// Act
@@ -259,7 +259,7 @@ public class RemoteAuthenticationServiceTests
var state = new RemoteAuthenticationState();
testJsRuntime.GetAccessTokenResult = new InternalAccessTokenResult
{
- Status = "success",
+ Status = AccessTokenResultStatus.Success,
Token = new AccessToken
{
Value = "1234",
@@ -277,8 +277,7 @@ public class RemoteAuthenticationServiceTests
testJsRuntime.PastInvocations.Select(i => i.identifier).ToArray());
Assert.True(result.TryGetToken(out var token));
- Assert.Equal(result.Status, Enum.Parse<AccessTokenResultStatus>(testJsRuntime.GetAccessTokenResult.Status, ignoreCase: true));
- Assert.Equal(result.RedirectUrl, testJsRuntime.GetAccessTokenResult.RedirectUrl);
+ Assert.Equal(result.Status, testJsRuntime.GetAccessTokenResult.Status);
Assert.Equal(token, testJsRuntime.GetAccessTokenResult.Token);
}
@@ -295,10 +294,7 @@ public class RemoteAuthenticationServiceTests
new AccountClaimsPrincipalFactory<RemoteUserAccount>(Mock.Of<IAccessTokenProviderAccessor>()));
var state = new RemoteAuthenticationState();
- testJsRuntime.GetAccessTokenResult = new InternalAccessTokenResult
- {
- Status = "requiresRedirect",
- };
+ testJsRuntime.GetAccessTokenResult = new InternalAccessTokenResult(AccessTokenResultStatus.RequiresRedirect, null);
var tokenOptions = new AccessTokenRequestOptions
{
@@ -317,7 +313,7 @@ public class RemoteAuthenticationServiceTests
Assert.False(result.TryGetToken(out var token));
Assert.Null(token);
- Assert.Equal(result.Status, Enum.Parse<AccessTokenResultStatus>(testJsRuntime.GetAccessTokenResult.Status, ignoreCase: true));
+ Assert.Equal(result.Status, testJsRuntime.GetAccessTokenResult.Status);
Assert.Equal(expectedRedirectUrl, result.RedirectUrl);
Assert.Equal(tokenOptions, (AccessTokenRequestOptions)testJsRuntime.PastInvocations[^1].args[0]);
}
@@ -337,7 +333,7 @@ public class RemoteAuthenticationServiceTests
var state = new RemoteAuthenticationState();
testJsRuntime.GetAccessTokenResult = new InternalAccessTokenResult
{
- Status = "requiresRedirect",
+ Status = AccessTokenResultStatus.RequiresRedirect,
};
var tokenOptions = new AccessTokenRequestOptions
@@ -358,7 +354,7 @@ public class RemoteAuthenticationServiceTests
Assert.False(result.TryGetToken(out var token));
Assert.Null(token);
- Assert.Equal(result.Status, Enum.Parse<AccessTokenResultStatus>(testJsRuntime.GetAccessTokenResult.Status, ignoreCase: true));
+ Assert.Equal(result.Status, testJsRuntime.GetAccessTokenResult.Status);
Assert.Equal(expectedRedirectUrl, result.RedirectUrl);
Assert.Equal(tokenOptions, (AccessTokenRequestOptions)testJsRuntime.PastInvocations[^1].args[0]);
}
@@ -450,7 +446,7 @@ public class RemoteAuthenticationServiceTests
testJsRuntime.GetUserResult = account;
testJsRuntime.GetAccessTokenResult = new InternalAccessTokenResult
{
- Status = "success",
+ Status = AccessTokenResultStatus.Success,
Token = new AccessToken
{
Value = "1234",
@@ -509,13 +505,13 @@ public class RemoteAuthenticationServiceTests
{
public IList<(string identifier, object[] args)> PastInvocations { get; set; } = new List<(string, object[])>();
- public InternalRemoteAuthenticationResult<RemoteAuthenticationState> SignInResult { get; set; }
+ public RemoteAuthenticationResult<RemoteAuthenticationState> SignInResult { get; set; }
- public InternalRemoteAuthenticationResult<RemoteAuthenticationState> CompleteSignInResult { get; set; }
+ public RemoteAuthenticationResult<RemoteAuthenticationState> CompleteSignInResult { get; set; }
- public InternalRemoteAuthenticationResult<RemoteAuthenticationState> SignOutResult { get; set; }
+ public RemoteAuthenticationResult<RemoteAuthenticationState> SignOutResult { get; set; }
- public InternalRemoteAuthenticationResult<RemoteAuthenticationState> CompleteSignOutResult { get; set; }
+ public RemoteAuthenticationResult<RemoteAuthenticationState> CompleteSignOutResult { get; set; }
public InternalAccessTokenResult GetAccessTokenResult { get; set; }
diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticatorCoreTests.cs b/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticatorCoreTests.cs
index 46fa7e2106..c68886cb1a 100644
--- a/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticatorCoreTests.cs
+++ b/src/Components/WebAssembly/WebAssembly.Authentication/test/RemoteAuthenticatorCoreTests.cs
@@ -39,7 +39,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_Login_NavigatesToReturnUrlOnSuccess()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/login?returnUrl=https://www.example.com/base/fetchData");
authServiceMock.SignInCallback = _ => Task.FromResult(new RemoteAuthenticationResult<RemoteAuthenticationState>()
@@ -57,7 +57,7 @@ public class RemoteAuthenticatorCoreTests
await renderer.Dispatcher.InvokeAsync<object>(() => remoteAuthenticator.SetParametersAsync(parameters));
// Assert
- Assert.Equal("https://www.example.com/base/fetchData", jsRuntime.LastInvocation.args[0]);
+ Assert.Equal("https://www.example.com/base/fetchData", remoteAuthenticator.Navigation.Uri);
}
[Fact]
@@ -65,7 +65,7 @@ public class RemoteAuthenticatorCoreTests
{
// Arrange
var originalUrl = "https://www.example.com/base/authentication/login?returnUrl=https://www.example.com/base/fetchData";
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(originalUrl);
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(originalUrl);
authServiceMock.SignInCallback = s => Task.FromResult(new RemoteAuthenticationResult<RemoteAuthenticationState>()
{
@@ -90,7 +90,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_Login_NavigatesToLoginFailureOnError()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/login?returnUrl=https://www.example.com/base/fetchData");
authServiceMock.SignInCallback = s => Task.FromResult(new RemoteAuthenticationResult<RemoteAuthenticationState>()
@@ -115,7 +115,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_LoginCallback_ThrowsOnRedirectResult()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/login?returnUrl=https://www.example.com/base/fetchData");
authServiceMock.CompleteSignInCallback = s => Task.FromResult(new RemoteAuthenticationResult<RemoteAuthenticationState>()
@@ -141,7 +141,7 @@ public class RemoteAuthenticatorCoreTests
{
// Arrange
var originalUrl = "https://www.example.com/base/authentication/login-callback?code=1234";
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
originalUrl);
authServiceMock.CompleteSignInCallback = s => Task.FromResult(new RemoteAuthenticationResult<RemoteAuthenticationState>()
@@ -166,7 +166,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_LoginCallback_NavigatesToReturnUrlFromStateOnSuccess()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/login-callback?code=1234");
var fetchDataUrl = "https://www.example.com/base/fetchData";
@@ -192,7 +192,7 @@ public class RemoteAuthenticatorCoreTests
await renderer.Dispatcher.InvokeAsync<object>(() => remoteAuthenticator.SetParametersAsync(parameters));
// Assert
- Assert.Equal(fetchDataUrl, jsRuntime.LastInvocation.args[0]);
+ Assert.Equal(fetchDataUrl, remoteAuthenticator.Navigation.Uri);
Assert.True(loggingSucceededCalled);
}
@@ -201,7 +201,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_LoginCallback_NavigatesToLoginFailureOnError()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/login-callback?code=1234");
var fetchDataUrl = "https://www.example.com/base/fetchData";
@@ -224,7 +224,7 @@ public class RemoteAuthenticatorCoreTests
// Assert
Assert.Equal(
"https://www.example.com/base/authentication/login-failed?message=There was an error trying to log in",
- jsRuntime.LastInvocation.args[0]);
+ remoteAuthenticator.Navigation.Uri);
}
@@ -232,7 +232,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_Logout_NavigatesToReturnUrlOnSuccess()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout?returnUrl=https://www.example.com/base/");
authServiceMock.GetAuthenticatedUserCallback = () => new ValueTask<ClaimsPrincipal>(new ClaimsPrincipal(new ClaimsIdentity("Test")));
@@ -252,14 +252,14 @@ public class RemoteAuthenticatorCoreTests
await renderer.Dispatcher.InvokeAsync<object>(() => remoteAuthenticator.SetParametersAsync(parameters));
// Assert
- Assert.Equal("https://www.example.com/base/", jsRuntime.LastInvocation.args[0]);
+ Assert.Equal("https://www.example.com/base/", remoteAuthenticator.Navigation.Uri);
}
[Fact]
public async Task AuthenticationManager_Logout_NavigatesToDefaultReturnUrlWhenNoReturnUrlIsPresent()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout");
authServiceMock.GetAuthenticatedUserCallback = () => new ValueTask<ClaimsPrincipal>(new ClaimsPrincipal(new ClaimsIdentity("Test")));
@@ -279,7 +279,7 @@ public class RemoteAuthenticatorCoreTests
await renderer.Dispatcher.InvokeAsync<object>(() => remoteAuthenticator.SetParametersAsync(parameters));
// Assert
- Assert.Equal("https://www.example.com/base/authentication/logged-out", jsRuntime.LastInvocation.args[0]);
+ Assert.Equal("https://www.example.com/base/authentication/logged-out", remoteAuthenticator.Navigation.Uri);
}
[Fact]
@@ -287,7 +287,7 @@ public class RemoteAuthenticatorCoreTests
{
// Arrange
var originalUrl = "https://www.example.com/base/authentication/login?returnUrl=https://www.example.com/base/fetchData";
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(originalUrl);
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(originalUrl);
authServiceMock.GetAuthenticatedUserCallback = () => new ValueTask<ClaimsPrincipal>(new ClaimsPrincipal(new ClaimsIdentity("Test")));
@@ -314,7 +314,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_Logout_RedirectsToFailureOnInvalidSignOutState()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout?returnUrl=https://www.example.com/base/fetchData");
if (remoteAuthenticator.SignOutManager is TestSignOutSessionStateManager testManager)
@@ -340,7 +340,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_Logout_NavigatesToLogoutFailureOnError()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout?returnUrl=https://www.example.com/base/fetchData");
authServiceMock.GetAuthenticatedUserCallback = () => new ValueTask<ClaimsPrincipal>(new ClaimsPrincipal(new ClaimsIdentity("Test")));
@@ -367,7 +367,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_LogoutCallback_ThrowsOnRedirectResult()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout-callback?returnUrl=https://www.example.com/base/fetchData");
var parameters = ParameterView.FromDictionary(new Dictionary<string, object>
@@ -393,7 +393,7 @@ public class RemoteAuthenticatorCoreTests
{
// Arrange
var originalUrl = "https://www.example.com/base/authentication/logout-callback?code=1234";
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
originalUrl);
authServiceMock.CompleteSignOutCallback = s => Task.FromResult(new RemoteAuthenticationResult<RemoteAuthenticationState>()
@@ -417,7 +417,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_LogoutCallback_NavigatesToReturnUrlFromStateOnSuccess()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout-callback-callback?code=1234");
var fetchDataUrl = "https://www.example.com/base/fetchData";
@@ -443,7 +443,7 @@ public class RemoteAuthenticatorCoreTests
await renderer.Dispatcher.InvokeAsync<object>(() => remoteAuthenticator.SetParametersAsync(parameters));
// Assert
- Assert.Equal(fetchDataUrl, jsRuntime.LastInvocation.args[0]);
+ Assert.Equal(fetchDataUrl, remoteAuthenticator.Navigation.Uri);
Assert.True(loggingOutSucceededCalled);
}
@@ -452,7 +452,7 @@ public class RemoteAuthenticatorCoreTests
public async Task AuthenticationManager_LogoutCallback_NavigatesToLoginFailureOnError()
{
// Arrange
- var (remoteAuthenticator, renderer, authServiceMock, jsRuntime) = CreateAuthenticationManager(
+ var (remoteAuthenticator, renderer, authServiceMock) = CreateAuthenticationManager(
"https://www.example.com/base/authentication/logout-callback?code=1234");
var fetchDataUrl = "https://www.example.com/base/fetchData";
@@ -475,7 +475,7 @@ public class RemoteAuthenticatorCoreTests
// Assert
Assert.Equal(
"https://www.example.com/base/authentication/logout-failed?message=There was an error trying to log out",
- jsRuntime.LastInvocation.args[0]);
+ remoteAuthenticator.Navigation.Uri);
}
@@ -587,8 +587,7 @@ public class RemoteAuthenticatorCoreTests
{
// Arrange
var renderer = new TestRenderer(new ServiceCollection().BuildServiceProvider());
- var jsRuntime = new TestJsRuntime();
- var authenticator = new TestRemoteAuthenticatorView(new RemoteAuthenticationApplicationPathsOptions(), jsRuntime);
+ var authenticator = new TestRemoteAuthenticatorView(new RemoteAuthenticationApplicationPathsOptions());
renderer.Attach(authenticator);
var parameters = ParameterView.FromDictionary(new Dictionary<string, object>
@@ -605,7 +604,6 @@ public class RemoteAuthenticatorCoreTests
// Assert
Assert.True(validator.WasCalled);
Assert.Equal(methodName, validator.OriginalRender.Method.Name);
- Assert.Equal(default, jsRuntime.LastInvocation);
}
public class UIValidator
@@ -626,8 +624,7 @@ public class RemoteAuthenticatorCoreTests
private static
(RemoteAuthenticatorViewCore<RemoteAuthenticationState> manager,
TestRenderer renderer,
- TestRemoteAuthenticationService authenticationServiceMock,
- TestJsRuntime js)
+ TestRemoteAuthenticationService authenticationServiceMock)
CreateAuthenticationManager(
string currentUri,
@@ -655,8 +652,7 @@ public class RemoteAuthenticatorCoreTests
remoteAuthenticator.AuthenticationService = authenticationServiceMock;
remoteAuthenticator.AuthenticationProvider = authenticationServiceMock;
- remoteAuthenticator.JS = jsRuntime;
- return (remoteAuthenticator, renderer, authenticationServiceMock, jsRuntime);
+ return (remoteAuthenticator, renderer, authenticationServiceMock);
}
private class TestNavigationManager : NavigationManager
@@ -665,6 +661,11 @@ public class RemoteAuthenticatorCoreTests
protected override void NavigateToCore(string uri, bool forceLoad)
=> Uri = System.Uri.IsWellFormedUriString(uri, UriKind.Absolute) ? uri : new Uri(new Uri(BaseUri), uri).ToString();
+
+ protected override void NavigateToCore(string uri, NavigationOptions options)
+ {
+ Uri = System.Uri.IsWellFormedUriString(uri, UriKind.Absolute) ? uri : new Uri(new Uri(BaseUri), uri).ToString();
+ }
}
private class TestSignOutSessionStateManager : SignOutSessionStateManager
@@ -714,7 +715,6 @@ public class RemoteAuthenticatorCoreTests
public TestRemoteAuthenticatorView(RemoteAuthenticationApplicationPathsOptions applicationPaths, IJSRuntime jsRuntime = default)
{
ApplicationPaths = applicationPaths;
- JS = jsRuntime;
}
protected override Task OnParametersSetAsync()
diff --git a/src/Components/WebAssembly/WebAssembly/src/Infrastructure/JSInteropMethods.cs b/src/Components/WebAssembly/WebAssembly/src/Infrastructure/JSInteropMethods.cs
index 90640e8238..57277c61b7 100644
--- a/src/Components/WebAssembly/WebAssembly/src/Infrastructure/JSInteropMethods.cs
+++ b/src/Components/WebAssembly/WebAssembly/src/Infrastructure/JSInteropMethods.cs
@@ -17,10 +17,17 @@ public static class JSInteropMethods
/// <summary>
/// For framework use only.
/// </summary>
- [JSInvokable(nameof(NotifyLocationChanged))]
+ [Obsolete("This API is for framework use only and is no longer used in the current version")]
public static void NotifyLocationChanged(string uri, bool isInterceptedLink)
+ => WebAssemblyNavigationManager.Instance.SetLocation(uri, null, isInterceptedLink);
+
+ /// <summary>
+ /// For framework use only.
+ /// </summary>
+ [JSInvokable(nameof(NotifyLocationChanged))]
+ public static void NotifyLocationChanged(string uri, string? state, bool isInterceptedLink)
{
- WebAssemblyNavigationManager.Instance.SetLocation(uri, isInterceptedLink);
+ WebAssemblyNavigationManager.Instance.SetLocation(uri, state, isInterceptedLink);
}
/// <summary>
diff --git a/src/Components/WebAssembly/WebAssembly/src/PublicAPI.Unshipped.txt b/src/Components/WebAssembly/WebAssembly/src/PublicAPI.Unshipped.txt
index b3d35d49c0..9bf6c7a853 100644
--- a/src/Components/WebAssembly/WebAssembly/src/PublicAPI.Unshipped.txt
+++ b/src/Components/WebAssembly/WebAssembly/src/PublicAPI.Unshipped.txt
@@ -2,3 +2,4 @@
*REMOVED*static Microsoft.AspNetCore.Components.WebAssembly.HotReload.WebAssemblyHotReload.ApplyHotReloadDelta(string! moduleIdString, byte[]! metadataDelta, byte[]! ilDeta) -> void
static Microsoft.AspNetCore.Components.WebAssembly.HotReload.WebAssemblyHotReload.ApplyHotReloadDelta(string! moduleIdString, byte[]! metadataDelta, byte[]! ilDelta, byte[]! pdbBytes) -> void
static Microsoft.AspNetCore.Components.WebAssembly.Infrastructure.JSInteropMethods.NotifyLocationChanging(string! uri, bool isInterceptedLink) -> System.Threading.Tasks.Task<bool>!
+static Microsoft.AspNetCore.Components.WebAssembly.Infrastructure.JSInteropMethods.NotifyLocationChanged(string! uri, string? state, bool isInterceptedLink) -> void
diff --git a/src/Components/WebAssembly/WebAssembly/src/Services/WebAssemblyNavigationManager.cs b/src/Components/WebAssembly/WebAssembly/src/Services/WebAssemblyNavigationManager.cs
index 67be998d5b..958d3224f6 100644
--- a/src/Components/WebAssembly/WebAssembly/src/Services/WebAssemblyNavigationManager.cs
+++ b/src/Components/WebAssembly/WebAssembly/src/Services/WebAssemblyNavigationManager.cs
@@ -22,9 +22,10 @@ internal sealed class WebAssemblyNavigationManager : NavigationManager
Initialize(baseUri, uri);
}
- public void SetLocation(string uri, bool isInterceptedLink)
+ public void SetLocation(string uri, string? state, bool isInterceptedLink)
{
Uri = uri;
+ HistoryEntryState = state;
NotifyLocationChanged(isInterceptedLink);
}
diff --git a/src/Components/WebView/WebView/src/IpcReceiver.cs b/src/Components/WebView/WebView/src/IpcReceiver.cs
index 6461a6b044..5b887f3394 100644
--- a/src/Components/WebView/WebView/src/IpcReceiver.cs
+++ b/src/Components/WebView/WebView/src/IpcReceiver.cs
@@ -61,7 +61,7 @@ internal sealed class IpcReceiver
OnRenderCompleted(pageContext, args[0].GetInt64(), args[1].GetString());
break;
case IpcCommon.IncomingMessageType.OnLocationChanged:
- OnLocationChanged(pageContext, args[0].GetString(), args[1].GetBoolean());
+ OnLocationChanged(pageContext, args[0].GetString(), args[1].GetString(), args[2].GetBoolean());
break;
default:
throw new InvalidOperationException($"Unknown message type '{messageType}'.");
@@ -97,8 +97,8 @@ internal sealed class IpcReceiver
pageContext.Renderer.NotifyRenderCompleted(batchId);
}
- private static void OnLocationChanged(PageContext pageContext, string uri, bool intercepted)
+ private static void OnLocationChanged(PageContext pageContext, string uri, string? state, bool intercepted)
{
- pageContext.NavigationManager.LocationUpdated(uri, intercepted);
+ pageContext.NavigationManager.LocationUpdated(uri, state, intercepted);
}
}
diff --git a/src/Components/WebView/WebView/src/Services/WebViewNavigationManager.cs b/src/Components/WebView/WebView/src/Services/WebViewNavigationManager.cs
index ce12d6494f..e930d733ff 100644
--- a/src/Components/WebView/WebView/src/Services/WebViewNavigationManager.cs
+++ b/src/Components/WebView/WebView/src/Services/WebViewNavigationManager.cs
@@ -13,9 +13,10 @@ internal sealed class WebViewNavigationManager : NavigationManager
Initialize(baseUrl, initialUrl);
}
- public void LocationUpdated(string newUrl, bool intercepted)
+ public void LocationUpdated(string newUrl, string? state, bool intercepted)
{
Uri = newUrl;
+ HistoryEntryState = state;
NotifyLocationChanged(intercepted);
}
diff --git a/src/Components/benchmarkapps/Wasm.Performance/dockerfile b/src/Components/benchmarkapps/Wasm.Performance/dockerfile
index a53ba95816..9d0b02bd86 100644
--- a/src/Components/benchmarkapps/Wasm.Performance/dockerfile
+++ b/src/Components/benchmarkapps/Wasm.Performance/dockerfile
@@ -28,7 +28,7 @@ RUN .dotnet/dotnet publish -c Release --no-restore -o /app ./src/Components/benc
RUN chmod +x /app/Wasm.Performance.Driver
WORKDIR /app
-FROM selenium/standalone-chrome:98.0 as final
+FROM selenium/standalone-chrome:103.0 as final
COPY --from=build ./app ./
COPY ./exec.sh ./
diff --git a/src/Components/test/E2ETest/Tests/RoutingTest.cs b/src/Components/test/E2ETest/Tests/RoutingTest.cs
index 36697e4cee..919cb78c2d 100644
--- a/src/Components/test/E2ETest/Tests/RoutingTest.cs
+++ b/src/Components/test/E2ETest/Tests/RoutingTest.cs
@@ -439,6 +439,74 @@ public class RoutingTest : ServerTestBase<ToggleExecutionModeServerFixture<Progr
}
[Fact]
+ public void CanNavigateProgrammaticallyWithStateValidateNoReplaceHistoryEntry()
+ {
+ // This test checks if default navigation does not replace Browser history entries
+ SetUrlViaPushState("/");
+
+ var app = Browser.MountTestComponent<TestRouter>();
+ var testSelector = Browser.WaitUntilTestSelectorReady();
+
+ app.FindElement(By.LinkText("Programmatic navigation cases")).Click();
+ Browser.True(() => Browser.Url.EndsWith("/ProgrammaticNavigationCases", StringComparison.Ordinal));
+ Browser.Contains("programmatic navigation", () => app.FindElement(By.Id("test-info")).Text);
+
+ // We navigate to the /Other page
+ app.FindElement(By.Id("do-other-navigation-state")).Click();
+ Browser.True(() => Browser.Url.EndsWith("/Other", StringComparison.Ordinal));
+ Browser.Contains("state", () => app.FindElement(By.Id("test-state")).Text);
+ AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)");
+
+ // After we press back, we should end up at the "/ProgrammaticNavigationCases" page so we know browser history has not been replaced
+ // If history had been replaced we would have ended up at the "/" page
+ Browser.Navigate().Back();
+ Browser.True(() => Browser.Url.EndsWith("/ProgrammaticNavigationCases", StringComparison.Ordinal));
+ AssertHighlightedLinks("Programmatic navigation cases");
+
+ // When the navigation is forced, the state is ignored (we could choose to throw here).
+ app.FindElement(By.Id("do-other-navigation-forced-state")).Click();
+ Browser.True(() => Browser.Url.EndsWith("/Other", StringComparison.Ordinal));
+ Browser.DoesNotExist(By.Id("test-state"));
+
+ // We check if we had a force load
+ Assert.Throws<StaleElementReferenceException>(() =>
+ testSelector.SelectedOption.GetAttribute("value"));
+
+ // But still we should be able to navigate back, and end up at the "/ProgrammaticNavigationCases" page
+ Browser.Navigate().Back();
+ Browser.True(() => Browser.Url.EndsWith("/ProgrammaticNavigationCases", StringComparison.Ordinal));
+ Browser.WaitUntilTestSelectorReady();
+ }
+
+ [Fact]
+ public void CanNavigateProgrammaticallyWithStateReplaceHistoryEntry()
+ {
+ SetUrlViaPushState("/");
+
+ var app = Browser.MountTestComponent<TestRouter>();
+ var testSelector = Browser.WaitUntilTestSelectorReady();
+
+ app.FindElement(By.LinkText("Programmatic navigation cases")).Click();
+ Browser.True(() => Browser.Url.EndsWith("/ProgrammaticNavigationCases", StringComparison.Ordinal));
+ Browser.Contains("programmatic navigation", () => app.FindElement(By.Id("test-info")).Text);
+
+ // We navigate to the /Other page, with "replace" enabled
+ app.FindElement(By.Id("do-other-navigation-state-replacehistoryentry")).Click();
+ Browser.True(() => Browser.Url.EndsWith("/Other", StringComparison.Ordinal));
+ Browser.Contains("state", () => app.FindElement(By.Id("test-state")).Text);
+ AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)");
+
+ // After we press back, we should end up at the "/" page so we know browser history has been replaced
+ // If history would not have been replaced we would have ended up at the "/ProgrammaticNavigationCases" page
+ Browser.Navigate().Back();
+ Browser.True(() => Browser.Url.EndsWith("/", StringComparison.Ordinal));
+ AssertHighlightedLinks("Default (matches all)", "Default with base-relative URL (matches all)");
+
+ // Because this was all with client-side navigation, we didn't lose the state in the test selector
+ Assert.Equal(typeof(TestRouter).FullName, testSelector.SelectedOption.GetAttribute("value"));
+ }
+
+ [Fact]
public void CanNavigateProgrammaticallyValidateNoReplaceHistoryEntry()
{
// This test checks if default navigation does not replace Browser history entries
@@ -452,7 +520,7 @@ public class RoutingTest : ServerTestBase<ToggleExecutionModeServerFixture<Progr
Browser.Contains("programmatic navigation", () => app.FindElement(By.Id("test-info")).Text);
// We navigate to the /Other page
- // This will also test our new NavigatTo(string uri) overload (it should not replace the browser history)
+ // This will also test our new NavigateTo(string uri) overload (it should not replace the browser history)
app.FindElement(By.Id("do-other-navigation")).Click();
Browser.True(() => Browser.Url.EndsWith("/Other", StringComparison.Ordinal));
AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)");
diff --git a/src/Components/test/testassets/BasicTestApp/RouterTest/Other.razor b/src/Components/test/testassets/BasicTestApp/RouterTest/Other.razor
index d7a01e9bf3..07e29781d4 100644
--- a/src/Components/test/testassets/BasicTestApp/RouterTest/Other.razor
+++ b/src/Components/test/testassets/BasicTestApp/RouterTest/Other.razor
@@ -1,2 +1,4 @@
@page "/Other"
+@inject NavigationManager Navigation
<div id="test-info">This is another page.</div>
+<div id="test-state">@Navigation.HistoryEntryState</div>
diff --git a/src/Components/test/testassets/BasicTestApp/RouterTest/ProgrammaticNavigationCases.razor b/src/Components/test/testassets/BasicTestApp/RouterTest/ProgrammaticNavigationCases.razor
index 09fcb51c0a..3c86f3d339 100644
--- a/src/Components/test/testassets/BasicTestApp/RouterTest/ProgrammaticNavigationCases.razor
+++ b/src/Components/test/testassets/BasicTestApp/RouterTest/ProgrammaticNavigationCases.razor
@@ -15,6 +15,10 @@
Programmatic navigation with force-load
</button>
+<button id="do-other-navigation-forced-state" @onclick="@(() => NavigationManager.NavigateTo("Other", new NavigationOptions{ HistoryEntryState = "state", ForceLoad = true }))">
+ Programmatic navigation (NavigationOptions overload) with force-load and state
+</button>
+
<button id="do-other-navigation-replacehistoryentry" @onclick="@(() => NavigationManager.NavigateTo("Other", replace: true))">
Programmatic navigation with replace
</button>
@@ -22,3 +26,11 @@
<button id="do-other-navigation-forced-replacehistoryentry" @onclick="@(() => NavigationManager.NavigateTo("Other", forceLoad: true, replace: true))">
Programmatic navigation with force-load and replace
</button>
+
+<button id="do-other-navigation-state" @onclick="@(() => NavigationManager.NavigateTo("Other", new NavigationOptions { HistoryEntryState = "state" }))">
+ Programmatic navigation (NavigationOptions overload) with state
+</button>
+
+<button id="do-other-navigation-state-replacehistoryentry" @onclick="@(() => NavigationManager.NavigateTo("Other", new NavigationOptions { HistoryEntryState = "state", ReplaceHistoryEntry = true }))">
+ Programmatic navigation (NavigationOptions overload) with replace and state
+</button>
diff --git a/src/DataProtection/DataProtection/src/Repositories/DefaultKeyStorageDirectories.cs b/src/DataProtection/DataProtection/src/Repositories/DefaultKeyStorageDirectories.cs
index 4e2f901bea..d68854df3a 100644
--- a/src/DataProtection/DataProtection/src/Repositories/DefaultKeyStorageDirectories.cs
+++ b/src/DataProtection/DataProtection/src/Repositories/DefaultKeyStorageDirectories.cs
@@ -36,8 +36,7 @@ internal sealed class DefaultKeyStorageDirectories : IDefaultKeyStorageDirectori
// Environment.GetFolderPath returns null if the user profile isn't loaded.
var localAppDataFromSystemPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var localAppDataFromEnvPath = Environment.GetEnvironmentVariable("LOCALAPPDATA");
- var userProfilePath = Environment.GetEnvironmentVariable("USERPROFILE");
- var homePath = Environment.GetEnvironmentVariable("HOME");
+ var homePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && !string.IsNullOrEmpty(localAppDataFromSystemPath))
{
@@ -49,15 +48,17 @@ internal sealed class DefaultKeyStorageDirectories : IDefaultKeyStorageDirectori
{
retVal = GetKeyStorageDirectoryFromBaseAppDataPath(localAppDataFromEnvPath);
}
- else if (userProfilePath != null)
- {
- retVal = GetKeyStorageDirectoryFromBaseAppDataPath(Path.Combine(userProfilePath, "AppData", "Local"));
- }
else if (homePath != null)
{
- // If LOCALAPPDATA and USERPROFILE are not present but HOME is,
- // it's a good guess that this is a *NIX machine. Use *NIX conventions for a folder name.
- retVal = new DirectoryInfo(Path.Combine(homePath, ".aspnet", DataProtectionKeysFolderName));
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ retVal = GetKeyStorageDirectoryFromBaseAppDataPath(Path.Combine(homePath, "AppData", "Local"));
+ }
+ else
+ {
+ // Use*NIX conventions for a folder name.
+ retVal = new DirectoryInfo(Path.Combine(homePath, ".aspnet", DataProtectionKeysFolderName));
+ }
}
else if (!string.IsNullOrEmpty(localAppDataFromSystemPath))
{
@@ -92,7 +93,7 @@ internal sealed class DefaultKeyStorageDirectories : IDefaultKeyStorageDirectori
if (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID")))
{
var homeEnvVar = Environment.GetEnvironmentVariable("HOME");
- if (!String.IsNullOrEmpty(homeEnvVar))
+ if (!string.IsNullOrEmpty(homeEnvVar))
{
return GetKeyStorageDirectoryFromBaseAppDataPath(homeEnvVar);
}
diff --git a/src/DefaultBuilder/src/ConfigureWebHostBuilder.cs b/src/DefaultBuilder/src/ConfigureWebHostBuilder.cs
index 733f48b2a1..bd99297c8e 100644
--- a/src/DefaultBuilder/src/ConfigureWebHostBuilder.cs
+++ b/src/DefaultBuilder/src/ConfigureWebHostBuilder.cs
@@ -173,7 +173,7 @@ public sealed class ConfigureWebHostBuilder : IWebHostBuilder, ISupportsStartup
throw new NotSupportedException("Configure() is not supported by WebApplicationBuilder.WebHost. Use the WebApplication returned by WebApplicationBuilder.Build() instead.");
}
- IWebHostBuilder ISupportsStartup.UseStartup(Type startupType)
+ IWebHostBuilder ISupportsStartup.UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType)
{
throw new NotSupportedException("UseStartup() is not supported by WebApplicationBuilder.WebHost. Use the WebApplication returned by WebApplicationBuilder.Build() instead.");
}
diff --git a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj
index 669ecb8037..02df79c825 100644
--- a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj
+++ b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj
@@ -7,7 +7,7 @@
<Description>Microsoft.AspNetCore</Description>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<IsPackable>false</IsPackable>
- <Nullable>enable</Nullable>
+ <IsTrimmable>true</IsTrimmable>
</PropertyGroup>
<ItemGroup>
diff --git a/src/DefaultBuilder/src/PublicAPI.Unshipped.txt b/src/DefaultBuilder/src/PublicAPI.Unshipped.txt
index 6eba7bee0f..88ff0b5ecc 100644
--- a/src/DefaultBuilder/src/PublicAPI.Unshipped.txt
+++ b/src/DefaultBuilder/src/PublicAPI.Unshipped.txt
@@ -1,4 +1,3 @@
#nullable enable
Microsoft.AspNetCore.Builder.WebApplication.Use(System.Func<Microsoft.AspNetCore.Http.RequestDelegate!, Microsoft.AspNetCore.Http.RequestDelegate!>! middleware) -> Microsoft.AspNetCore.Builder.IApplicationBuilder!
-Microsoft.AspNetCore.Builder.WebApplicationBuilder.Authentication.get -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder!
static Microsoft.Extensions.Hosting.GenericHostBuilderExtensions.ConfigureWebHostDefaults(this Microsoft.Extensions.Hosting.IHostBuilder! builder, System.Action<Microsoft.AspNetCore.Hosting.IWebHostBuilder!>! configure, System.Action<Microsoft.Extensions.Hosting.WebHostBuilderOptions!>! configureOptions) -> Microsoft.Extensions.Hosting.IHostBuilder!
diff --git a/src/DefaultBuilder/src/StartupLinkerOptions.cs b/src/DefaultBuilder/src/StartupLinkerOptions.cs
new file mode 100644
index 0000000000..05310f1252
--- /dev/null
+++ b/src/DefaultBuilder/src/StartupLinkerOptions.cs
@@ -0,0 +1,12 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics.CodeAnalysis;
+
+namespace Microsoft.AspNetCore;
+
+internal static class StartupLinkerOptions
+{
+ // We're going to keep all public constructors and public methods on Startup classes
+ public const DynamicallyAccessedMemberTypes Accessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods;
+}
diff --git a/src/DefaultBuilder/src/WebApplicationAuthenticationBuilder.cs b/src/DefaultBuilder/src/WebApplicationAuthenticationBuilder.cs
deleted file mode 100644
index f53de4ea8f..0000000000
--- a/src/DefaultBuilder/src/WebApplicationAuthenticationBuilder.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Diagnostics.CodeAnalysis;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-internal class WebApplicationAuthenticationBuilder : AuthenticationBuilder
-{
- public bool IsAuthenticationConfigured { get; private set; }
-
- public WebApplicationAuthenticationBuilder(IServiceCollection services) : base(services) { }
-
- public override AuthenticationBuilder AddPolicyScheme(string authenticationScheme, string? displayName, Action<PolicySchemeOptions> configureOptions)
- {
- RegisterServices();
- return base.AddPolicyScheme(authenticationScheme, displayName, configureOptions);
- }
-
- public override AuthenticationBuilder AddRemoteScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, string? displayName, Action<TOptions>? configureOptions)
- {
- RegisterServices();
- return base.AddRemoteScheme<TOptions, THandler>(authenticationScheme, displayName, configureOptions);
- }
-
- public override AuthenticationBuilder AddScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, string? displayName, Action<TOptions>? configureOptions)
- {
- RegisterServices();
- return base.AddScheme<TOptions, THandler>(authenticationScheme, displayName, configureOptions);
- }
-
- public override AuthenticationBuilder AddScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, Action<TOptions>? configureOptions)
- {
- RegisterServices();
- return base.AddScheme<TOptions, THandler>(authenticationScheme, configureOptions);
- }
-
- private void RegisterServices()
- {
- if (!IsAuthenticationConfigured)
- {
- IsAuthenticationConfigured = true;
- Services.AddAuthentication();
- Services.AddAuthorization();
- }
- }
-}
diff --git a/src/DefaultBuilder/src/WebApplicationBuilder.cs b/src/DefaultBuilder/src/WebApplicationBuilder.cs
index d081da2532..d002acd3a5 100644
--- a/src/DefaultBuilder/src/WebApplicationBuilder.cs
+++ b/src/DefaultBuilder/src/WebApplicationBuilder.cs
@@ -3,6 +3,7 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Authentication;
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -18,10 +19,10 @@ public sealed class WebApplicationBuilder
{
private const string EndpointRouteBuilderKey = "__EndpointRouteBuilder";
private const string AuthenticationMiddlewareSetKey = "__AuthenticationMiddlewareSet";
+ private const string AuthorizationMiddlewareSetKey = "__AuthorizationMiddlewareSet";
private readonly HostApplicationBuilder _hostApplicationBuilder;
private readonly ServiceDescriptor _genericWebHostServiceDescriptor;
- private readonly WebApplicationAuthenticationBuilder _webAuthBuilder;
private WebApplication? _builtApplication;
@@ -82,7 +83,6 @@ public sealed class WebApplicationBuilder
Host = new ConfigureHostBuilder(bootstrapHostBuilder.Context, Configuration, Services);
WebHost = new ConfigureWebHostBuilder(webHostContext, Configuration, Services);
- _webAuthBuilder = new WebApplicationAuthenticationBuilder(Services);
}
/// <summary>
@@ -118,11 +118,6 @@ public sealed class WebApplicationBuilder
public ConfigureHostBuilder Host { get; }
/// <summary>
- /// An <see cref="AuthenticationBuilder"/> for configuring authentication-related properties.
- /// </summary>
- public AuthenticationBuilder Authentication => _webAuthBuilder;
-
- /// <summary>
/// Builds the <see cref="WebApplication"/>.
/// </summary>
/// <returns>A configured <see cref="WebApplication"/>.</returns>
@@ -175,15 +170,25 @@ public sealed class WebApplicationBuilder
}
}
- if (_webAuthBuilder.IsAuthenticationConfigured)
+ // Process authorization and authentication middlewares independently to avoid
+ // registering middlewares for services that do not exist
+ if (_builtApplication.Services.GetService<IAuthenticationSchemeProvider>() is not null)
{
// Don't add more than one instance of the middleware
if (!_builtApplication.Properties.ContainsKey(AuthenticationMiddlewareSetKey))
{
// The Use invocations will set the property on the outer pipeline,
- // but we want to set it on the inner pipeline as well
+ // but we want to set it on the inner pipeline as well.
_builtApplication.Properties[AuthenticationMiddlewareSetKey] = true;
app.UseAuthentication();
+ }
+ }
+
+ if (_builtApplication.Services.GetService<IAuthorizationHandlerProvider>() is not null)
+ {
+ if (!_builtApplication.Properties.ContainsKey(AuthorizationMiddlewareSetKey))
+ {
+ _builtApplication.Properties[AuthorizationMiddlewareSetKey] = true;
app.UseAuthorization();
}
}
diff --git a/src/DefaultBuilder/src/WebHost.cs b/src/DefaultBuilder/src/WebHost.cs
index dcbca157bb..6dfa2eac63 100644
--- a/src/DefaultBuilder/src/WebHost.cs
+++ b/src/DefaultBuilder/src/WebHost.cs
@@ -1,6 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.HostFiltering;
@@ -269,6 +270,6 @@ public static class WebHost
/// <typeparam name ="TStartup">The type containing the startup methods for the application.</typeparam>
/// <param name="args">The command line args.</param>
/// <returns>The initialized <see cref="IWebHostBuilder"/>.</returns>
- public static IWebHostBuilder CreateDefaultBuilder<TStartup>(string[] args) where TStartup : class =>
+ public static IWebHostBuilder CreateDefaultBuilder<[DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] TStartup>(string[] args) where TStartup : class =>
CreateDefaultBuilder(args).UseStartup<TStartup>();
}
diff --git a/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs
index c902bb1d59..be105ab922 100644
--- a/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs
+++ b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Net.Http;
@@ -126,7 +126,7 @@ public class WebHostFunctionalTests : LoggedTest
logger.Log(LogLevel.Information, 0, "Message", null, (s, e) =>
{
- Assert.True(false);
+ Assert.True(false, "Information log when log level set to warning in config");
return string.Empty;
});
diff --git a/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs b/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs
index 5f74a0954d..fd4bda6dca 100644
--- a/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs
+++ b/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs
@@ -1990,11 +1990,9 @@ public class WebApplicationTests
var username = "foobar";
var builder = WebApplication.CreateBuilder();
- builder.Services.AddAuthenticationCore(o =>
- {
- o.DefaultScheme = "testSchemeName";
- });
- builder.Authentication.AddScheme<AuthenticationSchemeOptions, UberHandler>("testSchemeName", "testDisplayName", _ => { });
+ builder.Services.AddAuthorization();
+ builder.Services.AddAuthentication("testSchemeName")
+ .AddScheme<AuthenticationSchemeOptions, UberHandler>("testSchemeName", "testDisplayName", _ => { });
builder.WebHost.UseTestServer();
await using var app = builder.Build();
@@ -2027,6 +2025,43 @@ public class WebApplicationTests
Assert.True(customMiddlewareExecuted);
}
+ [Fact]
+ public async Task SupportsDisablingMiddlewareAutoRegistration()
+ {
+ var builder = WebApplication.CreateBuilder();
+ builder.Services.AddAuthorization();
+ builder.Services.AddAuthentication("testSchemeName")
+ .AddScheme<AuthenticationSchemeOptions, UberHandler>("testSchemeName", "testDisplayName", _ => { });
+ builder.WebHost.UseTestServer();
+ await using var app = builder.Build();
+
+ app.Use(next =>
+ {
+ return async context =>
+ {
+ // IAuthenticationFeature is added by the authentication middleware
+ // during invocation. This middleware should run after authentication
+ // and be able to access the feature.
+ var authFeature = context.Features.Get<IAuthenticationFeature>();
+ Assert.Null(authFeature);
+ Assert.Null(context.User.Identity.Name);
+ await next(context);
+ };
+ });
+
+ app.Properties["__AuthenticationMiddlewareSet"] = true;
+
+ app.MapGet("/hello", (ClaimsPrincipal user) => {}).AllowAnonymous();
+
+ Assert.True(app.Properties.ContainsKey("__AuthenticationMiddlewareSet"));
+ Assert.False(app.Properties.ContainsKey("__AuthorizationMiddlewareSet"));
+
+ await app.StartAsync();
+
+ Assert.True(app.Properties.ContainsKey("__AuthenticationMiddlewareSet"));
+ Assert.True(app.Properties.ContainsKey("__AuthorizationMiddlewareSet"));
+ }
+
private class UberHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public UberHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { }
diff --git a/src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs b/src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs
index 12505fe547..08f0860ad7 100644
--- a/src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs
+++ b/src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs
@@ -89,6 +89,15 @@ internal static class DiagnosticDescriptors
isEnabledByDefault: true,
helpLinkUri: "https://aka.ms/aspnet/analyzers");
+ internal static readonly DiagnosticDescriptor DoNotUseHostConfigureServices = new(
+ "ASP0012",
+ "Suggest using builder.Services over Host.ConfigureServices or WebHost.ConfigureServices",
+ "Suggest using builder.Services instead of {0}",
+ "Usage",
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true,
+ helpLinkUri: "https://aka.ms/aspnet/analyzers");
+
internal static readonly DiagnosticDescriptor DisallowConfigureAppConfigureHostBuilder = new(
"ASP0013",
"Suggest using WebApplicationBuilder.Configuration over Configure methods",
diff --git a/src/Framework/AspNetCoreAnalyzers/src/Analyzers/WebApplicationBuilder/WebApplicationBuilderAnalyzer.cs b/src/Framework/AspNetCoreAnalyzers/src/Analyzers/WebApplicationBuilder/WebApplicationBuilderAnalyzer.cs
index a538dbc22a..e920d5841d 100644
--- a/src/Framework/AspNetCoreAnalyzers/src/Analyzers/WebApplicationBuilder/WebApplicationBuilderAnalyzer.cs
+++ b/src/Framework/AspNetCoreAnalyzers/src/Analyzers/WebApplicationBuilder/WebApplicationBuilderAnalyzer.cs
@@ -22,6 +22,7 @@ public class WebApplicationBuilderAnalyzer : DiagnosticAnalyzer
DiagnosticDescriptors.DoNotUseConfigureWithConfigureWebHostBuilder,
DiagnosticDescriptors.DoNotUseUseStartupWithConfigureWebHostBuilder,
DiagnosticDescriptors.DoNotUseHostConfigureLogging,
+ DiagnosticDescriptors.DoNotUseHostConfigureServices,
DiagnosticDescriptors.DisallowConfigureAppConfigureHostBuilder
});
@@ -51,6 +52,11 @@ public class WebApplicationBuilderAnalyzer : DiagnosticAnalyzer
wellKnownTypes.HostingHostBuilderExtensions,
wellKnownTypes.WebHostBuilderExtensions
};
+ INamedTypeSymbol[] configureServicesTypes =
+ {
+ wellKnownTypes.HostingHostBuilderExtensions,
+ wellKnownTypes.ConfigureWebHostBuilder
+ };
INamedTypeSymbol[] configureAppTypes =
{
wellKnownTypes.ConfigureHostBuilder,
@@ -145,6 +151,38 @@ public class WebApplicationBuilderAnalyzer : DiagnosticAnalyzer
invocation));
}
+ // var builder = WebApplication.CreateBuilder(args);
+ // builder.Host.ConfigureServices(x => {});
+ if (IsDisallowedMethod(
+ operationAnalysisContext,
+ invocation,
+ targetMethod,
+ wellKnownTypes.ConfigureHostBuilder,
+ "ConfigureServices",
+ configureServicesTypes))
+ {
+ operationAnalysisContext.ReportDiagnostic(
+ CreateDiagnostic(
+ DiagnosticDescriptors.DoNotUseHostConfigureServices,
+ invocation));
+ }
+
+ // var builder = WebApplication.CreateBuilder(args);
+ // builder.WebHost.ConfigureServices(x => {});
+ if (IsDisallowedMethod(
+ operationAnalysisContext,
+ invocation,
+ targetMethod,
+ wellKnownTypes.ConfigureWebHostBuilder,
+ "ConfigureServices",
+ configureServicesTypes))
+ {
+ operationAnalysisContext.ReportDiagnostic(
+ CreateDiagnostic(
+ DiagnosticDescriptors.DoNotUseHostConfigureServices,
+ invocation));
+ }
+
// var builder = WebApplication.CreateBuilder();
// builder.WebHost.ConfigureAppConfiguration(builder => {});
if (IsDisallowedMethod(
diff --git a/src/Framework/AspNetCoreAnalyzers/test/WebApplicationBuilder/DisallowConfigureServicesTest.cs b/src/Framework/AspNetCoreAnalyzers/test/WebApplicationBuilder/DisallowConfigureServicesTest.cs
new file mode 100644
index 0000000000..c8263a9dd8
--- /dev/null
+++ b/src/Framework/AspNetCoreAnalyzers/test/WebApplicationBuilder/DisallowConfigureServicesTest.cs
@@ -0,0 +1,412 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Analyzer.Testing;
+
+namespace Microsoft.AspNetCore.Analyzers.WebApplicationBuilder;
+public partial class DisallowConfigureServicesTest
+{
+ private TestDiagnosticAnalyzerRunner Runner { get; } = new(new WebApplicationBuilderAnalyzer());
+
+ [Fact]
+ public async Task DoesNotWarnWhenBuilderConfigureServicesIsNotUsed()
+ {
+ // Arrange
+ var source = @"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.Services.AddAntiforgery();
+";
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source);
+
+ // Assert
+ Assert.Empty(diagnostics);
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderHostConfigureServicesIsUsed()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.Host./*MM*/ConfigureServices(services =>
+{
+services.AddAntiforgery();
+});
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderWebHostConfigureServicesIsUsed()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.WebHost./*MM*/ConfigureServices(services =>
+{
+services.AddAntiforgery();
+});
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderHostConfigureServicesIsUsed_OnDifferentLine()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.Host.
+ /*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderWebHostConfigureServicesIsUsed_OnDifferentLine()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.WebHost.
+ /*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task DoesNotWarnWhenBuilderConfigureServicesIsNotUsed_InProgramMain()
+ {
+ // Arrange
+ var source = @"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+public static class Program
+{
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ builder.Services.AddAntiforgery();
+ }
+}
+public class Startup { }
+";
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source);
+
+ // Assert
+ Assert.Empty(diagnostics);
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderHostConfigureServicesIsUsedOnProperty_In_Program_Main()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+public static class Program
+{
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ builder.Host./*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+ }
+}
+public class Startup { }
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderWebHostConfigureServicesIsUsedOnProperty_In_Program_Main()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+public static class Program
+{
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ builder.WebHost./*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+ }
+}
+public class Startup { }
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderHostConfigureServicesIsUsed_In_Program_Main()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+public static class Program
+{
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ var host = builder.Host;
+ host./*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+ }
+}
+public class Startup { }
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderWebHostConfigureServicesIsUsed_In_Program_Main()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+public static class Program
+{
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ var webHost = builder.WebHost;
+ webHost./*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+ }
+}
+public class Startup { }
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsWhenBuilderHostConfigureServicesIsUsed_Inside_Another_Method()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+public static class Program
+{
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ ConfigureHost(builder.Host);
+ }
+
+ private static void ConfigureHost(ConfigureHostBuilder hostBuilder)
+ {
+ hostBuilder
+ ./*MM*/ConfigureServices(services =>
+ {
+ services.AddAntiforgery();
+ });
+ }
+}
+public class Startup { }
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Assert
+ var diagnostic = Assert.Single(diagnostics);
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, diagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.DefaultMarkerLocation, diagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", diagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsTwiceWhenBuilderHostConfigureServicesIsUsed_Twice()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.Host./*MM1*/ConfigureServices(services =>
+{
+ services.AddAntiforgery();
+});
+builder.Host./*MM2*/ConfigureServices(services =>
+{
+ services.AddAntiforgery();
+});
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Asserts
+ Assert.Equal(2, diagnostics.Length);
+
+ // First diagnostic
+ var firstDiagnostic = diagnostics[0];
+
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, firstDiagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.MarkerLocations["MM1"], firstDiagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", firstDiagnostic.GetMessage(CultureInfo.InvariantCulture));
+
+ // Second diagnostic
+ var secondDiagnostic = diagnostics[1];
+
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, secondDiagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.MarkerLocations["MM2"], secondDiagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", secondDiagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+ [Fact]
+ public async Task WarnsTwiceWhenBuilderWebHostConfigureServicesIsUsed_Twice()
+ {
+ // Arrange
+ var source = TestSource.Read(@"
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Hosting;
+var builder = WebApplication.CreateBuilder(args);
+builder.WebHost./*MM1*/ConfigureServices(services =>
+{
+ services.AddAntiforgery();
+});
+builder.WebHost./*MM2*/ConfigureServices(services =>
+{
+ services.AddAntiforgery();
+});
+");
+
+ // Act
+ var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
+
+ // Asserts
+ Assert.Equal(2, diagnostics.Length);
+
+ // First diagnostic
+ var firstDiagnostic = diagnostics[0];
+
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, firstDiagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.MarkerLocations["MM1"], firstDiagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", firstDiagnostic.GetMessage(CultureInfo.InvariantCulture));
+
+ // Second diagnostic
+ var secondDiagnostic = diagnostics[1];
+
+ Assert.Same(DiagnosticDescriptors.DoNotUseHostConfigureServices, secondDiagnostic.Descriptor);
+ AnalyzerAssert.DiagnosticLocation(source.MarkerLocations["MM2"], secondDiagnostic.Location);
+ Assert.Equal("Suggest using builder.Services instead of ConfigureServices", secondDiagnostic.GetMessage(CultureInfo.InvariantCulture));
+ }
+
+}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/AnyConverter.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/AnyConverter.cs
index 3c870e8fc0..abc487ffae 100644
--- a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/AnyConverter.cs
+++ b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/AnyConverter.cs
@@ -86,9 +86,27 @@ internal sealed class AnyConverter<TMessage> : SettingsConverterBase<TMessage> w
}
else
{
- MessageConverter<Any>.WriteMessageFields(writer, valueMessage, Context.Settings, options);
+ WriteMessageFields(writer, valueMessage, Context.Settings, options);
}
writer.WriteEndObject();
}
+
+ internal static void WriteMessageFields(Utf8JsonWriter writer, IMessage message, GrpcJsonSettings settings, JsonSerializerOptions options)
+ {
+ var fields = message.Descriptor.Fields;
+
+ foreach (var field in fields.InFieldNumberOrder())
+ {
+ var accessor = field.Accessor;
+ var value = accessor.GetValue(message);
+ if (!JsonConverterHelper.ShouldFormatFieldValue(message, field, value, !settings.IgnoreDefaultValues))
+ {
+ continue;
+ }
+
+ writer.WritePropertyName(accessor.Descriptor.JsonName);
+ JsonSerializer.Serialize(writer, value, value.GetType(), options);
+ }
+ }
}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForMessage.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForMessage.cs
deleted file mode 100644
index a2e8abd17f..0000000000
--- a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForMessage.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Reflection;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-using Google.Protobuf;
-using Type = System.Type;
-
-namespace Microsoft.AspNetCore.Grpc.JsonTranscoding.Internal.Json;
-
-internal sealed class JsonConverterFactoryForMessage : JsonConverterFactory
-{
- private readonly JsonContext _context;
-
- public JsonConverterFactoryForMessage(JsonContext context)
- {
- _context = context;
- }
-
- public override bool CanConvert(Type typeToConvert)
- {
- return typeof(IMessage).IsAssignableFrom(typeToConvert);
- }
-
- public override JsonConverter CreateConverter(
- Type typeToConvert, JsonSerializerOptions options)
- {
- JsonConverter converter = (JsonConverter)Activator.CreateInstance(
- typeof(MessageConverter<>).MakeGenericType(new Type[] { typeToConvert }),
- BindingFlags.Instance | BindingFlags.Public,
- binder: null,
- args: new object[] { _context },
- culture: null)!;
-
- return converter;
- }
-}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForWellKnownTypes.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForWellKnownTypes.cs
index d7e84e6c74..adf96c9cdd 100644
--- a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForWellKnownTypes.cs
+++ b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterFactoryForWellKnownTypes.cs
@@ -5,7 +5,6 @@ using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
using Google.Protobuf;
-using Google.Protobuf.WellKnownTypes;
using Type = System.Type;
namespace Microsoft.AspNetCore.Grpc.JsonTranscoding.Internal.Json;
@@ -32,14 +31,14 @@ internal sealed class JsonConverterFactoryForWellKnownTypes : JsonConverterFacto
return false;
}
- return WellKnownTypeNames.ContainsKey(descriptor.FullName);
+ return JsonConverterHelper.WellKnownTypeNames.ContainsKey(descriptor.FullName);
}
public override JsonConverter CreateConverter(
Type typeToConvert, JsonSerializerOptions options)
{
var descriptor = JsonConverterHelper.GetMessageDescriptor(typeToConvert)!;
- var converterType = WellKnownTypeNames[descriptor.FullName];
+ var converterType = JsonConverterHelper.WellKnownTypeNames[descriptor.FullName];
var converter = (JsonConverter)Activator.CreateInstance(
converterType.MakeGenericType(new Type[] { typeToConvert }),
@@ -50,15 +49,4 @@ internal sealed class JsonConverterFactoryForWellKnownTypes : JsonConverterFacto
return converter;
}
-
- private static readonly Dictionary<string, Type> WellKnownTypeNames = new Dictionary<string, Type>
- {
- [Any.Descriptor.FullName] = typeof(AnyConverter<>),
- [Duration.Descriptor.FullName] = typeof(DurationConverter<>),
- [Timestamp.Descriptor.FullName] = typeof(TimestampConverter<>),
- [FieldMask.Descriptor.FullName] = typeof(FieldMaskConverter<>),
- [Struct.Descriptor.FullName] = typeof(StructConverter<>),
- [ListValue.Descriptor.FullName] = typeof(ListValueConverter<>),
- [Value.Descriptor.FullName] = typeof(ValueConverter<>),
- };
}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterHelper.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterHelper.cs
index 385dd24880..9a8bac352a 100644
--- a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterHelper.cs
+++ b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/JsonConverterHelper.cs
@@ -6,7 +6,9 @@ using System.Reflection;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
+using System.Text.Json.Serialization.Metadata;
using Google.Protobuf;
+using Google.Protobuf.Collections;
using Google.Protobuf.Reflection;
using Google.Protobuf.WellKnownTypes;
using Grpc.Shared;
@@ -18,17 +20,33 @@ internal static class JsonConverterHelper
{
internal const int WrapperValueFieldNumber = Int32Value.ValueFieldNumber;
+ internal static readonly Dictionary<string, Type> WellKnownTypeNames = new Dictionary<string, Type>
+ {
+ [Any.Descriptor.FullName] = typeof(AnyConverter<>),
+ [Duration.Descriptor.FullName] = typeof(DurationConverter<>),
+ [Timestamp.Descriptor.FullName] = typeof(TimestampConverter<>),
+ [FieldMask.Descriptor.FullName] = typeof(FieldMaskConverter<>),
+ [Struct.Descriptor.FullName] = typeof(StructConverter<>),
+ [ListValue.Descriptor.FullName] = typeof(ListValueConverter<>),
+ [Value.Descriptor.FullName] = typeof(ValueConverter<>),
+ };
+
internal static JsonSerializerOptions CreateSerializerOptions(JsonContext context, bool isStreamingOptions = false)
{
// Streaming is line delimited between messages. That means JSON can't be indented as it adds new lines.
// For streaming to work, indenting must be disabled when streaming.
var writeIndented = !isStreamingOptions ? context.Settings.WriteIndented : false;
+ var typeInfoResolver = JsonTypeInfoResolver.Combine(
+ new MessageTypeInfoResolver(context),
+ new DefaultJsonTypeInfoResolver());
+
var options = new JsonSerializerOptions
{
WriteIndented = writeIndented,
NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals,
- Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
+ Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
+ TypeInfoResolver = typeInfoResolver
};
options.Converters.Add(new NullValueConverter());
options.Converters.Add(new ByteStringConverter());
@@ -38,13 +56,34 @@ internal static class JsonConverterHelper
options.Converters.Add(new JsonConverterFactoryForEnum(context));
options.Converters.Add(new JsonConverterFactoryForWrappers(context));
options.Converters.Add(new JsonConverterFactoryForWellKnownTypes(context));
- options.Converters.Add(new JsonConverterFactoryForMessage(context));
return options;
}
internal static Type GetFieldType(FieldDescriptor descriptor)
{
+ if (descriptor.IsMap)
+ {
+ var mapFields = descriptor.MessageType.Fields.InFieldNumberOrder();
+ var keyField = mapFields[0];
+ var valueField = mapFields[1];
+
+ return typeof(MapField<,>).MakeGenericType(GetFieldTypeCore(keyField), GetFieldTypeCore(valueField));
+ }
+ else if (descriptor.IsRepeated)
+ {
+ var itemType = GetFieldTypeCore(descriptor);
+
+ return typeof(RepeatedField<>).MakeGenericType(itemType);
+ }
+ else
+ {
+ return GetFieldTypeCore(descriptor);
+ }
+ }
+
+ private static Type GetFieldTypeCore(FieldDescriptor descriptor)
+ {
switch (descriptor.FieldType)
{
case FieldType.Bool:
@@ -85,6 +124,7 @@ internal static class JsonConverterHelper
return t;
}
+
return descriptor.MessageType.ClrType;
default:
throw new ArgumentException("Invalid field type");
@@ -124,7 +164,8 @@ internal static class JsonConverterHelper
public static void PopulateList(ref Utf8JsonReader reader, JsonSerializerOptions options, IMessage message, FieldDescriptor fieldDescriptor)
{
var fieldType = GetFieldType(fieldDescriptor);
- var repeatedFieldType = typeof(List<>).MakeGenericType(fieldType);
+ var itemType = fieldType.GetGenericArguments()[0];
+ var repeatedFieldType = typeof(List<>).MakeGenericType(itemType);
var newValues = (IList)JsonSerializer.Deserialize(ref reader, repeatedFieldType, options)!;
var existingValue = (IList)fieldDescriptor.Accessor.GetValue(message);
@@ -133,4 +174,67 @@ internal static class JsonConverterHelper
existingValue.Add(item);
}
}
+
+ /// <summary>
+ /// Determines whether or not a field value should be serialized according to the field,
+ /// its value in the message, and the settings of this formatter.
+ /// </summary>
+ public static bool ShouldFormatFieldValue(IMessage message, FieldDescriptor field, object? value, bool formatDefaultValues) =>
+ field.HasPresence
+ // Fields that support presence *just* use that
+ ? field.Accessor.HasValue(message)
+ // Otherwise, format if either we've been asked to format default values, or if it's
+ // not a default value anyway.
+ : formatDefaultValues || !IsDefaultValue(field, value);
+
+ private static bool IsDefaultValue(FieldDescriptor descriptor, object? value)
+ {
+ if (value == null)
+ {
+ return true;
+ }
+ if (descriptor.IsMap)
+ {
+ var dictionary = (IDictionary)value;
+ return dictionary.Count == 0;
+ }
+ if (descriptor.IsRepeated)
+ {
+ var list = (IList)value;
+ return list.Count == 0;
+ }
+ switch (descriptor.FieldType)
+ {
+ case FieldType.Bool:
+ return (bool)value == false;
+ case FieldType.Bytes:
+ return (ByteString)value == ByteString.Empty;
+ case FieldType.String:
+ return (string)value == string.Empty;
+ case FieldType.Double:
+ return (double)value == 0.0;
+ case FieldType.SInt32:
+ case FieldType.Int32:
+ case FieldType.SFixed32:
+ case FieldType.Enum:
+ return (int)value == 0;
+ case FieldType.Fixed32:
+ case FieldType.UInt32:
+ return (uint)value == 0;
+ case FieldType.Fixed64:
+ case FieldType.UInt64:
+ return (ulong)value == 0;
+ case FieldType.SFixed64:
+ case FieldType.Int64:
+ case FieldType.SInt64:
+ return (long)value == 0;
+ case FieldType.Float:
+ return (float)value == 0f;
+ case FieldType.Message:
+ case FieldType.Group: // Never expect to get this, but...
+ return value == null;
+ default:
+ throw new ArgumentException("Invalid field type");
+ }
+ }
}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageConverter.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageConverter.cs
deleted file mode 100644
index 574cc8a564..0000000000
--- a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageConverter.cs
+++ /dev/null
@@ -1,187 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.Collections;
-using System.Text.Json;
-using Google.Protobuf;
-using Google.Protobuf.Reflection;
-using Type = System.Type;
-
-namespace Microsoft.AspNetCore.Grpc.JsonTranscoding.Internal.Json;
-
-// This converter should be temporary until System.Text.Json supports overriding contacts.
-// We want to eliminate this converter because System.Text.Json has to buffer content in converters.
-internal sealed class MessageConverter<TMessage> : SettingsConverterBase<TMessage> where TMessage : IMessage, new()
-{
- private readonly Dictionary<string, FieldDescriptor> _jsonFieldMap;
-
- public MessageConverter(JsonContext context) : base(context)
- {
- _jsonFieldMap = CreateJsonFieldMap((new TMessage()).Descriptor.Fields.InFieldNumberOrder());
- }
-
- public override TMessage Read(
- ref Utf8JsonReader reader,
- Type typeToConvert,
- JsonSerializerOptions options)
- {
- var message = new TMessage();
-
- if (reader.TokenType != JsonTokenType.StartObject)
- {
- throw new JsonException($"Unexpected JSON token: {reader.TokenType}");
- }
-
- while (reader.Read())
- {
- switch (reader.TokenType)
- {
- case JsonTokenType.EndObject:
- return message;
- case JsonTokenType.PropertyName:
- if (_jsonFieldMap.TryGetValue(reader.GetString()!, out var fieldDescriptor))
- {
- if (fieldDescriptor.ContainingOneof != null)
- {
- if (fieldDescriptor.ContainingOneof.Accessor.GetCaseFieldDescriptor(message) != null)
- {
- throw new InvalidOperationException($"Multiple values specified for oneof {fieldDescriptor.ContainingOneof.Name}.");
- }
- }
-
- if (fieldDescriptor.IsMap)
- {
- JsonConverterHelper.PopulateMap(ref reader, options, message, fieldDescriptor);
- }
- else if (fieldDescriptor.IsRepeated)
- {
- JsonConverterHelper.PopulateList(ref reader, options, message, fieldDescriptor);
- }
- else
- {
- var fieldType = JsonConverterHelper.GetFieldType(fieldDescriptor);
- var propertyValue = JsonSerializer.Deserialize(ref reader, fieldType, options);
- fieldDescriptor.Accessor.SetValue(message, propertyValue);
- }
- }
- else
- {
- reader.Skip();
- }
- break;
- case JsonTokenType.Comment:
- // Ignore
- break;
- default:
- throw new InvalidOperationException($"Unexpected JSON token: {reader.TokenType}");
- }
- }
-
- throw new Exception();
- }
-
- public override void Write(
- Utf8JsonWriter writer,
- TMessage value,
- JsonSerializerOptions options)
- {
- WriteMessage(writer, value, options);
- }
-
- private void WriteMessage(Utf8JsonWriter writer, IMessage message, JsonSerializerOptions options)
- {
- writer.WriteStartObject();
-
- WriteMessageFields(writer, message, Context.Settings, options);
-
- writer.WriteEndObject();
- }
-
- internal static void WriteMessageFields(Utf8JsonWriter writer, IMessage message, GrpcJsonSettings settings, JsonSerializerOptions options)
- {
- var fields = message.Descriptor.Fields;
-
- foreach (var field in fields.InFieldNumberOrder())
- {
- var accessor = field.Accessor;
- var value = accessor.GetValue(message);
- if (!ShouldFormatFieldValue(message, field, value, !settings.IgnoreDefaultValues))
- {
- continue;
- }
-
- writer.WritePropertyName(accessor.Descriptor.JsonName);
- JsonSerializer.Serialize(writer, value, value.GetType(), options);
- }
- }
-
- private static Dictionary<string, FieldDescriptor> CreateJsonFieldMap(IList<FieldDescriptor> fields)
- {
- var map = new Dictionary<string, FieldDescriptor>();
- foreach (var field in fields)
- {
- map[field.Name] = field;
- map[field.JsonName] = field;
- }
- return new Dictionary<string, FieldDescriptor>(map);
- }
-
- /// <summary>
- /// Determines whether or not a field value should be serialized according to the field,
- /// its value in the message, and the settings of this formatter.
- /// </summary>
- private static bool ShouldFormatFieldValue(IMessage message, FieldDescriptor field, object value, bool formatDefaultValues) =>
- field.HasPresence
- // Fields that support presence *just* use that
- ? field.Accessor.HasValue(message)
- // Otherwise, format if either we've been asked to format default values, or if it's
- // not a default value anyway.
- : formatDefaultValues || !IsDefaultValue(field, value);
-
- private static bool IsDefaultValue(FieldDescriptor descriptor, object value)
- {
- if (descriptor.IsMap)
- {
- IDictionary dictionary = (IDictionary)value;
- return dictionary.Count == 0;
- }
- if (descriptor.IsRepeated)
- {
- IList list = (IList)value;
- return list.Count == 0;
- }
- switch (descriptor.FieldType)
- {
- case FieldType.Bool:
- return (bool)value == false;
- case FieldType.Bytes:
- return (ByteString)value == ByteString.Empty;
- case FieldType.String:
- return (string)value == "";
- case FieldType.Double:
- return (double)value == 0.0;
- case FieldType.SInt32:
- case FieldType.Int32:
- case FieldType.SFixed32:
- case FieldType.Enum:
- return (int)value == 0;
- case FieldType.Fixed32:
- case FieldType.UInt32:
- return (uint)value == 0;
- case FieldType.Fixed64:
- case FieldType.UInt64:
- return (ulong)value == 0;
- case FieldType.SFixed64:
- case FieldType.Int64:
- case FieldType.SInt64:
- return (long)value == 0;
- case FieldType.Float:
- return (float)value == 0f;
- case FieldType.Message:
- case FieldType.Group: // Never expect to get this, but...
- return value == null;
- default:
- throw new ArgumentException("Invalid field type");
- }
- }
-}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageTypeInfoResolver.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageTypeInfoResolver.cs
new file mode 100644
index 0000000000..212924a3b1
--- /dev/null
+++ b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/Json/MessageTypeInfoResolver.cs
@@ -0,0 +1,177 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Text.Json;
+using System.Text.Json.Serialization.Metadata;
+using Google.Protobuf;
+using Google.Protobuf.Reflection;
+using Grpc.Shared;
+using Type = System.Type;
+
+namespace Microsoft.AspNetCore.Grpc.JsonTranscoding.Internal.Json;
+
+internal sealed class MessageTypeInfoResolver : IJsonTypeInfoResolver
+{
+ private readonly JsonContext _context;
+
+ public MessageTypeInfoResolver(JsonContext context)
+ {
+ _context = context;
+ }
+
+ public JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options)
+ {
+ if (!IsStandardMessage(type, out var messageDescriptor))
+ {
+ return null;
+ }
+
+ var typeInfo = JsonTypeInfo.CreateJsonTypeInfo(type, options);
+ typeInfo.CreateObject = () => Activator.CreateInstance(type)!;
+
+ var fields = messageDescriptor.Fields.InFieldNumberOrder();
+
+ // The field map can have multiple entries for a property:
+ // 1. The JSON field name, e.g. firstName. This is used to serialize and deserialize JSON.
+ // 2. The original field name, e.g. first_name. This might be different. It is only used to deserialize JSON.
+ var mappings = CreateJsonFieldMap(fields);
+
+ foreach (var field in fields)
+ {
+ var propertyInfo = CreatePropertyInfo(typeInfo, field.JsonName, field, isSerializable: true);
+ typeInfo.Properties.Add(propertyInfo);
+
+ // We have a property for reading and writing the JSON name so remove from mappings.
+ mappings.Remove(field.JsonName);
+ }
+
+ // Fields have two mappings: the original field name and the camelcased JSON name.
+ // The JSON name can also be customized in proto with json_name option.
+ // Remaining mappings are for extra setter only properties.
+ foreach (var mapping in mappings)
+ {
+ var propertyInfo = CreatePropertyInfo(typeInfo, mapping.Key, mapping.Value, isSerializable: false);
+ typeInfo.Properties.Add(propertyInfo);
+ }
+
+ return typeInfo;
+ }
+
+ private static bool IsStandardMessage(Type type, [NotNullWhen(true)] out MessageDescriptor? messageDescriptor)
+ {
+ if (!typeof(IMessage).IsAssignableFrom(type))
+ {
+ messageDescriptor = null;
+ return false;
+ }
+
+ messageDescriptor = JsonConverterHelper.GetMessageDescriptor(type);
+ if (messageDescriptor == null)
+ {
+ return false;
+ }
+
+ // Wrappers and well known types are handled by converters.
+ if (ServiceDescriptorHelpers.IsWrapperType(messageDescriptor))
+ {
+ return false;
+ }
+ if (JsonConverterHelper.WellKnownTypeNames.ContainsKey(messageDescriptor.FullName))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ private JsonPropertyInfo CreatePropertyInfo(JsonTypeInfo typeInfo, string name, FieldDescriptor field, bool isSerializable)
+ {
+ var propertyInfo = typeInfo.CreateJsonPropertyInfo(
+ JsonConverterHelper.GetFieldType(field),
+ name);
+
+ // Properties that don't have this flag set are only used to deserialize incoming JSON.
+ if (isSerializable)
+ {
+ propertyInfo.ShouldSerialize = (o, v) =>
+ {
+ return JsonConverterHelper.ShouldFormatFieldValue((IMessage)o, field, v, !_context.Settings.IgnoreDefaultValues);
+ };
+ propertyInfo.Get = (o) =>
+ {
+ return field.Accessor.GetValue((IMessage)o);
+ };
+ }
+
+ propertyInfo.Set = GetSetMethod(field);
+
+ return propertyInfo;
+ }
+
+ private static Action<object, object?> GetSetMethod(FieldDescriptor field)
+ {
+ if (field.IsMap)
+ {
+ return (o, v) =>
+ {
+ // The serializer creates a collection. Copy contents to collection on read-only property.
+ // An extra collection is being created here that's then thrown away.
+ // This will be removed once S.T.J supports deserializing onto a read-only property.
+ // https://github.com/dotnet/runtime/issues/30258
+ var existingValue = (IDictionary)field.Accessor.GetValue((IMessage)o);
+ foreach (DictionaryEntry item in (IDictionary)v!)
+ {
+ existingValue[item.Key] = item.Value;
+ }
+ };
+ }
+
+ if (field.IsRepeated)
+ {
+ return (o, v) =>
+ {
+ // The serializer creates a collection. Copy contents to collection on read-only property.
+ // An extra collection is being created here that's then thrown away.
+ // This will be removed once S.T.J supports deserializing onto a read-only property.
+ // https://github.com/dotnet/runtime/issues/30258
+ var existingValue = (IList)field.Accessor.GetValue((IMessage)o);
+ foreach (var item in (IList)v!)
+ {
+ existingValue.Add(item);
+ }
+ };
+ }
+
+ if (field.RealContainingOneof != null)
+ {
+ return (o, v) =>
+ {
+ var caseField = field.RealContainingOneof.Accessor.GetCaseFieldDescriptor((IMessage)o);
+ if (caseField != null)
+ {
+ throw new InvalidOperationException($"Multiple values specified for oneof {field.RealContainingOneof.Name}.");
+ }
+
+ field.Accessor.SetValue((IMessage)o, v);
+ };
+ }
+
+ return (o, v) =>
+ {
+ field.Accessor.SetValue((IMessage)o, v);
+ };
+ }
+
+ private static Dictionary<string, FieldDescriptor> CreateJsonFieldMap(IList<FieldDescriptor> fields)
+ {
+ var map = new Dictionary<string, FieldDescriptor>();
+ foreach (var field in fields)
+ {
+ map[field.Name] = field;
+ map[field.JsonName] = field;
+ }
+ return map;
+ }
+}
diff --git a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/JsonRequestHelpers.cs b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/JsonRequestHelpers.cs
index 1dff5bb15d..3e0c3d4b61 100644
--- a/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/JsonRequestHelpers.cs
+++ b/src/Grpc/JsonTranscoding/src/Microsoft.AspNetCore.Grpc.JsonTranscoding/Internal/JsonRequestHelpers.cs
@@ -204,6 +204,7 @@ internal static class JsonRequestHelpers
// TODO: JsonSerializer currently doesn't support deserializing values onto an existing object or collection.
// Either update this to use new functionality in JsonSerializer or improve work-around perf.
type = JsonConverterHelper.GetFieldType(serverCallContext.DescriptorInfo.BodyFieldDescriptors.Last());
+ type = type.GetGenericArguments()[0];
type = typeof(List<>).MakeGenericType(type);
GrpcServerLog.DeserializingMessage(serverCallContext.Logger, type);
diff --git a/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterReadTests.cs b/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterReadTests.cs
index 6275a52f8d..2f4c5b9db5 100644
--- a/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterReadTests.cs
+++ b/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterReadTests.cs
@@ -21,6 +21,28 @@ public class JsonConverterReadTests
}
[Fact]
+ public void NonJsonName()
+ {
+ var json = @"{
+ ""field_name"": ""A field name""
+}";
+
+ var m = AssertReadJson<HelloRequest>(json);
+ Assert.Equal("A field name", m.FieldName);
+ }
+
+ [Fact]
+ public void JsonCustomizedName()
+ {
+ var json = @"{
+ ""json_customized_name"": ""A field name""
+}";
+
+ var m = AssertReadJson<HelloRequest>(json);
+ Assert.Equal("A field name", m.FieldName);
+ }
+
+ [Fact]
public void ReadObjectProperties()
{
var json = @"{
diff --git a/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterWriteTests.cs b/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterWriteTests.cs
index bfec7a9793..17ed25b22a 100644
--- a/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterWriteTests.cs
+++ b/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/ConverterTests/JsonConverterWriteTests.cs
@@ -22,6 +22,18 @@ public class JsonConverterWriteTests
}
[Fact]
+ public void CustomizedName()
+ {
+ var helloRequest = new HelloRequest
+ {
+ FieldName = "A field name"
+ };
+
+ AssertWrittenJson(helloRequest,
+ new GrpcJsonSettings { IgnoreDefaultValues = true });
+ }
+
+ [Fact]
public void NonAsciiString()
{
var helloRequest = new HelloRequest
diff --git a/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/Proto/transcoding.proto b/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/Proto/transcoding.proto
index bdab9232df..b28c079cc2 100644
--- a/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/Proto/transcoding.proto
+++ b/src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/Proto/transcoding.proto
@@ -180,6 +180,7 @@ message HelloRequest {
google.protobuf.ListValue list_value = 19;
google.protobuf.NullValue null_value = 20;
google.protobuf.FieldMask field_mask_value = 21;
+ string field_name = 22 [json_name="json_customized_name"];
}
message HelloReply {
diff --git a/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs b/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs
index 4c51043c9e..381a63847b 100644
--- a/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs
+++ b/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs
@@ -224,7 +224,7 @@ internal sealed class HostingApplicationDiagnostics
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026",
Justification = "The values being passed into Write have the commonly used properties being preserved with DynamicDependency.")]
- private static void WriteDiagnosticEvent<TValue>(
+ private static void WriteDiagnosticEvent<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] TValue>(
DiagnosticSource diagnosticSource, string name, TValue value)
{
diagnosticSource.Write(name, value);
@@ -413,6 +413,21 @@ internal sealed class HostingApplicationDiagnostics
}
// These are versions of DiagnosticSource.Start/StopActivity that don't allocate strings per call (see https://github.com/dotnet/corefx/issues/37055)
+ // DynamicDependency matches the properties selected in:
+ // https://github.com/dotnet/diagnostics/blob/7cc6fbef613cdfe5ff64393120d59d7a15e98bd6/src/Microsoft.Diagnostics.Monitoring.EventPipe/Configuration/HttpRequestSourceConfiguration.cs#L20-L33
+ [DynamicDependency(nameof(HttpContext.Request), typeof(HttpContext))]
+ [DynamicDependency(nameof(HttpRequest.Scheme), typeof(HttpRequest))]
+ [DynamicDependency(nameof(HttpRequest.Host), typeof(HttpRequest))]
+ [DynamicDependency(nameof(HttpRequest.PathBase), typeof(HttpRequest))]
+ [DynamicDependency(nameof(HttpRequest.QueryString), typeof(HttpRequest))]
+ [DynamicDependency(nameof(HttpRequest.Path), typeof(HttpRequest))]
+ [DynamicDependency(nameof(HttpRequest.Method), typeof(HttpRequest))]
+ [DynamicDependency(nameof(HttpRequest.Headers), typeof(HttpRequest))]
+ [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(QueryString))]
+ [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(HostString))]
+ [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(PathString))]
+ // OpenTelemetry gets the context from the context using the DefaultHttpContext.HttpContext property.
+ [DynamicDependency(nameof(DefaultHttpContext.HttpContext), typeof(DefaultHttpContext))]
private Activity StartActivity(Activity activity, HttpContext httpContext)
{
activity.Start();
@@ -420,6 +435,13 @@ internal sealed class HostingApplicationDiagnostics
return activity;
}
+ // DynamicDependency matches the properties selected in:
+ // https://github.com/dotnet/diagnostics/blob/7cc6fbef613cdfe5ff64393120d59d7a15e98bd6/src/Microsoft.Diagnostics.Monitoring.EventPipe/Configuration/HttpRequestSourceConfiguration.cs#L35-L38
+ [DynamicDependency(nameof(HttpContext.Response), typeof(HttpContext))]
+ [DynamicDependency(nameof(HttpResponse.StatusCode), typeof(HttpResponse))]
+ [DynamicDependency(nameof(HttpResponse.Headers), typeof(HttpResponse))]
+ // OpenTelemetry gets the context from the context using the DefaultHttpContext.HttpContext property.
+ [DynamicDependency(nameof(DefaultHttpContext.HttpContext), typeof(DefaultHttpContext))]
private void StopActivity(Activity activity, HttpContext httpContext)
{
// Stop sets the end time if it was unset, but we want it set before we issue the write
diff --git a/src/Hosting/Hosting/test/HostingApplicationTests.cs b/src/Hosting/Hosting/test/HostingApplicationTests.cs
index 94761ed5ee..3d263e0948 100644
--- a/src/Hosting/Hosting/test/HostingApplicationTests.cs
+++ b/src/Hosting/Hosting/test/HostingApplicationTests.cs
@@ -115,6 +115,8 @@ public class HostingApplicationTests
using var _ = dummySource.StartActivity("DummyActivity");
Assert.Same(initialActivity, activityFeature.Activity);
+ Assert.Null(activityFeature.Activity.ParentId);
+ Assert.Equal(activityFeature.Activity.Id, Activity.Current.ParentId);
Assert.NotEqual(Activity.Current, activityFeature.Activity);
// Act/Assert
@@ -156,6 +158,8 @@ public class HostingApplicationTests
using var _ = dummySource.StartActivity("DummyActivity");
Assert.Same(initialActivity, activityFeature.Activity);
+ Assert.Null(activityFeature.Activity.ParentId);
+ Assert.Equal(activityFeature.Activity.Id, Activity.Current.ParentId);
Assert.NotEqual(Activity.Current, activityFeature.Activity);
// Act/Assert
diff --git a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentResult.cs b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentResult.cs
index 588c30e58b..0a0005e29c 100644
--- a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentResult.cs
+++ b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentResult.cs
@@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting;
/// <summary>
/// Result of a deployment.
/// </summary>
-public class DeploymentResult
+public class DeploymentResult : IDisposable
{
private readonly ILoggerFactory _loggerFactory;
@@ -67,4 +67,6 @@ public class DeploymentResult
BaseAddress = new Uri(ApplicationBaseUri),
Timeout = TimeSpan.FromSeconds(200),
};
+
+ public void Dispose() => HttpClient.Dispose();
}
diff --git a/src/Http/Authentication.Abstractions/src/AuthenticationOptions.cs b/src/Http/Authentication.Abstractions/src/AuthenticationOptions.cs
index b6e543ac78..391a3ac42d 100644
--- a/src/Http/Authentication.Abstractions/src/AuthenticationOptions.cs
+++ b/src/Http/Authentication.Abstractions/src/AuthenticationOptions.cs
@@ -113,4 +113,22 @@ public class AuthenticationOptions
/// A user is considered authenticated if <see cref="ClaimsIdentity.IsAuthenticated"/> returns <see langword="true" /> for the <see cref="ClaimsPrincipal"/> associated with the HTTP request.
/// </summary>
public bool RequireAuthenticatedSignIn { get; set; } = true;
+
+ /// <summary>
+ /// If true, DefaultScheme will not automatically use a single registered scheme.
+ /// </summary>
+ private bool? _disableAutoDefaultScheme;
+ internal bool DisableAutoDefaultScheme
+ {
+ get
+ {
+ if (!_disableAutoDefaultScheme.HasValue)
+ {
+ _disableAutoDefaultScheme = AppContext.TryGetSwitch("Microsoft.AspNetCore.Authentication.SuppressAutoDefaultScheme", out var enabled) && enabled;
+ }
+
+ return _disableAutoDefaultScheme.Value;
+ }
+ set => _disableAutoDefaultScheme = value;
+ }
}
diff --git a/src/Http/Authentication.Abstractions/src/Properties/AssemblyInfo.cs b/src/Http/Authentication.Abstractions/src/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a4b0b28430
--- /dev/null
+++ b/src/Http/Authentication.Abstractions/src/Properties/AssemblyInfo.cs
@@ -0,0 +1,8 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Authentication.Core, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
+[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Authentication.Core.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
+[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Authentication.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Http/Authentication.Abstractions/src/PublicAPI.Unshipped.txt b/src/Http/Authentication.Abstractions/src/PublicAPI.Unshipped.txt
index e1d41588c9..f79cddf646 100644
--- a/src/Http/Authentication.Abstractions/src/PublicAPI.Unshipped.txt
+++ b/src/Http/Authentication.Abstractions/src/PublicAPI.Unshipped.txt
@@ -1,3 +1,4 @@
#nullable enable
Microsoft.AspNetCore.Authentication.IAuthenticationConfigurationProvider
Microsoft.AspNetCore.Authentication.IAuthenticationConfigurationProvider.AuthenticationConfiguration.get -> Microsoft.Extensions.Configuration.IConfiguration!
+
diff --git a/src/Http/Authentication.Core/src/AuthenticationSchemeProvider.cs b/src/Http/Authentication.Core/src/AuthenticationSchemeProvider.cs
index 52b35a02aa..bab572a374 100644
--- a/src/Http/Authentication.Core/src/AuthenticationSchemeProvider.cs
+++ b/src/Http/Authentication.Core/src/AuthenticationSchemeProvider.cs
@@ -47,6 +47,9 @@ public class AuthenticationSchemeProvider : IAuthenticationSchemeProvider
private readonly IDictionary<string, AuthenticationScheme> _schemes;
private readonly List<AuthenticationScheme> _requestHandlers;
+ private static readonly Task<AuthenticationScheme?> _nullScheme = Task.FromResult<AuthenticationScheme?>(null);
+ private Task<AuthenticationScheme?> _autoDefaultScheme = _nullScheme;
+
// Used as a safe return value for enumeration apis
private IEnumerable<AuthenticationScheme> _schemesCopy = Array.Empty<AuthenticationScheme>();
private IEnumerable<AuthenticationScheme> _requestHandlersCopy = Array.Empty<AuthenticationScheme>();
@@ -54,7 +57,7 @@ public class AuthenticationSchemeProvider : IAuthenticationSchemeProvider
private Task<AuthenticationScheme?> GetDefaultSchemeAsync()
=> _options.DefaultScheme != null
? GetSchemeAsync(_options.DefaultScheme)
- : Task.FromResult<AuthenticationScheme?>(null);
+ : _autoDefaultScheme;
/// <summary>
/// Returns the scheme that will be used by default for <see cref="IAuthenticationService.AuthenticateAsync(HttpContext, string)"/>.
@@ -150,6 +153,8 @@ public class AuthenticationSchemeProvider : IAuthenticationSchemeProvider
}
_schemes[scheme.Name] = scheme;
_schemesCopy = _schemes.Values.ToArray();
+ CheckAutoDefaultScheme();
+
return true;
}
}
@@ -194,6 +199,7 @@ public class AuthenticationSchemeProvider : IAuthenticationSchemeProvider
}
_schemes.Remove(name);
_schemesCopy = _schemes.Values.ToArray();
+ CheckAutoDefaultScheme();
}
}
}
@@ -201,4 +207,19 @@ public class AuthenticationSchemeProvider : IAuthenticationSchemeProvider
/// <inheritdoc />
public virtual Task<IEnumerable<AuthenticationScheme>> GetAllSchemesAsync()
=> Task.FromResult(_schemesCopy);
+
+ private void CheckAutoDefaultScheme()
+ {
+ if (!_options.DisableAutoDefaultScheme)
+ {
+ if (_schemes.Count == 1)
+ {
+ _autoDefaultScheme = Task.FromResult<AuthenticationScheme?>(_schemesCopy.First());
+ }
+ else
+ {
+ _autoDefaultScheme = _nullScheme;
+ }
+ }
+ }
}
diff --git a/src/Http/Authentication.Core/src/AuthenticationService.cs b/src/Http/Authentication.Core/src/AuthenticationService.cs
index aa35ea3060..e949edcfac 100644
--- a/src/Http/Authentication.Core/src/AuthenticationService.cs
+++ b/src/Http/Authentication.Core/src/AuthenticationService.cs
@@ -14,7 +14,6 @@ namespace Microsoft.AspNetCore.Authentication;
public class AuthenticationService : IAuthenticationService
{
private HashSet<ClaimsPrincipal>? _transformCache;
- private const string defaultSchemesOptionsMsg = "The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions) or by setting the Authentication:DefaultScheme property in configuration.";
/// <summary>
/// Constructor.
@@ -65,7 +64,7 @@ public class AuthenticationService : IAuthenticationService
scheme = defaultScheme?.Name;
if (scheme == null)
{
- throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultAuthenticateScheme found. {defaultSchemesOptionsMsg}");
+ throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultAuthenticateScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).");
}
}
@@ -113,7 +112,7 @@ public class AuthenticationService : IAuthenticationService
scheme = defaultChallengeScheme?.Name;
if (scheme == null)
{
- throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultChallengeScheme found. {defaultSchemesOptionsMsg}");
+ throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).");
}
}
@@ -141,7 +140,7 @@ public class AuthenticationService : IAuthenticationService
scheme = defaultForbidScheme?.Name;
if (scheme == null)
{
- throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultForbidScheme found. {defaultSchemesOptionsMsg}");
+ throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultForbidScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).");
}
}
@@ -187,7 +186,7 @@ public class AuthenticationService : IAuthenticationService
scheme = defaultScheme?.Name;
if (scheme == null)
{
- throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultSignInScheme found. {defaultSchemesOptionsMsg}");
+ throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultSignInScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).");
}
}
@@ -221,7 +220,7 @@ public class AuthenticationService : IAuthenticationService
scheme = defaultScheme?.Name;
if (scheme == null)
{
- throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultSignOutScheme found. {defaultSchemesOptionsMsg}");
+ throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultSignOutScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).");
}
}
diff --git a/src/Http/Authentication.Core/test/AuthenticationSchemeProviderTests.cs b/src/Http/Authentication.Core/test/AuthenticationSchemeProviderTests.cs
index c51e29201a..69f2727e7d 100644
--- a/src/Http/Authentication.Core/test/AuthenticationSchemeProviderTests.cs
+++ b/src/Http/Authentication.Core/test/AuthenticationSchemeProviderTests.cs
@@ -12,19 +12,45 @@ namespace Microsoft.AspNetCore.Authentication.Core.Test;
public class AuthenticationSchemeProviderTests
{
[Fact]
- public async Task NoDefaultsByDefault()
+ public async Task NoDefaultsWithoutAutoDefaultScheme()
{
var services = new ServiceCollection().AddOptions().AddAuthenticationCore(o =>
{
+ o.DisableAutoDefaultScheme = true;
o.AddScheme<SignInHandler>("B", "whatever");
}).BuildServiceProvider();
var provider = services.GetRequiredService<IAuthenticationSchemeProvider>();
- Assert.Null(await provider.GetDefaultForbidSchemeAsync());
- Assert.Null(await provider.GetDefaultAuthenticateSchemeAsync());
- Assert.Null(await provider.GetDefaultChallengeSchemeAsync());
- Assert.Null(await provider.GetDefaultSignInSchemeAsync());
- Assert.Null(await provider.GetDefaultSignOutSchemeAsync());
+ await VerifyAllDefaults(provider, null);
+ }
+
+ [Fact]
+ public async Task NoDefaultsWithMoreSchemes()
+ {
+ var services = new ServiceCollection().AddOptions().AddAuthenticationCore(o =>
+ {
+ o.AddScheme<SignInHandler>("A", "whatever");
+ o.AddScheme<SignInHandler>("B", "whatever");
+ }).BuildServiceProvider();
+
+ var provider = services.GetRequiredService<IAuthenticationSchemeProvider>();
+ await VerifyAllDefaults(provider, null);
+ }
+
+ [Fact]
+ public async Task DefaultSchemesUsesSingleScheme()
+ {
+ var services = new ServiceCollection().AddOptions().AddAuthenticationCore(o =>
+ {
+ o.AddScheme<SignInHandler>("B", "whatever");
+ }).BuildServiceProvider();
+
+ var provider = services.GetRequiredService<IAuthenticationSchemeProvider>();
+ Assert.Equal("B", (await provider.GetDefaultForbidSchemeAsync())!.Name);
+ Assert.Equal("B", (await provider.GetDefaultAuthenticateSchemeAsync())!.Name);
+ Assert.Equal("B", (await provider.GetDefaultChallengeSchemeAsync())!.Name);
+ Assert.Equal("B", (await provider.GetDefaultSignInSchemeAsync())!.Name);
+ Assert.Equal("B", (await provider.GetDefaultSignOutSchemeAsync())!.Name);
}
[Fact]
@@ -33,6 +59,7 @@ public class AuthenticationSchemeProviderTests
var services = new ServiceCollection().AddOptions().AddAuthenticationCore(o =>
{
o.DefaultScheme = "B";
+ o.AddScheme<SignInHandler>("A", "whatever");
o.AddScheme<SignInHandler>("B", "whatever");
}).BuildServiceProvider();
@@ -164,6 +191,68 @@ public class AuthenticationSchemeProviderTests
Assert.Same(b, c);
}
+ [Fact]
+ public async Task AutoDefaultSchemeAddRemoveWorks()
+ {
+ var services = new ServiceCollection().AddOptions().AddAuthenticationCore(o =>
+ {
+ }).BuildServiceProvider();
+
+ var provider = services.GetRequiredService<IAuthenticationSchemeProvider>();
+
+ var scheme1 = new AuthenticationScheme("signin1", "whatever", typeof(Handler));
+ var scheme2 = new AuthenticationScheme("signin2", "whatever", typeof(Handler));
+ var scheme3 = new AuthenticationScheme("signin3", "whatever", typeof(Handler));
+
+ // No schemes, so null default
+ await VerifyAllDefaults(provider, null);
+
+ // One scheme, should be default
+ Assert.True(provider.TryAddScheme(scheme1));
+ await VerifyAllDefaults(provider, scheme1);
+
+ // Still one scheme, should be default
+ Assert.False(provider.TryAddScheme(scheme1));
+ await VerifyAllDefaults(provider, scheme1);
+
+ // Two schemes, should be null
+ Assert.True(provider.TryAddScheme(scheme2));
+ await VerifyAllDefaults(provider, null);
+
+ // Three schemes, should be null
+ Assert.True(provider.TryAddScheme(scheme3));
+ await VerifyAllDefaults(provider, null);
+
+ // Remove one scheme, still two schemes, should be null
+ provider.RemoveScheme(scheme2.Name);
+ await VerifyAllDefaults(provider, null);
+
+ // Remove same scheme, still two schemes, should be null
+ provider.RemoveScheme(scheme2.Name);
+ await VerifyAllDefaults(provider, null);
+
+ // Remove a scheme, now should have a default single
+ provider.RemoveScheme(scheme1.Name);
+ await VerifyAllDefaults(provider, scheme3);
+
+ // Remove last scheme, should be no default
+ provider.RemoveScheme(scheme3.Name);
+ await VerifyAllDefaults(provider, null);
+
+ // Add a scheme again, should be default
+ Assert.True(provider.TryAddScheme(scheme2));
+ await VerifyAllDefaults(provider, scheme2);
+ }
+
+ private async Task VerifyAllDefaults(IAuthenticationSchemeProvider provider, AuthenticationScheme? expected)
+ {
+ Assert.Equal(await provider.GetDefaultForbidSchemeAsync(), expected);
+ Assert.Equal(await provider.GetDefaultAuthenticateSchemeAsync(), expected);
+ Assert.Equal(await provider.GetDefaultChallengeSchemeAsync(), expected);
+ Assert.Equal(await provider.GetDefaultSignInSchemeAsync(), expected);
+ Assert.Equal(await provider.GetDefaultSignOutSchemeAsync(), expected);
+ }
+
private class Handler : IAuthenticationHandler
{
public Task<AuthenticateResult> AuthenticateAsync()
diff --git a/src/Http/Http.Abstractions/src/HttpResults/IContentTypeHttpResult.cs b/src/Http/Http.Abstractions/src/HttpResults/IContentTypeHttpResult.cs
new file mode 100644
index 0000000000..3f115fc280
--- /dev/null
+++ b/src/Http/Http.Abstractions/src/HttpResults/IContentTypeHttpResult.cs
@@ -0,0 +1,16 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.AspNetCore.Http;
+
+/// <summary>
+/// Defines a contract that represents the result of an HTTP endpoint
+/// that contains a <see cref="ContentType"/>.
+/// </summary>
+public interface IContentTypeHttpResult
+{
+ /// <summary>
+ /// Gets the Content-Type header for the response.
+ /// </summary>
+ string? ContentType { get; }
+}
diff --git a/src/Http/Http.Abstractions/src/HttpResults/IFileHttpResult.cs b/src/Http/Http.Abstractions/src/HttpResults/IFileHttpResult.cs
new file mode 100644
index 0000000000..e5df0a5b70
--- /dev/null
+++ b/src/Http/Http.Abstractions/src/HttpResults/IFileHttpResult.cs
@@ -0,0 +1,20 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.AspNetCore.Http;
+
+/// <summary>
+/// Defines a contract that represents the file result of an HTTP endpoint.
+/// </summary>
+public interface IFileHttpResult
+{
+ /// <summary>
+ /// Gets the Content-Type header for the response.
+ /// </summary>
+ string? ContentType { get; }
+
+ /// <summary>
+ /// Gets the file name that will be used in the Content-Disposition header of the response.
+ /// </summary>
+ string? FileDownloadName { get; }
+}
diff --git a/src/Http/Http.Abstractions/src/HttpResults/INestedHttpResult.cs b/src/Http/Http.Abstractions/src/HttpResults/INestedHttpResult.cs
new file mode 100644
index 0000000000..abc47c5d75
--- /dev/null
+++ b/src/Http/Http.Abstractions/src/HttpResults/INestedHttpResult.cs
@@ -0,0 +1,17 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.AspNetCore.Http;
+
+/// <summary>
+/// Defines a contract that represents the result of an HTTP endpoint
+/// that contains a nested <see cref="IResult"/> type.
+/// </summary>
+/// <remarks>For example, <c>Results&lt;TResult1, TResult2&gt;</c> is an <see cref="INestedHttpResult"/> and will contain the returned <see cref="IResult"/>.</remarks>
+public interface INestedHttpResult
+{
+ /// <summary>
+ /// Gets the actual <see cref="IResult"/> returned by the <see cref="Endpoint"/> route handler delegate.
+ /// </summary>
+ IResult Result { get; }
+}
diff --git a/src/Http/Http.Abstractions/src/IResult.cs b/src/Http/Http.Abstractions/src/HttpResults/IResult.cs
index 7ecc2ee139..7ecc2ee139 100644
--- a/src/Http/Http.Abstractions/src/IResult.cs
+++ b/src/Http/Http.Abstractions/src/HttpResults/IResult.cs
diff --git a/src/Http/Http.Abstractions/src/HttpResults/IStatusCodeHttpResult.cs b/src/Http/Http.Abstractions/src/HttpResults/IStatusCodeHttpResult.cs
new file mode 100644
index 0000000000..fb0dab1559
--- /dev/null
+++ b/src/Http/Http.Abstractions/src/HttpResults/IStatusCodeHttpResult.cs
@@ -0,0 +1,16 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.AspNetCore.Http;
+
+/// <summary>
+/// Defines a contract that represents the result of an HTTP endpoint
+/// that contains a <see cref="StatusCode"/>.
+/// </summary>
+public interface IStatusCodeHttpResult
+{
+ /// <summary>
+ /// Gets the HTTP status code.
+ /// </summary>
+ int StatusCode { get; }
+}
diff --git a/src/Http/Http.Abstractions/src/HttpResults/IValueHttpResult.cs b/src/Http/Http.Abstractions/src/HttpResults/IValueHttpResult.cs
new file mode 100644
index 0000000000..ba86622248
--- /dev/null
+++ b/src/Http/Http.Abstractions/src/HttpResults/IValueHttpResult.cs
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.AspNetCore.Http;
+
+/// <summary>
+/// Defines a contract that represents the result of an HTTP endpoint
+/// that contains an object <see cref="Value"/>.
+/// </summary>
+public interface IValueHttpResult
+{
+ /// <summary>
+ /// Gets the object result.
+ /// </summary>
+ object? Value { get; }
+}
+
+/// <summary>
+/// Defines a contract that represents the result of an HTTP endpoint
+/// that contains a <see cref="Value"/>.
+/// </summary>
+public interface IValueHttpResult<out TValue>
+{
+ /// <summary>
+ /// Gets the object result.
+ /// </summary>
+ TValue? Value { get; }
+}
diff --git a/src/Http/Http.Abstractions/src/PublicAPI.Unshipped.txt b/src/Http/Http.Abstractions/src/PublicAPI.Unshipped.txt
index cf864b4ca5..4a603bcbfc 100644
--- a/src/Http/Http.Abstractions/src/PublicAPI.Unshipped.txt
+++ b/src/Http/Http.Abstractions/src/PublicAPI.Unshipped.txt
@@ -12,7 +12,20 @@ Microsoft.AspNetCore.Http.EndpointMetadataCollection.Enumerator.Current.get -> o
Microsoft.AspNetCore.Http.EndpointMetadataCollection.GetRequiredMetadata<T>() -> T!
Microsoft.AspNetCore.Http.IBindableFromHttpContext<TSelf>
Microsoft.AspNetCore.Http.IBindableFromHttpContext<TSelf>.BindAsync(Microsoft.AspNetCore.Http.HttpContext! context, System.Reflection.ParameterInfo! parameter) -> System.Threading.Tasks.ValueTask<TSelf?>
+Microsoft.AspNetCore.Http.IContentTypeHttpResult
+Microsoft.AspNetCore.Http.IContentTypeHttpResult.ContentType.get -> string?
+Microsoft.AspNetCore.Http.IFileHttpResult
+Microsoft.AspNetCore.Http.IFileHttpResult.ContentType.get -> string?
+Microsoft.AspNetCore.Http.IFileHttpResult.FileDownloadName.get -> string?
+Microsoft.AspNetCore.Http.INestedHttpResult
+Microsoft.AspNetCore.Http.INestedHttpResult.Result.get -> Microsoft.AspNetCore.Http.IResult!
Microsoft.AspNetCore.Http.IRouteHandlerFilter.InvokeAsync(Microsoft.AspNetCore.Http.RouteHandlerInvocationContext! context, Microsoft.AspNetCore.Http.RouteHandlerFilterDelegate! next) -> System.Threading.Tasks.ValueTask<object?>
+Microsoft.AspNetCore.Http.IStatusCodeHttpResult
+Microsoft.AspNetCore.Http.IStatusCodeHttpResult.StatusCode.get -> int
+Microsoft.AspNetCore.Http.IValueHttpResult
+Microsoft.AspNetCore.Http.IValueHttpResult.Value.get -> object?
+Microsoft.AspNetCore.Http.IValueHttpResult<TValue>
+Microsoft.AspNetCore.Http.IValueHttpResult<TValue>.Value.get -> TValue?
Microsoft.AspNetCore.Http.Metadata.IFromFormMetadata
Microsoft.AspNetCore.Http.Metadata.IFromFormMetadata.Name.get -> string?
Microsoft.AspNetCore.Http.Metadata.IRequestSizeLimitMetadata
diff --git a/src/Http/Http.Results/src/Accepted.cs b/src/Http/Http.Results/src/Accepted.cs
index 20d406d579..c73c90b166 100644
--- a/src/Http/Http.Results/src/Accepted.cs
+++ b/src/Http/Http.Results/src/Accepted.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with status code Accepted (202) and Location header.
/// Targets a registered route.
/// </summary>
-public sealed class Accepted : IResult, IEndpointMetadataProvider
+public sealed class Accepted : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="Accepted"/> class with the values
diff --git a/src/Http/Http.Results/src/AcceptedAtRoute.cs b/src/Http/Http.Results/src/AcceptedAtRoute.cs
index c67c0bd12c..3bc49f5d8f 100644
--- a/src/Http/Http.Results/src/AcceptedAtRoute.cs
+++ b/src/Http/Http.Results/src/AcceptedAtRoute.cs
@@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with status code Accepted (202) and Location header.
/// Targets a registered route.
/// </summary>
-public sealed class AcceptedAtRoute : IResult, IEndpointMetadataProvider
+public sealed class AcceptedAtRoute : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="AcceptedAtRoute"/> class with the values
diff --git a/src/Http/Http.Results/src/AcceptedAtRouteOfT.cs b/src/Http/Http.Results/src/AcceptedAtRouteOfT.cs
index e9269667f2..840c6f5802 100644
--- a/src/Http/Http.Results/src/AcceptedAtRouteOfT.cs
+++ b/src/Http/Http.Results/src/AcceptedAtRouteOfT.cs
@@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Targets a registered route.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class AcceptedAtRoute<TValue> : IResult, IEndpointMetadataProvider
+public sealed class AcceptedAtRoute<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="AcceptedAtRoute"/> class with the values
@@ -50,6 +50,8 @@ public sealed class AcceptedAtRoute<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the name of the route to use for generating the URL.
/// </summary>
diff --git a/src/Http/Http.Results/src/AcceptedOfT.cs b/src/Http/Http.Results/src/AcceptedOfT.cs
index c648ac3382..5ec65e66ef 100644
--- a/src/Http/Http.Results/src/AcceptedOfT.cs
+++ b/src/Http/Http.Results/src/AcceptedOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with status code Accepted (202) and Location header.
/// Targets a registered route.
/// </summary>
-public sealed class Accepted<TValue> : IResult, IEndpointMetadataProvider
+public sealed class Accepted<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="Accepted"/> class with the values
@@ -58,6 +58,8 @@ public sealed class Accepted<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status202Accepted"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/BadRequest.cs b/src/Http/Http.Results/src/BadRequest.cs
index 74aba5eab7..eacef99a8a 100644
--- a/src/Http/Http.Results/src/BadRequest.cs
+++ b/src/Http/Http.Results/src/BadRequest.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write an object to the response
/// with Bad Request (400) status code.
/// </summary>
-public sealed class BadRequest : IResult, IEndpointMetadataProvider
+public sealed class BadRequest : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="BadRequest"/> class with the values
diff --git a/src/Http/Http.Results/src/BadRequestOfT.cs b/src/Http/Http.Results/src/BadRequestOfT.cs
index d8a0e5ac77..09ebc56b7d 100644
--- a/src/Http/Http.Results/src/BadRequestOfT.cs
+++ b/src/Http/Http.Results/src/BadRequestOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with Bad Request (400) status code.
/// </summary>
/// <typeparam name="TValue">The type of error object that will be JSON serialized to the response body.</typeparam>
-public sealed class BadRequest<TValue> : IResult, IEndpointMetadataProvider
+public sealed class BadRequest<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="BadRequest"/> class with the values
@@ -30,6 +30,8 @@ public sealed class BadRequest<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status400BadRequest"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/Conflict.cs b/src/Http/Http.Results/src/Conflict.cs
index fb3f1e51eb..8a94401e8d 100644
--- a/src/Http/Http.Results/src/Conflict.cs
+++ b/src/Http/Http.Results/src/Conflict.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write an object to the response
/// with Conflict (409) status code.
/// </summary>
-public sealed class Conflict : IResult, IEndpointMetadataProvider
+public sealed class Conflict : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="Conflict"/> class with the values
diff --git a/src/Http/Http.Results/src/ConflictOfT.cs b/src/Http/Http.Results/src/ConflictOfT.cs
index a589c281d1..fe2fd95992 100644
--- a/src/Http/Http.Results/src/ConflictOfT.cs
+++ b/src/Http/Http.Results/src/ConflictOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with Conflict (409) status code.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class Conflict<TValue> : IResult, IEndpointMetadataProvider
+public sealed class Conflict<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="Conflict"/> class with the values
@@ -30,6 +30,8 @@ public sealed class Conflict<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status409Conflict"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/ContentHttpResult.cs b/src/Http/Http.Results/src/ContentHttpResult.cs
index 816879bc60..1d61f9709c 100644
--- a/src/Http/Http.Results/src/ContentHttpResult.cs
+++ b/src/Http/Http.Results/src/ContentHttpResult.cs
@@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="ContentHttpResult"/> that when executed
/// will produce a response with content.
/// </summary>
-public sealed partial class ContentHttpResult : IResult
+public sealed partial class ContentHttpResult : IResult, IStatusCodeHttpResult, IContentTypeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="ContentHttpResult"/> class with the values.
@@ -50,6 +50,8 @@ public sealed partial class ContentHttpResult : IResult
/// </summary>
public int? StatusCode { get; internal init; }
+ int IStatusCodeHttpResult.StatusCode => StatusCode ?? StatusCodes.Status200OK;
+
/// <summary>
/// Writes the content to the HTTP response.
/// </summary>
diff --git a/src/Http/Http.Results/src/Created.cs b/src/Http/Http.Results/src/Created.cs
index 4eb21037f7..884fc4d7b6 100644
--- a/src/Http/Http.Results/src/Created.cs
+++ b/src/Http/Http.Results/src/Created.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write an object to the response
/// with status code Created (201) and Location header.
/// </summary>
-public sealed class Created : IResult, IEndpointMetadataProvider
+public sealed class Created : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="Created"/> class with the values
diff --git a/src/Http/Http.Results/src/CreatedAtRoute.cs b/src/Http/Http.Results/src/CreatedAtRoute.cs
index 490bfb1261..a567773b42 100644
--- a/src/Http/Http.Results/src/CreatedAtRoute.cs
+++ b/src/Http/Http.Results/src/CreatedAtRoute.cs
@@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with status code Created (201) and Location header.
/// Targets a registered route.
/// </summary>
-public sealed class CreatedAtRoute : IResult, IEndpointMetadataProvider
+public sealed class CreatedAtRoute : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="CreatedAtRoute"/> class with the values
diff --git a/src/Http/Http.Results/src/CreatedAtRouteOfT.cs b/src/Http/Http.Results/src/CreatedAtRouteOfT.cs
index 325c3fdc1c..096231a264 100644
--- a/src/Http/Http.Results/src/CreatedAtRouteOfT.cs
+++ b/src/Http/Http.Results/src/CreatedAtRouteOfT.cs
@@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Targets a registered route.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class CreatedAtRoute<TValue> : IResult, IEndpointMetadataProvider
+public sealed class CreatedAtRoute<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="CreatedAtRoute"/> class with the values
@@ -50,6 +50,8 @@ public sealed class CreatedAtRoute<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the name of the route to use for generating the URL.
/// </summary>
diff --git a/src/Http/Http.Results/src/CreatedOfT.cs b/src/Http/Http.Results/src/CreatedOfT.cs
index 8589c8bbcb..51b4965f82 100644
--- a/src/Http/Http.Results/src/CreatedOfT.cs
+++ b/src/Http/Http.Results/src/CreatedOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with status code Created (201) and Location header.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class Created<TValue> : IResult, IEndpointMetadataProvider
+public sealed class Created<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="Created"/> class with the values
@@ -58,6 +58,8 @@ public sealed class Created<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status201Created"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/FileContentHttpResult.cs b/src/Http/Http.Results/src/FileContentHttpResult.cs
index 479726e79b..b8496be075 100644
--- a/src/Http/Http.Results/src/FileContentHttpResult.cs
+++ b/src/Http/Http.Results/src/FileContentHttpResult.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Represents an <see cref="IResult"/> that when executed will
/// write a file from the content to the response.
/// </summary>
-public sealed partial class FileContentHttpResult : IResult
+public sealed partial class FileContentHttpResult : IResult, IFileHttpResult, IContentTypeHttpResult
{
/// <summary>
/// Creates a new <see cref="FileContentHttpResult"/> instance with
diff --git a/src/Http/Http.Results/src/FileStreamHttpResult.cs b/src/Http/Http.Results/src/FileStreamHttpResult.cs
index 092fd6e0e9..d798c70d2f 100644
--- a/src/Http/Http.Results/src/FileStreamHttpResult.cs
+++ b/src/Http/Http.Results/src/FileStreamHttpResult.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Represents an <see cref="IResult"/> that when executed will
/// write a file from a stream to the response.
/// </summary>
-public sealed class FileStreamHttpResult : IResult
+public sealed class FileStreamHttpResult : IResult, IFileHttpResult, IContentTypeHttpResult
{
/// <summary>
/// Creates a new <see cref="FileStreamHttpResult"/> instance with
diff --git a/src/Http/Http.Results/src/JsonHttpResultOfT.cs b/src/Http/Http.Results/src/JsonHttpResultOfT.cs
index 58496fbb8c..aa1ad3fd79 100644
--- a/src/Http/Http.Results/src/JsonHttpResultOfT.cs
+++ b/src/Http/Http.Results/src/JsonHttpResultOfT.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// <summary>
/// An action result which formats the given object as JSON.
/// </summary>
-public sealed partial class JsonHttpResult<TValue> : IResult
+public sealed partial class JsonHttpResult<TValue> : IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>, IContentTypeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="Json"/> class with the values.
@@ -66,6 +66,8 @@ public sealed partial class JsonHttpResult<TValue> : IResult
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the value for the <c>Content-Type</c> header.
/// </summary>
@@ -76,6 +78,8 @@ public sealed partial class JsonHttpResult<TValue> : IResult
/// </summary>
public int? StatusCode { get; }
+ int IStatusCodeHttpResult.StatusCode => StatusCode ?? StatusCodes.Status200OK;
+
/// <inheritdoc/>
public Task ExecuteAsync(HttpContext httpContext)
{
diff --git a/src/Http/Http.Results/src/NoContent.cs b/src/Http/Http.Results/src/NoContent.cs
index a7553f706e..c1131e45d7 100644
--- a/src/Http/Http.Results/src/NoContent.cs
+++ b/src/Http/Http.Results/src/NoContent.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Represents an <see cref="IResult"/> that when executed will
/// produce an HTTP response with the No Content (204) status code.
/// </summary>
-public class NoContent : IResult, IEndpointMetadataProvider
+public class NoContent : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="NoContent"/> class.
diff --git a/src/Http/Http.Results/src/NotFound.cs b/src/Http/Http.Results/src/NotFound.cs
index 7118acac28..f871f92761 100644
--- a/src/Http/Http.Results/src/NotFound.cs
+++ b/src/Http/Http.Results/src/NotFound.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write an object to the response
/// with Not Found (404) status code.
/// </summary>
-public sealed class NotFound : IResult, IEndpointMetadataProvider
+public sealed class NotFound : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="NotFound"/> class with the values.
diff --git a/src/Http/Http.Results/src/NotFoundOfT.cs b/src/Http/Http.Results/src/NotFoundOfT.cs
index 8da3d95b1d..27adf699c0 100644
--- a/src/Http/Http.Results/src/NotFoundOfT.cs
+++ b/src/Http/Http.Results/src/NotFoundOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with Not Found (404) status code.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class NotFound<TValue> : IResult, IEndpointMetadataProvider
+public sealed class NotFound<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="NotFound"/> class with the values.
@@ -29,6 +29,8 @@ public sealed class NotFound<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; internal init; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status404NotFound"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/Ok.cs b/src/Http/Http.Results/src/Ok.cs
index 8bd80f9ba6..7c3551c119 100644
--- a/src/Http/Http.Results/src/Ok.cs
+++ b/src/Http/Http.Results/src/Ok.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write an object to the response
/// with Ok (200) status code.
/// </summary>
-public sealed class Ok : IResult, IEndpointMetadataProvider
+public sealed class Ok : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="Ok"/> class with the values.
diff --git a/src/Http/Http.Results/src/OkOfT.cs b/src/Http/Http.Results/src/OkOfT.cs
index 494f6d9a3e..b19f8d7d5d 100644
--- a/src/Http/Http.Results/src/OkOfT.cs
+++ b/src/Http/Http.Results/src/OkOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with Ok (200) status code.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class Ok<TValue> : IResult, IEndpointMetadataProvider
+public sealed class Ok<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="Ok"/> class with the values.
@@ -29,6 +29,8 @@ public sealed class Ok<TValue> : IResult, IEndpointMetadataProvider
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status200OK"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/PhysicalFileHttpResult.cs b/src/Http/Http.Results/src/PhysicalFileHttpResult.cs
index 415124218a..7b44bd6c1b 100644
--- a/src/Http/Http.Results/src/PhysicalFileHttpResult.cs
+++ b/src/Http/Http.Results/src/PhysicalFileHttpResult.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// A <see cref="PhysicalFileHttpResult"/> on execution will write a file from disk to the response
/// using mechanisms provided by the host.
/// </summary>
-public sealed partial class PhysicalFileHttpResult : IResult
+public sealed partial class PhysicalFileHttpResult : IResult, IFileHttpResult, IContentTypeHttpResult
{
/// <summary>
/// Creates a new <see cref="PhysicalFileHttpResult"/> instance with
diff --git a/src/Http/Http.Results/src/ProblemHttpResult.cs b/src/Http/Http.Results/src/ProblemHttpResult.cs
index bd7e72ff87..4ece358b8f 100644
--- a/src/Http/Http.Results/src/ProblemHttpResult.cs
+++ b/src/Http/Http.Results/src/ProblemHttpResult.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write Problem Details
/// HTTP API responses based on <see href="https://tools.ietf.org/html/rfc7807"/>
/// </summary>
-public sealed class ProblemHttpResult : IResult
+public sealed class ProblemHttpResult : IResult, IStatusCodeHttpResult, IContentTypeHttpResult, IValueHttpResult, IValueHttpResult<ProblemDetails>
{
/// <summary>
/// Creates a new <see cref="ProblemHttpResult"/> instance with
@@ -29,6 +29,10 @@ public sealed class ProblemHttpResult : IResult
/// </summary>
public ProblemDetails ProblemDetails { get; }
+ object? IValueHttpResult.Value => ProblemDetails;
+
+ ProblemDetails? IValueHttpResult<ProblemDetails>.Value => ProblemDetails;
+
/// <summary>
/// Gets the value for the <c>Content-Type</c> header: <c>application/problem+json</c>
/// </summary>
@@ -37,7 +41,7 @@ public sealed class ProblemHttpResult : IResult
/// <summary>
/// Gets the HTTP status code.
/// </summary>
- public int? StatusCode => ProblemDetails.Status;
+ public int StatusCode => ProblemDetails.Status!.Value;
/// <inheritdoc/>
public Task ExecuteAsync(HttpContext httpContext)
diff --git a/src/Http/Http.Results/src/PublicAPI.Unshipped.txt b/src/Http/Http.Results/src/PublicAPI.Unshipped.txt
index 0815b2b6de..9b498d8187 100644
--- a/src/Http/Http.Results/src/PublicAPI.Unshipped.txt
+++ b/src/Http/Http.Results/src/PublicAPI.Unshipped.txt
@@ -122,7 +122,7 @@ Microsoft.AspNetCore.Http.HttpResults.ProblemHttpResult
Microsoft.AspNetCore.Http.HttpResults.ProblemHttpResult.ContentType.get -> string!
Microsoft.AspNetCore.Http.HttpResults.ProblemHttpResult.ExecuteAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task!
Microsoft.AspNetCore.Http.HttpResults.ProblemHttpResult.ProblemDetails.get -> Microsoft.AspNetCore.Mvc.ProblemDetails!
-Microsoft.AspNetCore.Http.HttpResults.ProblemHttpResult.StatusCode.get -> int?
+Microsoft.AspNetCore.Http.HttpResults.ProblemHttpResult.StatusCode.get -> int
Microsoft.AspNetCore.Http.HttpResults.PushStreamHttpResult
Microsoft.AspNetCore.Http.HttpResults.PushStreamHttpResult.ContentType.get -> string!
Microsoft.AspNetCore.Http.HttpResults.PushStreamHttpResult.EnableRangeProcessing.get -> bool
diff --git a/src/Http/Http.Results/src/PushStreamHttpResult.cs b/src/Http/Http.Results/src/PushStreamHttpResult.cs
index b6e8d5eaa8..e9c61785d3 100644
--- a/src/Http/Http.Results/src/PushStreamHttpResult.cs
+++ b/src/Http/Http.Results/src/PushStreamHttpResult.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Represents an <see cref="IResult"/> that when executed will
/// write a file from the writer callback to the response.
/// </summary>
-public sealed class PushStreamHttpResult : IResult
+public sealed class PushStreamHttpResult : IResult, IFileHttpResult, IContentTypeHttpResult
{
private readonly Func<Stream, Task> _streamWriterCallback;
diff --git a/src/Http/Http.Results/src/ResultsOfT.Generated.cs b/src/Http/Http.Results/src/ResultsOfT.Generated.cs
index e903d00c71..c468a4e754 100644
--- a/src/Http/Http.Results/src/ResultsOfT.Generated.cs
+++ b/src/Http/Http.Results/src/ResultsOfT.Generated.cs
@@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// </remarks>
/// <typeparam name="TResult1">The first result type.</typeparam>
/// <typeparam name="TResult2">The second result type.</typeparam>
-public sealed class Results<TResult1, TResult2> : IResult, IEndpointMetadataProvider
+public sealed class Results<TResult1, TResult2> : IResult, INestedHttpResult, IEndpointMetadataProvider
where TResult1 : IResult
where TResult2 : IResult
{
@@ -80,7 +80,7 @@ public sealed class Results<TResult1, TResult2> : IResult, IEndpointMetadataProv
/// <typeparam name="TResult1">The first result type.</typeparam>
/// <typeparam name="TResult2">The second result type.</typeparam>
/// <typeparam name="TResult3">The third result type.</typeparam>
-public sealed class Results<TResult1, TResult2, TResult3> : IResult, IEndpointMetadataProvider
+public sealed class Results<TResult1, TResult2, TResult3> : IResult, INestedHttpResult, IEndpointMetadataProvider
where TResult1 : IResult
where TResult2 : IResult
where TResult3 : IResult
@@ -151,7 +151,7 @@ public sealed class Results<TResult1, TResult2, TResult3> : IResult, IEndpointMe
/// <typeparam name="TResult2">The second result type.</typeparam>
/// <typeparam name="TResult3">The third result type.</typeparam>
/// <typeparam name="TResult4">The fourth result type.</typeparam>
-public sealed class Results<TResult1, TResult2, TResult3, TResult4> : IResult, IEndpointMetadataProvider
+public sealed class Results<TResult1, TResult2, TResult3, TResult4> : IResult, INestedHttpResult, IEndpointMetadataProvider
where TResult1 : IResult
where TResult2 : IResult
where TResult3 : IResult
@@ -231,7 +231,7 @@ public sealed class Results<TResult1, TResult2, TResult3, TResult4> : IResult, I
/// <typeparam name="TResult3">The third result type.</typeparam>
/// <typeparam name="TResult4">The fourth result type.</typeparam>
/// <typeparam name="TResult5">The fifth result type.</typeparam>
-public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5> : IResult, IEndpointMetadataProvider
+public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5> : IResult, INestedHttpResult, IEndpointMetadataProvider
where TResult1 : IResult
where TResult2 : IResult
where TResult3 : IResult
@@ -320,7 +320,7 @@ public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5> :
/// <typeparam name="TResult4">The fourth result type.</typeparam>
/// <typeparam name="TResult5">The fifth result type.</typeparam>
/// <typeparam name="TResult6">The sixth result type.</typeparam>
-public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5, TResult6> : IResult, IEndpointMetadataProvider
+public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5, TResult6> : IResult, INestedHttpResult, IEndpointMetadataProvider
where TResult1 : IResult
where TResult2 : IResult
where TResult3 : IResult
diff --git a/src/Http/Http.Results/src/StatusCodeHttpResult.cs b/src/Http/Http.Results/src/StatusCodeHttpResult.cs
index 662e0fd692..36aabd9d44 100644
--- a/src/Http/Http.Results/src/StatusCodeHttpResult.cs
+++ b/src/Http/Http.Results/src/StatusCodeHttpResult.cs
@@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Represents an <see cref="IResult"/> that when executed will
/// produce an HTTP response with the given response status code.
/// </summary>
-public sealed partial class StatusCodeHttpResult : IResult
+public sealed partial class StatusCodeHttpResult : IResult, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="StatusCodeHttpResult"/> class
diff --git a/src/Http/Http.Results/src/UnauthorizedHttpResult.cs b/src/Http/Http.Results/src/UnauthorizedHttpResult.cs
index 5662c3fde0..c07990d161 100644
--- a/src/Http/Http.Results/src/UnauthorizedHttpResult.cs
+++ b/src/Http/Http.Results/src/UnauthorizedHttpResult.cs
@@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// Represents an <see cref="IResult"/> that when executed will
/// produce an HTTP response with the No Unauthorized (401) status code.
/// </summary>
-public sealed class UnauthorizedHttpResult : IResult
+public sealed class UnauthorizedHttpResult : IResult, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="UnauthorizedHttpResult"/> class.
diff --git a/src/Http/Http.Results/src/UnprocessableEntity.cs b/src/Http/Http.Results/src/UnprocessableEntity.cs
index 1b5bb29a5f..3b448149f6 100644
--- a/src/Http/Http.Results/src/UnprocessableEntity.cs
+++ b/src/Http/Http.Results/src/UnprocessableEntity.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write an object to the response
/// with Unprocessable Entity (422) status code.
/// </summary>
-public sealed class UnprocessableEntity : IResult, IEndpointMetadataProvider
+public sealed class UnprocessableEntity : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult
{
/// <summary>
/// Initializes a new instance of the <see cref="UnprocessableEntity"/> class with the values
diff --git a/src/Http/Http.Results/src/UnprocessableEntityOfT.cs b/src/Http/Http.Results/src/UnprocessableEntityOfT.cs
index 7653bc1c0d..1edca7a6ff 100644
--- a/src/Http/Http.Results/src/UnprocessableEntityOfT.cs
+++ b/src/Http/Http.Results/src/UnprocessableEntityOfT.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// with Unprocessable Entity (422) status code.
/// </summary>
/// <typeparam name="TValue">The type of object that will be JSON serialized to the response body.</typeparam>
-public sealed class UnprocessableEntity<TValue> : IResult, IEndpointMetadataProvider
+public sealed class UnprocessableEntity<TValue> : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue>
{
/// <summary>
/// Initializes a new instance of the <see cref="UnprocessableEntity"/> class with the values
@@ -30,6 +30,8 @@ public sealed class UnprocessableEntity<TValue> : IResult, IEndpointMetadataProv
/// </summary>
public TValue? Value { get; }
+ object? IValueHttpResult.Value => Value;
+
/// <summary>
/// Gets the HTTP status code: <see cref="StatusCodes.Status422UnprocessableEntity"/>
/// </summary>
diff --git a/src/Http/Http.Results/src/ValidationProblem.cs b/src/Http/Http.Results/src/ValidationProblem.cs
index 38787fafce..f42936a055 100644
--- a/src/Http/Http.Results/src/ValidationProblem.cs
+++ b/src/Http/Http.Results/src/ValidationProblem.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// An <see cref="IResult"/> that on execution will write Problem Details
/// HTTP API responses based on https://tools.ietf.org/html/rfc7807
/// </summary>
-public sealed class ValidationProblem : IResult, IEndpointMetadataProvider
+public sealed class ValidationProblem : IResult, IEndpointMetadataProvider, IStatusCodeHttpResult, IContentTypeHttpResult, IValueHttpResult, IValueHttpResult<HttpValidationProblemDetails>
{
internal ValidationProblem(HttpValidationProblemDetails problemDetails)
{
@@ -30,6 +30,10 @@ public sealed class ValidationProblem : IResult, IEndpointMetadataProvider
/// </summary>
public HttpValidationProblemDetails ProblemDetails { get; }
+ object? IValueHttpResult.Value => ProblemDetails;
+
+ HttpValidationProblemDetails? IValueHttpResult<HttpValidationProblemDetails>.Value => ProblemDetails;
+
/// <summary>
/// Gets the value for the <c>Content-Type</c> header: <c>application/problem+json</c>.
/// </summary>
diff --git a/src/Http/Http.Results/src/VirtualFileHttpResult.cs b/src/Http/Http.Results/src/VirtualFileHttpResult.cs
index 56bec2e6e2..63f5b83d77 100644
--- a/src/Http/Http.Results/src/VirtualFileHttpResult.cs
+++ b/src/Http/Http.Results/src/VirtualFileHttpResult.cs
@@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Http.HttpResults;
/// A <see cref="IResult" /> that on execution writes the file specified
/// using a virtual path to the response using mechanisms provided by the host.
/// </summary>
-public sealed class VirtualFileHttpResult : IResult
+public sealed class VirtualFileHttpResult : IResult, IFileHttpResult, IContentTypeHttpResult
{
private string _fileName;
diff --git a/src/Http/Http.Results/test/AcceptedAtRouteOfTResultTests.cs b/src/Http/Http.Results/test/AcceptedAtRouteOfTResultTests.cs
index 56be797a07..40add2624b 100644
--- a/src/Http/Http.Results/test/AcceptedAtRouteOfTResultTests.cs
+++ b/src/Http/Http.Results/test/AcceptedAtRouteOfTResultTests.cs
@@ -152,6 +152,55 @@ public class AcceptedAtRouteOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<AcceptedAtRoute<object>>(null));
}
+ [Fact]
+ public void AcceptedAtRouteResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Arrange
+ var routeValues = new RouteValueDictionary(new Dictionary<string, string>()
+ {
+ { "test", "case" },
+ { "sample", "route" }
+ });
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new AcceptedAtRoute<string>(routeValues, null));
+ Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
+ }
+
+ [Fact]
+ public void AcceptedAtRouteResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var routeValues = new RouteValueDictionary(new Dictionary<string, string>()
+ {
+ { "test", "case" },
+ { "sample", "route" }
+ });
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new AcceptedAtRoute<string>(routeValues, value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void AcceptedAtRouteResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange & Act
+ var routeValues = new RouteValueDictionary(new Dictionary<string, string>()
+ {
+ { "test", "case" },
+ { "sample", "route" }
+ });
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new AcceptedAtRoute<string>(routeValues, value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/AcceptedAtRouteResultTests.cs b/src/Http/Http.Results/test/AcceptedAtRouteResultTests.cs
index 4e25a19ec6..8f00d120d7 100644
--- a/src/Http/Http.Results/test/AcceptedAtRouteResultTests.cs
+++ b/src/Http/Http.Results/test/AcceptedAtRouteResultTests.cs
@@ -103,6 +103,14 @@ public class AcceptedAtRouteResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<AcceptedAtRoute>(null));
}
+ [Fact]
+ public void AcceptedAtRouteResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new AcceptedAtRoute(null));
+ Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/AcceptedOfTResultTests.cs b/src/Http/Http.Results/test/AcceptedOfTResultTests.cs
index 868fb5f502..9f84c90d3b 100644
--- a/src/Http/Http.Results/test/AcceptedOfTResultTests.cs
+++ b/src/Http/Http.Results/test/AcceptedOfTResultTests.cs
@@ -4,6 +4,7 @@
using System.Reflection;
using System.Text;
using Microsoft.AspNetCore.Http.Metadata;
+using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.AspNetCore.Http.HttpResults;
@@ -92,6 +93,38 @@ public class AcceptedOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Accepted<object>>(null));
}
+ [Fact]
+ public void AcceptedResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Accepted<string>("location", null));
+ Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
+ }
+
+ [Fact]
+ public void AcceptedResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new Accepted<string>("location", value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void AcceptedResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new Accepted<string>("location", value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/AcceptedResultTests.cs b/src/Http/Http.Results/test/AcceptedResultTests.cs
index 7bbfa4fd6c..d7233b14cf 100644
--- a/src/Http/Http.Results/test/AcceptedResultTests.cs
+++ b/src/Http/Http.Results/test/AcceptedResultTests.cs
@@ -59,6 +59,14 @@ public class AcceptedResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Accepted>(null));
}
+ [Fact]
+ public void AcceptedResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Accepted("location"));
+ Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/BadRequestOfTResultTests.cs b/src/Http/Http.Results/test/BadRequestOfTResultTests.cs
index 8fe74712b3..da4e22dbd3 100644
--- a/src/Http/Http.Results/test/BadRequestOfTResultTests.cs
+++ b/src/Http/Http.Results/test/BadRequestOfTResultTests.cs
@@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using Newtonsoft.Json.Linq;
public class BadRequestOfTResultTests
{
@@ -134,6 +135,38 @@ public class BadRequestOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<BadRequest<object>>(null));
}
+ [Fact]
+ public void BadRequestObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new BadRequest<string>(null));
+ Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode);
+ }
+
+ [Fact]
+ public void BadRequestObjectResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new BadRequest<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void BadRequestObjectResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+
+ // Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new BadRequest<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/BadRequestResultTests.cs b/src/Http/Http.Results/test/BadRequestResultTests.cs
index 125e07dbc4..90855243c7 100644
--- a/src/Http/Http.Results/test/BadRequestResultTests.cs
+++ b/src/Http/Http.Results/test/BadRequestResultTests.cs
@@ -73,6 +73,14 @@ public class BadRequestResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<BadRequest>(null));
}
+ [Fact]
+ public void BadRequestObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new BadRequest());
+ Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/ConflictOfTResultTests.cs b/src/Http/Http.Results/test/ConflictOfTResultTests.cs
index c69bafdfbd..467460f757 100644
--- a/src/Http/Http.Results/test/ConflictOfTResultTests.cs
+++ b/src/Http/Http.Results/test/ConflictOfTResultTests.cs
@@ -113,6 +113,38 @@ public class ConflictOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Conflict<object>>(null));
}
+ [Fact]
+ public void ConflictObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Conflict<string>(null));
+ Assert.Equal(StatusCodes.Status409Conflict, result.StatusCode);
+ }
+
+ [Fact]
+ public void ConflictObjectResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new Conflict<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void ConflictObjectResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new Conflict<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/ConflictResultTests.cs b/src/Http/Http.Results/test/ConflictResultTests.cs
index 391e248f09..1ee5f5d280 100644
--- a/src/Http/Http.Results/test/ConflictResultTests.cs
+++ b/src/Http/Http.Results/test/ConflictResultTests.cs
@@ -74,6 +74,14 @@ public class ConflictResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Conflict>(null));
}
+ [Fact]
+ public void ConflictObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Conflict());
+ Assert.Equal(StatusCodes.Status409Conflict, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/ContentResultTests.cs b/src/Http/Http.Results/test/ContentResultTests.cs
index 7f22daa078..ba6d0ee738 100644
--- a/src/Http/Http.Results/test/ContentResultTests.cs
+++ b/src/Http/Http.Results/test/ContentResultTests.cs
@@ -134,6 +134,39 @@ public class ContentResultTests
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+ [Fact]
+ public void ContentResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new ContentHttpResult("content", contentType));
+ Assert.Equal(contentType, result.ContentType);
+ }
+
+ [Fact]
+ public void ContentResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new ContentHttpResult("content", contentType, StatusCodes.Status202Accepted));
+ Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
+ }
+
+ [Fact]
+ public void ContentResult_Implements_IStatusCodeHttpResult_Correctly_WithDefaultStatus()
+ {
+ // Arrange
+ var contentType = "application/custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new ContentHttpResult("content", contentType));
+ Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
+ }
+
private static IServiceCollection CreateServices()
{
var services = new ServiceCollection();
diff --git a/src/Http/Http.Results/test/CreatedAtRouteOfTResultTests.cs b/src/Http/Http.Results/test/CreatedAtRouteOfTResultTests.cs
index 8bbe69d1f0..7135db889f 100644
--- a/src/Http/Http.Results/test/CreatedAtRouteOfTResultTests.cs
+++ b/src/Http/Http.Results/test/CreatedAtRouteOfTResultTests.cs
@@ -119,6 +119,52 @@ public partial class CreatedAtRouteOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<CreatedAtRoute<object>>(null));
}
+ [Fact]
+ public void CreatedAtRouteResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var rawResult = new CreatedAtRoute<object>(
+ routeName: null,
+ routeValues: new Dictionary<string, object>(),
+ value: null);
+
+ // Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(rawResult);
+ Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
+ }
+
+ [Fact]
+ public void CreatedAtRouteResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+ var rawResult = new CreatedAtRoute<string>(
+ routeName: null,
+ routeValues: new Dictionary<string, object>(),
+ value: value);
+
+ // Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(rawResult);
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void CreatedAtRouteResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+ var rawResult = new CreatedAtRoute<string>(
+ routeName: null,
+ routeValues: new Dictionary<string, object>(),
+ value: value);
+
+ // Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(rawResult);
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/CreatedAtRouteResultTests.cs b/src/Http/Http.Results/test/CreatedAtRouteResultTests.cs
index eee33d4d84..2350aa400b 100644
--- a/src/Http/Http.Results/test/CreatedAtRouteResultTests.cs
+++ b/src/Http/Http.Results/test/CreatedAtRouteResultTests.cs
@@ -99,6 +99,19 @@ public partial class CreatedAtRouteResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<CreatedAtRoute>(null));
}
+ [Fact]
+ public void CreatedAtRouteResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var rawResult = new CreatedAtRoute(
+ routeName: null,
+ routeValues: new Dictionary<string, object>());
+
+ // Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(rawResult);
+ Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/CreatedOfTResultTests.cs b/src/Http/Http.Results/test/CreatedOfTResultTests.cs
index 9200d550ee..007cf5e86c 100644
--- a/src/Http/Http.Results/test/CreatedOfTResultTests.cs
+++ b/src/Http/Http.Results/test/CreatedOfTResultTests.cs
@@ -127,6 +127,43 @@ public class CreatedOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Created<object>>(null));
}
+ [Fact]
+ public void CreatedResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var location = "/test/";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Created<string>(location, null));
+ Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
+ }
+
+ [Fact]
+ public void AcceptedResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var location = "/test/";
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new Created<string>(location, value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void AcceptedResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange
+ var location = "/test/";
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new Created<string>(location, value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/CreatedResultTests.cs b/src/Http/Http.Results/test/CreatedResultTests.cs
index 82f4a88b23..493c588574 100644
--- a/src/Http/Http.Results/test/CreatedResultTests.cs
+++ b/src/Http/Http.Results/test/CreatedResultTests.cs
@@ -91,6 +91,17 @@ public class CreatedResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Created>(null));
}
+ [Fact]
+ public void CreatedResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var location = "/test/";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Created(location));
+ Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/FileContentResultTests.cs b/src/Http/Http.Results/test/FileContentResultTests.cs
index eba9c1ead3..2c648508ff 100644
--- a/src/Http/Http.Results/test/FileContentResultTests.cs
+++ b/src/Http/Http.Results/test/FileContentResultTests.cs
@@ -33,4 +33,29 @@ public class FileContentResultTests : FileContentResultTestBase
return result.ExecuteAsync(httpContext);
}
+
+ [Fact]
+ public void FileContentResult_Implements_IFileHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IFileHttpResult>(new FileContentHttpResult(Array.Empty<byte>(), contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ Assert.Equal(downloadName, result.FileDownloadName);
+ }
+
+ [Fact]
+ public void FileContentResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new FileContentHttpResult(Array.Empty<byte>(), contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ }
}
diff --git a/src/Http/Http.Results/test/HttpFileStreamResultTests.cs b/src/Http/Http.Results/test/HttpFileStreamResultTests.cs
index f3c32f6e48..8b31dd2662 100644
--- a/src/Http/Http.Results/test/HttpFileStreamResultTests.cs
+++ b/src/Http/Http.Results/test/HttpFileStreamResultTests.cs
@@ -88,4 +88,29 @@ public class HttpFileStreamResultTests : FileStreamResultTestBase
// Act & Assert
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+
+ [Fact]
+ public void FileStreamHttpResult_Implements_IFileHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IFileHttpResult>(new FileStreamHttpResult(new MemoryStream(), contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ Assert.Equal(downloadName, result.FileDownloadName);
+ }
+
+ [Fact]
+ public void FileStreamHttpResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";;
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new FileStreamHttpResult(new MemoryStream(), contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ }
}
diff --git a/src/Http/Http.Results/test/JsonResultTests.cs b/src/Http/Http.Results/test/JsonResultTests.cs
index fbc3f6ece6..5ca5efebde 100644
--- a/src/Http/Http.Results/test/JsonResultTests.cs
+++ b/src/Http/Http.Results/test/JsonResultTests.cs
@@ -217,6 +217,65 @@ public class JsonResultTests
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+ [Fact]
+ public void JsonResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/json+custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new JsonHttpResult<string>(null, StatusCodes.Status200OK, contentType, null));
+ Assert.Equal(contentType, result.ContentType);
+ }
+
+ [Fact]
+ public void JsonResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/json+custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new JsonHttpResult<string>(null, StatusCodes.Status202Accepted, contentType, null));
+ Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
+ }
+
+ [Fact]
+ public void JsonResult_Implements_IStatusCodeHttpResult_Correctly_WithDefaultStatus()
+ {
+ // Arrange
+ var contentType = "application/json+custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new JsonHttpResult<string>(null, statusCode: null, contentType, null));
+ Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
+ }
+
+ [Fact]
+ public void JsonResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+ var contentType = "application/json+custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new JsonHttpResult<string>(value, statusCode: null, contentType, null));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void JsonResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+ var contentType = "application/json+custom";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new JsonHttpResult<string>(value, statusCode: null, contentType, null));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static IServiceProvider CreateServices()
{
var services = new ServiceCollection();
diff --git a/src/Http/Http.Results/test/NoContentResultTests.cs b/src/Http/Http.Results/test/NoContentResultTests.cs
index 927670466b..f2fe39be7b 100644
--- a/src/Http/Http.Results/test/NoContentResultTests.cs
+++ b/src/Http/Http.Results/test/NoContentResultTests.cs
@@ -70,6 +70,14 @@ public class NoContentResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<NoContent>(null));
}
+ [Fact]
+ public void NoContentResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new NoContent());
+ Assert.Equal(StatusCodes.Status204NoContent, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/NotFoundOfTResultTests.cs b/src/Http/Http.Results/test/NotFoundOfTResultTests.cs
index 72a922fa0a..73a970ea1c 100644
--- a/src/Http/Http.Results/test/NotFoundOfTResultTests.cs
+++ b/src/Http/Http.Results/test/NotFoundOfTResultTests.cs
@@ -95,6 +95,38 @@ public class NotFoundOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<NotFound<object>>(null));
}
+ [Fact]
+ public void NotFoundResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new NotFound<object>(null));
+ Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode);
+ }
+
+ [Fact]
+ public void NotFoundResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new NotFound<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void NotFoundResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange & Act
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new NotFound<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/NotFoundResultTests.cs b/src/Http/Http.Results/test/NotFoundResultTests.cs
index 6b243d61c5..7568b5fb9c 100644
--- a/src/Http/Http.Results/test/NotFoundResultTests.cs
+++ b/src/Http/Http.Results/test/NotFoundResultTests.cs
@@ -69,6 +69,14 @@ public class NotFoundResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<NotFound>(null));
}
+ [Fact]
+ public void NotFoundResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new NotFound());
+ Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/OkOfTResultTests.cs b/src/Http/Http.Results/test/OkOfTResultTests.cs
index 7dd8f98011..a4274ce241 100644
--- a/src/Http/Http.Results/test/OkOfTResultTests.cs
+++ b/src/Http/Http.Results/test/OkOfTResultTests.cs
@@ -112,6 +112,38 @@ public class OkOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Ok<object>>(null));
}
+ [Fact]
+ public void OkResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Ok<object>(null));
+ Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
+ }
+
+ [Fact]
+ public void OkResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new Ok<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void OkResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new Ok<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/OkResultTests.cs b/src/Http/Http.Results/test/OkResultTests.cs
index f99a403da2..4d3add27c9 100644
--- a/src/Http/Http.Results/test/OkResultTests.cs
+++ b/src/Http/Http.Results/test/OkResultTests.cs
@@ -73,6 +73,14 @@ public class OkResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<Ok>(null));
}
+ [Fact]
+ public void OkObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new Ok());
+ Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/PhysicalFileResultTest.cs b/src/Http/Http.Results/test/PhysicalFileResultTest.cs
index e1a4c18b5d..6469ec2057 100644
--- a/src/Http/Http.Results/test/PhysicalFileResultTest.cs
+++ b/src/Http/Http.Results/test/PhysicalFileResultTest.cs
@@ -35,4 +35,29 @@ public class PhysicalFileResultTest : PhysicalFileResultTestBase
return fileResult.ExecuteAsync(httpContext);
}
+
+ [Fact]
+ public void PhysicalFileResult_Implements_IFileHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IFileHttpResult>(new PhysicalFileHttpResult("file.zip", contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ Assert.Equal(downloadName, result.FileDownloadName);
+ }
+
+ [Fact]
+ public void PhysicalFileResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new PhysicalFileHttpResult("file.zip", contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ }
}
diff --git a/src/Http/Http.Results/test/ProblemResultTests.cs b/src/Http/Http.Results/test/ProblemResultTests.cs
index 688bd1ecf7..d8a262efd1 100644
--- a/src/Http/Http.Results/test/ProblemResultTests.cs
+++ b/src/Http/Http.Results/test/ProblemResultTests.cs
@@ -134,6 +134,54 @@ public class ProblemResultTests
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+ [Fact]
+ public void ProblemResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new ProblemHttpResult(new() { Status = StatusCodes.Status416RangeNotSatisfiable }));
+ Assert.Equal(StatusCodes.Status416RangeNotSatisfiable, result.StatusCode);
+ }
+
+ [Fact]
+ public void ProblemResult_Implements_IStatusCodeHttpResult_Correctly_WithDefaultStatusCode()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new ProblemHttpResult(new()));
+ Assert.Equal(StatusCodes.Status500InternalServerError, result.StatusCode);
+ }
+
+ [Fact]
+ public void ProblemResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = new ProblemDetails();
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new ProblemHttpResult(value));
+ Assert.IsType<ProblemDetails>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void ProblemResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange
+ var value = new ProblemDetails();
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<ProblemDetails>>(new ProblemHttpResult(value));
+ Assert.IsType<ProblemDetails>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void ProblemResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new ProblemHttpResult(new()));
+ Assert.Equal("application/problem+json", result.ContentType);
+ }
+
private static IServiceProvider CreateServices()
{
var services = new ServiceCollection();
diff --git a/src/Http/Http.Results/test/PushStreamResultTests.cs b/src/Http/Http.Results/test/PushStreamResultTests.cs
index 43541f0809..512d0f3b85 100644
--- a/src/Http/Http.Results/test/PushStreamResultTests.cs
+++ b/src/Http/Http.Results/test/PushStreamResultTests.cs
@@ -77,4 +77,29 @@ public class PushStreamResultTests
// Act & Assert
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+
+ [Fact]
+ public void PushStreamResult_Implements_IFileHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IFileHttpResult>(new PushStreamHttpResult(s => Task.CompletedTask, contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ Assert.Equal(downloadName, result.FileDownloadName);
+ }
+
+ [Fact]
+ public void PushStreamResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new PushStreamHttpResult(s => Task.CompletedTask, contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ }
}
diff --git a/src/Http/Http.Results/test/StatusCodeResultTests.cs b/src/Http/Http.Results/test/StatusCodeResultTests.cs
index 8fc4b54a38..91bafb4072 100644
--- a/src/Http/Http.Results/test/StatusCodeResultTests.cs
+++ b/src/Http/Http.Results/test/StatusCodeResultTests.cs
@@ -35,6 +35,14 @@ public class StatusCodeResultTests
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+ [Fact]
+ public void StatusCodeResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new StatusCodeHttpResult(StatusCodes.Status406NotAcceptable));
+ Assert.Equal(StatusCodes.Status406NotAcceptable, result.StatusCode);
+ }
+
private static IServiceCollection CreateServices()
{
var services = new ServiceCollection();
diff --git a/src/Http/Http.Results/test/UnauthorizedResultTests.cs b/src/Http/Http.Results/test/UnauthorizedResultTests.cs
index 34b830fbca..24cdbb7ee4 100644
--- a/src/Http/Http.Results/test/UnauthorizedResultTests.cs
+++ b/src/Http/Http.Results/test/UnauthorizedResultTests.cs
@@ -45,6 +45,14 @@ public class UnauthorizedResultTests
Assert.ThrowsAsync<ArgumentNullException>("httpContext", () => result.ExecuteAsync(httpContext));
}
+ [Fact]
+ public void UnauthorizedResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new UnauthorizedHttpResult());
+ Assert.Equal(StatusCodes.Status401Unauthorized, result.StatusCode);
+ }
+
private static IServiceCollection CreateServices()
{
var services = new ServiceCollection();
diff --git a/src/Http/Http.Results/test/UnprocessableEntityOfTResultTests.cs b/src/Http/Http.Results/test/UnprocessableEntityOfTResultTests.cs
index fdf35f66f6..4d8190b70b 100644
--- a/src/Http/Http.Results/test/UnprocessableEntityOfTResultTests.cs
+++ b/src/Http/Http.Results/test/UnprocessableEntityOfTResultTests.cs
@@ -13,7 +13,7 @@ using Microsoft.Extensions.Logging.Abstractions;
public class UnprocessableEntityOfTResultTests
{
[Fact]
- public void NotFoundObjectResult_ProblemDetails_SetsStatusCodeAndValue()
+ public void UnprocessableEntityObjectResult_ProblemDetails_SetsStatusCodeAndValue()
{
// Arrange & Act
var obj = new HttpValidationProblemDetails();
@@ -112,6 +112,38 @@ public class UnprocessableEntityOfTResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<UnprocessableEntity<object>>(null));
}
+ [Fact]
+ public void UnprocessableEntityObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new UnprocessableEntity<object>(null));
+ Assert.Equal(StatusCodes.Status422UnprocessableEntity, result.StatusCode);
+ }
+
+ [Fact]
+ public void UnprocessableEntityObjectResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new UnprocessableEntity<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void UnprocessableEntityObjectResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange
+ var value = "Foo";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<string>>(new UnprocessableEntity<string>(value));
+ Assert.IsType<string>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/UnprocessableEntityResultTests.cs b/src/Http/Http.Results/test/UnprocessableEntityResultTests.cs
index 8e03d19fe0..d5f9765447 100644
--- a/src/Http/Http.Results/test/UnprocessableEntityResultTests.cs
+++ b/src/Http/Http.Results/test/UnprocessableEntityResultTests.cs
@@ -73,6 +73,14 @@ public class UnprocessableEntityResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<UnprocessableEntity>(null));
}
+ [Fact]
+ public void UnprocessableEntityObjectResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new UnprocessableEntity());
+ Assert.Equal(StatusCodes.Status422UnprocessableEntity, result.StatusCode);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/ValidationProblemResultTests.cs b/src/Http/Http.Results/test/ValidationProblemResultTests.cs
index adfeba25c8..55e672bb31 100644
--- a/src/Http/Http.Results/test/ValidationProblemResultTests.cs
+++ b/src/Http/Http.Results/test/ValidationProblemResultTests.cs
@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using Newtonsoft.Json.Linq;
namespace Microsoft.AspNetCore.Http.HttpResults;
@@ -92,6 +93,49 @@ public class ValidationProblemResultTests
Assert.Throws<ArgumentNullException>("context", () => PopulateMetadata<ValidationProblem>(null));
}
+ [Fact]
+ public void ValidationProblemResult_Implements_IStatusCodeHttpResult_Correctly()
+ {
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IStatusCodeHttpResult>(new ValidationProblem(new HttpValidationProblemDetails()));
+ Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode);
+ }
+
+ [Fact]
+ public void ValidationProblemResult_Implements_IValueHttpResult_Correctly()
+ {
+ // Arrange
+ var value = new HttpValidationProblemDetails();
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult>(new ValidationProblem(value));
+ Assert.IsType<HttpValidationProblemDetails>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void ValidationProblemResult_Implements_IValueHttpResultOfT_Correctly()
+ {
+ // Arrange
+ var value = new HttpValidationProblemDetails();
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IValueHttpResult<HttpValidationProblemDetails>>(new ValidationProblem(value));
+ Assert.IsType<HttpValidationProblemDetails>(result.Value);
+ Assert.Equal(value, result.Value);
+ }
+
+ [Fact]
+ public void ValidationProblemResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/problem+json";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new ValidationProblem(new()));
+ Assert.Equal(contentType, result.ContentType);
+ }
+
private static void PopulateMetadata<TResult>(EndpointMetadataContext context)
where TResult : IEndpointMetadataProvider => TResult.PopulateMetadata(context);
diff --git a/src/Http/Http.Results/test/VirtualFileResultTests.cs b/src/Http/Http.Results/test/VirtualFileResultTests.cs
index 04ad231a47..3e3e91d362 100644
--- a/src/Http/Http.Results/test/VirtualFileResultTests.cs
+++ b/src/Http/Http.Results/test/VirtualFileResultTests.cs
@@ -19,4 +19,29 @@ public class VirtualFileResultTests : VirtualFileResultTestBase
return result.ExecuteAsync(httpContext);
}
+
+ [Fact]
+ public void VirtualFileHttpResult_Implements_IFileHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IFileHttpResult>(new VirtualFileHttpResult("~/file.zip", contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ Assert.Equal(downloadName, result.FileDownloadName);
+ }
+
+ [Fact]
+ public void VirtualFileHttpResult_Implements_IContentTypeHttpResult_Correctly()
+ {
+ // Arrange
+ var contentType = "application/x-zip";
+ var downloadName = "sample.zip";
+
+ // Act & Assert
+ var result = Assert.IsAssignableFrom<IContentTypeHttpResult>(new VirtualFileHttpResult("~/file.zip", contentType) { FileDownloadName = downloadName });
+ Assert.Equal(contentType, result.ContentType);
+ }
}
diff --git a/src/Http/Http.Results/tools/ResultsOfTGenerator/Program.cs b/src/Http/Http.Results/tools/ResultsOfTGenerator/Program.cs
index e783fe7367..c23363e06e 100644
--- a/src/Http/Http.Results/tools/ResultsOfTGenerator/Program.cs
+++ b/src/Http/Http.Results/tools/ResultsOfTGenerator/Program.cs
@@ -104,7 +104,7 @@ public class Program
writer.Write(">");
// Interfaces
- writer.WriteLine(" : IResult, IEndpointMetadataProvider");
+ writer.WriteLine(" : IResult, INestedHttpResult, IEndpointMetadataProvider");
// Type arg constraints
for (int j = 1; j <= i; j++)
diff --git a/src/Http/Http.Results/tools/ResultsOfTGenerator/ResultsOfTGenerator.csproj b/src/Http/Http.Results/tools/ResultsOfTGenerator/ResultsOfTGenerator.csproj
index 7659c27781..96c160f331 100644
--- a/src/Http/Http.Results/tools/ResultsOfTGenerator/ResultsOfTGenerator.csproj
+++ b/src/Http/Http.Results/tools/ResultsOfTGenerator/ResultsOfTGenerator.csproj
@@ -5,6 +5,7 @@
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
<Nullable>enable</Nullable>
<AddPublicApiAnalyzers>false</AddPublicApiAnalyzers>
+ <IsPackable>false</IsPackable>
</PropertyGroup>
</Project>
diff --git a/src/Http/HttpAbstractions.slnf b/src/Http/HttpAbstractions.slnf
index 70fc8b56f6..29d4f41c4e 100644
--- a/src/Http/HttpAbstractions.slnf
+++ b/src/Http/HttpAbstractions.slnf
@@ -2,6 +2,10 @@
"solution": {
"path": "..\\..\\AspNetCore.sln",
"projects": [
+ "src\\DataProtection\\Abstractions\\src\\Microsoft.AspNetCore.DataProtection.Abstractions.csproj",
+ "src\\DataProtection\\Cryptography.Internal\\src\\Microsoft.AspNetCore.Cryptography.Internal.csproj",
+ "src\\DataProtection\\DataProtection\\src\\Microsoft.AspNetCore.DataProtection.csproj",
+ "src\\DefaultBuilder\\src\\Microsoft.AspNetCore.csproj",
"src\\Extensions\\Features\\src\\Microsoft.Extensions.Features.csproj",
"src\\Extensions\\Features\\test\\Microsoft.Extensions.Features.Tests.csproj",
"src\\Hosting\\Abstractions\\src\\Microsoft.AspNetCore.Hosting.Abstractions.csproj",
@@ -43,15 +47,25 @@
"src\\Http\\samples\\MinimalSample\\MinimalSample.csproj",
"src\\Http\\samples\\SampleApp\\HttpAbstractions.SampleApp.csproj",
"src\\Middleware\\CORS\\src\\Microsoft.AspNetCore.Cors.csproj",
+ "src\\Middleware\\Diagnostics.Abstractions\\src\\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj",
+ "src\\Middleware\\Diagnostics\\src\\Microsoft.AspNetCore.Diagnostics.csproj",
+ "src\\Middleware\\HostFiltering\\src\\Microsoft.AspNetCore.HostFiltering.csproj",
"src\\Middleware\\HttpOverrides\\src\\Microsoft.AspNetCore.HttpOverrides.csproj",
+ "src\\Middleware\\OutputCaching\\src\\Microsoft.AspNetCore.OutputCaching.csproj",
+ "src\\Middleware\\ResponseCaching.Abstractions\\src\\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj",
"src\\Middleware\\StaticFiles\\src\\Microsoft.AspNetCore.StaticFiles.csproj",
+ "src\\Mvc\\Mvc.Abstractions\\src\\Microsoft.AspNetCore.Mvc.Abstractions.csproj",
+ "src\\Mvc\\Mvc.Core\\src\\Microsoft.AspNetCore.Mvc.Core.csproj",
"src\\ObjectPool\\src\\Microsoft.Extensions.ObjectPool.csproj",
+ "src\\Security\\Authentication\\Core\\src\\Microsoft.AspNetCore.Authentication.csproj",
"src\\Security\\Authorization\\Core\\src\\Microsoft.AspNetCore.Authorization.csproj",
"src\\Security\\Authorization\\Policy\\src\\Microsoft.AspNetCore.Authorization.Policy.csproj",
"src\\Servers\\Connections.Abstractions\\src\\Microsoft.AspNetCore.Connections.Abstractions.csproj",
"src\\Servers\\IIS\\IISIntegration\\src\\Microsoft.AspNetCore.Server.IISIntegration.csproj",
+ "src\\Servers\\IIS\\IIS\\src\\Microsoft.AspNetCore.Server.IIS.csproj",
"src\\Servers\\Kestrel\\Core\\src\\Microsoft.AspNetCore.Server.Kestrel.Core.csproj",
"src\\Servers\\Kestrel\\Kestrel\\src\\Microsoft.AspNetCore.Server.Kestrel.csproj",
+ "src\\Servers\\Kestrel\\Transport.Quic\\src\\Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.csproj",
"src\\Servers\\Kestrel\\Transport.Sockets\\src\\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj",
"src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj",
"src\\WebEncoders\\src\\Microsoft.Extensions.WebEncoders.csproj"
diff --git a/src/Http/Routing/src/Builder/EndpointRouteBuilderExtensions.cs b/src/Http/Routing/src/Builder/EndpointRouteBuilderExtensions.cs
index 250028ea95..bcbe36c635 100644
--- a/src/Http/Routing/src/Builder/EndpointRouteBuilderExtensions.cs
+++ b/src/Http/Routing/src/Builder/EndpointRouteBuilderExtensions.cs
@@ -63,7 +63,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder MapGet(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -80,7 +79,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder MapPost(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -97,7 +95,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder MapPut(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -114,7 +111,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder MapDelete(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -131,7 +127,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder MapPatch(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -149,7 +144,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <param name="httpMethods">HTTP methods that the endpoint will match.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder MapMethods(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -172,7 +166,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder Map(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
@@ -189,7 +182,6 @@ public static class EndpointRouteBuilderExtensions
/// <param name="pattern">The route pattern.</param>
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
- [RequiresUnreferencedCode(MapEndpointTrimmerWarning)]
public static IEndpointConventionBuilder Map(
this IEndpointRouteBuilder endpoints,
RoutePattern pattern,
@@ -199,12 +191,6 @@ public static class EndpointRouteBuilderExtensions
ArgumentNullException.ThrowIfNull(pattern);
ArgumentNullException.ThrowIfNull(requestDelegate);
- var returnType = requestDelegate.Method.ReturnType;
- if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>))
- {
- return Map(endpoints, pattern, requestDelegate as Delegate);
- }
-
const int defaultOrder = 0;
var builder = new RouteEndpointBuilder(
diff --git a/src/Http/Routing/test/UnitTests/Builder/RequestDelegateEndpointRouteBuilderExtensionsTest.cs b/src/Http/Routing/test/UnitTests/Builder/RequestDelegateEndpointRouteBuilderExtensionsTest.cs
index 292a8b6ff5..42d69cd96c 100644
--- a/src/Http/Routing/test/UnitTests/Builder/RequestDelegateEndpointRouteBuilderExtensionsTest.cs
+++ b/src/Http/Routing/test/UnitTests/Builder/RequestDelegateEndpointRouteBuilderExtensionsTest.cs
@@ -35,28 +35,28 @@ public class RequestDelegateEndpointRouteBuilderExtensionsTest
{
get
{
- IEndpointConventionBuilder MapGet(IEndpointRouteBuilder routes, string template, RequestDelegate action) =>
+ IEndpointConventionBuilder MapGet(IEndpointRouteBuilder routes, string template, Delegate action) =>
routes.MapGet(template, action);
- IEndpointConventionBuilder MapPost(IEndpointRouteBuilder routes, string template, RequestDelegate action) =>
+ IEndpointConventionBuilder MapPost(IEndpointRouteBuilder routes, string template, Delegate action) =>
routes.MapPost(template, action);
- IEndpointConventionBuilder MapPut(IEndpointRouteBuilder routes, string template, RequestDelegate action) =>
+ IEndpointConventionBuilder MapPut(IEndpointRouteBuilder routes, string template, Delegate action) =>
routes.MapPut(template, action);
- IEndpointConventionBuilder MapDelete(IEndpointRouteBuilder routes, string template, RequestDelegate action) =>
+ IEndpointConventionBuilder MapDelete(IEndpointRouteBuilder routes, string template, Delegate action) =>
routes.MapDelete(template, action);
- IEndpointConventionBuilder Map(IEndpointRouteBuilder routes, string template, RequestDelegate action) =>
+ IEndpointConventionBuilder Map(IEndpointRouteBuilder routes, string template, Delegate action) =>
routes.Map(template, action);
return new object[][]
{
- new object[] { (Func<IEndpointRouteBuilder, string, RequestDelegate, IEndpointConventionBuilder>)MapGet },
- new object[] { (Func<IEndpointRouteBuilder, string, RequestDelegate, IEndpointConventionBuilder>)MapPost },
- new object[] { (Func<IEndpointRouteBuilder, string, RequestDelegate, IEndpointConventionBuilder>)MapPut },
- new object[] { (Func<IEndpointRouteBuilder, string, RequestDelegate, IEndpointConventionBuilder>)MapDelete },
- new object[] { (Func<IEndpointRouteBuilder, string, RequestDelegate, IEndpointConventionBuilder>)Map },
+ new object[] { (Func<IEndpointRouteBuilder, string, Delegate, IEndpointConventionBuilder>)MapGet },
+ new object[] { (Func<IEndpointRouteBuilder, string, Delegate, IEndpointConventionBuilder>)MapPost },
+ new object[] { (Func<IEndpointRouteBuilder, string, Delegate, IEndpointConventionBuilder>)MapPut },
+ new object[] { (Func<IEndpointRouteBuilder, string, Delegate, IEndpointConventionBuilder>)MapDelete },
+ new object[] { (Func<IEndpointRouteBuilder, string, Delegate, IEndpointConventionBuilder>)Map },
};
}
}
@@ -81,7 +81,7 @@ public class RequestDelegateEndpointRouteBuilderExtensionsTest
[Theory]
[MemberData(nameof(MapMethods))]
- public async Task MapEndpoint_ReturnGenericTypeTask_GeneratedDelegate(Func<IEndpointRouteBuilder, string, RequestDelegate, IEndpointConventionBuilder> map)
+ public async Task MapEndpoint_ReturnGenericTypeTask_GeneratedDelegate(Func<IEndpointRouteBuilder, string, Delegate, IEndpointConventionBuilder> map)
{
var httpContext = new DefaultHttpContext();
var responseBodyStream = new MemoryStream();
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml
index 0d9e75cf80..4de320cd75 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml
@@ -17,7 +17,7 @@
<button class="btn btn-primary" type="submit">Download</button>
</form>
<p>
- <a id="delete" asp-page="DeletePersonalData" class="btn btn-secondary">Delete</a>
+ <a id="delete" role="button" asp-page="DeletePersonalData" class="btn btn-secondary">Delete</a>
</p>
</div>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ExternalLogin.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ExternalLogin.cshtml
index eb838fc767..71c9fa2b66 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ExternalLogin.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ExternalLogin.cshtml
@@ -1,4 +1,4 @@
-@page
+@page
@model ExternalLoginModel
@{
ViewData["Title"] = "Register";
@@ -18,8 +18,8 @@
<div class="col-md-4">
<form asp-page-handler="Confirmation" asp-route-returnUrl="@Model.ReturnUrl" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
- <div class="form-floating">
- <input asp-for="Input.Email" class="form-control" autocomplete="email" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.Email" class="form-control" autocomplete="email" placeholder="Please enter your email."/>
<label asp-for="Input.Email" class="form-label"></label>
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Login.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Login.cshtml
index c7dbd6c6f3..6354164a81 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Login.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Login.cshtml
@@ -18,18 +18,16 @@
<label asp-for="Input.Email" class="form-label">Email</label>
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
- <div class="form-floating">
+ <div class="form-floating mb-3">
<input asp-for="Input.Password" class="form-control" autocomplete="current-password" aria-required="true" placeholder="password" />
<label asp-for="Input.Password" class="form-label">Password</label>
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
- <div>
- <div class="checkbox">
- <label asp-for="Input.RememberMe" class="form-label">
- <input class="form-check-input" asp-for="Input.RememberMe" />
- @Html.DisplayNameFor(m => m.Input.RememberMe)
- </label>
- </div>
+ <div class="checkbox mb-3">
+ <label asp-for="Input.RememberMe" class="form-label">
+ <input class="form-check-input" asp-for="Input.RememberMe" />
+ @Html.DisplayNameFor(m => m.Input.RememberMe)
+ </label>
</div>
<div>
<button id="login-submit" type="submit" class="w-100 btn btn-lg btn-primary">Log in</button>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWith2fa.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWith2fa.cshtml
index f117a6b4e4..047462d71b 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWith2fa.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWith2fa.cshtml
@@ -1,4 +1,4 @@
-@page
+@page
@model LoginWith2faModel
@{
ViewData["Title"] = "Two-factor authentication";
@@ -12,18 +12,16 @@
<form method="post" asp-route-returnUrl="@Model.ReturnUrl">
<input asp-for="RememberMe" type="hidden" />
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
- <div class="form-floating">
+ <div class="form-floating mb-3">
<input asp-for="Input.TwoFactorCode" class="form-control" autocomplete="off" />
<label asp-for="Input.TwoFactorCode" class="form-label"></label>
<span asp-validation-for="Input.TwoFactorCode" class="text-danger"></span>
</div>
- <div>
- <div class="checkbox">
- <label asp-for="Input.RememberMachine" class="form-label">
- <input asp-for="Input.RememberMachine" />
- @Html.DisplayNameFor(m => m.Input.RememberMachine)
- </label>
- </div>
+ <div class="checkbox mb-3">
+ <label asp-for="Input.RememberMachine" class="form-label">
+ <input asp-for="Input.RememberMachine" />
+ @Html.DisplayNameFor(m => m.Input.RememberMachine)
+ </label>
</div>
<div>
<button type="submit" class="w-100 btn btn-lg btn-primary">Log in</button>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWithRecoveryCode.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWithRecoveryCode.cshtml
index 503fbf1616..0d44e37d0f 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWithRecoveryCode.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/LoginWithRecoveryCode.cshtml
@@ -14,8 +14,8 @@
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
- <div class="form-floating">
- <input asp-for="Input.RecoveryCode" class="form-control" autocomplete="off" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.RecoveryCode" class="form-control" autocomplete="off" placeholder="RecoveryCode" />
<label asp-for="Input.RecoveryCode" class="form-label"></label>
<span asp-validation-for="Input.RecoveryCode" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/ChangePassword.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/ChangePassword.cshtml
index 3bcae81e71..073603a30c 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/ChangePassword.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/ChangePassword.cshtml
@@ -11,18 +11,18 @@
<div class="col-md-6">
<form id="change-password-form" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
- <div class="form-floating">
- <input asp-for="Input.OldPassword" class="form-control" autocomplete="current-password" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.OldPassword" class="form-control" autocomplete="current-password" aria-required="true" placeholder="Please enter your old password." />
<label asp-for="Input.OldPassword" class="form-label"></label>
<span asp-validation-for="Input.OldPassword" class="text-danger"></span>
</div>
- <div class="form-floating">
- <input asp-for="Input.NewPassword" class="form-control" autocomplete="new-password" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.NewPassword" class="form-control" autocomplete="new-password" aria-required="true" placeholder="Please enter your new password." />
<label asp-for="Input.NewPassword" class="form-label"></label>
<span asp-validation-for="Input.NewPassword" class="text-danger"></span>
</div>
- <div class="form-floating">
- <input asp-for="Input.ConfirmPassword" class="form-control" autocomplete="new-password" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.ConfirmPassword" class="form-control" autocomplete="new-password" aria-required="true" placeholder="Please confirm your new password."/>
<label asp-for="Input.ConfirmPassword" class="form-label"></label>
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/DeletePersonalData.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/DeletePersonalData.cshtml
index cbc1a7a570..cecdd1d233 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/DeletePersonalData.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/DeletePersonalData.cshtml
@@ -18,8 +18,8 @@
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
@if (Model.RequirePassword)
{
- <div class="form-floating">
- <input asp-for="Input.Password" class="form-control" autocomplete="current-password" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.Password" class="form-control" autocomplete="current-password" aria-required="true" placeholder="Please enter your password." />
<label asp-for="Input.Password" class="form-label"></label>
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Email.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Email.cshtml
index 8a251c0c29..f3278e9ef5 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Email.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Email.cshtml
@@ -13,8 +13,8 @@
<div asp-validation-summary="All" class="text-danger" role="alert"></div>
@if (Model.IsEmailConfirmed)
{
- <div class="form-floating input-group">
- <input asp-for="Email" class="form-control" disabled />
+ <div class="form-floating mb-3 input-group">
+ <input asp-for="Email" class="form-control" placeholder="Please enter your email." disabled />
<div class="input-group-append">
<span class="h-100 input-group-text text-success font-weight-bold">✓</span>
</div>
@@ -23,14 +23,14 @@
}
else
{
- <div class="form-floating">
- <input asp-for="Email" class="form-control" disabled />
+ <div class="form-floating mb-3">
+ <input asp-for="Email" class="form-control" placeholder="Please enter your email." disabled />
<label asp-for="Email" class="form-label"></label>
<button id="email-verification" type="submit" asp-page-handler="SendVerificationEmail" class="btn btn-link">Send verification email</button>
</div>
}
- <div class="form-floating">
- <input asp-for="Input.NewEmail" class="form-control" autocomplete="email" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.NewEmail" class="form-control" autocomplete="email" aria-required="true" placeholder="Please enter new email." />
<label asp-for="Input.NewEmail" class="form-label"></label>
<span asp-validation-for="Input.NewEmail" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/EnableAuthenticator.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/EnableAuthenticator.cshtml
index 8742fd3fa4..fefa57f2b7 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/EnableAuthenticator.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/EnableAuthenticator.cshtml
@@ -34,8 +34,8 @@
<div class="row">
<div class="col-md-6">
<form id="send-code" method="post">
- <div class="form-floating">
- <input asp-for="Input.Code" class="form-control" autocomplete="off" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.Code" class="form-control" autocomplete="off" placeholder="Please enter the code."/>
<label asp-for="Input.Code" class="control-label form-label">Verification Code</label>
<span asp-validation-for="Input.Code" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Index.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Index.cshtml
index 47f9fe2212..94b669d625 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Index.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/Index.cshtml
@@ -11,12 +11,12 @@
<div class="col-md-6">
<form id="profile-form" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
- <div class="form-floating">
- <input asp-for="Username" class="form-control" disabled />
+ <div class="form-floating mb-3">
+ <input asp-for="Username" class="form-control" placeholder="Please choose your username." disabled />
<label asp-for="Username" class="form-label"></label>
</div>
- <div class="form-floating">
- <input asp-for="Input.PhoneNumber" class="form-control" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.PhoneNumber" class="form-control" placeholder="Please enter your phone number."/>
<label asp-for="Input.PhoneNumber" class="form-label"></label>
<span asp-validation-for="Input.PhoneNumber" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/PersonalData.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/PersonalData.cshtml
index 083549300c..2b5af23fc8 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/PersonalData.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/PersonalData.cshtml
@@ -17,7 +17,7 @@
<button class="btn btn-primary" type="submit">Download</button>
</form>
<p>
- <a id="delete" asp-page="DeletePersonalData" class="btn btn-danger">Delete</a>
+ <a id="delete" role="button" asp-page="DeletePersonalData" class="btn btn-danger">Delete</a>
</p>
</div>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/SetPassword.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/SetPassword.cshtml
index 05af7edb56..a4ba058be4 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/SetPassword.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/Manage/SetPassword.cshtml
@@ -15,13 +15,13 @@
<div class="col-md-6">
<form id="set-password-form" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div>
- <div class="form-floating">
- <input asp-for="Input.NewPassword" class="form-control" autocomplete="new-password" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.NewPassword" class="form-control" autocomplete="new-password" placeholder="Please enter your new password."/>
<label asp-for="Input.NewPassword" class="form-label"></label>
<span asp-validation-for="Input.NewPassword" class="text-danger"></span>
</div>
- <div class="form-floating">
- <input asp-for="Input.ConfirmPassword" class="form-control" autocomplete="new-password" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.ConfirmPassword" class="form-control" autocomplete="new-password" placeholder="Please confirm your new password."/>
<label asp-for="Input.ConfirmPassword" class="form-label"></label>
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ResetPassword.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ResetPassword.cshtml
index d0ea1bd126..1133dd995c 100644
--- a/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ResetPassword.cshtml
+++ b/src/Identity/UI/src/Areas/Identity/Pages/V5/Account/ResetPassword.cshtml
@@ -1,4 +1,4 @@
-@page
+@page
@model ResetPasswordModel
@{
ViewData["Title"] = "Reset password";
@@ -17,13 +17,13 @@
<label asp-for="Input.Email" class="form-label"></label>
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
- <div class="form-floating">
- <input asp-for="Input.Password" class="form-control" autocomplete="new-password" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.Password" class="form-control" autocomplete="new-password" aria-required="true" placeholder="Please enter your password." />
<label asp-for="Input.Password" class="form-label"></label>
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
- <div class="form-floating">
- <input asp-for="Input.ConfirmPassword" class="form-control" autocomplete="new-password" aria-required="true" />
+ <div class="form-floating mb-3">
+ <input asp-for="Input.ConfirmPassword" class="form-control" autocomplete="new-password" aria-required="true" placeholder="Please confirm your password." />
<label asp-for="Input.ConfirmPassword" class="form-label"></label>
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
diff --git a/src/ProjectTemplates/README.md b/src/ProjectTemplates/README.md
index acb3b240a1..e40d8ac07e 100644
--- a/src/ProjectTemplates/README.md
+++ b/src/ProjectTemplates/README.md
@@ -16,6 +16,15 @@ The following contains a description of each sub-directory in the `ProjectTempla
- `test`: Contains the end to end template tests.
- `testassets`: Contains assets used by the tests, like a dotnet tools installer
+## Submitting pull requests
+
+You can submit changes for templates in this repo by submitting a pull request. If you make changes to any
+`content/*/.template.config/template.json` files, build locally (see below) and include any
+`content/*/.template.config/localize/` changes in your pull request. (Your build may update the strings in those
+files for later localization.)
+
+## Building locally
+
### Build
Some projects in this repository (like SignalR Java Client) require JDK installation and configuration of `JAVA_HOME` environment variable.
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.cs.json
index 292e2d4e1d..ef7a423548 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.cs.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "Šablona stylů LESS",
+ "description": "LESS je jazyk kompilovaný do šablon stylů CSS.",
+ "postActions/openInEditor/description": "Otevře soubor styleSheet1.less v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.de.json
index 292e2d4e1d..c32f55ec98 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.de.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "LESS Style Sheet",
"description": "LESS is a language that compiles into CSS",
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.es.json
index 292e2d4e1d..c32f55ec98 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.es.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "LESS Style Sheet",
"description": "LESS is a language that compiles into CSS",
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.fr.json
index 292e2d4e1d..63b851584f 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.fr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "Feuille de style LESS",
+ "description": "LESS est un langage compilé en CSS",
+ "postActions/openInEditor/description": "Ouvre styleSheet1.less dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.it.json
index 292e2d4e1d..871ba291e5 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.it.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "Foglio di stile LESS",
+ "description": "LESS è un linguaggio che viene compilato in CSS.",
+ "postActions/openInEditor/description": "Apre styleSheet1.less nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ja.json
index 292e2d4e1d..b3bccfbf5e 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ja.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "LESS スタイル シート",
+ "description": "LESS は CSS にコンパイルされる言語です",
+ "postActions/openInEditor/description": "エディターで styleSheet1.less を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ko.json
index 292e2d4e1d..d5b5c4de4e 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ko.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "LESS 스타일 시트",
+ "description": "LESS는 CSS로 컴파일되는 언어입니다.",
+ "postActions/openInEditor/description": "편집기에서 styleSheet1.less를 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pl.json
index 292e2d4e1d..c32f55ec98 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pl.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "LESS Style Sheet",
"description": "LESS is a language that compiles into CSS",
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pt-BR.json
index 292e2d4e1d..88394ef8b7 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.pt-BR.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "Folha de Estilo LESS",
+ "description": "LESS é uma linguagem que compila em CSS",
+ "postActions/openInEditor/description": "Abre styleSheet1.less no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ru.json
index 292e2d4e1d..e874d82a14 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.ru.json
@@ -1,6 +1,6 @@
-{
- "author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Таблица стилей LESS",
+ "description": "LESS – это язык, компилируемый в CSS",
+ "postActions/openInEditor/description": "Открывает styleSheet1.less в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.tr.json
index 292e2d4e1d..ea8e78f1e2 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.tr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "LESS Stil Sayfası",
+ "description": "LESS, CSS ile derlenen bir dildir",
+ "postActions/openInEditor/description": "Düzenleyicide styleSheet1.less dosyasını açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hans.json
index 292e2d4e1d..e76d67e434 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "LESS 样式表",
+ "description": "LESS 是可编译为 CSS 的一种语言",
+ "postActions/openInEditor/description": "在编辑器中打开 styleSheet1.less"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hant.json
index 292e2d4e1d..5aaf31184b 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Less/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "LESS Style Sheet",
- "description": "LESS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.less in the editor"
+ "name": "LESS 樣式表",
+ "description": "LESS 是編譯成 CSS 的語言。",
+ "postActions/openInEditor/description": "在編輯器中開啟 styleSheet1.less"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.cs.json
index a5eee1f7e5..852994fe32 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.cs.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "Šablona stylů SCSS (SASS)",
+ "description": "SCSS je jazyk kompilovaný do šablon stylů CSS.",
+ "postActions/openInEditor/description": "Otevře soubor styleSheet1.scss v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.de.json
index a5eee1f7e5..2da4ddeb4a 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.de.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
+ "name": "SCSS-Stylesheet (Sass)",
"description": "SCSS is a language that compiles into CSS",
"postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.es.json
index a5eee1f7e5..c9eb90f687 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.es.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
+ "name": "Hoja de estilos SCSS (SASS)",
"description": "SCSS is a language that compiles into CSS",
"postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.fr.json
index a5eee1f7e5..d618703a03 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.fr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "Feuille de style SCSS (SASS)",
+ "description": "SCSS est un langage qui se compile en CSS",
+ "postActions/openInEditor/description": "Ouvre styleSheet1.scss dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.it.json
index a5eee1f7e5..53fd3c1874 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.it.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "Foglio di stile SCSS (SASS)",
+ "description": "SCSS è un linguaggio che viene compilato in CSS",
+ "postActions/openInEditor/description": "Apre styleSheet1.scss nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ja.json
index a5eee1f7e5..d69a2bef26 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ja.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "SCSS スタイル シート (SASS)",
+ "description": "SCSS は CSS にコンパイルされる言語です。",
+ "postActions/openInEditor/description": "エディターで styleSheet1.scss を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ko.json
index a5eee1f7e5..a64bdca168 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ko.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "SCSS 스타일시트(SASS)",
+ "description": "SCSS는 CSS로 컴파일되는 언어입니다.",
+ "postActions/openInEditor/description": "편집기에서 styleSheet1.scss를 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pl.json
index a5eee1f7e5..7c500ab697 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pl.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
+ "name": "Arkusz stylów SCSS (SASS)",
"description": "SCSS is a language that compiles into CSS",
"postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pt-BR.json
index a5eee1f7e5..e98b02a662 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.pt-BR.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "Folha de estilo SCSS (SASS)",
+ "description": "SCSS é uma linguagem que compila em CSS",
+ "postActions/openInEditor/description": "Abre styleSheet1.scss no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ru.json
index a5eee1f7e5..01866b1846 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.ru.json
@@ -1,6 +1,6 @@
-{
- "author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Таблица стилей SCSS (Sass)",
+ "description": "SCSS – это язык, компилируемый в CSS",
+ "postActions/openInEditor/description": "Открывает styleSheet1.scss в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.tr.json
index a5eee1f7e5..34bf5f72f3 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.tr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "SCSS Stil Sayfası (SASS)",
+ "description": "SCSS, CSS'de derlenen bir dildir",
+ "postActions/openInEditor/description": "StyleSheet1.scss’i düzenleyicide açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hans.json
index a5eee1f7e5..c0a285de14 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "SCSS 样式表(SASS)",
+ "description": "SCSS 是可编译为 CSS 的一种语言",
+ "postActions/openInEditor/description": "在编辑器中打开 styleSheet1.scss"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hant.json
index a5eee1f7e5..a2da0b4620 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/Scss/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "SCSS Style Sheet (SASS)",
- "description": "SCSS is a language that compiles into CSS",
- "postActions/openInEditor/description": "Opens styleSheet1.scss in the editor"
+ "name": "SCSS 樣式表 (SASS)",
+ "description": "SCSS 是編譯成 CSS 的語言",
+ "postActions/openInEditor/description": "在編輯器中開啟 styleSheet1.scss"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.cs.json
index ac58bc2a22..3274c2369f 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.cs.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "Soubor TypeScriptu",
+ "description": "Prázdný zdrojový soubor TypeScriptu",
+ "postActions/openInEditor/description": "Otevře soubor file1.ts v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.de.json
index ac58bc2a22..38add327e6 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.de.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "TypeScript file",
- "description": "A blank TypeScript source file",
+ "description": "Eine leere TypeScript-Quelldatei",
"postActions/openInEditor/description": "Opens file1.ts in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.es.json
index ac58bc2a22..e72445ffc5 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.es.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "TypeScript file",
- "description": "A blank TypeScript source file",
+ "description": "Archivo de origen de TypeScript en blanco",
"postActions/openInEditor/description": "Opens file1.ts in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.fr.json
index ac58bc2a22..5ba39e0f09 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.fr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "Fichier TypeScript",
+ "description": "Fichier source TypeScript vide",
+ "postActions/openInEditor/description": "Ouvre file1.ts dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.it.json
index ac58bc2a22..03c3d95825 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.it.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "File TypeScript",
+ "description": "File di origine TypeScript vuoto",
+ "postActions/openInEditor/description": "Apre file1.ts nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ja.json
index ac58bc2a22..af85490305 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ja.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "TypeScript ファイル",
+ "description": "空の TypeScript ソース ファイル",
+ "postActions/openInEditor/description": "エディターで file1.ts を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ko.json
index ac58bc2a22..e92d7202c2 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ko.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "TypeScript 파일",
+ "description": "빈 TypeScript 소스 파일",
+ "postActions/openInEditor/description": "편집기에서 file1.ts를 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pl.json
index ac58bc2a22..a114e2afea 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pl.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "TypeScript file",
- "description": "A blank TypeScript source file",
+ "description": "Pusty plik źródłowy TypeScript",
"postActions/openInEditor/description": "Opens file1.ts in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pt-BR.json
index ac58bc2a22..e2c6890268 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.pt-BR.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "Arquivo TypeScript",
+ "description": "Um arquivo fonte do TypeScript em branco",
+ "postActions/openInEditor/description": "Abre file1.ts no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ru.json
index ac58bc2a22..dbc907f267 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.ru.json
@@ -1,6 +1,6 @@
-{
- "author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Файл TypeScript",
+ "description": "Пустой исходный файл TypeScript",
+ "postActions/openInEditor/description": "Открывает file1.ts в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.tr.json
index ac58bc2a22..c56908da06 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.tr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "TypeScript dosyası",
+ "description": "Boş bir TypeScript kaynak dosyası",
+ "postActions/openInEditor/description": "File1.ts dosyasını düzenleyicide açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hans.json
index ac58bc2a22..21b1120508 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "TypeScript 文件",
+ "description": "空白 TypeScript 源文件",
+ "postActions/openInEditor/description": "在编辑器中打开 file1.ts"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hant.json
index ac58bc2a22..eb7d9dbd4f 100644
--- a/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.Client.ItemTemplates/content/TypeScript/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "TypeScript file",
- "description": "A blank TypeScript source file",
- "postActions/openInEditor/description": "Opens file1.ts in the editor"
+ "name": "TypeScript 檔案",
+ "description": "空白的 TypeScript 原始程式檔",
+ "postActions/openInEditor/description": "在編輯器中開啟 file1.ts"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.cs.json
index 13d79b81d9..d20543643e 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.cs.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "Soubor vyrovnávací paměti protokolu",
+ "description": "Soubor vyrovnávací paměti protokolu pro popis zpráv a služeb pro gRPC",
+ "symbols/namespace/description": "obor názvů pro vygenerovaný kód",
+ "postActions/openInEditor/description": "Otevře soubor protobuf.proto v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.de.json
index 13d79b81d9..9c44c19030 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.de.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
+ "description": "Eine Protokollpufferdatei zum Beschreiben von Nachrichten und Diensten für gRPC.",
+ "symbols/namespace/description": "Namespace für den generierten Code",
"postActions/openInEditor/description": "Opens protobuf.proto in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.es.json
index 13d79b81d9..c90ffdcd8b 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.es.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
+ "description": "Archivo de búfer de protocolo para describir mensajes y servicios para gRPC.",
+ "symbols/namespace/description": "espacio de nombres para el código generado",
"postActions/openInEditor/description": "Opens protobuf.proto in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.fr.json
index 13d79b81d9..ba1df56ca4 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.fr.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "Fichier tampon de protocole",
+ "description": "Fichier tampon de protocole pour la description des messages et des services pour gRPC.",
+ "symbols/namespace/description": "espace de noms pour le code généré",
+ "postActions/openInEditor/description": "Ouvre protobuf.proto dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.it.json
index 13d79b81d9..cf9cb24a9d 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.it.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "File buffer del protocollo",
+ "description": "File di buffer del protocollo per descrivere messaggi e servizi per gRPC.",
+ "symbols/namespace/description": "spazio dei nomi per il codice generato",
+ "postActions/openInEditor/description": "Apre protobuf.proto nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ja.json
index 13d79b81d9..a568015c89 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ja.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "プロトコル バッファー ファイル",
+ "description": "gRPC 用のメッセージとサービスを記述するためのプロトコル バッファー ファイル。",
+ "symbols/namespace/description": "生成されたコードの名前空間",
+ "postActions/openInEditor/description": "エディターで protobuf.proto を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ko.json
index 13d79b81d9..f8b90f323b 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ko.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "프로토콜 버퍼 파일",
+ "description": "gRPC의 메시지 및 서비스를 설명하는 프로토콜 버퍼 파일입니다.",
+ "symbols/namespace/description": "생성된 코드의 네임스페이스",
+ "postActions/openInEditor/description": "편집기에서 protobuf.proto를 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pl.json
index 13d79b81d9..6eb8bacd13 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pl.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
+ "description": "Plik buforu protokołu służący do opisywania komunikatów i usług na potrzeby systemu gRPC.",
+ "symbols/namespace/description": "przestrzeń nazw wygenerowanego kodu.",
"postActions/openInEditor/description": "Opens protobuf.proto in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pt-BR.json
index 13d79b81d9..26e438d18c 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.pt-BR.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "Arquivo de Buffer de Protocolo",
+ "description": "Um arquivo de buffer de protocolo para descrever mensagens e serviços para gRPC.",
+ "symbols/namespace/description": "namespace do código gerado",
+ "postActions/openInEditor/description": "Abre protobuf.proto no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ru.json
index 13d79b81d9..0323c6b347 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.ru.json
@@ -1,7 +1,7 @@
-{
- "author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Файл буфера протокола",
+ "description": "Файл буфера протокола для описания сообщений и служб для gRPC.",
+ "symbols/namespace/description": "пространство имен для созданного кода",
+ "postActions/openInEditor/description": "Открывает protobuf.proto в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.tr.json
index 13d79b81d9..eb077934a2 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.tr.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "Protokol Arabelleği Dosyası",
+ "description": "gRPC için iletileri ve hizmetleri açıklamak için bir protokol arabelleği dosyası.",
+ "symbols/namespace/description": "oluşturulan kod için ad alanı",
+ "postActions/openInEditor/description": "Düzenleyicide protobuf.proto dosyasını açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hans.json
index 13d79b81d9..d0bc499cdc 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "协议缓冲区文件",
+ "description": "一个协议缓冲区文件,它用于描述 gRPC 的消息和服务。",
+ "symbols/namespace/description": "生成的代码的命名空间",
+ "postActions/openInEditor/description": "在编辑器中打开 protobuf.proto"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hant.json
index 13d79b81d9..fdba7a011b 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/Protobuf/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "Protocol Buffer File",
- "description": "A protocol buffer file for describing messages and services for gRPC.",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens protobuf.proto in the editor"
+ "name": "通訊協定緩衝區檔案",
+ "description": "用來描述 gRPC 訊息和服務的通訊協定緩衝區檔案。",
+ "symbols/namespace/description": "適用於產生之程式碼的命名空間",
+ "postActions/openInEditor/description": "在編輯器中開啟 protobuf.proto"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.cs.json
index 173ab06e59..40e5e585a9 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.cs.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Komponenta Razor",
+ "description": "Opětovně použitelná komponenta uživatelského rozhraní implementovaná pomocí Razoru",
+ "postActions/openInEditor/description": "Otevře soubor Component1.razor v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.de.json
index 173ab06e59..e8a6741b9f 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.de.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
+ "description": "Eine mit Razor implementierte, wiederverwendbare Benutzeroberflächenkomponente.",
"postActions/openInEditor/description": "Opens Component1.razor in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.es.json
index 173ab06e59..b5e7a9784a 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.es.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
+ "description": "Componente de interfaz de usuario reutilizable implementado con Razor",
"postActions/openInEditor/description": "Opens Component1.razor in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.fr.json
index 173ab06e59..8798cedfbc 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.fr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Composant Razor",
+ "description": "Composant d'interface utilisateur réutilisable implémenté avec Razor",
+ "postActions/openInEditor/description": "Ouvre Component1.razor dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.it.json
index 173ab06e59..530175949b 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.it.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Componente Razor",
+ "description": "Componente riutilizzabile dell'interfaccia utente implementato con Razor",
+ "postActions/openInEditor/description": "Apre Component1.razor nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ja.json
index 173ab06e59..d666e25f50 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ja.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Razor コンポーネント",
+ "description": "Razor で実装された再利用可能な UI コンポーネント",
+ "postActions/openInEditor/description": "エディターで Component1.razor を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ko.json
index 173ab06e59..5bf5dba4e0 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ko.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Razor 구성 요소",
+ "description": "Razor로 구현된 재사용 가능한 UI 구성 요소",
+ "postActions/openInEditor/description": "편집기에서 Component1.razor를 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pl.json
index 173ab06e59..3778ed5998 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pl.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
+ "description": "Składnik interfejsu użytkownika wielokrotnego użytku implementowany przy użyciu składni Razor",
"postActions/openInEditor/description": "Opens Component1.razor in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pt-BR.json
index 173ab06e59..5a2e3fa5d5 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.pt-BR.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Componente Razor",
+ "description": "Um componente de interface do usuário reutilizável implementado com o Razor",
+ "postActions/openInEditor/description": "Abre Component1.razor no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ru.json
index 173ab06e59..7383877e73 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.ru.json
@@ -1,6 +1,6 @@
-{
- "author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Компонент Razor",
+ "description": "Компонент пользовательского интерфейса для повторного использования, реализованный с помощью Razor",
+ "postActions/openInEditor/description": "Открывает Component1.razor в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.tr.json
index 173ab06e59..32a9ecec99 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.tr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Razor Bileşeni",
+ "description": "Razor ile birlikte uygulanan yeniden kullanılabilir bir kullanıcı arabirimi bileşeni",
+ "postActions/openInEditor/description": "Component1.razor'ı düzenleyicide açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hans.json
index 173ab06e59..810ee15dae 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Razor 组件",
+ "description": "使用 Razor 实现的可重用 UI 组件",
+ "postActions/openInEditor/description": "在编辑器中打开 Component1.razor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hant.json
index 173ab06e59..229686374c 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorComponent/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Component",
- "description": "A reusable UI component implemented with Razor",
- "postActions/openInEditor/description": "Opens Component1.razor in the editor"
+ "name": "Razor 元件",
+ "description": "透過 Razor 實作且可重複使用的 UI 元件",
+ "postActions/openInEditor/description": "在編輯器中開啟 Component1.razor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.cs.json
index 64b64fabef..98ec45bace 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.cs.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Stránka Razor",
+ "description": "Stránka Razor s modelem stránky nebo bez něj",
+ "symbols/namespace/description": "obor názvů pro vygenerovaný kód",
+ "symbols/no-pagemodel/description": "vytvoření stránky bez PageModel",
+ "symbols/no-pagemodel/displayName": "Vyloučit PageModel",
+ "postActions/openInEditor/description": "Otevře soubor Index.cshtml v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.de.json
index 64b64fabef..926160f806 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.de.json
@@ -1,8 +1,8 @@
-{
+{
"author": "Microsoft",
"name": "Razor Page",
"description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
+ "symbols/namespace/description": "Namespace für den generierten Code",
"symbols/no-pagemodel/description": "create page without a PageModel",
"symbols/no-pagemodel/displayName": "Exclude PageModel",
"postActions/openInEditor/description": "Opens Index.cshtml in the editor"
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.es.json
index 64b64fabef..c556fc0961 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.es.json
@@ -1,8 +1,8 @@
-{
+{
"author": "Microsoft",
"name": "Razor Page",
"description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
+ "symbols/namespace/description": "espacio de nombres para el código generado",
"symbols/no-pagemodel/description": "create page without a PageModel",
"symbols/no-pagemodel/displayName": "Exclude PageModel",
"postActions/openInEditor/description": "Opens Index.cshtml in the editor"
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.fr.json
index 64b64fabef..4cdd72def9 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.fr.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
+ "name": "Page Razor",
+ "description": "Une page Razor avec ou sans modèle de page",
+ "symbols/namespace/description": "espace de noms pour le code généré",
+ "symbols/no-pagemodel/description": "créer une page sans PageModel",
"symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "postActions/openInEditor/description": "Ouvre Index.cshtml dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.it.json
index 64b64fabef..2e4b7a8d2b 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.it.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Pagina Razor",
+ "description": "Pagina Razor con o senza un modello di pagina",
+ "symbols/namespace/description": "spazio dei nomi per il codice generato",
+ "symbols/no-pagemodel/description": "crea una pagina senza PageModel",
+ "symbols/no-pagemodel/displayName": "Escludi PageModel",
+ "postActions/openInEditor/description": "Apre Index.cshtml nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ja.json
index 64b64fabef..a01c613507 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ja.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Razor ページ",
+ "description": "ページ モデルのある/ない Razor ページ",
+ "symbols/namespace/description": "生成されたコードの名前空間",
+ "symbols/no-pagemodel/description": "PageModel なしでページを作成する",
+ "symbols/no-pagemodel/displayName": "PageModel を除外する",
+ "postActions/openInEditor/description": "エディターで Index.cshtml を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ko.json
index 64b64fabef..ec450e866b 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ko.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Razor 페이지",
+ "description": "페이지 모델이 있거나 없는 Razor 페이지",
+ "symbols/namespace/description": "생성된 코드의 네임스페이스",
+ "symbols/no-pagemodel/description": "PageModel 없이 페이지 만들기",
+ "symbols/no-pagemodel/displayName": "PageModel 제외",
+ "postActions/openInEditor/description": "편집기에서 Index.cshtml을 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pl.json
index 64b64fabef..6cf6a0146d 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pl.json
@@ -1,8 +1,8 @@
-{
+{
"author": "Microsoft",
"name": "Razor Page",
"description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
+ "symbols/namespace/description": "przestrzeń nazw wygenerowanego kodu.",
"symbols/no-pagemodel/description": "create page without a PageModel",
"symbols/no-pagemodel/displayName": "Exclude PageModel",
"postActions/openInEditor/description": "Opens Index.cshtml in the editor"
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pt-BR.json
index 64b64fabef..12e41c4e40 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.pt-BR.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Página Razor",
+ "description": "Uma página Razor com ou sem um modelo de página",
+ "symbols/namespace/description": "namespace do código gerado",
+ "symbols/no-pagemodel/description": "criar página sem um PageModel",
+ "symbols/no-pagemodel/displayName": "Excluir PageModel",
+ "postActions/openInEditor/description": "Abre Index.cshtml no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ru.json
index 64b64fabef..225732f057 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.ru.json
@@ -1,9 +1,9 @@
-{
- "author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Страница Razor",
+ "description": "Страница Razor со страничной моделью или без нее",
+ "symbols/namespace/description": "пространство имен для созданного кода",
+ "symbols/no-pagemodel/description": "создать страницу без PageModel",
+ "symbols/no-pagemodel/displayName": "Исключить PageModel",
+ "postActions/openInEditor/description": "Открывает Index.cshtml в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.tr.json
index 64b64fabef..0c0f45ec48 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.tr.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Razor Sayfası",
+ "description": "Sayfa modeli olan veya olmayan bir Razor sayfası",
+ "symbols/namespace/description": "oluşturulan kod için ad alanı",
+ "symbols/no-pagemodel/description": "PageModel olmadan sayfa oluşturma",
+ "symbols/no-pagemodel/displayName": "PageModel'i Dışla",
+ "postActions/openInEditor/description": "Düzenleyicide Index.cshtml’yi açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hans.json
index 64b64fabef..81fc3f23c2 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Razor 页面",
+ "description": "带或不带页面模型的 Razor 页面",
+ "symbols/namespace/description": "生成的代码的命名空间",
+ "symbols/no-pagemodel/description": "创建不带 PageModel 的页面",
+ "symbols/no-pagemodel/displayName": "排除 PageModel",
+ "postActions/openInEditor/description": "在编辑器中打开 Index.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hant.json
index 64b64fabef..3c7242e5d2 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorPage/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,9 +1,9 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Page",
- "description": "A Razor page with or without a page model",
- "symbols/namespace/description": "namespace for the generated code",
- "symbols/no-pagemodel/description": "create page without a PageModel",
- "symbols/no-pagemodel/displayName": "Exclude PageModel",
- "postActions/openInEditor/description": "Opens Index.cshtml in the editor"
+ "name": "Razor 頁面",
+ "description": "具有或不含頁面模型的 Razor 頁面。",
+ "symbols/namespace/description": "適用於產生之程式碼的命名空間",
+ "symbols/no-pagemodel/description": "建立不含 PageModel 的頁面",
+ "symbols/no-pagemodel/displayName": "排除 PageModel",
+ "postActions/openInEditor/description": "在編輯器中開啟 Index.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.cs.json
index bc11b8d35c..24cae74d83 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.cs.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "Stránka importu zobrazení MVC",
+ "symbols/namespace/description": "obor názvů pro vygenerovaný kód",
+ "postActions/openInEditor/description": "Otevře soubor _ViewImports.cshtml v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.de.json
index bc11b8d35c..1940b48f48 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.de.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
"description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
+ "symbols/namespace/description": "Namespace für den generierten Code",
"postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.es.json
index bc11b8d35c..656a40fb15 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.es.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
"description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
+ "symbols/namespace/description": "espacio de nombres para el código generado",
"postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.fr.json
index bc11b8d35c..1a8622ba11 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.fr.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "Page d’importation d’affichage MVC",
+ "symbols/namespace/description": "espace de noms pour le code généré",
+ "postActions/openInEditor/description": "Ouvre _ViewImports.cshtml dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.it.json
index bc11b8d35c..aa26358134 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.it.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "Pagina di importazione di una visualizzazione MVC",
+ "symbols/namespace/description": "spazio dei nomi per il codice generato",
+ "postActions/openInEditor/description": "Apre _ViewImports.cshtml nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ja.json
index bc11b8d35c..ff967114e9 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ja.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "MVC ビュー インポート ページ",
+ "symbols/namespace/description": "生成されたコードの名前空間",
+ "postActions/openInEditor/description": "エディターで _ViewImports.cshtml を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ko.json
index bc11b8d35c..ac3592a119 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ko.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "MVC 보기 가져오기 페이지",
+ "symbols/namespace/description": "생성된 코드의 네임스페이스",
+ "postActions/openInEditor/description": "편집기에서 _ViewImports.cshtml을 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pl.json
index bc11b8d35c..0ec653ec14 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pl.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
"description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
+ "symbols/namespace/description": "przestrzeń nazw wygenerowanego kodu.",
"postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pt-BR.json
index bc11b8d35c..134e47723d 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.pt-BR.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "Uma página de importação de visualização MVC",
+ "symbols/namespace/description": "namespace do código gerado",
+ "postActions/openInEditor/description": "Abre _ViewImports.cshtml no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ru.json
index bc11b8d35c..ea89715fdf 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.ru.json
@@ -1,7 +1,7 @@
-{
- "author": "Microsoft",
+{
+ "author": "Майкрософт",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "Страница импорта представления MVC",
+ "symbols/namespace/description": "пространство имен для созданного кода",
+ "postActions/openInEditor/description": "Открывает _ViewImports.cshtml в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.tr.json
index bc11b8d35c..ae33630d13 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.tr.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "MVC Görünümü İçeri Aktarma Sayfası",
+ "symbols/namespace/description": "oluşturulan kod için ad alanı",
+ "postActions/openInEditor/description": "Düzenleyicide _ViewImports.cshtml dosyasını açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hans.json
index bc11b8d35c..c2f6bc2b74 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "MVC 视图导入页",
+ "symbols/namespace/description": "生成的代码的命名空间",
+ "postActions/openInEditor/description": "在编辑器中打开 _ViewImports.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hant.json
index bc11b8d35c..b8f00b45c7 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewImports/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewImports",
- "description": "An MVC View Import Page",
- "symbols/namespace/description": "namespace for the generated code",
- "postActions/openInEditor/description": "Opens _ViewImports.cshtml in the editor"
+ "description": "MVC 檢視匯入頁面",
+ "symbols/namespace/description": "適用於產生之程式碼的命名空間",
+ "postActions/openInEditor/description": "在編輯器中開啟 _ViewImports.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.cs.json
index 300248ef32..6bcfe6f2e9 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.cs.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "Stránka MVC ViewStart",
+ "postActions/openInEditor/description": "Otevře soubor _ViewStart.cshtml v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.de.json
index 300248ef32..3b3f68e757 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.de.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
"description": "An MVC ViewStart Page",
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.es.json
index 300248ef32..3b3f68e757 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.es.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
"description": "An MVC ViewStart Page",
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.fr.json
index 300248ef32..b990617b60 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.fr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "Page ViewStart MVC",
+ "postActions/openInEditor/description": "Ouvre _ViewStart.cshtml dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.it.json
index 300248ef32..1b61c6b0e8 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.it.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "Pagina ViewStart di MVC",
+ "postActions/openInEditor/description": "Apre _ViewStart.cshtml nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ja.json
index 300248ef32..7c57a1948e 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ja.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "MVC ViewStart ページ",
+ "postActions/openInEditor/description": "エディターで _ViewStart.cshtml を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ko.json
index 300248ef32..e0f41ad553 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ko.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "MVC ViewStart 페이지",
+ "postActions/openInEditor/description": "편집기에서 ViewStart.cshtml을 엽니다(_V)"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pl.json
index 300248ef32..3b3f68e757 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pl.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
"description": "An MVC ViewStart Page",
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pt-BR.json
index 300248ef32..a138cf5207 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.pt-BR.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "Uma página MVC ViewStart",
+ "postActions/openInEditor/description": "Abre _ViewStart.cshtml no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ru.json
index 300248ef32..a33df6527f 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.ru.json
@@ -1,6 +1,6 @@
-{
- "author": "Microsoft",
+{
+ "author": "Майкрософт",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "Страница MVC ViewStart",
+ "postActions/openInEditor/description": "Открывает _ViewStart.cshtml в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.tr.json
index 300248ef32..e655d378cc 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.tr.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "MVC ViewStart Sayfası",
+ "postActions/openInEditor/description": "_ViewStart.cshtml’yi düzenleyicide açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hans.json
index 300248ef32..2bb7fb5005 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "MVC ViewStart 页面",
+ "postActions/openInEditor/description": "在编辑器中打开 _ViewStart.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hant.json
index 300248ef32..31f96af7db 100644
--- a/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ItemTemplates/content/ViewStart/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,6 +1,6 @@
-{
+{
"author": "Microsoft",
"name": "MVC ViewStart",
- "description": "An MVC ViewStart Page",
- "postActions/openInEditor/description": "Opens _ViewStart.cshtml in the editor"
+ "description": "MVC ViewStart 頁面",
+ "postActions/openInEditor/description": "在編輯器中開啟 _ViewStart.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj b/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj
index 1edb1e6ef0..8528b64842 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj
+++ b/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj
@@ -31,8 +31,6 @@
<ItemGroup>
<!-- These projects product packages that the templates depend on. See GenerateContent.targets -->
- <PackageVersionVariableReference Include="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureAD.UI\src\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj" />
- <PackageVersionVariableReference Include="$(RepoRoot)src\Azure\AzureAD\Authentication.AzureADB2C.UI\src\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj" />
<PackageVersionVariableReference Include="$(RepoRoot)src\Components\Components\src\Microsoft.AspNetCore.Components.csproj" />
<PackageVersionVariableReference Include="$(RepoRoot)src\Components\Web\src\Microsoft.AspNetCore.Components.Web.csproj" />
<PackageVersionVariableReference Include="$(RepoRoot)src\Identity\EntityFrameworkCore\src\Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj" />
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json
index 93b827b9d7..2773f81304 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplikace Blazor Server",
+ "description": "Šablona projektu pro vytvoření aplikace Blazor Server, 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).",
+ "symbols/auth/choices/None/description": "Bez ověřování",
+ "symbols/auth/choices/Individual/description": "Ověřování Individual",
+ "symbols/auth/choices/IndividualB2C/description": "Ověřování Individual pomocí Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Ověřování organizace pro jednoho tenanta",
+ "symbols/auth/choices/MultiOrg/description": "Ověřování organizace pro více tenantů",
+ "symbols/auth/choices/Windows/description": "Integrované ověřování Windows",
+ "symbols/auth/description": "Typ ověřování, který se má použít",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C, ke které se chcete připojit (používá se s ověřováním IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID zásad přihlašování a registrace pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Zpětné volání globálního odhlášení (používá se s ověřováním IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID zásad resetování hesla pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID zásad úprav profilu pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory, ke které se chcete připojit (používá se s ověřováním SingleOrg nebo MultiOrg).",
+ "symbols/ClientId/description": "ID klienta pro tento projekt (používá se s ověřováním IndividualB2C, SingleOrg nebo MultiOrg).",
+ "symbols/Domain/description": "Doména pro tenanta adresáře (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/TenantId/description": "TenantId adresáře, ke kterému se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/CallbackPath/description": "Cesta žádosti v rámci základní cesty aplikace k identifikátoru URI pro přesměrování (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Určuje, jestli se této aplikaci povolí přístup ke čtení adresáře (platí jenom pro ověřování SingleOrg nebo MultiOrg).",
+ "symbols/UserSecretsId/description": "ID, které se má použít pro tajné kódy (používá se s ověřováním OrgReadAccess nebo Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají IndividualB2C, SingleOrg ani MultiOrg.",
+ "symbols/UseLocalDB/description": "Určuje, jestli se má použít LocalDB namísto SQLite. Tato možnost platí jenom v případě, že je zadáno --auth Individual nebo --auth IndividualB2C.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/CalledApiUrl/description": "Adresa URL rozhraní API, která se má volat z webové aplikace. Tato možnost platí jenom v případě, že je zadáno --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Určuje, jestli webová aplikace volá Microsoft Graph. Tato možnost platí pouze v případě, že je zadáno --auth SingleOrg nebo --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Obory, které se mají požádat o volání rozhraní API z webové aplikace Tato možnost platí jenom v případě, že je zadaná možnost --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C.",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json
index 93b827b9d7..801015b999 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"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).",
+ "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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
@@ -23,19 +23,19 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json
index 93b827b9d7..962f78c6a0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"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).",
+ "description": "Plantilla de proyecto para crear una aplicación Blazor Server 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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
@@ -23,19 +23,19 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json
index 93b827b9d7..542a330df5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Application Blazor Server",
+ "description": "Modèle de projet permettant de créer une application Blazor Server 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.",
+ "symbols/auth/choices/None/description": "Aucune authentification",
+ "symbols/auth/choices/Individual/description": "Authentification individuelle",
+ "symbols/auth/choices/IndividualB2C/description": "Authentification individuelle avec Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Authentification organisationnelle pour un seul locataire",
+ "symbols/auth/choices/MultiOrg/description": "Authentification organisationnelle pour plusieurs locataires",
+ "symbols/auth/choices/Windows/description": "Authentification Windows",
+ "symbols/auth/description": "Type d’authentification à utiliser",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C à laquelle se connecter (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID de stratégie de connexion et d’inscription pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Rappel de déconnexion global (utilisé avec l’authentification IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID de stratégie de réinitialisation de mot de passe pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID de stratégie de modification de profil pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory à laquelle se connecter (à utiliser avec l’authentification SingleOrg ou MultiOrg).",
+ "symbols/ClientId/description": "ID client de ce projet (à utiliser avec l’authentification IndividualB2C, SingleOrg ou MultiOrg).",
+ "symbols/Domain/description": "Domaine du locataire d’annuaire (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/TenantId/description": "ID TenantId du répertoire auquel se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/CallbackPath/description": "Chemin de la demande dans le chemin de base de l’application de l’URI de redirection (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Indique si cette application doit autoriser ou non l’accès en lecture à l’annuaire (s’applique uniquement à l’authentification SingleOrg ou MultiOrg).",
+ "symbols/UserSecretsId/description": "ID à utiliser pour les secrets (à utiliser avec OrgReadAccess ou l’authentification individuelle).",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https est ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "symbols/UseLocalDB/description": "Indique s’il faut utiliser localDB au lieu de SQLite. Cette option s’applique uniquement si --auth Individual ou --auth IndividualB2C est spécifié.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/CalledApiUrl/description": "URL de l’API à appeler à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/CallsMicrosoftGraph/description": "Spécifie si l’application web appelle Microsoft Graph. Cette option s’applique uniquement si --auth SingleOrg ou --auth MultiOrg est spécifié.",
+ "symbols/CalledApiScopes/description": "Étendues pour demander à appeler l’API à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json
index 93b827b9d7..436f1e3ba4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "App Blazor Server",
+ "description": "Modello di progetto per la creazione di un'app Blazor Server 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.",
+ "symbols/auth/choices/None/description": "Nessuna autenticazione",
+ "symbols/auth/choices/Individual/description": "Autenticazione singola",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticazione singola con Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticazione organizzativa per un singolo tenant",
+ "symbols/auth/choices/MultiOrg/description": "Autenticazione dell'organizzazione per più tenant",
+ "symbols/auth/choices/Windows/description": "Autenticazione di Windows",
+ "symbols/auth/description": "Tipo di autenticazione da usare.",
+ "symbols/AAdB2CInstance/description": "Istanza di Azure Active Directory B2C a cui connettersi (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID dei criteri di accesso e iscrizione per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Callback di disconnessione globale (usare con l'autenticazione IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID dei criteri di reimpostazione della password per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID dei criteri del profilo di modifica per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/AADInstance/description": "Istanza di Azure Active Directory a cui connettersi (usare con l'autenticazione SingleOrg o MultiOrg).",
+ "symbols/ClientId/description": "ID client per questo progetto (usare con l'autenticazione IndividualB2C, SingleOrg o MultiOrg).",
+ "symbols/Domain/description": "Il dominio per il tenant della directory (da usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/TenantId/description": "ID TenantId della directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/CallbackPath/description": "Percorso della richiesta all'interno del percorso di base dell'applicazione dell'URI di reindirizzamento (usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Indica se consentire o meno a questa applicazione l'accesso in lettura alla directory (si applica solo all'autenticazione SingleOrg o MultiOrg).",
+ "symbols/UserSecretsId/description": "ID da usare per i segreti (usare con OrgReadAccess o l'autenticazione singola).",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si utilizza IndividualB2C o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualB2C o OrganizationalAuth).",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "symbols/UseLocalDB/description": "Indica se usare LocalDB invece di SQLite. Questa opzione si applica solo se è specificato --auth Individual o --auth IndividualB2C.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/CalledApiUrl/description": "URL dell'API da chiamare dall'app Web. Questa opzione si applica solo se si specifica --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Specifica se l'app Web chiama Microsoft Graph. Questa opzione si applica solo se è specificato --auth SingleOrg o --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Ambiti per richiedere di chiamare l'API dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C.",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json
index 93b827b9d7..b42ec968b6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server アプリ",
+ "description": "ASP.NET Core アプリ内のサーバー側で実行され、SignalR 接続を介してユーザー操作を処理する Blazor Server アプリを作成するためのプロジェクト テンプレート。このテンプレートは、高度でダイナミックなユーザー インターフェイス (UI) を備えた Web アプリに使用できます。",
+ "symbols/auth/choices/None/description": "認証なし",
+ "symbols/auth/choices/Individual/description": "個別の認証",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C を使用した個別の認証",
+ "symbols/auth/choices/SingleOrg/description": "単一テナントの組織認証",
+ "symbols/auth/choices/MultiOrg/description": "複数のテナントの組織認証",
+ "symbols/auth/choices/Windows/description": "Windows 認証",
+ "symbols/auth/description": "使用する認証の種類",
+ "symbols/AAdB2CInstance/description": "接続先の Azure Active Directory B2C インスタンス (IndividualB2C 認証で使用)。",
+ "symbols/SignUpSignInPolicyId/description": "このプロジェクトのサインインおよびサインアップのポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/SignedOutCallbackPath/description": "グローバル サインアウト コールバック (IndividualB2C 認証で使用)。",
+ "symbols/ResetPasswordPolicyId/description": "このプロジェクトのパスワードのリセット ポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/EditProfilePolicyId/description": "このプロジェクトの編集プロファイル ポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/AADInstance/description": "接続先の Azure Active Directory インスタンス (SingleOrg または MultiOrg 認証で使用)。",
+ "symbols/ClientId/description": "このプロジェクトのクライアント ID (IndividualB2C、SingleOrg、または MultiOrg 認証で使用)。",
+ "symbols/Domain/description": "ディレクトリ テナントのドメイン (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/TenantId/description": "接続先のディレクトリの TenantId ID (SingleOrg 認証で使用)。",
+ "symbols/CallbackPath/description": "リダイレクト URI のアプリケーションのベース パス内の要求パス (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/OrgReadAccess/description": "このアプリケーションにディレクトリへの読み取りアクセスを許可するかどうか (SingleOrg または MultiOrg 認証にのみ適用されます)。",
+ "symbols/UserSecretsId/description": "シークレットで使用する ID (OrgReadAccess または個別の認証で使用)。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、no-https パラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、no-https は無視されます)。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "symbols/UseLocalDB/description": "SQLite の代わりに LocalDB を使用するかどうか。このオプションは、--auth Individual または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/CalledApiUrl/description": "Web アプリから呼び出す API の URL。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/CallsMicrosoftGraph/description": "Web アプリが Microsoft Graph を呼び出すかどうかを指定します。このオプションは、--auth SingleOrg または --auth MultiOrg が指定されている場合にのみ適用されます。",
+ "symbols/CalledApiScopes/description": "Web アプリから API を呼び出す要求へのスコープ。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json
index 93b827b9d7..bd782791b6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "블레이저 서버 앱",
+ "description": "ASP.NET Core 앱 내에서 서버 쪽을 실행하고 SignalR 연결을 통해 사용자 상호 작용을 처리하는 Blazor Server 앱을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿을 사용하여 다양한 동적 UI(사용자 인터페이스)가 포함된 웹앱을 만들 수 있습니다.",
+ "symbols/auth/choices/None/description": "인증 없음",
+ "symbols/auth/choices/Individual/description": "개별 인증",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C를 사용한 개별 인증",
+ "symbols/auth/choices/SingleOrg/description": "단일 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/MultiOrg/description": "여러 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/Windows/description": "Windows 인증",
+ "symbols/auth/description": "사용할 인증 유형",
+ "symbols/AAdB2CInstance/description": "연결할 Azure Active Directory B2C 인스턴스(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignUpSignInPolicyId/description": "이 프로젝트의 로그인 및 등록 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignedOutCallbackPath/description": "전역 로그아웃 콜백입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/ResetPasswordPolicyId/description": "이 프로젝트의 암호 초기화 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/EditProfilePolicyId/description": "이 프로젝트의 편집 프로필 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/AADInstance/description": "연결할 Azure Active Directory 인스턴스입니다(SingleOrg 또는 MultiOrg 인증과 함께 사용).",
+ "symbols/ClientId/description": "이 프로젝트의 클라이언트 ID입니다(IndividualB2C, SingleOrg 또는 MultiOrg 인증과 함께 사용).",
+ "symbols/Domain/description": "디렉터리 테넌트의 도메인입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/TenantId/description": "연결할 디렉터리의 TenantId ID입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/CallbackPath/description": "리디렉션 URI의 애플리케이션 기본 경로 내의 요청 경로(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/OrgReadAccess/description": "이 애플리케이션이 디렉터리에 대한 읽기 액세스를 허용할지 여부(SingleOrg 또는 MultiOrg 인증에만 적용됨).",
+ "symbols/UserSecretsId/description": "비밀에 사용할 ID입니다(OrgReadAccess 또는 개별 인증과 함께 사용).",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 개별B2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/UseLocalDB/description": "SQLite 대신 LocalDB를 사용할지 여부입니다. 이 옵션은 --auth Individual 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/CalledApiUrl/description": "웹앱에서 호출할 API의 URL입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/CallsMicrosoftGraph/description": "웹앱이 Microsoft Graph를 호출하는지 여부를 지정합니다. 이 옵션은 --auth SingleOrg 또는 --auth MultiOrg가 지정된 경우에만 적용됩니다.",
+ "symbols/CalledApiScopes/description": "웹앱에서 API 호출을 요청할 범위입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json
index 93b827b9d7..c2b1814962 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"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).",
+ "description": "Szablon projektu służący do tworzenia aplikacji Blazor Server 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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
@@ -23,19 +23,19 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 93b827b9d7..77f88e9c92 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplicativo Blazor Server",
+ "description": "Um modelo de projeto para criar um aplicativo Blazor Server 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.",
+ "symbols/auth/choices/None/description": "Sem autenticação",
+ "symbols/auth/choices/Individual/description": "Autenticação individual",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticação individual com Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticação organizacional para um único locatário",
+ "symbols/auth/choices/MultiOrg/description": "Autenticação organizacional para vários locatários",
+ "symbols/auth/choices/Windows/description": "autenticação do Windows",
+ "symbols/auth/description": "O tipo de autenticação a ser usado",
+ "symbols/AAdB2CInstance/description": "A instância do Azure Active Directory B2C à qual se conectar (use com autenticação IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "O ID da política de login e inscrição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "O retorno de chamada de saída global (use com autenticação IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "O ID da política de redefinição de senha para este projeto (use com autenticação IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "O ID de política de perfil de edição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/AADInstance/description": "A instância do Azure Active Directory à qual se conectar (use com autenticação SingleOrg ou MultiOrg).",
+ "symbols/ClientId/description": "O ID do cliente para este projeto (use com autenticação IndividualB2C, SingleOrg ou MultiOrg).",
+ "symbols/Domain/description": "O domínio para o locatário do diretório (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/TenantId/description": "O ID TenantId do diretório ao qual se conectar (use com autenticação SingleOrg).",
+ "symbols/CallbackPath/description": "O caminho de solicitação no caminho base do aplicativo do URI de redirecionamento (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Se deve ou não permitir o acesso de leitura deste aplicativo ao diretório (aplica-se apenas à autenticação SingleOrg ou MultiOrg).",
+ "symbols/UserSecretsId/description": "O ID a ser usado para segredos (use com OrgReadAccess ou Autenticação individual).",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção só se aplica se IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "symbols/UseLocalDB/description": "Se deve usar LocalDB em vez de SQLite. Esta opção só se aplica se --auth Individual ou --auth IndividualB2C for especificado.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/CalledApiUrl/description": "URL da API para chamar do aplicativo Web. Esta opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C for especificado.",
+ "symbols/CallsMicrosoftGraph/description": "Especifica se o aplicativo Web chama o Microsoft Graph. Esta opção só se aplica se --auth SingleOrg ou --auth MultiOrg for especificado.",
+ "symbols/CalledApiScopes/description": "Escopos a serem solicitados para chamar a API do aplicativo Web. Esta opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C for especificado.",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json
index 93b827b9d7..e3be8b2ddd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,41 +1,41 @@
-{
- "author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Приложение Blazor Server",
+ "description": "Шаблон проекта для создания серверного приложения Blazor Server, которое запускается на стороне сервера в приложении ASP.NET Core и обрабатывает взаимодействие с пользователем через подключение SignalR. Этот шаблон можно использовать для веб-приложений с полнофункциональными динамическими пользовательскими интерфейсами.",
+ "symbols/auth/choices/None/description": "Без проверки подлинности",
+ "symbols/auth/choices/Individual/description": "Индивидуальная проверка подлинности",
+ "symbols/auth/choices/IndividualB2C/description": "Индивидуальная проверка подлинности в Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Проверка подлинности в организации для одного клиента",
+ "symbols/auth/choices/MultiOrg/description": "Проверка подлинности в организации для нескольких клиентов",
+ "symbols/auth/choices/Windows/description": "Проверка подлинности Windows",
+ "symbols/auth/description": "Тип используемой проверки подлинности",
+ "symbols/AAdB2CInstance/description": "Экземпляр Azure Active Directory B2C, к которому нужно подключиться (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "Идентификатор политики входа и регистрации для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Глобальный обратный вызов для выхода (используется с проверкой подлинности IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "Идентификатор политики сброса паролей для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "Идентификатор политики изменения профиля для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/AADInstance/description": "Экземпляр Azure Active Directory, к которому нужно подключиться (используется с проверкой подлинности SingleOrg или MultiOrg).",
+ "symbols/ClientId/description": "Идентификатор клиента для этого проекта (используется с проверкой подлинности IndividualB2C, SingleOrg или MultiOrg).",
+ "symbols/Domain/description": "Домен для клиента каталога (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/TenantId/description": "Идентификатор TenantId каталога, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/CallbackPath/description": "Путь запроса в базовом пути приложения к URI перенаправления (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Следует ли предоставлять этому приложению доступ на чтение к каталогу (применяется только к проверке подлинности SingleOrg или MultiOrg).",
+ "symbols/UserSecretsId/description": "Идентификатор, используемый для секретов (используется с проверкой подлинности OrgReadAccess или Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются IndividualB2C, SingleOrg или MultiOrg.",
+ "symbols/UseLocalDB/description": "Следует ли использовать LocalDB вместо SQLite. Этот параметр применяется, только если указывается --auth Individual или --auth IndividualB2C.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/CalledApiUrl/description": "URL-адрес API для вызова из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Указывает, вызывает ли веб-приложение Microsoft Graph. Этот параметр применяется, только если указывается --auth SingleOrg или --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Области для запроса вызова API из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C.",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json
index 93b827b9d7..a35e3165a8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server 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 Server uygulaması oluşturmaya yönelik proje şablonu. Bu şablon, zengin dinamik kullanıcı arabirimlerine (UI) sahip web uygulamaları için kullanılabilir.",
+ "symbols/auth/choices/None/description": "Kimlik doğrulaması yok",
+ "symbols/auth/choices/Individual/description": "Bireysel kimlik doğrulaması",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C ile bireysel kimlik doğrulaması",
+ "symbols/auth/choices/SingleOrg/description": "Tek bir kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/MultiOrg/description": "Birden çok kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/Windows/description": "Windows kimlik doğrulaması",
+ "symbols/auth/description": "Kullanılacak kimlik doğrulaması türü",
+ "symbols/AAdB2CInstance/description": "Bağlanılacak Azure Active Directory B2C örneği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignUpSignInPolicyId/description": "Bu proje için oturum açma ve kaydolma ilkesi kimliği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignedOutCallbackPath/description": "Genel oturum kapatma geri araması (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/ResetPasswordPolicyId/description": "Bu proje için parola ilkesi sıfırlama kimliği (IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/EditProfilePolicyId/description": "Bu proje için düzenleme profil ilkesi kimliği (IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/AADInstance/description": "Bağlanılacak Azure Active Directory örneği (SingleOrg veya MultiOrg kimlik doğrulaması ile kullanın).",
+ "symbols/ClientId/description": "Bu proje için İstemci Kimliği (IndividualB2C, SingleOrg veya MultiOrg kimlik doğrulaması ile kullanın).",
+ "symbols/Domain/description": "Dizin kiracısı için etki alanı (SingleOrg veya IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/TenantId/description": "Bağlanılacak dizinin TenantId kimliği (SingleOrg kimlik doğrulamasıyla kullanın).",
+ "symbols/CallbackPath/description": "Yeniden yönlendirme URI'sinin uygulama temel dizini yolu içindeki istek yolu (SingleOrg veya IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/OrgReadAccess/description": "Bu uygulamanın dizin okuma erişimine izin verilip verilmeyeceği (yalnızca SingleOrg veya MultiOrg kimlik doğrulaması için geçerlidir).",
+ "symbols/UserSecretsId/description": "Gizli diziler için kullanılan kimlik (OrgReadAccess veya Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "symbols/UseLocalDB/description": "SQLite yerine LocalDB'nin kullanılıp kullanılmayacağı. Bu seçenek yalnızca --auth Individual veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/CalledApiUrl/description": "Web uygulamasından çağrılan API URL'si. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/CallsMicrosoftGraph/description": "Web uygulamasının Microsoft Graph çağırıp çağırmadığını belirtir. Bu seçenek yalnızca --auth SingleOrg veya --auth MultiOrg belirtilirse geçerlidir.",
+ "symbols/CalledApiScopes/description": "Web uygulamasından API çağırma istek kapsamları. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 93b827b9d7..95cafc462b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server 应用",
+ "description": "用于创建 Blazor Server 应用的项目模板,该应用会在 ASP.NET Core 应用内运行服务器端并对通过 SignalR 连接进行用户交互进行处理。此模板可用于具有丰富动态用户界面(UI)的 Web 应用。",
+ "symbols/auth/choices/None/description": "无身份验证",
+ "symbols/auth/choices/Individual/description": "个人身份验证",
+ "symbols/auth/choices/IndividualB2C/description": "使用 Azure AD B2C 进行个人身份验证",
+ "symbols/auth/choices/SingleOrg/description": "单个租户的组织身份验证",
+ "symbols/auth/choices/MultiOrg/description": "多个租户的组织身份验证",
+ "symbols/auth/choices/Windows/description": "Windows 身份验证",
+ "symbols/auth/description": "要使用的身份验证类型",
+ "symbols/AAdB2CInstance/description": "要连接到的 Azure Active Directory B2C 实例(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此项目的登录和注册策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignedOutCallbackPath/description": "全局注销回调(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/ResetPasswordPolicyId/description": "此项目的重置密码策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/EditProfilePolicyId/description": "此项目的编辑配置文件策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/AADInstance/description": "要连接到的 Azure Active Directory 实例(与 SingleOrg 或 MultiOrg 身份验证一起使用)。",
+ "symbols/ClientId/description": "此项目的客户端 ID (与 IndividualB2C、SingleOrg 或 MultiOrg 身份验证一起使用)。",
+ "symbols/Domain/description": "目录租户的域(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/TenantId/description": "要连接到的目录的 TenantId ID (与 SingleOrg 身份验证一起使用)。",
+ "symbols/CallbackPath/description": "重定向 URI 的应用程序基路径内的请求路径(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/OrgReadAccess/description": "是否允许此应用程序对目录进行读取访问(仅适用于 SingleOrg 或 MultiOrg 身份验证)。",
+ "symbols/UserSecretsId/description": "用于机密的 ID (与 OrgReadAccess 或个人身份验证一起使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而不是 SQLite。仅当指定了 --auth Individual 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/CalledApiUrl/description": "要从 Web 应用调用的 API 的 URL。仅当指定了 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 应用是否调用 Microsoft Graph。仅当指定了 --auth SingleOrg 或 --auth MultiOrg 时,此选项才适用。",
+ "symbols/CalledApiScopes/description": "请求从 Web 应用调用 API 的范围。仅当指定了 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 93b827b9d7..e25b90e2fd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "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).",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server 應用程式",
+ "description": "用來建立 Blazor Server 應用程式的專案範本,該應用程式會在 ASP.NET Core 應用程式內執行伺服器端,並透過 SignalR 連線處理使用者互動。Web 應用程式具有豐富且動態的使用者介面 (UI) 時,此範本最適用。",
+ "symbols/auth/choices/None/description": "沒有驗證",
+ "symbols/auth/choices/Individual/description": "個別驗證",
+ "symbols/auth/choices/IndividualB2C/description": "具有 Azure AD B2C 的個別驗證",
+ "symbols/auth/choices/SingleOrg/description": "單一租用戶的組織驗證",
+ "symbols/auth/choices/MultiOrg/description": "多個租用戶的組織驗證",
+ "symbols/auth/choices/Windows/description": "Windows 驗證",
+ "symbols/auth/description": "要使用的驗證類型。",
+ "symbols/AAdB2CInstance/description": "要連線的 Azure Active Directory B2C 執行個體 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此專案的登入和註冊原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignedOutCallbackPath/description": "全域登出回呼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/ResetPasswordPolicyId/description": "此專案的重設密碼原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/EditProfilePolicyId/description": "此專案的編輯設定檔原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/AADInstance/description": "要連線到的 Azure Active Directory 執行個體 (搭配 SingleOrg 或 MultiOrg 驗證使用)。",
+ "symbols/ClientId/description": "此專案的用戶端識別碼 (搭配 IndividualB2C、SingleOrg 或 MultiOrg 驗證使用)。",
+ "symbols/Domain/description": "目錄租用戶的網域 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/TenantId/description": "要連線到目錄的 TenantId 識別碼 (搭配 SingleOrg 驗證使用)。",
+ "symbols/CallbackPath/description": "重新導向 URI 的應用程式基底路徑內的要求路徑 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/OrgReadAccess/description": "是否要允許此應用程式讀取存取目錄 (只適用於 SingleOrg 或 MultiOrg 驗證)。",
+ "symbols/UserSecretsId/description": "用於祕密的識別碼 (搭配 OrgReadAccess 或個別驗證使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而非 SQLite。只有在已指定 --auth Individual 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/CalledApiUrl/description": "要從 Web 應用程式呼叫的 API URL。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 應用程式呼叫是否 Microsoft Graph。只有在已指定 --auth SingleOrg 或 --auth MultiOrg 時,才適用此選項。",
+ "symbols/CalledApiScopes/description": "要求從 Web 應用程式呼叫 API 的範圍。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json
index 7e31298e01..bb57cdccb5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Aplikace Blazor WebAssembly",
+ "description": "Šablona projektu pro vytvoření aplikace Blazor, která běží ve WebAssembly a dá se volitelně hostovat v aplikaci ASP.NET. Tato šablona se dá použít pro webové aplikace s propracovanými dynamickými uživatelskými rozhraními (UI).",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/Hosted/displayName": "_Hostováno pomocí ASP.NET Core",
+ "symbols/Hosted/description": "Pokud je tato možnost zadaná, zahrnuje hostitele ASP.NET Core pro aplikaci Blazor WebAssembly.",
+ "symbols/auth/choices/None/description": "Bez ověřování",
+ "symbols/auth/choices/Individual/description": "Ověřování Individual",
+ "symbols/auth/choices/IndividualB2C/description": "Ověřování Individual pomocí Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Ověřování organizace pro jednoho tenanta",
+ "symbols/auth/description": "Typ ověřování, který se má použít",
+ "symbols/Authority/description": "Autorita poskytovatele OIDC (používá se se samostatným ověřováním Individual).",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C, ke které se chcete připojit (používá se s ověřováním IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID zásad přihlašování a registrace pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory, ke které se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/ClientId/description": "ID klienta pro tento projekt (v samostatných scénářích se používá s ověřováním IndividualB2C, SingleOrg nebo Individual).",
+ "symbols/Domain/description": "Doména pro tenanta adresáře (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/AppIDUri/description": "Identifikátor URI ID aplikace pro serverové rozhraní API, které chceme volat (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/APIClientId/description": "ID klienta pro rozhraní API, které server hostuje (používá se s IndividualB2C, SingleOrg).",
+ "symbols/DefaultScope/description": "Rozsah rozhraní API, který musí klient požádat o zřízení přístupového tokenu. (použijte s IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "TenantId adresáře, ke kterému se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/OrgReadAccess/description": "Určuje, jestli se této aplikaci povolí přístup ke čtení adresáře (platí jenom pro ověřování SingleOrg).",
+ "symbols/UserSecretsId/description": "ID, které se má použít pro tajné kódy (používá se s ověřováním OrgReadAccess nebo Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/PWA/displayName": "_Progresivní webová aplikace",
+ "symbols/PWA/description": "Pokud je tato možnost zadaná, vytvoří progresivní webovou aplikaci (PWA), která podporuje instalaci a offline použití.",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají Individual, IndividualB2C, SingleOrg ani MultiOrg.",
+ "symbols/UseLocalDB/description": "Určuje, jestli se má použít LocalDB namísto SQLite. Tato možnost platí jenom v případě, že je zadáno --auth Individual nebo --auth IndividualB2C.",
+ "symbols/CalledApiUrl/description": "Adresa URL rozhraní API, která se má volat z webové aplikace. Tato možnost platí jenom v případě, že je zadáno --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C a také je zadán hostitel ASP.NET Core.",
+ "symbols/CallsMicrosoftGraph/description": "Určuje, jestli webová aplikace volá Microsoft Graph. Tato možnost platí pouze v případě, že je zadáno --auth SingleOrg nebo --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Obory, které se mají požádat žádat o volání rozhraní API z webové aplikace. Tato možnost platí jenom v případě, že je zadáno --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C a také je zadán hostitel ASP.NET Core.",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore",
+ "postActions/restoreClient/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restoreClient/manualInstructions/default/text": "Spustit „dotnet restore“",
+ "postActions/open-file/description": "Otevře soubor Readme.txt v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json
index 7e31298e01..9dccec6b9d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
"name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
+ "description": "Eine Projektvorlage zum Erstellen einer Blazor-App, die auf WebAssembly ausgeführt und optional durch eine ASP.NET Core-App gehostet wird. Diese Vorlage kann für Web-Apps mit umfangreichen dynamischen Benutzeroberflächen verwendet werden.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
+ "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
"symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
@@ -29,18 +29,18 @@
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
+ "symbols/PWA/displayName": "_Progressive Web Application",
"symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen",
+ "postActions/restoreClient/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
"postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
"postActions/open-file/description": "Opens Readme.txt in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json
index 7e31298e01..650dba9ce5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
"name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
+ "description": "Plantilla de proyecto para crear una aplicación Blazor que se ejecuta en WebAssembly y que se hospeda de forma opcional en una aplicación de ASP.NET Core. Esta plantilla se puede usar para las aplicaciones web con interfaces de usuario dinámicas enriquecidas (IU).",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
+ "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
"symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
@@ -29,18 +29,18 @@
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
+ "symbols/PWA/displayName": "_Progressive Web Application",
"symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\"",
+ "postActions/restoreClient/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
"postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
"postActions/open-file/description": "Opens Readme.txt in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json
index 7e31298e01..ffc681f32f 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Application WebAssembly Blazor",
+ "description": "Modèle de projet permettant de créer une application Blazor qui s'exécute sur WebAssembly et qui est éventuellement hébergée par une application ASP.NET Core. Vous pouvez utiliser ce modèle pour les applications web ayant des IU (interfaces utilisateur) dynamiques riches.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/Hosted/displayName": "ASP.NET core _Hosted",
+ "symbols/Hosted/description": "S’il est spécifié, inclut un hôte ASP.NET Core pour l’application Blazor WebAssembly.",
+ "symbols/auth/choices/None/description": "Aucune authentification",
+ "symbols/auth/choices/Individual/description": "Authentification individuelle",
+ "symbols/auth/choices/IndividualB2C/description": "Authentification individuelle avec Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Authentification organisationnelle pour un seul locataire",
+ "symbols/auth/description": "Type d’authentification à utiliser",
+ "symbols/Authority/description": "Autorité du fournisseur OIDC (à utiliser avec l’authentification individuelle autonome).",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C à laquelle se connecter (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID de stratégie de connexion et d’inscription pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory à laquelle se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/ClientId/description": "ID client de ce projet (utilisé avec IndividualB2C, SingleOrg ou l’authentification individuelle dans les scénarios autonomes).",
+ "symbols/Domain/description": "Domaine du locataire d’annuaire (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/AppIDUri/description": "URI d’ID d’application pour l’API serveur que nous voulons appeler (à utiliser avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/APIClientId/description": "ID client de l’API hébergée par le serveur (à utiliser avec IndividualB2C, SingleOrg).",
+ "symbols/DefaultScope/description": "Étendue d’API dont le client a besoin pour configurer un jeton d’accès. (à utiliser avec IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "ID TenantId du répertoire auquel se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/OrgReadAccess/description": "Indique si cette application doit ou non autoriser l’accès en lecture au répertoire (s’applique uniquement à SingleOrg).",
+ "symbols/UserSecretsId/description": "ID à utiliser pour les secrets (à utiliser avec OrgReadAccess ou l’authentification individuelle).",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/PWA/displayName": "_Application web progressive",
+ "symbols/PWA/description": "Si ce paramètre est spécifié, produit une application web progressive (PWA) qui prend en charge l’installation et l’utilisation hors connexion.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si Individual, IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "symbols/UseLocalDB/description": "Indique s’il faut utiliser localDB au lieu de SQLite. Cette option s’applique uniquement si --auth Individual ou --auth IndividualB2C est spécifié.",
+ "symbols/CalledApiUrl/description": "URL de l’API à appeler à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C sans et ASP.NET’hôte principal est spécifié.",
+ "symbols/CallsMicrosoftGraph/description": "Spécifie si l’application web appelle Microsoft Graph. Cette option s’applique uniquement si --auth SingleOrg ou --auth MultiOrg est spécifié.",
+ "symbols/CalledApiScopes/description": "Étendues où demander l’appel de l’API à partir de l’application web. Cette option s’applique uniquement si l’hôte --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C sans et ASP.NET Core est spécifié.",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »",
+ "postActions/restoreClient/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restoreClient/manualInstructions/default/text": "Exécuter « dotnet restore »",
+ "postActions/open-file/description": "Ouvre Readme.txt dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json
index 7e31298e01..79bd025287 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "App WebAssembly Blazor",
+ "description": "Modello di progetto per la creazione di un'app Blazor eseguita in WebAssembly e ospitata facoltativamente da un'app ASP.NET Core. Questo modello può essere usato per app Web con interfacce utente dinamiche.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
+ "symbols/Hosted/description": "Se specificato, include un host ASP.NET Core per l'app Blazor WebAssembly.",
+ "symbols/auth/choices/None/description": "Nessuna autenticazione",
+ "symbols/auth/choices/Individual/description": "Autenticazione singola",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticazione singola con Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticazione organizzativa per un singolo tenant",
+ "symbols/auth/description": "Tipo di autenticazione da usare.",
+ "symbols/Authority/description": "Autorità del provider OIDC (usare con l'autenticazione individuale autonoma).",
+ "symbols/AAdB2CInstance/description": "Istanza di Azure Active Directory B2C a cui connettersi (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID dei criteri di accesso e iscrizione per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/AADInstance/description": "Istanza di Azure Active Directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/ClientId/description": "ID client per questo progetto (usare con IndividualB2C, SingleOrg o Autenticazione individuale in scenari autonomi).",
+ "symbols/Domain/description": "Il dominio per il tenant della directory (da usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/AppIDUri/description": "URI ID app per l'API server che si vuole chiamare (usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/APIClientId/description": "ID client per l'API ospitata dal server (usare con IndividualB2C, SingleOrg).",
+ "symbols/DefaultScope/description": "Ambito API che il client deve richiedere per effettuare il provisioning di un token di accesso (usare con IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "ID TenantId della directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/OrgReadAccess/description": "Indica se consentire o meno a questa applicazione l'accesso in lettura alla directory (si applica solo a SingleOrg).",
+ "symbols/UserSecretsId/description": "ID da usare per i segreti (usare con OrgReadAccess o l'autenticazione singola).",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/PWA/displayName": "Applicazione Web _Progressive",
+ "symbols/PWA/description": "Se specificato, produce un'applicazione Web progressiva (PWA) che supporta l'installazione e l'uso offline.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se Individual, IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "symbols/UseLocalDB/description": "Indica se usare LocalDB invece di SQLite. Questa opzione si applica solo se è specificato --auth Individual o --auth IndividualB2C.",
+ "symbols/CalledApiUrl/description": "URL dell'API da chiamare dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C without e host ASP.NET Core.",
+ "symbols/CallsMicrosoftGraph/description": "Specifica se l'app Web chiama Microsoft Graph. Questa opzione si applica solo se è specificato --auth SingleOrg o --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Ambiti per richiedere di chiamare l'API dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C without e host ASP.NET Core.",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'",
+ "postActions/restoreClient/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restoreClient/manualInstructions/default/text": "Esegui 'dotnet restore'",
+ "postActions/open-file/description": "Apre Readme.txt nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json
index 7e31298e01..c500166545 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Blazor WebAssembly アプリ",
+ "description": "WebAssembly 上で実行され、オプションで ASP.NET Core アプリによってホストされる Blazor アプリを作成するためのプロジェクト テンプレート。このテンプレートは、機能豊富で動的なユーザー インターフェイス (UI) を備えた Web アプリに使用できます。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
+ "symbols/Hosted/description": "指定した場合、Blazor WebAssembly アプリの ASP.NET Core ホストが含まれます。",
+ "symbols/auth/choices/None/description": "認証なし",
+ "symbols/auth/choices/Individual/description": "個別の認証",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C を使用した個別の認証",
+ "symbols/auth/choices/SingleOrg/description": "単一テナントの組織認証",
+ "symbols/auth/description": "使用する認証の種類",
+ "symbols/Authority/description": "OIDC プロバイダーの権限 (個別のスタンドアロン認証で使用)。",
+ "symbols/AAdB2CInstance/description": "接続先の Azure Active Directory B2C インスタンス (IndividualB2C 認証で使用)。",
+ "symbols/SignUpSignInPolicyId/description": "このプロジェクトのサインインおよびサインアップのポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/AADInstance/description": "接続先の Azure Active Directory インスタンス (SingleOrg 認証で使用)。",
+ "symbols/ClientId/description": "このプロジェクトのクライアント ID (スタンドアロン シナリオでは、IndividualB2C、SingleOrg、または個別の認証で使用します)。",
+ "symbols/Domain/description": "ディレクトリ テナントのドメイン (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/AppIDUri/description": "呼び出すサーバー API のアプリ ID URI (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/APIClientId/description": "サーバーがホストする API のクライアント ID (IndividualB2C、SingleOrg で使用)。",
+ "symbols/DefaultScope/description": "アクセス トークンのプロビジョニングするためにクライアントが要求する必要がある API スコープ。(IndividualB2C、SingleOrg で使用)。",
+ "symbols/TenantId/description": "接続先のディレクトリの TenantId ID (SingleOrg 認証で使用)。",
+ "symbols/OrgReadAccess/description": "このアプリケーションにディレクトリへの読み取りアクセスを許可するかどうか (SingleOrg にのみ適用されます)。",
+ "symbols/UserSecretsId/description": "シークレットで使用する ID (OrgReadAccess または個別の認証で使用)。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/PWA/displayName": "プログレッシブ Web アプリケーション(_P)",
+ "symbols/PWA/description": "指定した場合、インストールとオフラインでの使用をサポートするプログレッシブ Web アプリケーション (PWA) が生成されます。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、Individual、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "symbols/UseLocalDB/description": "SQLite の代わりに LocalDB を使用するかどうか。このオプションは、--auth Individual または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/CalledApiUrl/description": "Web アプリから呼び出す API の URL。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C で、ASP.NET Core ホストが指定されていない場合にのみ適用されます。",
+ "symbols/CallsMicrosoftGraph/description": "Web アプリが Microsoft Graph を呼び出すかどうかを指定します。このオプションは、--auth SingleOrg または --auth MultiOrg が指定されている場合にのみ適用されます。",
+ "symbols/CalledApiScopes/description": "Web アプリから API を呼び出すために要求するスコープ。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C で、ASP.NET Core ホストが指定されていない場合にのみ適用されます。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する",
+ "postActions/restoreClient/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restoreClient/manualInstructions/default/text": "'dotnet restore' を実行する",
+ "postActions/open-file/description": "エディターで Readme.txt を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json
index 7e31298e01..7f2cdde795 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Blazor WebAssembly 앱",
+ "description": "WebAssembly에서 실행되고 ASP.NET Core 앱에서 선택적으로 호스트되는 Blazor 앱을 만들기 위한 프로젝트 템플릿입니다. 이 템플릿은 다양한 동적 UI(사용자 인터페이스)를 포함하는 웹앱에 사용할 수 있습니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/Hosted/displayName": "ASP.NET Core 호스팅(_H)",
+ "symbols/Hosted/description": "지정된 경우 Blazor WebAssembly 앱에 대한 ASP.NET Core 호스트를 포함합니다.",
+ "symbols/auth/choices/None/description": "인증 없음",
+ "symbols/auth/choices/Individual/description": "개별 인증",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C를 사용한 개별 인증",
+ "symbols/auth/choices/SingleOrg/description": "단일 테넌트에 대한 조직 인증",
+ "symbols/auth/description": "사용할 인증 유형",
+ "symbols/Authority/description": "OIDC 제공자의 권한(독립형 개별 인증과 함께 사용).",
+ "symbols/AAdB2CInstance/description": "연결할 Azure Active Directory B2C 인스턴스(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignUpSignInPolicyId/description": "이 프로젝트의 로그인 및 등록 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/AADInstance/description": "연결할 Azure Active Directory 인스턴스입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/ClientId/description": "이 프로젝트의 클라이언트 ID입니다(독립형 시나리오에서 IndividualB2C, SingleOrg 또는 Individual auth와 함께 사용).",
+ "symbols/Domain/description": "디렉터리 테넌트의 도메인입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/AppIDUri/description": "호출하려는 서버 API의 앱 ID Uri입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/APIClientId/description": "서버가 호스팅하는 API의 클라이언트 ID입니다(IndividualB2C, SingleOrg와 함께 사용).",
+ "symbols/DefaultScope/description": "클라이언트가 액세스 토큰을 프로비전하기 위해 요청해야 하는 API 범위입니다. (IndividualB2C, SingleOrg와 함께 사용).",
+ "symbols/TenantId/description": "연결할 디렉터리의 TenantId ID입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/OrgReadAccess/description": "이 애플리케이션이 디렉터리에 대한 읽기 액세스를 허용할지 여부(SingleOrg에만 적용됨).",
+ "symbols/UserSecretsId/description": "비밀에 사용할 ID입니다(OrgReadAccess 또는 개별 인증과 함께 사용).",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/PWA/displayName": "프로그레시브 웹 애플리케이션(_P)",
+ "symbols/PWA/description": "지정된 경우 설치 및 오프라인 사용을 지원하는 PWA(프로그레시브 웹 응용 프로그램)를 생성합니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 Individual, IndividualB2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/UseLocalDB/description": "SQLite 대신 LocalDB를 사용할지 여부입니다. 이 옵션은 --auth Individual 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/CalledApiUrl/description": "웹앱에서 호출할 API의 URL입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C without and ASP.NET Core 호스트가 지정된 경우에만 적용됩니다.",
+ "symbols/CallsMicrosoftGraph/description": "웹앱이 Microsoft Graph를 호출하는지 여부를 지정합니다. 이 옵션은 --auth SingleOrg 또는 --auth MultiOrg가 지정된 경우에만 적용됩니다.",
+ "symbols/CalledApiScopes/description": "웹앱에서 API 호출을 요청할 범위입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C without and ASP.NET Core 호스트가 지정된 경우에만 적용됩니다.",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행",
+ "postActions/restoreClient/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restoreClient/manualInstructions/default/text": "'dotnet restore' 실행",
+ "postActions/open-file/description": "편집기에서 Readme.txt를 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json
index 7e31298e01..85b38be599 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
"name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
+ "description": "Szablon projektu służący do tworzenia aplikacji platformy Blazor, która działa w formacie WebAssembly i jest opcjonalnie hostowana przez aplikację platformy ASP.NET Core. Tego szablonu można używać dla aplikacji internetowych z rozbudowanymi dynamicznymi interfejsami użytkownika.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
+ "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
"symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
@@ -29,18 +29,18 @@
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
+ "symbols/PWA/displayName": "_Progressive Web Application",
"symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\"",
+ "postActions/restoreClient/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
"postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
"postActions/open-file/description": "Opens Readme.txt in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 7e31298e01..f26457e011 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Aplicativo Blazor WebAssembly",
+ "description": "Um modelo de projeto para criar um aplicativo Blazor que é executado no WebAssembly e, opcionalmente, é hospedado por um aplicativo ASP.NET Core. Esse modelo pode ser usado para aplicativos Web com IUs (interfaces do usuário) completas e dinâmicas.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
+ "symbols/Hosted/description": "Se especificado, inclui um host ASP.NET Core para o aplicativo Blazor WebAssembly.",
+ "symbols/auth/choices/None/description": "Sem autenticação",
+ "symbols/auth/choices/Individual/description": "Autenticação individual",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticação individual com Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticação organizacional para um único locatário",
+ "symbols/auth/description": "O tipo de autenticação a ser usado",
+ "symbols/Authority/description": "A autoridade do provedor OIDC (use com autenticação individual autônoma).",
+ "symbols/AAdB2CInstance/description": "A instância do Azure Active Directory B2C à qual se conectar (use com autenticação IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "O ID da política de login e inscrição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/AADInstance/description": "A instância do Azure Active Directory à qual se conectar (use com autenticação SingleOrg).",
+ "symbols/ClientId/description": "O ID do cliente para este projeto (use com autenticação IndividualB2C, SingleOrg ou Individual em cenários autônomos).",
+ "symbols/Domain/description": "O domínio para o locatário do diretório (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/AppIDUri/description": "O App ID Uri para a API do servidor que queremos chamar (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/APIClientId/description": "O ID do cliente para a API que o servidor hospeda (use com IndividualB2C, SingleOrg).",
+ "symbols/DefaultScope/description": "O escopo da API que o cliente precisa solicitar para provisionar um token de acesso. (use com IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "O ID TenantId do diretório ao qual se conectar (use com autenticação SingleOrg).",
+ "symbols/OrgReadAccess/description": "Se deve ou não permitir que este aplicativo tenha acesso de leitura ao diretório (aplica-se apenas a SingleOrg).",
+ "symbols/UserSecretsId/description": "O ID a ser usado para segredos (use com OrgReadAccess ou Autenticação individual).",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/PWA/displayName": "_Aplicativo da Web Progressivo",
+ "symbols/PWA/description": "Se especificado, produz um Progressive Web Application (PWA) com suporte para instalação e uso offline.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção se aplica somente se Individual, IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "symbols/UseLocalDB/description": "Se deve usar LocalDB em vez de SQLite. Esta opção só se aplica se --auth Individual ou --auth IndividualB2C for especificado.",
+ "symbols/CalledApiUrl/description": "URL da API para chamar do aplicativo Web. Essa opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C sem um host ASP.NET Core for especificado.",
+ "symbols/CallsMicrosoftGraph/description": "Especifica se o aplicativo Web chama o Microsoft Graph. Esta opção só se aplica se --auth SingleOrg ou --auth MultiOrg for especificado.",
+ "symbols/CalledApiScopes/description": "Escopos a serem solicitados para chamar a API do aplicativo Web. Essa opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C sem um host ASP.NET Core for especificado.",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'",
+ "postActions/restoreClient/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restoreClient/manualInstructions/default/text": "Executa 'dotnet restore'",
+ "postActions/open-file/description": "Abre Readme.txt no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json
index 7e31298e01..ca8181b499 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,46 +1,46 @@
-{
- "author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Приложение WebAssembly Blazor",
+ "description": "Шаблон проекта для создания приложения Blazor, которое запускается в WebAssembly и может размещаться в приложении ASP.NET Core. Этот шаблон можно использовать для веб-приложений с расширенными динамическими пользовательскими интерфейсами (UI).",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/Hosted/displayName": "_Размещение на ASP.NET Core",
+ "symbols/Hosted/description": "Если указывается, включает узел ASP.NET Core для приложения Blazor WebAssembly.",
+ "symbols/auth/choices/None/description": "Без проверки подлинности",
+ "symbols/auth/choices/Individual/description": "Индивидуальная проверка подлинности",
+ "symbols/auth/choices/IndividualB2C/description": "Индивидуальная проверка подлинности в Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Проверка подлинности в организации для одного клиента",
+ "symbols/auth/description": "Тип используемой проверки подлинности",
+ "symbols/Authority/description": "Полномочия поставщика OIDC (используются с автономной проверкой подлинности Individual).",
+ "symbols/AAdB2CInstance/description": "Экземпляр Azure Active Directory B2C, к которому нужно подключиться (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "Идентификатор политики входа и регистрации для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/AADInstance/description": "Экземпляр Azure Active Directory, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/ClientId/description": "Идентификатор клиента для этого проекта (используется с проверкой подлинности IndividualB2C, SingleOrg или Individual в автономных сценариях).",
+ "symbols/Domain/description": "Домен для клиента каталога (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/AppIDUri/description": "URI идентификатора приложения для API сервера, который требуется вызвать (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/APIClientId/description": "Идентификатор клиента для API, размещенного на сервере (используется с IndividualB2C, SingleOrg).",
+ "symbols/DefaultScope/description": "Область API, необходимая клиенту для запроса на подготовку маркера доступа (используется с IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "Идентификатор TenantId каталога, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/OrgReadAccess/description": "Следует ли предоставлять этому приложению доступ на чтение к каталогу (применяется только к SingleOrg).",
+ "symbols/UserSecretsId/description": "Идентификатор, используемый для секретов (используется с проверкой подлинности OrgReadAccess или Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/PWA/displayName": "_Прогрессивное веб-приложение",
+ "symbols/PWA/description": "Если указывается, используется для создания прогрессивного веб-приложения (PWA), поддерживающего установку и автономное использование.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются Individual, IndividualB2C, SingleOrg или MultiOrg.",
+ "symbols/UseLocalDB/description": "Следует ли использовать LocalDB вместо SQLite. Этот параметр применяется, только если указывается --auth Individual или --auth IndividualB2C.",
+ "symbols/CalledApiUrl/description": "URL-адрес API для вызова из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C без узла ASP.NET Core.",
+ "symbols/CallsMicrosoftGraph/description": "Указывает, вызывает ли веб-приложение Microsoft Graph. Этот параметр применяется, только если указывается --auth SingleOrg или --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Области для запроса вызова API из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C без узла ASP.NET Core.",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"",
+ "postActions/restoreClient/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restoreClient/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"",
+ "postActions/open-file/description": "Открывает Readme.txt в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json
index 7e31298e01..4f46c20c49 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Blazor WebAssembly Uygulaması",
+ "description": "WebAssembly üzerinde çalışan ve isteğe bağlı olarak bir ASP.NET Core uygulamasında barındırılan Blazor uygulaması oluşturmaya yönelik proje şablonu. Bu şablon, zengin dinamik kullanıcı arabirimlerine (UI) sahip web uygulamaları için kullanılabilir.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/Hosted/displayName": "ASP.NET Core tarafından _Barındırılan",
+ "symbols/Hosted/description": "Belirtilmişse Blazor WebAssembly uygulaması için ASP.NET Core konağı içerir.",
+ "symbols/auth/choices/None/description": "Kimlik doğrulaması yok",
+ "symbols/auth/choices/Individual/description": "Bireysel kimlik doğrulaması",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C ile bireysel kimlik doğrulaması",
+ "symbols/auth/choices/SingleOrg/description": "Tek bir kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/description": "Kullanılacak kimlik doğrulaması türü",
+ "symbols/Authority/description": "OIDC sağlayıcısının yetkisi (tek başına Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/AAdB2CInstance/description": "Bağlanılacak Azure Active Directory B2C örneği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignUpSignInPolicyId/description": "Bu proje için oturum açma ve kaydolma ilkesi kimliği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/AADInstance/description": "Bağlanılacak Azure Active Directory örneği (SingleOrg kimlik doğrulaması ile kullanın).",
+ "symbols/ClientId/description": "Bu projenin İstemci Kimliği (tek başına senaryolarda IndividualB2C, SingleOrg veya Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/Domain/description": "Dizin kiracısı için etki alanı (SingleOrg veya IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/AppIDUri/description": "Çağrılmak istenen sunucu API'sinin Uygulama Kimliği Uri'si (SingleOrg veya IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/APIClientId/description": "Sunucunun barındırmış olduğu API için İstemci Kimliği (IndividualB2C, SingleOrg ile kullanın).",
+ "symbols/DefaultScope/description": "İstemcinin erişim belirteci sağlamak amacıyla istekte bulunmak için ihtiyacı olan API kapsamı. (IndividualB2C, SingleOrg ile kullanın).",
+ "symbols/TenantId/description": "Bağlanılacak dizinin TenantId kimliği (SingleOrg kimlik doğrulamasıyla kullanın).",
+ "symbols/OrgReadAccess/description": "Bu uygulamanın dizin okuma erişimine izin verilip verilmeyeceği (yalnızca SingleOrg için geçerlidir).",
+ "symbols/UserSecretsId/description": "Gizli diziler için kullanılan kimlik (OrgReadAccess veya Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/PWA/displayName": "_Aşamalı Web Uygulaması",
+ "symbols/PWA/description": "Belirtilmişse, yükleme ve çevrimdışı kullanımı destekleyen bir Aşamalı Web Uygulaması (PWA) oluşturur.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca Bireysel, IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "symbols/UseLocalDB/description": "SQLite yerine LocalDB'nin kullanılıp kullanılmayacağı. Bu seçenek yalnızca --auth Individual veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/CalledApiUrl/description": "Web uygulamasından çağrılan API URL'si. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C without ve ASP.NET Core konağı belirtilirse geçerlidir.",
+ "symbols/CallsMicrosoftGraph/description": "Web uygulamasının Microsoft Graph çağırıp çağırmadığını belirtir. Bu seçenek yalnızca --auth SingleOrg veya --auth MultiOrg belirtilirse geçerlidir.",
+ "symbols/CalledApiScopes/description": "Web uygulamasından API çağırma istek kapsamları. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C without ve ASP.NET Core konağı belirtilirse geçerlidir.",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır",
+ "postActions/restoreClient/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restoreClient/manualInstructions/default/text": "'dotnet restore' çalıştır",
+ "postActions/open-file/description": "Benioku.txt dosyasını düzenleyicide açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 7e31298e01..e1159e846b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Blazor WebAssembly 应用",
+ "description": "用于创建 Blazor 应用的项目模板,该应用在 WebAssembly 上运行且可选择由 ASP.NET Core 应用托管。此模板可用于具有丰富动态用户界面(UI)的 Web 应用。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/Hosted/displayName": "ASP.NET Core 托管(_H)",
+ "symbols/Hosted/description": "如果指定,则包括 Blazor WebAssembly 应用的 ASP.NET Core 主机。",
+ "symbols/auth/choices/None/description": "无身份验证",
+ "symbols/auth/choices/Individual/description": "个人身份验证",
+ "symbols/auth/choices/IndividualB2C/description": "使用 Azure AD B2C 进行个人身份验证",
+ "symbols/auth/choices/SingleOrg/description": "单个租户的组织身份验证",
+ "symbols/auth/description": "要使用的身份验证类型",
+ "symbols/Authority/description": "OIDC 提供程序的颁发机构(与独立个人身份验证一起使用)。",
+ "symbols/AAdB2CInstance/description": "要连接到的 Azure Active Directory B2C 实例(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此项目的登录和注册策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/AADInstance/description": "要连接到的 Azure Active Directory 实例(与 SingleOrg 身份验证一起使用)。",
+ "symbols/ClientId/description": "此项目的客户端 ID (在独立方案中与 IndividualB2C、SingleOrg 或个人身份验证一起使用)。",
+ "symbols/Domain/description": "目录租户的域(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/AppIDUri/description": "要调用的服务器 API 的应用 ID URI (与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/APIClientId/description": "服务器托管的 API 的客户端 ID (与 IndividualB2C、SingleOrg 一起使用)。",
+ "symbols/DefaultScope/description": "客户端预配访问令牌需要请求的 API 范围。(与 IndividualB2C、SingleOrg 一起使用)。",
+ "symbols/TenantId/description": "要连接到的目录的 TenantId ID (与 SingleOrg 身份验证一起使用)。",
+ "symbols/OrgReadAccess/description": "是否允许此应用程序对目录进行读取访问(仅适用于 SingleOrg)。",
+ "symbols/UserSecretsId/description": "用于机密的 ID (与 OrgReadAccess 或个人身份验证一起使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/PWA/displayName": "渐进式 Web 应用程序(_P)",
+ "symbols/PWA/description": "如果指定,则生成支持安装和脱机使用的渐进式 Web 应用程序(PWA)。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 Individual、IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而不是 SQLite。仅当指定了 --auth Individual 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/CalledApiUrl/description": "要从 Web 应用调用的 API 的 URL。仅当指定了 --auth SingleOrg、--auth MultiOrg 或不带 ASP.NET Core 主机的 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 应用是否调用 Microsoft Graph。仅当指定了 --auth SingleOrg 或 --auth MultiOrg 时,此选项才适用。",
+ "symbols/CalledApiScopes/description": "请求从 Web 应用调用 API 的范围。仅当指定了 --auth SingleOrg、--auth MultiOrg 或不带 ASP.NET Core 主机的 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\"",
+ "postActions/restoreClient/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restoreClient/manualInstructions/default/text": "运行 “dotnet restore”",
+ "postActions/open-file/description": "在编辑器中打开 Readme.txt"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 7e31298e01..eb38ec514e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,46 +1,46 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App",
- "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/Authority/description": "The authority of the OIDC provider (use with standalone Individual auth).",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/AppIDUri/description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth).",
- "symbols/APIClientId/description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/PWA/displayName": "Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/open-file/description": "Opens Readme.txt in the editor"
+ "name": "Blazor WebAssembly 應用程式",
+ "description": "此專案範本可用於建立在 WebAssembly 上執行的 Blazor 應用程式,並可選擇是否要裝載在 ASP.NET Core 應用程式上。此範本可供搭載豐富動態使用者介面 (UI) 的 Web 應用程式使用。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/Hosted/displayName": "ASP.NET Core 託管(_H)",
+ "symbols/Hosted/description": "若指定,會包含 Blazor WebAssembly 應用程式的 ASP.NET Core 主機。",
+ "symbols/auth/choices/None/description": "沒有驗證",
+ "symbols/auth/choices/Individual/description": "個別驗證",
+ "symbols/auth/choices/IndividualB2C/description": "具有 Azure AD B2C 的個別驗證",
+ "symbols/auth/choices/SingleOrg/description": "單一租用戶的組織驗證",
+ "symbols/auth/description": "要使用的驗證類型。",
+ "symbols/Authority/description": "OIDC 提供者的授權(搭配獨立個別驗證使用)。",
+ "symbols/AAdB2CInstance/description": "要連線的 Azure Active Directory B2C 執行個體 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此專案的登入和註冊原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/AADInstance/description": "要連線到的 Azure Active Directory 執行個體 (搭配 SingleOrg 驗證使用)。",
+ "symbols/ClientId/description": "此專案的用戶端識別碼 (搭配獨立案例中的 IndividualB2C、SingleOrg 或 Individual 驗證使用)。",
+ "symbols/Domain/description": "目錄租用戶的網域 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/AppIDUri/description": "要呼叫的伺服器 API App ID URI (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/APIClientId/description": "伺服器裝載之 API 的用戶端識別碼 (搭配 IndividualB2C、SingleOrg 使用)。",
+ "symbols/DefaultScope/description": "用戶端佈建存取權杖所需的 API 範圍。(搭配 IndividualB2C、SingleOrg 使用)。",
+ "symbols/TenantId/description": "要連線到目錄的 TenantId 識別碼 (搭配 SingleOrg 驗證使用)。",
+ "symbols/OrgReadAccess/description": "是否要允許此應用程式讀取存取目錄 (只適用於 SingleOrg)。",
+ "symbols/UserSecretsId/description": "用於祕密的識別碼 (搭配 OrgReadAccess 或個別驗證使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/PWA/displayName": "漸進式 Web 應用程式(_P)",
+ "symbols/PWA/description": "若指定,會產生漸進式 Web 應用程式 (PWA) 支援安裝與離線使用。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 Individual、IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而非 SQLite。只有在已指定 --auth Individual 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/CalledApiUrl/description": "要從 Web 應用程式呼叫的 API URL。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時 (不含 ASP.NET Core 主機),才適用此選項。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 應用程式呼叫是否 Microsoft Graph。只有在已指定 --auth SingleOrg 或 --auth MultiOrg 時,才適用此選項。",
+ "symbols/CalledApiScopes/description": "要求從 Web 應用程式呼叫 API 的範圍。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時 (不含 ASP.NET Core 主機),才適用此選項。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'",
+ "postActions/restoreClient/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restoreClient/manualInstructions/default/text": "執行 'dotnet restore'",
+ "postActions/open-file/description": "在編輯器中開啟 Readme.txt"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json
index 1951a6ed34..87c8daef9c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Prázdná aplikace Blazor Server",
+ "description": "Prázdná šablona projektu pro vytvoření aplikace Blazor Server, která běží na straně serveru v aplikaci ASP.NET Core a zpracovává interakce uživatelů přes připojení SignalR. Tato šablona nic neobsahuje.",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužívá parametr no-https.",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužívá parametr no-https.",
+ "symbols/HasHttpProfile/description": "Vždy mějte profil protokolu HTTP.",
+ "symbols/NoHttps/description": "Určuje, jestli se má vypnout protokol HTTPS.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json
index 1951a6ed34..36ebdd1236 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "Blazor Server App Empty",
"description": "An empty 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 does not have any content in it.",
@@ -9,9 +9,9 @@
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
"symbols/HasHttpProfile/description": "Always have HTTP profile.",
"symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json
index 1951a6ed34..b809903495 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "Blazor Server App Empty",
"description": "An empty 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 does not have any content in it.",
@@ -9,9 +9,9 @@
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
"symbols/HasHttpProfile/description": "Always have HTTP profile.",
"symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json
index 1951a6ed34..812c928807 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Application Blazor Server vide",
+ "description": "Modèle de projet vide pour la création d’une application serveur Blazor qui s’exécute côté serveur à l’intérieur d’une application ASP.NET Core et gère les interactions utilisateur sur une connexion SignalR. Ce modèle ne contient aucun contenu.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé.",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé.",
+ "symbols/HasHttpProfile/description": "Toujours avoir un profil HTTP.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json
index 1951a6ed34..e8fbbf3b18 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "App Blazor Server vuota",
+ "description": "Modello di progetto vuoto per la creazione di un'app Blazor server che esegue il lato server all'interno di un'app ASP.NET Core e gestisce le interazioni utente tramite una connessione SignalR. Questo modello non presenta contenuto.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato.",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato.",
+ "symbols/HasHttpProfile/description": "Avere sempre un profilo HTTP.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json
index 1951a6ed34..b1eea578c4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server アプリが空です",
+ "description": "ASP.NET Core アプリ内のサーバー側で実行され、SignalR 接続を介してユーザー操作を処理する Blazor Server アプリを作成するための空のプロジェクト テンプレート。このテンプレートは、その中にコンテンツがありません。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json の HTTPS エンドポイントに使用するポート番号。このオプションは、パラメーター no-https を使用しない場合にのみ適用されます。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json の IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、パラメーター no-https を使用しない場合にのみ適用されます。",
+ "symbols/HasHttpProfile/description": "HTTP プロファイルが常にあります。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json
index 1951a6ed34..8ff486420f 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor 서버 앱이 비어 있습니다.",
+ "description": "ASP.NET Core 앱 내에서 서버 쪽을 실행하고 SignalR 연결을 통해 사용자 상호 작용을 처리하는 Blazor 서버 앱을 만들기 위한 빈 프로젝트 템플릿입니다. 이 템플릿에는 내용이 없습니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/HasHttpProfile/description": "항상 HTTP 프로필이 있어야 합니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json
index 1951a6ed34..65ec757aa6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "Blazor Server App Empty",
"description": "An empty 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 does not have any content in it.",
@@ -9,9 +9,9 @@
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
"symbols/HasHttpProfile/description": "Always have HTTP profile.",
"symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 1951a6ed34..a351494c42 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplicativo Blazor Server Vazio",
+ "description": "Um modelo de projeto vazio para criar um aplicativo de servidor Blazor que é executado no lado do servidor dentro de um aplicativo ASP.NET Core e manipula as interações do usuário em uma conexão SignalR. Este modelo não tem nenhum conteúdo nele.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Esta opção só é aplicável quando o parâmetro no-https não é usado.",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Esta opção só é aplicável quando o parâmetro no-https não é usado.",
+ "symbols/HasHttpProfile/description": "Sempre ter perfil HTTP.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json
index 1951a6ed34..99e8624da0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,17 +1,17 @@
-{
- "author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Пустое приложение Blazor Server",
+ "description": "Пустой шаблон проекта для создания приложения Blazor Server, которое запускается на стороне сервера в приложении ASP.NET Core и обрабатывает взаимодействие с пользователем через подключение SignalR. В этом шаблоне нет содержимого.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется.",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется.",
+ "symbols/HasHttpProfile/description": "Всегда имеет профиль HTTP.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json
index 1951a6ed34..2dff9938ac 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server Uygulaması Boş",
+ "description": "Boş 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 Server uygulaması oluşturmaya yönelik proje şablonu. Bu şablonda içerik yok.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içindeki HTTPS uç noktası için bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir.",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içindeki IIS Express HTTPS uç noktası için bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir.",
+ "symbols/HasHttpProfile/description": "Her zaman HTTP profili vardır.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 1951a6ed34..94a82f3ad8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server 应用空",
+ "description": "用于创建 Blazor 服务器应用的空项目模板,该应用在 ASP.NET Core 应用内运行服务器端,并通过 SignalR 连接处理用户交互。此模板中没有任何内容。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用。",
+ "symbols/HasHttpProfile/description": "始终具有 HTTP 配置文件。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 1951a6ed34..b62a53d8c4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyBlazorServerWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,17 +1,17 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor Server App Empty",
- "description": "An empty 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 does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor Server 應用程式空白",
+ "description": "建立 Blazor Server 應用程式的空白專案範本,該應用程式會在 ASP.NET Core 應用程式內執行伺服器端,並透過 SignalR 連線處理使用者互動。此範本沒有任何內容。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中用於 HTTPS 端點的連接埠號碼。只有在未使用 no-https 參數時,才適用此選項。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中用於 IIS Express HTTPS 端點的連接埠號碼。只有在未使用 no-https 參數時,才適用此選項。",
+ "symbols/HasHttpProfile/description": "永遠有 HTTP 設定檔。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json
index cd69b8df84..fb8fb98d94 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplikace Blazor WebAssembly je prázdná.",
+ "description": "Prázdná šablona projektu pro vytvoření aplikace Blazor, která běží na WebAssembly a je volitelně hostovaná aplikací ASP.NET Core. Tato šablona neobsahuje žádný obsah.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/Hosted/displayName": "_Hostováno pomocí ASP.NET Core",
+ "symbols/Hosted/description": "Pokud je tato možnost zadaná, zahrnuje hostitele ASP.NET Core pro aplikaci Blazor WebAssembly.",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužívá parametr no-https.",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužívá parametr no-https.",
+ "symbols/PWA/displayName": "_Progresivní webová aplikace",
+ "symbols/PWA/description": "Pokud je tato možnost zadaná, vytvoří progresivní webovou aplikaci (PWA), která podporuje instalaci a offline použití.",
+ "symbols/HasHttpProfile/description": "Vždy mějte profil protokolu HTTP.",
+ "symbols/NoHttps/description": "Určuje, jestli se má vypnout protokol HTTPS.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore",
+ "postActions/restoreClient/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restoreClient/manualInstructions/default/text": "Spustit „dotnet restore“"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json
index cd69b8df84..2a9130a9f1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,10 +1,10 @@
-{
+{
"author": "Microsoft",
"name": "Blazor WebAssembly App Empty",
"description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/Hosted/displayName": "ASP.NET Core _Hosted",
"symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
@@ -16,8 +16,8 @@
"symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
"symbols/HasHttpProfile/description": "Always have HTTP profile.",
"symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen",
+ "postActions/restoreClient/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
"postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json
index cd69b8df84..ca3eec1835 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,10 +1,10 @@
-{
+{
"author": "Microsoft",
"name": "Blazor WebAssembly App Empty",
"description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/Hosted/displayName": "ASP.NET Core _Hosted",
"symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
@@ -16,8 +16,8 @@
"symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
"symbols/HasHttpProfile/description": "Always have HTTP profile.",
"symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\"",
+ "postActions/restoreClient/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
"postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json
index cd69b8df84..4b13bfc3d4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Application Blazor WebAssembly vide",
+ "description": "Modèle de projet vide pour la création d’une application Blazor qui s’exécute sur WebAssembly et qui est éventuellement hébergée par une application ASP.NET Core. Ce modèle ne contient aucun contenu.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/Hosted/displayName": "ASP.NET core _Hosted",
+ "symbols/Hosted/description": "S’il est spécifié, inclut un hôte ASP.NET Core pour l’application Blazor WebAssembly.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé.",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé.",
+ "symbols/PWA/displayName": "_Application web progressive",
+ "symbols/PWA/description": "Si ce paramètre est spécifié, produit une application web progressive (PWA) qui prend en charge l’installation et l’utilisation hors connexion.",
+ "symbols/HasHttpProfile/description": "Toujours avoir un profil HTTP.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »",
+ "postActions/restoreClient/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restoreClient/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json
index cd69b8df84..ee0db710c8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "name": "App WebAssembly Blazor vuota",
+ "description": "Modello di progetto vuoto per la creazione di un'app Blazor eseguita in WebAssembly e ospitata facoltativamente da un'app ASP.NET Core. Questo modello non presenta alcun contenuto.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
"symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Hosted/description": "Se specificato, include un host ASP.NET Core per l'app Blazor WebAssembly.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato.",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato.",
+ "symbols/PWA/displayName": "Applicazione Web _Progressive",
+ "symbols/PWA/description": "Se specificato, produce un'applicazione Web progressiva (PWA) che supporta l'installazione e l'uso offline.",
+ "symbols/HasHttpProfile/description": "Avere sempre un profilo HTTP.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'",
+ "postActions/restoreClient/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restoreClient/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json
index cd69b8df84..895bc47f31 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "name": "Blazor WebAssembly アプリが空です",
+ "description": "WebAssembly 上で実行し、必要に応じて ASP.NET Core アプリによってホストされる Blazor アプリを作成するための空のプロジェクト テンプレート。このテンプレートにはコンテンツがありません。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
"symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Hosted/description": "指定した場合、Blazor WebAssembly アプリの ASP.NET Core ホストが含まれます。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json の HTTPS エンドポイントに使用するポート番号。このオプションは、パラメーター no-https を使用しない場合にのみ適用されます。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json の IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、パラメーター no-https を使用しない場合にのみ適用されます。",
+ "symbols/PWA/displayName": "プログレッシブ Web アプリケーション(_P)",
+ "symbols/PWA/description": "指定した場合、インストールとオフラインでの使用をサポートするプログレッシブ Web アプリケーション (PWA) が生成されます。",
+ "symbols/HasHttpProfile/description": "HTTP プロファイルが常にあります。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する",
+ "postActions/restoreClient/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restoreClient/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json
index cd69b8df84..e0e27683e2 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor WebAssembly 앱이 비어 있습니다.",
+ "description": "WebAssembly에서 실행되고 선택적으로 ASP.NET Core 앱에서 호스팅되는 Blazor 앱을 만들기 위한 빈 프로젝트 템플릿입니다. 이 템플릿에는 내용이 없습니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/Hosted/displayName": "ASP.NET Core 호스팅(_H)",
+ "symbols/Hosted/description": "지정된 경우 Blazor WebAssembly 앱에 대한 ASP.NET Core 호스트를 포함합니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/PWA/displayName": "프로그레시브 웹 애플리케이션(_P)",
+ "symbols/PWA/description": "지정된 경우 설치 및 오프라인 사용을 지원하는 PWA(프로그레시브 웹 응용 프로그램)를 생성합니다.",
+ "symbols/HasHttpProfile/description": "항상 HTTP 프로필이 있어야 합니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행",
+ "postActions/restoreClient/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restoreClient/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json
index cd69b8df84..5dce43afbe 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,10 +1,10 @@
-{
+{
"author": "Microsoft",
"name": "Blazor WebAssembly App Empty",
"description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/Hosted/displayName": "ASP.NET Core _Hosted",
"symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
@@ -16,8 +16,8 @@
"symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
"symbols/HasHttpProfile/description": "Always have HTTP profile.",
"symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\"",
+ "postActions/restoreClient/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
"postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json
index cd69b8df84..c7a8931917 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "name": "Aplicativo Blazor WebAssembly Vazio",
+ "description": "Um modelo de projeto vazio para criar um aplicativo Blazor executado no WebAssembly e opcionalmente hospedado por um aplicativo ASP.NET Core. Este modelo não tem nenhum conteúdo nele.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
"symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Hosted/description": "Se especificado, inclui um host ASP.NET Core para o aplicativo Blazor WebAssembly.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Esta opção só é aplicável quando o parâmetro no-https não é usado.",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Esta opção só é aplicável quando o parâmetro no-https não é usado.",
+ "symbols/PWA/displayName": "_Aplicativo da Web Progressivo",
+ "symbols/PWA/description": "Se especificado, produz um Progressive Web Application (PWA) com suporte para instalação e uso offline.",
+ "symbols/HasHttpProfile/description": "Sempre ter perfil HTTP.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'",
+ "postActions/restoreClient/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restoreClient/manualInstructions/default/text": "Executa 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json
index cd69b8df84..639f0fba03 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,23 +1,23 @@
-{
- "author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Пустое приложение Blazor WebAssembly",
+ "description": "Пустой шаблон проекта для создания приложения Blazor, которое запускается в WebAssembly и может размещаться в приложении ASP.NET Core. В этом шаблоне нет содержимого.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/Hosted/displayName": "_Размещение на ASP.NET Core",
+ "symbols/Hosted/description": "Если указывается, включает узел ASP.NET Core для приложения Blazor WebAssembly.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется.",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется.",
+ "symbols/PWA/displayName": "_Прогрессивное веб-приложение",
+ "symbols/PWA/description": "Если указывается, используется для создания прогрессивного веб-приложения (PWA), поддерживающего установку и автономное использование.",
+ "symbols/HasHttpProfile/description": "Всегда имеет профиль HTTP.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"",
+ "postActions/restoreClient/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restoreClient/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json
index cd69b8df84..b82e00e55e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor WebAssembly Uygulaması Boş",
+ "description": "WebAssembly üzerinde çalışan ve isteğe bağlı olarak bir ASP.NET Core uygulaması tarafından barındırılan bir Blazor uygulaması oluşturmaya yönelik boş bir proje şablonu. Bu şablonda içerik yok.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/Hosted/displayName": "ASP.NET Core tarafından _Barındırılan",
+ "symbols/Hosted/description": "Belirtilmişse Blazor WebAssembly uygulaması için ASP.NET Core konağı içerir.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içindeki HTTPS uç noktası için bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir.",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içindeki IIS Express HTTPS uç noktası için bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir.",
+ "symbols/PWA/displayName": "_Aşamalı Web Uygulaması",
+ "symbols/PWA/description": "Belirtilmişse, yükleme ve çevrimdışı kullanımı destekleyen bir Aşamalı Web Uygulaması (PWA) oluşturur.",
+ "symbols/HasHttpProfile/description": "Her zaman HTTP profili vardır.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır",
+ "postActions/restoreClient/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restoreClient/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index cd69b8df84..bf3180a713 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor WebAssembly 应用空",
+ "description": "用于创建 Blazor 应用的空项目模板,该应用在 WebAssembly 上运行,并可选择由 ASP.NET Core 应用托管。此模板中没有任何内容。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/Hosted/displayName": "ASP.NET Core 托管(_H)",
+ "symbols/Hosted/description": "如果指定,则包括 Blazor WebAssembly 应用的 ASP.NET Core 主机。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用。",
+ "symbols/PWA/displayName": "渐进式 Web 应用程序(_P)",
+ "symbols/PWA/description": "如果指定,则生成支持安装和脱机使用的渐进式 Web 应用程序(PWA)。",
+ "symbols/HasHttpProfile/description": "始终具有 HTTP 配置文件。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\"",
+ "postActions/restoreClient/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restoreClient/manualInstructions/default/text": "运行 “dotnet restore”"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index cd69b8df84..8d1a15749e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyComponentsWebAssembly-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,23 +1,23 @@
-{
+{
"author": "Microsoft",
- "name": "Blazor WebAssembly App Empty",
- "description": "An empty project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template does not have any content in it.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/Hosted/displayName": "ASP.NET Core _Hosted",
- "symbols/Hosted/description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used.",
- "symbols/PWA/displayName": "_Progressive Web Application",
- "symbols/PWA/description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use.",
- "symbols/HasHttpProfile/description": "Always have HTTP profile.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/restoreClient/description": "Restore NuGet packages required by this project.",
- "postActions/restoreClient/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Blazor WebAssembly 應用程式空白",
+ "description": "建立 Blazor 應用程式的空白專案範本,可在 WebAssembly 上執行,而且可選擇性地由 ASP.NET Core 應用程式裝載。此範本中沒有任何內容。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/Hosted/displayName": "ASP.NET Core 託管(_H)",
+ "symbols/Hosted/description": "若指定,會包含 Blazor WebAssembly 應用程式的 ASP.NET Core 主機。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中用於 HTTPS 端點的連接埠號碼。只有在未使用 no-https 參數時,才適用此選項。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中用於 IIS Express HTTPS 端點的連接埠號碼。只有在未使用 no-https 參數時,才適用此選項。",
+ "symbols/PWA/displayName": "漸進式 Web 應用程式(_P)",
+ "symbols/PWA/description": "若指定,會產生漸進式 Web 應用程式 (PWA) 支援安裝與離線使用。",
+ "symbols/HasHttpProfile/description": "永遠有 HTTP 設定檔。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'",
+ "postActions/restoreClient/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restoreClient/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.cs.json
index 95327d453e..8c8d94306d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core (prázdné)",
+ "description": "Prázdná šablona projektu pro vytvoření aplikace ASP.NET Core. V této šabloně není žádný obsah.",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají Individual, IndividualB2C, SingleOrg ani MultiOrg.",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.de.json
index 95327d453e..37c426c675 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
+ "description": "Eine leere Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung. Diese Vorlage umfasst keine Inhalte.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.es.json
index 95327d453e..9e5018fa57 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
+ "description": "Una plantilla de proyecto vacía para crear una aplicación ASP.NET Core. Esta plantilla no incluye ningún contenido.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.fr.json
index 95327d453e..2623f6f043 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core vide",
+ "description": "Modèle de projet vide pour la création d'une application ASP.NET Core. Ce modèle n'a aucun contenu.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si Individual, IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.it.json
index 95327d453e..be6a853658 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET core vuoto",
+ "description": "Modello di progetto vuoto per la creazione di un'applicazione ASP.NET Core. Questo modello non include alcun contenuto.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se Individual, IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ja.json
index 95327d453e..8b29cd401f 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core (空)",
+ "description": "ASP.NET Core アプリケーションを作成するための空のプロジェクト テンプレートです。このテンプレートにはコンテンツが一切含まれていません。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、Individual、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ko.json
index 95327d453e..821eb5ec10 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 비어 있음",
+ "description": "ASP.NET Core 애플리케이션을 만들기 위한 빈 프로젝트 템플릿입니다. 이 템플릿에는 내용이 없습니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 Individual, IndividualB2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pl.json
index 95327d453e..997bb7f047 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
+ "description": "Pusty szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core. Ten szablon nie ma żadnej zawartości.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 95327d453e..1154135723 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 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.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção se aplica somente se Individual, IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ru.json
index 95327d453e..929c419231 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,18 +1,18 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Пустой шаблон ASP.NET Core",
+ "description": "Пустой шаблон проекта для создания приложения ASP.NET Core. Этот шаблон не имеет содержимого.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются Individual, IndividualB2C, SingleOrg или MultiOrg.",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.tr.json
index 95327d453e..07a39cfaad 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Boş",
+ "description": "ASP.NET Core uygulaması oluşturmaya yönelik boş bir proje şablonu. Bu şablonda içerik yoktur.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca Bireysel, IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 95327d453e..d42141d29b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 空",
+ "description": "用于创建 ASP.NET Core 应用程序的空项目模板。此模板中没有任何内容。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 Individual、IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 95327d453e..fb4cbf0e1f 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,18 +1,18 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "空的 ASP.NET Core",
+ "description": "可用於建立 ASP.NET Core 應用程式的空白專案範本。此範本不含任何內容。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 Individual、IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.cs.json
index f0366911c0..a055a96e57 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.cs.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core (prázdné)",
+ "description": "Prázdná šablona projektu pro vytvoření aplikace ASP.NET Core. V této šabloně není žádný obsah.",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají Individual, IndividualB2C, SingleOrg ani MultiOrg.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.de.json
index f0366911c0..7e99f38e57 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.de.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
+ "description": "Eine leere Projektvorlage zum Erstellen einer ASP.NET Core-Anwendung. Diese Vorlage umfasst keine Inhalte.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.es.json
index f0366911c0..f3d7e7ee79 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.es.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
+ "description": "Una plantilla de proyecto vacía para crear una aplicación ASP.NET Core. Esta plantilla no incluye ningún contenido.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.fr.json
index f0366911c0..62d38067f4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.fr.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core vide",
+ "description": "Modèle de projet vide pour la création d'une application ASP.NET Core. Ce modèle n'a aucun contenu.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si Individual, IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.it.json
index f0366911c0..3c25673cdd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.it.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET core vuoto",
+ "description": "Modello di progetto vuoto per la creazione di un'applicazione ASP.NET Core. Questo modello non include alcun contenuto.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se Individual, IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ja.json
index f0366911c0..7758157077 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ja.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core (空)",
+ "description": "ASP.NET Core アプリケーションを作成するための空のプロジェクト テンプレートです。このテンプレートにはコンテンツが一切含まれていません。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、Individual、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ko.json
index f0366911c0..fa5625ec6e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ko.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 비어 있음",
+ "description": "ASP.NET Core 애플리케이션을 만들기 위한 빈 프로젝트 템플릿입니다. 이 템플릿에는 내용이 없습니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 Individual, IndividualB2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pl.json
index f0366911c0..5e46daeabf 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pl.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
+ "description": "Pusty szablon projektu służący do tworzenia aplikacji platformy ASP.NET Core. Ten szablon nie ma żadnej zawartości.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json
index f0366911c0..b4e8792203 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 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.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção se aplica somente se Individual, IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ru.json
index f0366911c0..098b347d83 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.ru.json
@@ -1,16 +1,16 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Пустой шаблон ASP.NET Core",
+ "description": "Пустой шаблон проекта для создания приложения ASP.NET Core. Этот шаблон не имеет содержимого.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются Individual, IndividualB2C, SingleOrg или MultiOrg.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.tr.json
index f0366911c0..822f81f961 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.tr.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Boş",
+ "description": "ASP.NET Core uygulaması oluşturmaya yönelik boş bir proje şablonu. Bu şablonda içerik yoktur.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca Bireysel, IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json
index f0366911c0..5c08f45bfb 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 空",
+ "description": "用于创建 ASP.NET Core 应用程序的空项目模板。此模板中没有任何内容。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 Individual、IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json
index f0366911c0..221365eaf5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Empty",
- "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "空的 ASP.NET Core",
+ "description": "可用於建立 ASP.NET Core 應用程式的空白專案範本。此範本不含任何內容。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 Individual、IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.cs.json
index eec915b973..ea0abac838 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Služba ASP.NET Core gRPC",
+ "description": "Šablona projektu pro vytvoření služby gRPC ASP.NET Core",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.de.json
index eec915b973..c2c49f28a6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
+ "name": "ASP.NET Core-gRPC-Dienst",
+ "description": "Eine Projektvorlage für das Erstellen eines gRPC-ASP.NET Core-Diensts.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.es.json
index eec915b973..749e30e7b6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
+ "name": "Servicio gRPC de ASP.NET Core",
+ "description": "Plantilla de proyecto para crear un servicio gRPC de ASP.NET Core.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.fr.json
index eec915b973..7ffddf3c93 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Service gRPC ASP.NET Core",
+ "description": "Modèle de projet pour la création d'un service gRPC ASP.NET Core.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.it.json
index eec915b973..6c1e893004 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Servizio gRPC ASP.NET Core",
+ "description": "Modello di progetto per la creazione di un servizio ASP.NET Core gRPC.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ja.json
index eec915b973..f0fb052d60 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core gRPC サービス",
+ "description": "gRPC ASP.NET Core サービスを作成するためのプロジェクト テンプレート。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ko.json
index eec915b973..aac0e0d3f1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core gRPC 서비스",
+ "description": "gRPC ASP.NET Core 서비스를 만들기 위한 프로젝트 템플릿입니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pl.json
index eec915b973..bbc5eadb86 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
+ "name": "Usługa gRPC platformy ASP.NET Core",
+ "description": "Szablon projektu służący do tworzenia usługi gRPC platformy ASP.NET Core.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pt-BR.json
index eec915b973..b100faa1f8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Serviço gRPC do ASP.NET Core",
+ "description": "Um modelo de projeto para criar um serviço gRPC ASP.NET Core.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ru.json
index eec915b973..0712fb498b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,15 +1,15 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Служба gRPC ASP.NET Core",
+ "description": "Шаблон проекта для создания службы gRPC ASP.NET Core.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.tr.json
index eec915b973..9484fb0ff4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core gRPC Hizmeti",
+ "description": "gRPC ASP.NET Core hizmeti oluşturmaya yönelik proje şablonu.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index eec915b973..577aa60bc8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core gRPC 服务",
+ "description": "用于创建 gRPC ASP.NET Core 服务的项目模板。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index eec915b973..7c90a06de3 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/GrpcService-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,15 +1,15 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core gRPC Service",
- "description": "A project template for creating a gRPC ASP.NET Core service.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core gRPC 服務",
+ "description": "用來建立 gRPC ASP.NET Core 服務的專案範本。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.cs.json
index 1888d9ed69..47e7a168ad 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Knihovna tříd Razor",
+ "description": "Projekt pro vytvoření knihovny tříd Razor určené pro .NET Standard",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/SupportPagesAndViews/displayName": "Stránky podpory a zobrazení",
+ "symbols/SupportPagesAndViews/description": "Určuje, jestli se kromě komponent má podporovat přidávání dalších stránek a zobrazení Razor do této knihovny.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore",
+ "postActions/openInEditor/description": "Otevře soubor areas/MyFeature/Pages/Page1.cshtml v editoru."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.de.json
index 1888d9ed69..8512ec1e24 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
"name": "Razor Class Library",
"description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/SupportPagesAndViews/displayName": "Support pages and views",
"symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen",
"postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.es.json
index 1888d9ed69..8712ad56db 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
"name": "Razor Class Library",
"description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/SupportPagesAndViews/displayName": "Support pages and views",
"symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\"",
"postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.fr.json
index 1888d9ed69..7520a2e6a6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Bibliothèque de classes Razor",
+ "description": "Projet de création d'une bibliothèque de classes Razor qui cible .NET Standard",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/SupportPagesAndViews/displayName": "Prendre en charge les pages et les vues",
+ "symbols/SupportPagesAndViews/description": "Indique si l'ajout de pages et de vues Razor classiques en plus des composants de cette bibliothèque doit être pris en charge.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »",
+ "postActions/openInEditor/description": "Ouvre Areas/MyFeature/Pages/Page1.cshtml dans l’éditeur"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.it.json
index 1888d9ed69..f34794678c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Libreria di classi Razor",
+ "description": "Progetto per la creazione di una libreria di classi Razor destinata a .NET Standard",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/SupportPagesAndViews/displayName": "Supporta pagine e visualizzazioni",
+ "symbols/SupportPagesAndViews/description": "Indica se supportare l'aggiunta di pagine e visualizzazioni Razor tradizionali oltre ai componenti di questa libreria",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'",
+ "postActions/openInEditor/description": "Apre Areas/MyFeature/Pages/Page1.cshtml nell'editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ja.json
index 1888d9ed69..172e850cbf 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Razor クラス ライブラリ",
+ "description": ".NET Standard を対象とする Razor クラス ライブラリを作成するためのプロジェクト",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/SupportPagesAndViews/displayName": "サポート ページとビュー",
+ "symbols/SupportPagesAndViews/description": "このライブラリに対して、コンポーネントだけでなく、従来の Razor ページとビューの追加をサポートするかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する",
+ "postActions/openInEditor/description": "エディターで Areas/MyFeature/Pages/Page1.cshtml を開きます"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ko.json
index 1888d9ed69..8ea5c9c6ac 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Razor 클래스 라이브러리",
+ "description": ".NET Standard를 대상으로 하는 Razor 클래스 라이브러리를 만드는 데 사용되는 프로젝트",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/SupportPagesAndViews/displayName": "지원 페이지 및 보기",
+ "symbols/SupportPagesAndViews/description": "이 라이브러리에 구성 요소 외에 기존 Razor 페이지 및 보기 추가를 지원할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행",
+ "postActions/openInEditor/description": "편집기에서 Areas/MyFeature/Pages/Page1.cshtml을 엽니다."
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pl.json
index 1888d9ed69..c5163e7ce0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
"name": "Razor Class Library",
"description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/SupportPagesAndViews/displayName": "Support pages and views",
"symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\"",
"postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 1888d9ed69..562ff853e1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Biblioteca de Classes Razor",
+ "description": "Um projeto para criar uma biblioteca de classes Razor direcionada ao .NET Standard",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/SupportPagesAndViews/displayName": "Páginas e visualizações de suporte",
+ "symbols/SupportPagesAndViews/description": "Se deve dar suporte à adição de páginas e exibições tradicionais do Razor, além de componentes, a esta biblioteca.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'",
+ "postActions/openInEditor/description": "Abre Areas/MyFeature/Pages/Page1.cshtml no editor"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ru.json
index 1888d9ed69..70b30f907b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,13 +1,13 @@
-{
- "author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+{
+ "author": "Майкрософт",
+ "name": "Библиотека классов Razor",
+ "description": "Проект для создания библиотеки классов Razor, предназначенной для .NET Standard",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/SupportPagesAndViews/displayName": "Поддержка страниц и представлений",
+ "symbols/SupportPagesAndViews/description": "Следует ли поддерживать добавление традиционных страниц и представлений Razor в дополнение к компонентам в этой библиотеке.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"",
+ "postActions/openInEditor/description": "Открывает Areas/MyFeature/Pages/Page1.cshtml в редакторе"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.tr.json
index 1888d9ed69..6911a5b9d8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Razor Sınıf Kitaplığı",
+ "description": ".NET Standard’ı hedefleyen bir Razor sınıf kitaplığı oluşturmaya yönelik proje",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/SupportPagesAndViews/displayName": "Destek sayfaları ve görünümleri",
+ "symbols/SupportPagesAndViews/description": "Bu kitaplığa yönelik bileşenlere ek olarak, geleneksel Razor sayfaları ve görünümleri eklemenin desteklenip desteklenmeyeceği.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır",
+ "postActions/openInEditor/description": "Düzenleyicide Areas/MyFeature/Pages/Page1.cshtml dosyasını açar"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 1888d9ed69..6d0c45b336 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Razor 类库",
+ "description": "用于创建目标为 .NET Standard 的 Razor 类库的项目",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/SupportPagesAndViews/displayName": "支持页面和视图",
+ "symbols/SupportPagesAndViews/description": "是否支持将除组件之外的传统 Razor 页面和视图添加到此库。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\"",
+ "postActions/openInEditor/description": "在编辑器中打开 Areas/MyFeature/Pages/Page1.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 1888d9ed69..00c1334d2c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorClassLibrary-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Razor Class Library",
- "description": "A project for creating a Razor class library that targets .NET Standard",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/SupportPagesAndViews/displayName": "Support pages and views",
- "symbols/SupportPagesAndViews/description": "Whether to support adding traditional Razor pages and Views in addition to components to this library.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'",
- "postActions/openInEditor/description": "Opens Areas/MyFeature/Pages/Page1.cshtml in the editor"
+ "name": "Razor 類別庫",
+ "description": "用於建立以 .NET Standard 為目標之 Razor 類別庫的專案",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/SupportPagesAndViews/displayName": "支援頁面及檢視",
+ "symbols/SupportPagesAndViews/description": "除了元件之外,是否支援將傳統 Razor 頁面及檢視新增至此程式庫。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'",
+ "postActions/openInEditor/description": "在編輯器中開啟 Areas/MyFeature/Pages/Page1.cshtml"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.cs.json
index 815f7d8cab..61e6006e48 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Webová aplikace ASP.NET Core",
+ "description": "Šablona projektu pro vytvoření aplikace ASP.NET Core s ukázkou obsahu ASP.NET Core Razor Pages",
+ "symbols/auth/choices/None/description": "Bez ověřování",
+ "symbols/auth/choices/Individual/description": "Ověřování Individual",
+ "symbols/auth/choices/IndividualB2C/description": "Ověřování Individual pomocí Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Ověřování organizace pro jednoho tenanta",
+ "symbols/auth/choices/MultiOrg/description": "Ověřování organizace pro více tenantů",
+ "symbols/auth/choices/Windows/description": "Integrované ověřování Windows",
+ "symbols/auth/description": "Typ ověřování, který se má použít",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C, ke které se chcete připojit (používá se s ověřováním IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID zásad přihlašování a registrace pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Zpětné volání globálního odhlášení (používá se s ověřováním IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID zásad resetování hesla pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID zásad úprav profilu pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory, ke které se chcete připojit (používá se s ověřováním SingleOrg nebo MultiOrg).",
+ "symbols/ClientId/description": "ID klienta pro tento projekt (používá se s ověřováním IndividualB2C, SingleOrg nebo MultiOrg).",
+ "symbols/Domain/description": "Doména pro tenanta adresáře (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/TenantId/description": "TenantId adresáře, ke kterému se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/CallbackPath/description": "Cesta žádosti v rámci základní cesty aplikace k identifikátoru URI pro přesměrování (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Určuje, jestli se této aplikaci povolí přístup ke čtení adresáře (platí jenom pro ověřování SingleOrg nebo MultiOrg).",
+ "symbols/UserSecretsId/description": "ID, které se má použít pro tajné kódy (používá se s ověřováním OrgReadAccess nebo Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má ve vygenerované šabloně vyloučit soubor launchSettings.json.",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají IndividualB2C, SingleOrg ani MultiOrg.",
+ "symbols/UseLocalDB/description": "Určuje, jestli se má použít LocalDB namísto SQLite. Tato možnost platí jenom v případě, že je zadáno --auth Individual nebo --auth IndividualB2C.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/CalledApiUrl/description": "Adresa URL rozhraní API, která se má volat z webové aplikace. Tato možnost platí jenom v případě, že je zadáno --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Určuje, jestli webová aplikace volá Microsoft Graph. Tato možnost platí pouze v případě, že je zadáno --auth SingleOrg nebo --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Obory, které se mají požádat o volání rozhraní API z webové aplikace Tato možnost platí jenom v případě, že je zadaná možnost --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C.",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.de.json
index 815f7d8cab..ccd9d2ea7b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web App",
"description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
@@ -22,20 +22,20 @@
"symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.es.json
index 815f7d8cab..83ea9efb3b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web App",
"description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
@@ -22,20 +22,20 @@
"symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.fr.json
index 815f7d8cab..b1b3026eab 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Application web ASP.NET Core",
+ "description": "Modèle de projet pour la création d’une application ASP.NET Core avec un exemple de contenu ASP.NET Core Razor Pages",
+ "symbols/auth/choices/None/description": "Aucune authentification",
+ "symbols/auth/choices/Individual/description": "Authentification individuelle",
+ "symbols/auth/choices/IndividualB2C/description": "Authentification individuelle avec Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Authentification organisationnelle pour un seul locataire",
+ "symbols/auth/choices/MultiOrg/description": "Authentification organisationnelle pour plusieurs locataires",
+ "symbols/auth/choices/Windows/description": "Authentification Windows",
+ "symbols/auth/description": "Type d’authentification à utiliser",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C à laquelle se connecter (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID de stratégie de connexion et d’inscription pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Rappel de déconnexion global (utilisé avec l’authentification IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID de stratégie de réinitialisation de mot de passe pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID de stratégie de modification de profil pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory à laquelle se connecter (à utiliser avec l’authentification SingleOrg ou MultiOrg).",
+ "symbols/ClientId/description": "ID client de ce projet (à utiliser avec l’authentification IndividualB2C, SingleOrg ou MultiOrg).",
+ "symbols/Domain/description": "Domaine du locataire d’annuaire (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/TenantId/description": "ID TenantId du répertoire auquel se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/CallbackPath/description": "Chemin de la demande dans le chemin de base de l’application de l’URI de redirection (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Indique si cette application doit autoriser ou non l’accès en lecture à l’annuaire (s’applique uniquement à l’authentification SingleOrg ou MultiOrg).",
+ "symbols/UserSecretsId/description": "ID à utiliser pour les secrets (à utiliser avec OrgReadAccess ou l’authentification individuelle).",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json dans le modèle généré.",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https est ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "symbols/UseLocalDB/description": "Indique s’il faut utiliser localDB au lieu de SQLite. Cette option s’applique uniquement si --auth Individual ou --auth IndividualB2C est spécifié.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/CalledApiUrl/description": "URL de l’API à appeler à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/CallsMicrosoftGraph/description": "Spécifie si l’application web appelle Microsoft Graph. Cette option s’applique uniquement si --auth SingleOrg ou --auth MultiOrg est spécifié.",
+ "symbols/CalledApiScopes/description": "Étendues pour demander à appeler l’API à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.it.json
index 815f7d8cab..89c763e0d1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "App Web ASP.NET Core",
+ "description": "Modello di progetto per la creazione di un'applicazione ASP.NET Core con contenuto Razor Pages ASP.NET Core di esempio.",
+ "symbols/auth/choices/None/description": "Nessuna autenticazione",
+ "symbols/auth/choices/Individual/description": "Autenticazione singola",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticazione singola con Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticazione organizzativa per un singolo tenant",
+ "symbols/auth/choices/MultiOrg/description": "Autenticazione dell'organizzazione per più tenant",
+ "symbols/auth/choices/Windows/description": "Autenticazione di Windows",
+ "symbols/auth/description": "Tipo di autenticazione da usare.",
+ "symbols/AAdB2CInstance/description": "Istanza di Azure Active Directory B2C a cui connettersi (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID dei criteri di accesso e iscrizione per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Callback di disconnessione globale (usare con l'autenticazione IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID dei criteri di reimpostazione della password per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID dei criteri del profilo di modifica per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/AADInstance/description": "Istanza di Azure Active Directory a cui connettersi (usare con l'autenticazione SingleOrg o MultiOrg).",
+ "symbols/ClientId/description": "ID client per questo progetto (usare con l'autenticazione IndividualB2C, SingleOrg o MultiOrg).",
+ "symbols/Domain/description": "Il dominio per il tenant della directory (da usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/TenantId/description": "ID TenantId della directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/CallbackPath/description": "Percorso della richiesta all'interno del percorso di base dell'applicazione dell'URI di reindirizzamento (usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Indica se consentire o meno a questa applicazione l'accesso in lettura alla directory (si applica solo all'autenticazione SingleOrg o MultiOrg).",
+ "symbols/UserSecretsId/description": "ID da usare per i segreti (usare con OrgReadAccess o l'autenticazione singola).",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si utilizza IndividualB2C o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualB2C o OrganizationalAuth).",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "symbols/UseLocalDB/description": "Indica se usare LocalDB invece di SQLite. Questa opzione si applica solo se è specificato --auth Individual o --auth IndividualB2C.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/CalledApiUrl/description": "URL dell'API da chiamare dall'app Web. Questa opzione si applica solo se si specifica --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Specifica se l'app Web chiama Microsoft Graph. Questa opzione si applica solo se è specificato --auth SingleOrg o --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Ambiti per richiedere di chiamare l'API dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C.",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ja.json
index 815f7d8cab..b0b02dcf25 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web アプリ",
+ "description": "ASP.NET Core アプリケーションを、サンプルの ASP.NET Core Razor Pages コンテンツで作成するためのプロジェクト テンプレートです",
+ "symbols/auth/choices/None/description": "認証なし",
+ "symbols/auth/choices/Individual/description": "個別の認証",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C を使用した個別の認証",
+ "symbols/auth/choices/SingleOrg/description": "単一テナントの組織認証",
+ "symbols/auth/choices/MultiOrg/description": "複数のテナントの組織認証",
+ "symbols/auth/choices/Windows/description": "Windows 認証",
+ "symbols/auth/description": "使用する認証の種類",
+ "symbols/AAdB2CInstance/description": "接続先の Azure Active Directory B2C インスタンス (IndividualB2C 認証で使用)。",
+ "symbols/SignUpSignInPolicyId/description": "このプロジェクトのサインインおよびサインアップのポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/SignedOutCallbackPath/description": "グローバル サインアウト コールバック (IndividualB2C 認証で使用)。",
+ "symbols/ResetPasswordPolicyId/description": "このプロジェクトのパスワードのリセット ポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/EditProfilePolicyId/description": "このプロジェクトの編集プロファイル ポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/AADInstance/description": "接続先の Azure Active Directory インスタンス (SingleOrg または MultiOrg 認証で使用)。",
+ "symbols/ClientId/description": "このプロジェクトのクライアント ID (IndividualB2C、SingleOrg、または MultiOrg 認証で使用)。",
+ "symbols/Domain/description": "ディレクトリ テナントのドメイン (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/TenantId/description": "接続先のディレクトリの TenantId ID (SingleOrg 認証で使用)。",
+ "symbols/CallbackPath/description": "リダイレクト URI のアプリケーションのベース パス内の要求パス (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/OrgReadAccess/description": "このアプリケーションにディレクトリへの読み取りアクセスを許可するかどうか (SingleOrg または MultiOrg 認証にのみ適用されます)。",
+ "symbols/UserSecretsId/description": "シークレットで使用する ID (OrgReadAccess または個別の認証で使用)。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートで launchSettings.json を除外するかどうか。",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、no-https パラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、no-https は無視されます)。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "symbols/UseLocalDB/description": "SQLite の代わりに LocalDB を使用するかどうか。このオプションは、--auth Individual または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/CalledApiUrl/description": "Web アプリから呼び出す API の URL。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/CallsMicrosoftGraph/description": "Web アプリが Microsoft Graph を呼び出すかどうかを指定します。このオプションは、--auth SingleOrg または --auth MultiOrg が指定されている場合にのみ適用されます。",
+ "symbols/CalledApiScopes/description": "Web アプリから API を呼び出す要求へのスコープ。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ko.json
index 815f7d8cab..9b9a5a72c5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 웹앱",
+ "description": "예제 ASP.NET Core Razor Pages 콘텐츠를 사용하여 ASP.NET Core 애플리케이션을 만들기 위한 프로젝트 템플릿",
+ "symbols/auth/choices/None/description": "인증 없음",
+ "symbols/auth/choices/Individual/description": "개별 인증",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C를 사용한 개별 인증",
+ "symbols/auth/choices/SingleOrg/description": "단일 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/MultiOrg/description": "여러 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/Windows/description": "Windows 인증",
+ "symbols/auth/description": "사용할 인증 유형",
+ "symbols/AAdB2CInstance/description": "연결할 Azure Active Directory B2C 인스턴스(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignUpSignInPolicyId/description": "이 프로젝트의 로그인 및 등록 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignedOutCallbackPath/description": "전역 로그아웃 콜백입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/ResetPasswordPolicyId/description": "이 프로젝트의 암호 초기화 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/EditProfilePolicyId/description": "이 프로젝트의 편집 프로필 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/AADInstance/description": "연결할 Azure Active Directory 인스턴스입니다(SingleOrg 또는 MultiOrg 인증과 함께 사용).",
+ "symbols/ClientId/description": "이 프로젝트의 클라이언트 ID입니다(IndividualB2C, SingleOrg 또는 MultiOrg 인증과 함께 사용).",
+ "symbols/Domain/description": "디렉터리 테넌트의 도메인입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/TenantId/description": "연결할 디렉터리의 TenantId ID입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/CallbackPath/description": "리디렉션 URI의 애플리케이션 기본 경로 내의 요청 경로(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/OrgReadAccess/description": "이 애플리케이션이 디렉터리에 대한 읽기 액세스를 허용할지 여부(SingleOrg 또는 MultiOrg 인증에만 적용됨).",
+ "symbols/UserSecretsId/description": "비밀에 사용할 ID입니다(OrgReadAccess 또는 개별 인증과 함께 사용).",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 개별B2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/UseLocalDB/description": "SQLite 대신 LocalDB를 사용할지 여부입니다. 이 옵션은 --auth Individual 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/CalledApiUrl/description": "웹앱에서 호출할 API의 URL입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/CallsMicrosoftGraph/description": "웹앱이 Microsoft Graph를 호출하는지 여부를 지정합니다. 이 옵션은 --auth SingleOrg 또는 --auth MultiOrg가 지정된 경우에만 적용됩니다.",
+ "symbols/CalledApiScopes/description": "웹앱에서 API 호출을 요청할 범위입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pl.json
index 815f7d8cab..7ce89e90b0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,4 +1,4 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web App",
"description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
@@ -22,20 +22,20 @@
"symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 815f7d8cab..1e29dc1b75 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplicativo Web ASP.NET Core",
+ "description": "Um modelo de projeto para criar um aplicativo ASP.NET Core com conteúdo de exemplo ASP.NET Core Razor Pages",
+ "symbols/auth/choices/None/description": "Sem autenticação",
+ "symbols/auth/choices/Individual/description": "Autenticação individual",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticação individual com Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticação organizacional para um único locatário",
+ "symbols/auth/choices/MultiOrg/description": "Autenticação organizacional para vários locatários",
+ "symbols/auth/choices/Windows/description": "autenticação do Windows",
+ "symbols/auth/description": "O tipo de autenticação a ser usado",
+ "symbols/AAdB2CInstance/description": "A instância do Azure Active Directory B2C à qual se conectar (use com autenticação IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "O ID da política de login e inscrição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "O retorno de chamada de saída global (use com autenticação IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "O ID da política de redefinição de senha para este projeto (use com autenticação IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "O ID de política de perfil de edição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/AADInstance/description": "A instância do Azure Active Directory à qual se conectar (use com autenticação SingleOrg ou MultiOrg).",
+ "symbols/ClientId/description": "O ID do cliente para este projeto (use com autenticação IndividualB2C, SingleOrg ou MultiOrg).",
+ "symbols/Domain/description": "O domínio para o locatário do diretório (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/TenantId/description": "O ID TenantId do diretório ao qual se conectar (use com autenticação SingleOrg).",
+ "symbols/CallbackPath/description": "O caminho de solicitação no caminho base do aplicativo do URI de redirecionamento (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Se deve ou não permitir o acesso de leitura deste aplicativo ao diretório (aplica-se apenas à autenticação SingleOrg ou MultiOrg).",
+ "symbols/UserSecretsId/description": "O ID a ser usado para segredos (use com OrgReadAccess ou Autenticação individual).",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json no modelo gerado.",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção só se aplica se IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "symbols/UseLocalDB/description": "Se deve usar LocalDB em vez de SQLite. Esta opção só se aplica se --auth Individual ou --auth IndividualB2C for especificado.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/CalledApiUrl/description": "URL da API para chamar do aplicativo Web. Esta opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C for especificado.",
+ "symbols/CallsMicrosoftGraph/description": "Especifica se o aplicativo Web chama o Microsoft Graph. Esta opção só se aplica se --auth SingleOrg ou --auth MultiOrg for especificado.",
+ "symbols/CalledApiScopes/description": "Escopos a serem solicitados para chamar a API do aplicativo Web. Esta opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C for especificado.",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ru.json
index 815f7d8cab..c4046912b0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,41 +1,41 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Веб-приложение ASP.NET Core",
+ "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом содержимого ASP.NET Core Razor Pages",
+ "symbols/auth/choices/None/description": "Без проверки подлинности",
+ "symbols/auth/choices/Individual/description": "Индивидуальная проверка подлинности",
+ "symbols/auth/choices/IndividualB2C/description": "Индивидуальная проверка подлинности в Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Проверка подлинности в организации для одного клиента",
+ "symbols/auth/choices/MultiOrg/description": "Проверка подлинности в организации для нескольких клиентов",
+ "symbols/auth/choices/Windows/description": "Проверка подлинности Windows",
+ "symbols/auth/description": "Тип используемой проверки подлинности",
+ "symbols/AAdB2CInstance/description": "Экземпляр Azure Active Directory B2C, к которому нужно подключиться (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "Идентификатор политики входа и регистрации для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Глобальный обратный вызов для выхода (используется с проверкой подлинности IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "Идентификатор политики сброса паролей для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "Идентификатор политики изменения профиля для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/AADInstance/description": "Экземпляр Azure Active Directory, к которому нужно подключиться (используется с проверкой подлинности SingleOrg или MultiOrg).",
+ "symbols/ClientId/description": "Идентификатор клиента для этого проекта (используется с проверкой подлинности IndividualB2C, SingleOrg или MultiOrg).",
+ "symbols/Domain/description": "Домен для клиента каталога (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/TenantId/description": "Идентификатор TenantId каталога, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/CallbackPath/description": "Путь запроса в базовом пути приложения к URI перенаправления (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Следует ли предоставлять этому приложению доступ на чтение к каталогу (применяется только к проверке подлинности SingleOrg или MultiOrg).",
+ "symbols/UserSecretsId/description": "Идентификатор, используемый для секретов (используется с проверкой подлинности OrgReadAccess или Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются IndividualB2C, SingleOrg или MultiOrg.",
+ "symbols/UseLocalDB/description": "Следует ли использовать LocalDB вместо SQLite. Этот параметр применяется, только если указывается --auth Individual или --auth IndividualB2C.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/CalledApiUrl/description": "URL-адрес API для вызова из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Указывает, вызывает ли веб-приложение Microsoft Graph. Этот параметр применяется, только если указывается --auth SingleOrg или --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Области для запроса вызова API из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C.",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.tr.json
index 815f7d8cab..c7d7967879 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web Uygulaması",
+ "description": "ASP.NET Core Razor Sayfalar içeriği örneğiyle ASP.NET Core uygulaması oluşturmak için proje şablonu",
+ "symbols/auth/choices/None/description": "Kimlik doğrulaması yok",
+ "symbols/auth/choices/Individual/description": "Bireysel kimlik doğrulaması",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C ile bireysel kimlik doğrulaması",
+ "symbols/auth/choices/SingleOrg/description": "Tek bir kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/MultiOrg/description": "Birden çok kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/Windows/description": "Windows kimlik doğrulaması",
+ "symbols/auth/description": "Kullanılacak kimlik doğrulaması türü",
+ "symbols/AAdB2CInstance/description": "Bağlanılacak Azure Active Directory B2C örneği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignUpSignInPolicyId/description": "Bu proje için oturum açma ve kaydolma ilkesi kimliği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignedOutCallbackPath/description": "Genel oturum kapatma geri araması (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/ResetPasswordPolicyId/description": "Bu proje için parola ilkesi sıfırlama kimliği (IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/EditProfilePolicyId/description": "Bu proje için düzenleme profil ilkesi kimliği (IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/AADInstance/description": "Bağlanılacak Azure Active Directory örneği (SingleOrg veya MultiOrg kimlik doğrulaması ile kullanın).",
+ "symbols/ClientId/description": "Bu proje için İstemci Kimliği (IndividualB2C, SingleOrg veya MultiOrg kimlik doğrulaması ile kullanın).",
+ "symbols/Domain/description": "Dizin kiracısı için etki alanı (SingleOrg veya IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/TenantId/description": "Bağlanılacak dizinin TenantId kimliği (SingleOrg kimlik doğrulamasıyla kullanın).",
+ "symbols/CallbackPath/description": "Yeniden yönlendirme URI'sinin uygulama temel dizini yolu içindeki istek yolu (SingleOrg veya IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/OrgReadAccess/description": "Bu uygulamanın dizin okuma erişimine izin verilip verilmeyeceği (yalnızca SingleOrg veya MultiOrg kimlik doğrulaması için geçerlidir).",
+ "symbols/UserSecretsId/description": "Gizli diziler için kullanılan kimlik (OrgReadAccess veya Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablonda dışlanıp dışlanmayacağı.",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "symbols/UseLocalDB/description": "SQLite yerine LocalDB'nin kullanılıp kullanılmayacağı. Bu seçenek yalnızca --auth Individual veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/CalledApiUrl/description": "Web uygulamasından çağrılan API URL'si. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/CallsMicrosoftGraph/description": "Web uygulamasının Microsoft Graph çağırıp çağırmadığını belirtir. Bu seçenek yalnızca --auth SingleOrg veya --auth MultiOrg belirtilirse geçerlidir.",
+ "symbols/CalledApiScopes/description": "Web uygulamasından API çağırma istek kapsamları. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 815f7d8cab..5304cadd44 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web 应用",
+ "description": "用于创建包含示例 ASP.NET Core Razor Pages 内容的 ASP.NET Core 应用程序的项目模板",
+ "symbols/auth/choices/None/description": "无身份验证",
+ "symbols/auth/choices/Individual/description": "个人身份验证",
+ "symbols/auth/choices/IndividualB2C/description": "使用 Azure AD B2C 进行个人身份验证",
+ "symbols/auth/choices/SingleOrg/description": "单个租户的组织身份验证",
+ "symbols/auth/choices/MultiOrg/description": "多个租户的组织身份验证",
+ "symbols/auth/choices/Windows/description": "Windows 身份验证",
+ "symbols/auth/description": "要使用的身份验证类型",
+ "symbols/AAdB2CInstance/description": "要连接到的 Azure Active Directory B2C 实例(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此项目的登录和注册策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignedOutCallbackPath/description": "全局注销回调(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/ResetPasswordPolicyId/description": "此项目的重置密码策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/EditProfilePolicyId/description": "此项目的编辑配置文件策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/AADInstance/description": "要连接到的 Azure Active Directory 实例(与 SingleOrg 或 MultiOrg 身份验证一起使用)。",
+ "symbols/ClientId/description": "此项目的客户端 ID (与 IndividualB2C、SingleOrg 或 MultiOrg 身份验证一起使用)。",
+ "symbols/Domain/description": "目录租户的域(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/TenantId/description": "要连接到的目录的 TenantId ID (与 SingleOrg 身份验证一起使用)。",
+ "symbols/CallbackPath/description": "重定向 URI 的应用程序基路径内的请求路径(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/OrgReadAccess/description": "是否允许此应用程序对目录进行读取访问(仅适用于 SingleOrg 或 MultiOrg 身份验证)。",
+ "symbols/UserSecretsId/description": "用于机密的 ID (与 OrgReadAccess 或个人身份验证一起使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否在生成的模板中排除 launchSettings.json。",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而不是 SQLite。仅当指定了 --auth Individual 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/CalledApiUrl/description": "要从 Web 应用调用的 API 的 URL。仅当指定了 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 应用是否调用 Microsoft Graph。仅当指定了 --auth SingleOrg 或 --auth MultiOrg 时,此选项才适用。",
+ "symbols/CalledApiScopes/description": "请求从 Web 应用调用 API 的范围。仅当指定了 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 815f7d8cab..4ec3a99f60 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App",
- "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core Razor Pages content",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web 應用程式",
+ "description": "建立 ASP.NET 核心應用程式的專案範本,同時附上範例 ASP.NET Razor 頁面內容。",
+ "symbols/auth/choices/None/description": "沒有驗證",
+ "symbols/auth/choices/Individual/description": "個別驗證",
+ "symbols/auth/choices/IndividualB2C/description": "具有 Azure AD B2C 的個別驗證",
+ "symbols/auth/choices/SingleOrg/description": "單一租用戶的組織驗證",
+ "symbols/auth/choices/MultiOrg/description": "多個租用戶的組織驗證",
+ "symbols/auth/choices/Windows/description": "Windows 驗證",
+ "symbols/auth/description": "要使用的驗證類型。",
+ "symbols/AAdB2CInstance/description": "要連線的 Azure Active Directory B2C 執行個體 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此專案的登入和註冊原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignedOutCallbackPath/description": "全域登出回呼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/ResetPasswordPolicyId/description": "此專案的重設密碼原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/EditProfilePolicyId/description": "此專案的編輯設定檔原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/AADInstance/description": "要連線到的 Azure Active Directory 執行個體 (搭配 SingleOrg 或 MultiOrg 驗證使用)。",
+ "symbols/ClientId/description": "此專案的用戶端識別碼 (搭配 IndividualB2C、SingleOrg 或 MultiOrg 驗證使用)。",
+ "symbols/Domain/description": "目錄租用戶的網域 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/TenantId/description": "要連線到目錄的 TenantId 識別碼 (搭配 SingleOrg 驗證使用)。",
+ "symbols/CallbackPath/description": "重新導向 URI 的應用程式基底路徑內的要求路徑 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/OrgReadAccess/description": "是否要允許此應用程式讀取存取目錄 (只適用於 SingleOrg 或 MultiOrg 驗證)。",
+ "symbols/UserSecretsId/description": "用於祕密的識別碼 (搭配 OrgReadAccess 或個別驗證使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否要在產生的範本中排除 launchSettings.json。",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而非 SQLite。只有在已指定 --auth Individual 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/CalledApiUrl/description": "要從 Web 應用程式呼叫的 API URL。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 應用程式呼叫是否 Microsoft Graph。只有在已指定 --auth SingleOrg 或 --auth MultiOrg 時,才適用此選項。",
+ "symbols/CalledApiScopes/description": "要求從 Web 應用程式呼叫 API 的範圍。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.cs.json
index 9a7972bc95..80028a3fb5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Webová aplikace ASP.NET Core (Model-View-Controller)",
+ "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.",
+ "symbols/auth/choices/None/description": "Bez ověřování",
+ "symbols/auth/choices/Individual/description": "Ověřování Individual",
+ "symbols/auth/choices/IndividualB2C/description": "Ověřování Individual pomocí Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Ověřování organizace pro jednoho tenanta",
+ "symbols/auth/choices/MultiOrg/description": "Ověřování organizace pro více tenantů",
+ "symbols/auth/choices/Windows/description": "Integrované ověřování Windows",
+ "symbols/auth/description": "Typ ověřování, který se má použít",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C, ke které se chcete připojit (používá se s ověřováním IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID zásad přihlašování a registrace pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Zpětné volání globálního odhlášení (používá se s ověřováním IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID zásad resetování hesla pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID zásad úprav profilu pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory, ke které se chcete připojit (používá se s ověřováním SingleOrg nebo MultiOrg).",
+ "symbols/ClientId/description": "ID klienta pro tento projekt (používá se s ověřováním IndividualB2C, SingleOrg nebo MultiOrg).",
+ "symbols/Domain/description": "Doména pro tenanta adresáře (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/TenantId/description": "TenantId adresáře, ke kterému se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/CallbackPath/description": "Cesta žádosti v rámci základní cesty aplikace k identifikátoru URI pro přesměrování (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Určuje, jestli se této aplikaci povolí přístup ke čtení adresáře (platí jenom pro ověřování SingleOrg nebo MultiOrg).",
+ "symbols/UserSecretsId/description": "ID, které se má použít pro tajné kódy (používá se s ověřováním OrgReadAccess nebo Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají IndividualB2C, SingleOrg ani MultiOrg.",
+ "symbols/UseLocalDB/description": "Určuje, jestli se má použít LocalDB namísto SQLite. Tato možnost platí jenom v případě, že je zadáno --auth Individual nebo --auth IndividualB2C.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/CalledApiUrl/description": "Adresa URL rozhraní API, která se má volat z webové aplikace. Tato možnost platí jenom v případě, že je zadáno --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Určuje, jestli webová aplikace volá Microsoft Graph. Tato možnost platí pouze v případě, že je zadáno --auth SingleOrg nebo --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Obory, které se mají požádat o volání rozhraní API z webové aplikace Tato možnost platí jenom v případě, že je zadaná možnost --auth SingleOrg, --auth MultiOrg nebo --auth IndividualB2C.",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.de.json
index 9a7972bc95..0583a9e4cd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
+ "name": "ASP.NET Core-Web-App (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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
@@ -23,19 +23,19 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.es.json
index 9a7972bc95..2976041a68 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
+ "name": "Aplicación web de ASP.NET Core (Modelo-Vista-Controlador)",
+ "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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
@@ -23,19 +23,19 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.fr.json
index 9a7972bc95..560172bc59 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Application web ASP.NET Core (modèle-vue-contrôleur)",
+ "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.",
+ "symbols/auth/choices/None/description": "Aucune authentification",
+ "symbols/auth/choices/Individual/description": "Authentification individuelle",
+ "symbols/auth/choices/IndividualB2C/description": "Authentification individuelle avec Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Authentification organisationnelle pour un seul locataire",
+ "symbols/auth/choices/MultiOrg/description": "Authentification organisationnelle pour plusieurs locataires",
+ "symbols/auth/choices/Windows/description": "Authentification Windows",
+ "symbols/auth/description": "Type d’authentification à utiliser",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C à laquelle se connecter (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID de stratégie de connexion et d’inscription pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Rappel de déconnexion global (utilisé avec l’authentification IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID de stratégie de réinitialisation de mot de passe pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID de stratégie de modification de profil pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory à laquelle se connecter (à utiliser avec l’authentification SingleOrg ou MultiOrg).",
+ "symbols/ClientId/description": "ID client de ce projet (à utiliser avec l’authentification IndividualB2C, SingleOrg ou MultiOrg).",
+ "symbols/Domain/description": "Domaine du locataire d’annuaire (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/TenantId/description": "ID TenantId du répertoire auquel se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/CallbackPath/description": "Chemin de la demande dans le chemin de base de l’application de l’URI de redirection (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Indique si cette application doit autoriser ou non l’accès en lecture à l’annuaire (s’applique uniquement à l’authentification SingleOrg ou MultiOrg).",
+ "symbols/UserSecretsId/description": "ID à utiliser pour les secrets (à utiliser avec OrgReadAccess ou l’authentification individuelle).",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https est ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "symbols/UseLocalDB/description": "Indique s’il faut utiliser localDB au lieu de SQLite. Cette option s’applique uniquement si --auth Individual ou --auth IndividualB2C est spécifié.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/CalledApiUrl/description": "URL de l’API à appeler à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/CallsMicrosoftGraph/description": "Spécifie si l’application web appelle Microsoft Graph. Cette option s’applique uniquement si --auth SingleOrg ou --auth MultiOrg est spécifié.",
+ "symbols/CalledApiScopes/description": "Étendues pour demander à appeler l’API à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.it.json
index 9a7972bc95..6359dd0b71 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "App Web ASP.NET Core (Model-View-Controller)",
+ "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.",
+ "symbols/auth/choices/None/description": "Nessuna autenticazione",
+ "symbols/auth/choices/Individual/description": "Autenticazione singola",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticazione singola con Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticazione organizzativa per un singolo tenant",
+ "symbols/auth/choices/MultiOrg/description": "Autenticazione dell'organizzazione per più tenant",
+ "symbols/auth/choices/Windows/description": "Autenticazione di Windows",
+ "symbols/auth/description": "Tipo di autenticazione da usare.",
+ "symbols/AAdB2CInstance/description": "Istanza di Azure Active Directory B2C a cui connettersi (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID dei criteri di accesso e iscrizione per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Callback di disconnessione globale (usare con l'autenticazione IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "ID dei criteri di reimpostazione della password per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "ID dei criteri del profilo di modifica per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/AADInstance/description": "Istanza di Azure Active Directory a cui connettersi (usare con l'autenticazione SingleOrg o MultiOrg).",
+ "symbols/ClientId/description": "ID client per questo progetto (usare con l'autenticazione IndividualB2C, SingleOrg o MultiOrg).",
+ "symbols/Domain/description": "Il dominio per il tenant della directory (da usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/TenantId/description": "ID TenantId della directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/CallbackPath/description": "Percorso della richiesta all'interno del percorso di base dell'applicazione dell'URI di reindirizzamento (usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Indica se consentire o meno a questa applicazione l'accesso in lettura alla directory (si applica solo all'autenticazione SingleOrg o MultiOrg).",
+ "symbols/UserSecretsId/description": "ID da usare per i segreti (usare con OrgReadAccess o l'autenticazione singola).",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si utilizza IndividualB2C o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualB2C o OrganizationalAuth).",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "symbols/UseLocalDB/description": "Indica se usare LocalDB invece di SQLite. Questa opzione si applica solo se è specificato --auth Individual o --auth IndividualB2C.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/CalledApiUrl/description": "URL dell'API da chiamare dall'app Web. Questa opzione si applica solo se si specifica --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Specifica se l'app Web chiama Microsoft Graph. Questa opzione si applica solo se è specificato --auth SingleOrg o --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Ambiti per richiedere di chiamare l'API dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg, --auth MultiOrg o --auth IndividualB2C.",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ja.json
index 9a7972bc95..cdacbcf5d9 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web アプリ (Model-View-Controller)",
+ "description": "ASP.NET Core MVC のサンプル ビューとコントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは RESTful HTTP サービスでも使用できます。",
+ "symbols/auth/choices/None/description": "認証なし",
+ "symbols/auth/choices/Individual/description": "個別の認証",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C を使用した個別の認証",
+ "symbols/auth/choices/SingleOrg/description": "単一テナントの組織認証",
+ "symbols/auth/choices/MultiOrg/description": "複数のテナントの組織認証",
+ "symbols/auth/choices/Windows/description": "Windows 認証",
+ "symbols/auth/description": "使用する認証の種類",
+ "symbols/AAdB2CInstance/description": "接続先の Azure Active Directory B2C インスタンス (IndividualB2C 認証で使用)。",
+ "symbols/SignUpSignInPolicyId/description": "このプロジェクトのサインインおよびサインアップのポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/SignedOutCallbackPath/description": "グローバル サインアウト コールバック (IndividualB2C 認証で使用)。",
+ "symbols/ResetPasswordPolicyId/description": "このプロジェクトのパスワードのリセット ポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/EditProfilePolicyId/description": "このプロジェクトの編集プロファイル ポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/AADInstance/description": "接続先の Azure Active Directory インスタンス (SingleOrg または MultiOrg 認証で使用)。",
+ "symbols/ClientId/description": "このプロジェクトのクライアント ID (IndividualB2C、SingleOrg、または MultiOrg 認証で使用)。",
+ "symbols/Domain/description": "ディレクトリ テナントのドメイン (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/TenantId/description": "接続先のディレクトリの TenantId ID (SingleOrg 認証で使用)。",
+ "symbols/CallbackPath/description": "リダイレクト URI のアプリケーションのベース パス内の要求パス (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/OrgReadAccess/description": "このアプリケーションにディレクトリへの読み取りアクセスを許可するかどうか (SingleOrg または MultiOrg 認証にのみ適用されます)。",
+ "symbols/UserSecretsId/description": "シークレットで使用する ID (OrgReadAccess または個別の認証で使用)。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、no-https パラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、no-https は無視されます)。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "symbols/UseLocalDB/description": "SQLite の代わりに LocalDB を使用するかどうか。このオプションは、--auth Individual または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/CalledApiUrl/description": "Web アプリから呼び出す API の URL。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/CallsMicrosoftGraph/description": "Web アプリが Microsoft Graph を呼び出すかどうかを指定します。このオプションは、--auth SingleOrg または --auth MultiOrg が指定されている場合にのみ適用されます。",
+ "symbols/CalledApiScopes/description": "Web アプリから API を呼び出す要求へのスコープ。このオプションは、--auth SingleOrg、--auth MultiOrg、または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ko.json
index 9a7972bc95..9e5c22bc5c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 웹앱(Model-View-Controller)",
+ "description": "예제 ASP.NET Core MVC 뷰 및 컨트롤러를 사용하여 ASP.NET Core 애플리케이션을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 RESTful HTTP 서비스에도 사용할 수 있습니다.",
+ "symbols/auth/choices/None/description": "인증 없음",
+ "symbols/auth/choices/Individual/description": "개별 인증",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C를 사용한 개별 인증",
+ "symbols/auth/choices/SingleOrg/description": "단일 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/MultiOrg/description": "여러 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/Windows/description": "Windows 인증",
+ "symbols/auth/description": "사용할 인증 유형",
+ "symbols/AAdB2CInstance/description": "연결할 Azure Active Directory B2C 인스턴스(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignUpSignInPolicyId/description": "이 프로젝트의 로그인 및 등록 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignedOutCallbackPath/description": "전역 로그아웃 콜백입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/ResetPasswordPolicyId/description": "이 프로젝트의 암호 초기화 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/EditProfilePolicyId/description": "이 프로젝트의 편집 프로필 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/AADInstance/description": "연결할 Azure Active Directory 인스턴스입니다(SingleOrg 또는 MultiOrg 인증과 함께 사용).",
+ "symbols/ClientId/description": "이 프로젝트의 클라이언트 ID입니다(IndividualB2C, SingleOrg 또는 MultiOrg 인증과 함께 사용).",
+ "symbols/Domain/description": "디렉터리 테넌트의 도메인입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/TenantId/description": "연결할 디렉터리의 TenantId ID입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/CallbackPath/description": "리디렉션 URI의 애플리케이션 기본 경로 내의 요청 경로(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/OrgReadAccess/description": "이 애플리케이션이 디렉터리에 대한 읽기 액세스를 허용할지 여부(SingleOrg 또는 MultiOrg 인증에만 적용됨).",
+ "symbols/UserSecretsId/description": "비밀에 사용할 ID입니다(OrgReadAccess 또는 개별 인증과 함께 사용).",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 개별B2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/UseLocalDB/description": "SQLite 대신 LocalDB를 사용할지 여부입니다. 이 옵션은 --auth Individual 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/CalledApiUrl/description": "웹앱에서 호출할 API의 URL입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/CallsMicrosoftGraph/description": "웹앱이 Microsoft Graph를 호출하는지 여부를 지정합니다. 이 옵션은 --auth SingleOrg 또는 --auth MultiOrg가 지정된 경우에만 적용됩니다.",
+ "symbols/CalledApiScopes/description": "웹앱에서 API 호출을 요청할 범위입니다. 이 옵션은 --auth SingleOrg, --auth MultiOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pl.json
index 9a7972bc95..72bed0b79c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
+ "name": "Aplikacja internetowa ASP.NET Core (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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/Individual/description": "Individual authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
@@ -23,19 +23,19 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 9a7972bc95..8607754a6d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplicativo Web do ASP.NET Core (Model-View-Controller)",
+ "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.",
+ "symbols/auth/choices/None/description": "Sem autenticação",
+ "symbols/auth/choices/Individual/description": "Autenticação individual",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticação individual com Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticação organizacional para um único locatário",
+ "symbols/auth/choices/MultiOrg/description": "Autenticação organizacional para vários locatários",
+ "symbols/auth/choices/Windows/description": "autenticação do Windows",
+ "symbols/auth/description": "O tipo de autenticação a ser usado",
+ "symbols/AAdB2CInstance/description": "A instância do Azure Active Directory B2C à qual se conectar (use com autenticação IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "O ID da política de login e inscrição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "O retorno de chamada de saída global (use com autenticação IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "O ID da política de redefinição de senha para este projeto (use com autenticação IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "O ID de política de perfil de edição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/AADInstance/description": "A instância do Azure Active Directory à qual se conectar (use com autenticação SingleOrg ou MultiOrg).",
+ "symbols/ClientId/description": "O ID do cliente para este projeto (use com autenticação IndividualB2C, SingleOrg ou MultiOrg).",
+ "symbols/Domain/description": "O domínio para o locatário do diretório (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/TenantId/description": "O ID TenantId do diretório ao qual se conectar (use com autenticação SingleOrg).",
+ "symbols/CallbackPath/description": "O caminho de solicitação no caminho base do aplicativo do URI de redirecionamento (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Se deve ou não permitir o acesso de leitura deste aplicativo ao diretório (aplica-se apenas à autenticação SingleOrg ou MultiOrg).",
+ "symbols/UserSecretsId/description": "O ID a ser usado para segredos (use com OrgReadAccess ou Autenticação individual).",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção só se aplica se IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "symbols/UseLocalDB/description": "Se deve usar LocalDB em vez de SQLite. Esta opção só se aplica se --auth Individual ou --auth IndividualB2C for especificado.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/CalledApiUrl/description": "URL da API para chamar do aplicativo Web. Esta opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C for especificado.",
+ "symbols/CallsMicrosoftGraph/description": "Especifica se o aplicativo Web chama o Microsoft Graph. Esta opção só se aplica se --auth SingleOrg ou --auth MultiOrg for especificado.",
+ "symbols/CalledApiScopes/description": "Escopos a serem solicitados para chamar a API do aplicativo Web. Esta opção só se aplica se --auth SingleOrg, --auth MultiOrg ou --auth IndividualB2C for especificado.",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ru.json
index 9a7972bc95..7aade0b5db 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,41 +1,41 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Веб-приложение ASP.NET Core (модель-представление-контроллер)",
+ "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом представлений MVC и контроллеров ASP.NET Core. Этот шаблон можно также использовать для служб HTTP RESTful.",
+ "symbols/auth/choices/None/description": "Без проверки подлинности",
+ "symbols/auth/choices/Individual/description": "Индивидуальная проверка подлинности",
+ "symbols/auth/choices/IndividualB2C/description": "Индивидуальная проверка подлинности в Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Проверка подлинности в организации для одного клиента",
+ "symbols/auth/choices/MultiOrg/description": "Проверка подлинности в организации для нескольких клиентов",
+ "symbols/auth/choices/Windows/description": "Проверка подлинности Windows",
+ "symbols/auth/description": "Тип используемой проверки подлинности",
+ "symbols/AAdB2CInstance/description": "Экземпляр Azure Active Directory B2C, к которому нужно подключиться (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "Идентификатор политики входа и регистрации для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignedOutCallbackPath/description": "Глобальный обратный вызов для выхода (используется с проверкой подлинности IndividualB2C).",
+ "symbols/ResetPasswordPolicyId/description": "Идентификатор политики сброса паролей для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/EditProfilePolicyId/description": "Идентификатор политики изменения профиля для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/AADInstance/description": "Экземпляр Azure Active Directory, к которому нужно подключиться (используется с проверкой подлинности SingleOrg или MultiOrg).",
+ "symbols/ClientId/description": "Идентификатор клиента для этого проекта (используется с проверкой подлинности IndividualB2C, SingleOrg или MultiOrg).",
+ "symbols/Domain/description": "Домен для клиента каталога (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/TenantId/description": "Идентификатор TenantId каталога, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/CallbackPath/description": "Путь запроса в базовом пути приложения к URI перенаправления (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/OrgReadAccess/description": "Следует ли предоставлять этому приложению доступ на чтение к каталогу (применяется только к проверке подлинности SingleOrg или MultiOrg).",
+ "symbols/UserSecretsId/description": "Идентификатор, используемый для секретов (используется с проверкой подлинности OrgReadAccess или Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются IndividualB2C, SingleOrg или MultiOrg.",
+ "symbols/UseLocalDB/description": "Следует ли использовать LocalDB вместо SQLite. Этот параметр применяется, только если указывается --auth Individual или --auth IndividualB2C.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/CalledApiUrl/description": "URL-адрес API для вызова из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Указывает, вызывает ли веб-приложение Microsoft Graph. Этот параметр применяется, только если указывается --auth SingleOrg или --auth MultiOrg.",
+ "symbols/CalledApiScopes/description": "Области для запроса вызова API из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg, --auth MultiOrg или --auth IndividualB2C.",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.tr.json
index 9a7972bc95..923039253b 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web Uygulaması (Model-Görünüm-Denetleyici)",
+ "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.",
+ "symbols/auth/choices/None/description": "Kimlik doğrulaması yok",
+ "symbols/auth/choices/Individual/description": "Bireysel kimlik doğrulaması",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C ile bireysel kimlik doğrulaması",
+ "symbols/auth/choices/SingleOrg/description": "Tek bir kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/MultiOrg/description": "Birden çok kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/Windows/description": "Windows kimlik doğrulaması",
+ "symbols/auth/description": "Kullanılacak kimlik doğrulaması türü",
+ "symbols/AAdB2CInstance/description": "Bağlanılacak Azure Active Directory B2C örneği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignUpSignInPolicyId/description": "Bu proje için oturum açma ve kaydolma ilkesi kimliği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignedOutCallbackPath/description": "Genel oturum kapatma geri araması (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/ResetPasswordPolicyId/description": "Bu proje için parola ilkesi sıfırlama kimliği (IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/EditProfilePolicyId/description": "Bu proje için düzenleme profil ilkesi kimliği (IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/AADInstance/description": "Bağlanılacak Azure Active Directory örneği (SingleOrg veya MultiOrg kimlik doğrulaması ile kullanın).",
+ "symbols/ClientId/description": "Bu proje için İstemci Kimliği (IndividualB2C, SingleOrg veya MultiOrg kimlik doğrulaması ile kullanın).",
+ "symbols/Domain/description": "Dizin kiracısı için etki alanı (SingleOrg veya IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/TenantId/description": "Bağlanılacak dizinin TenantId kimliği (SingleOrg kimlik doğrulamasıyla kullanın).",
+ "symbols/CallbackPath/description": "Yeniden yönlendirme URI'sinin uygulama temel dizini yolu içindeki istek yolu (SingleOrg veya IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/OrgReadAccess/description": "Bu uygulamanın dizin okuma erişimine izin verilip verilmeyeceği (yalnızca SingleOrg veya MultiOrg kimlik doğrulaması için geçerlidir).",
+ "symbols/UserSecretsId/description": "Gizli diziler için kullanılan kimlik (OrgReadAccess veya Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "symbols/UseLocalDB/description": "SQLite yerine LocalDB'nin kullanılıp kullanılmayacağı. Bu seçenek yalnızca --auth Individual veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/CalledApiUrl/description": "Web uygulamasından çağrılan API URL'si. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/CallsMicrosoftGraph/description": "Web uygulamasının Microsoft Graph çağırıp çağırmadığını belirtir. Bu seçenek yalnızca --auth SingleOrg veya --auth MultiOrg belirtilirse geçerlidir.",
+ "symbols/CalledApiScopes/description": "Web uygulamasından API çağırma istek kapsamları. Bu seçenek yalnızca --auth SingleOrg, --auth MultiOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 9a7972bc95..9a9c72d3f0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web 应用(模型-视图-控制器)",
+ "description": "用于创建包含示例 ASP.NET Core MVC 视图和控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 RESTful HTTP 服务。",
+ "symbols/auth/choices/None/description": "无身份验证",
+ "symbols/auth/choices/Individual/description": "个人身份验证",
+ "symbols/auth/choices/IndividualB2C/description": "使用 Azure AD B2C 进行个人身份验证",
+ "symbols/auth/choices/SingleOrg/description": "单个租户的组织身份验证",
+ "symbols/auth/choices/MultiOrg/description": "多个租户的组织身份验证",
+ "symbols/auth/choices/Windows/description": "Windows 身份验证",
+ "symbols/auth/description": "要使用的身份验证类型",
+ "symbols/AAdB2CInstance/description": "要连接到的 Azure Active Directory B2C 实例(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此项目的登录和注册策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignedOutCallbackPath/description": "全局注销回调(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/ResetPasswordPolicyId/description": "此项目的重置密码策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/EditProfilePolicyId/description": "此项目的编辑配置文件策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/AADInstance/description": "要连接到的 Azure Active Directory 实例(与 SingleOrg 或 MultiOrg 身份验证一起使用)。",
+ "symbols/ClientId/description": "此项目的客户端 ID (与 IndividualB2C、SingleOrg 或 MultiOrg 身份验证一起使用)。",
+ "symbols/Domain/description": "目录租户的域(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/TenantId/description": "要连接到的目录的 TenantId ID (与 SingleOrg 身份验证一起使用)。",
+ "symbols/CallbackPath/description": "重定向 URI 的应用程序基路径内的请求路径(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/OrgReadAccess/description": "是否允许此应用程序对目录进行读取访问(仅适用于 SingleOrg 或 MultiOrg 身份验证)。",
+ "symbols/UserSecretsId/description": "用于机密的 ID (与 OrgReadAccess 或个人身份验证一起使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而不是 SQLite。仅当指定了 --auth Individual 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/CalledApiUrl/description": "要从 Web 应用调用的 API 的 URL。仅当指定了 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 应用是否调用 Microsoft Graph。仅当指定了 --auth SingleOrg 或 --auth MultiOrg 时,此选项才适用。",
+ "symbols/CalledApiScopes/description": "请求从 Web 应用调用 API 的范围。仅当指定了 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 9a7972bc95..82dba758f9 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,41 +1,41 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/Individual/description": "Individual authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/MultiOrg/description": "Organizational authentication for multiple tenants",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/SignedOutCallbackPath/description": "The global signout callback (use with IndividualB2C auth).",
- "symbols/ResetPasswordPolicyId/description": "The reset password policy ID for this project (use with IndividualB2C auth).",
- "symbols/EditProfilePolicyId/description": "The edit profile policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg or MultiOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with IndividualB2C, SingleOrg or MultiOrg auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/CallbackPath/description": "The request path within the application's base path of the redirect URI (use with SingleOrg or IndividualB2C auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg or MultiOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C is specified.",
- "symbols/UseProgramMain/displayName": "Use an Program class and Main method.",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web 應用程式 (Model-View-Controller)",
+ "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 ASP.NET Core MVC 的檢視及控制器範例。此範本也可用於 RESTful HTTP 服務。",
+ "symbols/auth/choices/None/description": "沒有驗證",
+ "symbols/auth/choices/Individual/description": "個別驗證",
+ "symbols/auth/choices/IndividualB2C/description": "具有 Azure AD B2C 的個別驗證",
+ "symbols/auth/choices/SingleOrg/description": "單一租用戶的組織驗證",
+ "symbols/auth/choices/MultiOrg/description": "多個租用戶的組織驗證",
+ "symbols/auth/choices/Windows/description": "Windows 驗證",
+ "symbols/auth/description": "要使用的驗證類型。",
+ "symbols/AAdB2CInstance/description": "要連線的 Azure Active Directory B2C 執行個體 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此專案的登入和註冊原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignedOutCallbackPath/description": "全域登出回呼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/ResetPasswordPolicyId/description": "此專案的重設密碼原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/EditProfilePolicyId/description": "此專案的編輯設定檔原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/AADInstance/description": "要連線到的 Azure Active Directory 執行個體 (搭配 SingleOrg 或 MultiOrg 驗證使用)。",
+ "symbols/ClientId/description": "此專案的用戶端識別碼 (搭配 IndividualB2C、SingleOrg 或 MultiOrg 驗證使用)。",
+ "symbols/Domain/description": "目錄租用戶的網域 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/TenantId/description": "要連線到目錄的 TenantId 識別碼 (搭配 SingleOrg 驗證使用)。",
+ "symbols/CallbackPath/description": "重新導向 URI 的應用程式基底路徑內的要求路徑 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/OrgReadAccess/description": "是否要允許此應用程式讀取存取目錄 (只適用於 SingleOrg 或 MultiOrg 驗證)。",
+ "symbols/UserSecretsId/description": "用於祕密的識別碼 (搭配 OrgReadAccess 或個別驗證使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而非 SQLite。只有在已指定 --auth Individual 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/CalledApiUrl/description": "要從 Web 應用程式呼叫的 API URL。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 應用程式呼叫是否 Microsoft Graph。只有在已指定 --auth SingleOrg 或 --auth MultiOrg 時,才適用此選項。",
+ "symbols/CalledApiScopes/description": "要求從 Web 應用程式呼叫 API 的範圍。只有在已指定 --auth SingleOrg、--auth MultiOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.cs.json
index 50978f60d7..a581642252 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.cs.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Webová aplikace ASP.NET Core (Model-View-Controller)",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualAuth nebo OrganizationalAuth).",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají Individual, IndividualB2C, SingleOrg ani MultiOrg.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.de.json
index 50978f60d7..65be2bae6f 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.de.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
+ "name": "ASP.NET Core-Web-App (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.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.es.json
index 50978f60d7..526f17ebf5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.es.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
+ "name": "Aplicación web de ASP.NET Core (Modelo-Vista-Controlador)",
+ "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.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.fr.json
index 50978f60d7..48fec90514 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.fr.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Application web ASP.NET Core (modèle-vue-contrôleur)",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualAuth ou OrganizationalAuth est utilisé).",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si Individual, IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.it.json
index 50978f60d7..04312f0de2 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.it.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "App Web ASP.NET Core (Model-View-Controller)",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualAuth o OrganizationalAuth).",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se Individual, IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ja.json
index 50978f60d7..cec8472472 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ja.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web アプリ (Model-View-Controller)",
+ "description": "ASP.NET Core MVC のサンプル ビューとコントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは RESTful HTTP サービスでも使用できます。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualAuth または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、Individual、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ko.json
index 50978f60d7..4692fb8f70 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ko.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 웹앱(Model-View-Controller)",
+ "description": "예제 ASP.NET Core MVC 뷰 및 컨트롤러를 사용하여 ASP.NET Core 애플리케이션을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 RESTful HTTP 서비스에도 사용할 수 있습니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualAuth 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 Individual, IndividualB2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pl.json
index 50978f60d7..ff40f7d63c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pl.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
+ "name": "Aplikacja internetowa ASP.NET Core (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.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
"symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
"symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json
index 50978f60d7..a0fad98496 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Aplicativo Web do ASP.NET Core (Model-View-Controller)",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualAuth ou OrganizationalAuth for usado).",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção se aplica somente se Individual, IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ru.json
index 50978f60d7..8d3fc51827 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.ru.json
@@ -1,16 +1,16 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Веб-приложение ASP.NET Core (модель-представление-контроллер)",
+ "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом представлений MVC и контроллеров ASP.NET Core. Этот шаблон можно также использовать для служб HTTP RESTful.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualAuth или OrganizationalAuth no-https игнорируется).",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются Individual, IndividualB2C, SingleOrg или MultiOrg.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.tr.json
index 50978f60d7..6fca7b1466 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.tr.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web Uygulaması (Model-Görünüm-Denetleyici)",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualAuth veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca Bireysel, IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json
index 50978f60d7..968c06971d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web 应用(模型-视图-控制器)",
+ "description": "用于创建包含示例 ASP.NET Core MVC 视图和控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 RESTful HTTP 服务。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualAuth 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 Individual、IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json
index 50978f60d7..84a18792ad 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/StarterWeb-FSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web App (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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web 應用程式 (Model-View-Controller)",
+ "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 ASP.NET Core MVC 的檢視及控制器範例。此範本也可用於 RESTful HTTP 服務。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualAuth 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 Individual、IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ 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/strings.json
index 746e19f9fc..95d2cae505 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "Webové rozhraní API pro ASP.NET Core",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "Povolit podporu _OpenAPI",
"parameter.DisableOpenAPI.description": "Povolení podpory OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Používání kontrolérů (pokud chcete používat minimální rozhraní API, zrušte zaškrtnutí)",
- "parameter.UseMinimalAPIs.description": "Určuje, jestli se místo kontrolérů mají používat minimální rozhraní API."
+ "parameter.UseMinimalAPIs.description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main."
}
} \ 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/strings.json
index 27d30199bc..c973641c27 100644
--- 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/strings.json
@@ -1,11 +1,11 @@
-{
+{
"version": "1.0.0.0",
"strings": {
- "name": "ASP.NET Core-Web-API",
+ "name": "ASP.NET Core Web 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.",
"parameter.DisableOpenAPI.name": "_OpenAPI-Unterstützung aktivieren",
"parameter.DisableOpenAPI.description": "Aktiviert OpenAPI-Unterstützung (Swagger)",
"parameter.UseMinimalAPIs.name": "Controller verwenden (deaktivieren, um minimale APIs zu verwenden)",
- "parameter.UseMinimalAPIs.description": "Gibt an, ob minimale APIs anstelle von Controllern verwendet werden sollen."
+ "parameter.UseMinimalAPIs.description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll."
}
} \ 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
index a81d06e5c8..b6470d9101 100644
--- 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
@@ -2,6 +2,10 @@
"version": "1.0.0.0",
"strings": {
"name": "ASP.NET Core Web 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."
+ "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.",
+ "parameter.DisableOpenAPI.name": "Enable _OpenAPI support",
+ "parameter.DisableOpenAPI.description": "Enables OpenAPI (Swagger) support",
+ "parameter.UseMinimalAPIs.name": "Use controllers (uncheck to use minimal APIs)",
+ "parameter.UseMinimalAPIs.description": "Whether to generate an explicit Program class and Main method instead of top-level statements."
}
-} \ 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/strings.json
index 7967b75e05..43cbf54e50 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "ASP.NET Core Web API",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "Habilitar compatibilidad con _OpenAPI",
"parameter.DisableOpenAPI.description": "Habilitar la compatibilidad con OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Usar controladores (desactivar para usar API mínimas)",
- "parameter.UseMinimalAPIs.description": "Indica si se deben usar API minimas en lugar de controladores."
+ "parameter.UseMinimalAPIs.description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior."
}
} \ 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/strings.json
index fdb68ea369..d5886618c2 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "API web ASP.NET Core",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "Activer la prise en charge d'_OpenAPI",
"parameter.DisableOpenAPI.description": "Active la prise en charge d'OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Utiliser des contrôleurs (décocher pour utiliser un minimum d'API)",
- "parameter.UseMinimalAPIs.description": "S'il faut utiliser des API minimales au lieu de contrôleurs."
+ "parameter.UseMinimalAPIs.description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur."
}
} \ 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/strings.json
index 9945ffaec5..849cf1791f 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "API Web ASP.NET Core",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "Abilita supporto _OpenAPI",
"parameter.DisableOpenAPI.description": "Abilita supporto OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Usa i controller (deseleziona per usare il numero minimo di API)",
- "parameter.UseMinimalAPIs.description": "Indica se usare le API minimal invece dei controller."
+ "parameter.UseMinimalAPIs.description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello."
}
} \ 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/strings.json
index f399c2bffe..b2fa2e055b 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "ASP.NET Core Web API",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "OpenAPI サポートを有効にする(_O)",
"parameter.DisableOpenAPI.description": "OpenAPI (Swagger) サポートを有効にする",
"parameter.UseMinimalAPIs.name": "コントローラーを使用する (最小限の API を使用する場合はオフにします)",
- "parameter.UseMinimalAPIs.description": "コントローラーの代わりに最小限の API を使用するかどうか。"
+ "parameter.UseMinimalAPIs.description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。"
}
} \ 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/strings.json
index 3c9bfeaf58..4da41cdddc 100644
--- 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/strings.json
@@ -1,11 +1,11 @@
-{
+{
"version": "1.0.0.0",
"strings": {
- "name": "ASP.NET Core Web API",
+ "name": "ASP.NET Core 웹 API",
"description": "RESTful HTTP 서비스용 예제 컨트롤러를 사용하여 ASP.NET Core 애플리케이션을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 ASP.NET Core MVC 뷰 및 컨트롤러에도 사용할 수 있습니다.",
"parameter.DisableOpenAPI.name": "OpenAPI 지원 사용(_O)",
"parameter.DisableOpenAPI.description": "OpenAPI(Swagger) 지원 사용",
"parameter.UseMinimalAPIs.name": "컨트롤러 사용(최소 API 사용 선택 취소)",
- "parameter.UseMinimalAPIs.description": "컨트롤러 대신 최소 API를 사용할지 여부"
+ "parameter.UseMinimalAPIs.description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다."
}
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.cs.json
index f82adc667d..fe73f3e678 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Webové rozhraní API pro ASP.NET Core",
+ "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.",
+ "symbols/auth/choices/None/description": "Bez ověřování",
+ "symbols/auth/choices/IndividualB2C/description": "Ověřování Individual pomocí Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Ověřování organizace pro jednoho tenanta",
+ "symbols/auth/choices/Windows/description": "Integrované ověřování Windows",
+ "symbols/auth/description": "Typ ověřování, který se má použít",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C, ke které se chcete připojit (používá se s ověřováním IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID zásad přihlašování a registrace pro tento projekt (používá se s ověřováním IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory, ke které se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/ClientId/description": "ID klienta pro tento projekt (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/Domain/description": "Doména pro tenanta adresáře (používá se s ověřováním SingleOrg nebo IndividualB2C).",
+ "symbols/DefaultScope/description": "Rozsah rozhraní API, který musí klient požádat o zřízení přístupového tokenu. (použijte s IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "TenantId adresáře, ke kterému se chcete připojit (používá se s ověřováním SingleOrg).",
+ "symbols/OrgReadAccess/description": "Určuje, jestli se této aplikaci povolí přístup ke čtení adresáře (platí jenom pro ověřování SingleOrg).",
+ "symbols/UserSecretsId/description": "ID, které se má použít pro tajné kódy (používá se s ověřováním OrgReadAccess nebo Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má ve vygenerované šabloně vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json. Tato možnost se dá použít jenom v případě, že se nepoužije parametr no-https (no-https se bude ignorovat, pokud se použije IndividualB2C nebo OrganizationalAuth).",
+ "symbols/NoHttps/description": "Určuje, jestli se má protokol HTTPS vypnout. Tato možnost platí jenom v případě, že se pro --auth nepoužívají IndividualB2C, SingleOrg ani MultiOrg.",
+ "symbols/UseLocalDB/description": "Určuje, jestli se má použít LocalDB namísto SQLite. Tato možnost platí jenom v případě, že je zadáno --auth Individual nebo --auth IndividualB2C.",
+ "symbols/UseMinimalAPIs/description": "Určuje, jestli se místo kontrolérů mají používat minimální rozhraní API.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/CalledApiUrl/description": "Adresa URL rozhraní API, která se má volat z webové aplikace. Tato možnost platí jenom v případě, že je zadáno --auth SingleOrg nebo --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Určuje, jestli webová aplikace volá Microsoft Graph. Tato možnost platí pouze v případě, že je zadáno --auth SingleOrg.",
+ "symbols/CalledApiScopes/description": "Obory, které se mají požádat o volání rozhraní API z webové aplikace Tato možnost platí jenom v případě, že je zadaná možnost --auth SingleOrg nebo --auth IndividualB2C.",
+ "symbols/DisableOpenAPI/description": "Zakázání podpory OpenAPI (Swagger)",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.de.json
index f82adc667d..d64c011f32 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
+ "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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
"symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
@@ -18,21 +18,21 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
"symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
"symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.es.json
index f82adc667d..5d91f7cd67 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
+ "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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
"symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
@@ -18,21 +18,21 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
"symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
"symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.fr.json
index f82adc667d..25284e66b1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "API web ASP.NET Core",
+ "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.",
+ "symbols/auth/choices/None/description": "Aucune authentification",
+ "symbols/auth/choices/IndividualB2C/description": "Authentification individuelle avec Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Authentification organisationnelle pour un seul locataire",
+ "symbols/auth/choices/Windows/description": "Authentification Windows",
+ "symbols/auth/description": "Type d’authentification à utiliser",
+ "symbols/AAdB2CInstance/description": "Instance Azure Active Directory B2C à laquelle se connecter (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID de stratégie de connexion et d’inscription pour ce projet (à utiliser avec l’authentification IndividualB2C).",
+ "symbols/AADInstance/description": "Instance Azure Active Directory à laquelle se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/ClientId/description": "ID client de ce projet (utilisé avec SingleOrg ou l’authentification IndividualB2C).",
+ "symbols/Domain/description": "Domaine du locataire d’annuaire (utilisé avec l’authentification SingleOrg ou IndividualB2C).",
+ "symbols/DefaultScope/description": "Étendue d’API dont le client a besoin pour configurer un jeton d’accès. (à utiliser avec IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "ID TenantId du répertoire auquel se connecter (à utiliser avec l’authentification SingleOrg).",
+ "symbols/OrgReadAccess/description": "Indique si cette application doit ou non autoriser l’accès en lecture au répertoire (s’applique uniquement à l’authentification SingleOrg).",
+ "symbols/UserSecretsId/description": "ID à utiliser pour les secrets (à utiliser avec OrgReadAccess ou l’authentification individuelle).",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json dans le modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https est ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json. Cette option s’applique uniquement lorsque le paramètre no-https n’est pas utilisé (no-https sera ignoré si IndividualB2C ou OrganizationalAuth est utilisé).",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS. Cette option s’applique uniquement si IndividualB2C, SingleOrg ou MultiOrg ne sont pas utilisés pour --auth.",
+ "symbols/UseLocalDB/description": "Indique s’il faut utiliser localDB au lieu de SQLite. Cette option s’applique uniquement si --auth Individual ou --auth IndividualB2C est spécifié.",
+ "symbols/UseMinimalAPIs/description": "Indique s’il faut utiliser des API minimales au lieu de contrôleurs.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/CalledApiUrl/description": "URL de l’API à appeler à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/CallsMicrosoftGraph/description": "Spécifie si l’application web appelle Microsoft Graph. Cette option s’applique uniquement si --auth SingleOrg est spécifié.",
+ "symbols/CalledApiScopes/description": "Étendues pour demander à appeler l’API à partir de l’application web. Cette option s’applique uniquement si --auth SingleOrg ou --auth IndividualB2C est spécifié.",
+ "symbols/DisableOpenAPI/description": "Désactiver la prise en charge d’OpenAPI (Swagger)",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.it.json
index f82adc667d..42023fa66e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "API Web ASP.NET Core",
+ "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.",
+ "symbols/auth/choices/None/description": "Nessuna autenticazione",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticazione singola con Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticazione organizzativa per un singolo tenant",
+ "symbols/auth/choices/Windows/description": "Autenticazione di Windows",
+ "symbols/auth/description": "Tipo di autenticazione da usare.",
+ "symbols/AAdB2CInstance/description": "Istanza di Azure Active Directory B2C a cui connettersi (usare con l'autenticazione IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "ID dei criteri di accesso e iscrizione per questo progetto (usare con l'autenticazione IndividualB2C).",
+ "symbols/AADInstance/description": "Istanza di Azure Active Directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/ClientId/description": "ID client per questo progetto (usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/Domain/description": "Il dominio per il tenant della directory (da usare con l'autenticazione SingleOrg o IndividualB2C).",
+ "symbols/DefaultScope/description": "Ambito API che il client deve richiedere per effettuare il provisioning di un token di accesso (usare con IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "ID TenantId della directory a cui connettersi (usare con l'autenticazione SingleOrg).",
+ "symbols/OrgReadAccess/description": "Indica se consentire o meno a questa applicazione l'accesso in lettura alla directory (si applica solo all’autenticazione SingleOrg).",
+ "symbols/UserSecretsId/description": "ID da usare per i segreti (usare con OrgReadAccess o l'autenticazione singola).",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si utilizza IndividualB2C o OrganizationalAuth).",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json. Questa opzione è applicabile solo quando il parametro no-https non viene usato (no-https verrà ignorato se si usa IndividualB2C o OrganizationalAuth).",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS. Questa opzione si applica solo se IndividualB2C, SingleOrg o MultiOrg non vengono usati per --auth.",
+ "symbols/UseLocalDB/description": "Indica se usare LocalDB invece di SQLite. Questa opzione si applica solo se è specificato --auth Individual o --auth IndividualB2C.",
+ "symbols/UseMinimalAPIs/description": "Indica se usare API minime anziché controller.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/CalledApiUrl/description": "URL dell'API da chiamare dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg o --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Specifica se l'app Web chiama Microsoft Graph. Questa opzione si applica solo se è specificato --auth SingleOrg.",
+ "symbols/CalledApiScopes/description": "Ambiti per richiedere di chiamare l'API dall'app Web. Questa opzione si applica solo se è specificato --auth SingleOrg o --auth IndividualB2C.",
+ "symbols/DisableOpenAPI/description": "Disabilita il supporto di OpenAPI (Swagger)",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ja.json
index f82adc667d..8a86da87c6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "RESTful HTTP サービスのサンプル コントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは ASP.NET Core MVC のビューとコントローラーでも使用できます。",
+ "symbols/auth/choices/None/description": "認証なし",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C を使用した個別の認証",
+ "symbols/auth/choices/SingleOrg/description": "単一テナントの組織認証",
+ "symbols/auth/choices/Windows/description": "Windows 認証",
+ "symbols/auth/description": "使用する認証の種類",
+ "symbols/AAdB2CInstance/description": "接続先の Azure Active Directory B2C インスタンス (IndividualB2C 認証で使用)。",
+ "symbols/SignUpSignInPolicyId/description": "このプロジェクトのサインインおよびサインアップのポリシー ID (IndividualB2C 認証で使用)。",
+ "symbols/AADInstance/description": "接続先の Azure Active Directory インスタンス (SingleOrg 認証で使用)。",
+ "symbols/ClientId/description": "このプロジェクトのクライアント ID (IndividualB2C または IndividualB2C 認証で使用)。",
+ "symbols/Domain/description": "ディレクトリ テナントのドメイン (SingleOrg または IndividualB2C 認証で使用)。",
+ "symbols/DefaultScope/description": "アクセス トークンのプロビジョニングするためにクライアントが要求する必要がある API スコープ。(IndividualB2C、SingleOrg で使用)。",
+ "symbols/TenantId/description": "接続先のディレクトリの TenantId ID (SingleOrg 認証で使用)。",
+ "symbols/OrgReadAccess/description": "このアプリケーションにディレクトリへの読み取りアクセスを許可するかどうか (SingleOrg 認証にのみ適用されます)。",
+ "symbols/UserSecretsId/description": "シークレットで使用する ID (OrgReadAccess または個別の認証で使用)。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートで launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json で HTTPS エンドポイントに使用するポート番号。このオプションは、HTTPS 以外のパラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、HTTPS 以外は無視されます)。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json で IIS Express HTTPS エンドポイントに使用するポート番号。このオプションは、no-https パラメーターが使用されていない場合にのみ適用されます (IndividualB2C または OrganizationalAuth が使用されている場合は、no-https は無視されます)。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。このオプションは、IndividualB2C、SingleOrg、または MultiOrg が --auth に使用されていない場合にのみ適用されます。",
+ "symbols/UseLocalDB/description": "SQLite の代わりに LocalDB を使用するかどうか。このオプションは、--auth Individual または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/UseMinimalAPIs/description": "コントローラーの代わりに最小限の API を使用するかどうか。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/CalledApiUrl/description": "Web アプリから呼び出す API の URL。このオプションは、--auth SingleOrg または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/CallsMicrosoftGraph/description": "Web アプリが Microsoft Graph を呼び出すかどうかを指定します。このオプションは、--auth SingleOrg が指定されている場合にのみ適用されます。",
+ "symbols/CalledApiScopes/description": "Web アプリから API を呼び出す要求へのスコープ。このオプションは、--auth SingleOrg または --auth IndividualB2C が指定されている場合にのみ適用されます。",
+ "symbols/DisableOpenAPI/description": "OpenAPI (Swagger) サポートを無効にする",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ko.json
index f82adc667d..12691e9f5c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 웹 API",
+ "description": "RESTful HTTP 서비스용 예제 컨트롤러를 사용하여 ASP.NET Core 애플리케이션을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 ASP.NET Core MVC 뷰 및 컨트롤러에도 사용할 수 있습니다.",
+ "symbols/auth/choices/None/description": "인증 없음",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C를 사용한 개별 인증",
+ "symbols/auth/choices/SingleOrg/description": "단일 테넌트에 대한 조직 인증",
+ "symbols/auth/choices/Windows/description": "Windows 인증",
+ "symbols/auth/description": "사용할 인증 유형",
+ "symbols/AAdB2CInstance/description": "연결할 Azure Active Directory B2C 인스턴스(IndividualB2C 인증과 함께 사용).",
+ "symbols/SignUpSignInPolicyId/description": "이 프로젝트의 로그인 및 등록 정책 ID입니다(IndividualB2C 인증과 함께 사용).",
+ "symbols/AADInstance/description": "연결할 Azure Active Directory 인스턴스입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/ClientId/description": "이 프로젝트의 클라이언트 ID입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/Domain/description": "디렉터리 테넌트의 도메인입니다(SingleOrg 또는 IndividualB2C 인증과 함께 사용).",
+ "symbols/DefaultScope/description": "클라이언트가 액세스 토큰을 프로비전하기 위해 요청해야 하는 API 범위입니다. (IndividualB2C, SingleOrg와 함께 사용).",
+ "symbols/TenantId/description": "연결할 디렉터리의 TenantId ID입니다(SingleOrg 인증과 함께 사용).",
+ "symbols/OrgReadAccess/description": "이 애플리케이션이 디렉터리에 대한 읽기 액세스를 허용할지 여부(SingleOrg 인증에만 적용됨).",
+ "symbols/UserSecretsId/description": "비밀에 사용할 ID입니다(OrgReadAccess 또는 개별 인증과 함께 사용).",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express 엔드포인트에 사용할 포트 번호입니다. 이 옵션은 매개 변수 no-https가 사용되지 않은 경우에만 적용됩니다(IndividualB2C 또는 OrganizationalAuth가 사용되는 경우 no-https는 무시됨).",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다. 이 옵션은 개별B2C, SingleOrg 또는 MultiOrg가 --auth에 사용되지 않는 경우에만 적용됩니다.",
+ "symbols/UseLocalDB/description": "SQLite 대신 LocalDB를 사용할지 여부입니다. 이 옵션은 --auth Individual 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/UseMinimalAPIs/description": "컨트롤러 대신 최소 API를 사용할지 여부입니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/CalledApiUrl/description": "웹앱에서 호출할 API의 URL입니다. 이 옵션은 --auth SingleOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/CallsMicrosoftGraph/description": "웹앱이 Microsoft Graph를 호출하는지 여부를 지정합니다. 이 옵션은 --auth SingleOrg가 지정된 경우에만 적용됩니다.",
+ "symbols/CalledApiScopes/description": "웹앱에서 API 호출을 요청할 범위입니다. 이 옵션은 --auth SingleOrg 또는 --auth IndividualB2C가 지정된 경우에만 적용됩니다.",
+ "symbols/DisableOpenAPI/description": "OpenAPI(Swagger) 지원 비활성화",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pl.json
index f82adc667d..ab17e97f45 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,7 +1,7 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
+ "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.",
"symbols/auth/choices/None/description": "No authentication",
"symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
"symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
@@ -18,21 +18,21 @@
"symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualB2C or OrganizationalAuth is used).",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
"symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
"symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
"symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
"symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
"symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
"symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pt-BR.json
index f82adc667d..6110c62db5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "API Web do ASP.NET Core",
+ "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.",
+ "symbols/auth/choices/None/description": "Sem autenticação",
+ "symbols/auth/choices/IndividualB2C/description": "Autenticação individual com Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Autenticação organizacional para um único locatário",
+ "symbols/auth/choices/Windows/description": "autenticação do Windows",
+ "symbols/auth/description": "O tipo de autenticação a ser usado",
+ "symbols/AAdB2CInstance/description": "A instância do Azure Active Directory B2C à qual se conectar (use com autenticação IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "O ID da política de login e inscrição para este projeto (use com autenticação IndividualB2C).",
+ "symbols/AADInstance/description": "A instância do Azure Active Directory à qual se conectar (use com autenticação SingleOrg).",
+ "symbols/ClientId/description": "O ID do cliente para este projeto (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/Domain/description": "O domínio para o locatário do diretório (use com autenticação SingleOrg ou IndividualB2C).",
+ "symbols/DefaultScope/description": "O escopo da API que o cliente precisa solicitar para provisionar um token de acesso. (use com IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "O ID TenantId do diretório ao qual se conectar (use com autenticação SingleOrg).",
+ "symbols/OrgReadAccess/description": "Se deve ou não permitir que este aplicativo tenha acesso de leitura ao diretório (aplica-se apenas à autenticação SingleOrg).",
+ "symbols/UserSecretsId/description": "O ID a ser usado para segredos (use com OrgReadAccess ou Autenticação individual).",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json no modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json. Essa opção só é aplicável quando o parâmetro no-https não é usado (no-https será ignorado se IndividualB2C ou OrganizationalAuth for usado).",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado. Essa opção só se aplica se IndividualB2C, SingleOrg ou MultiOrg não forem usados para --auth.",
+ "symbols/UseLocalDB/description": "Se deve usar LocalDB em vez de SQLite. Esta opção só se aplica se --auth Individual ou --auth IndividualB2C for especificado.",
+ "symbols/UseMinimalAPIs/description": "Se deve usar APIs mínimas em vez de controladores.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/CalledApiUrl/description": "URL da API para chamar do aplicativo Web. Essa opção se aplica somente se --auth SingleOrg ou --auth IndividualB2C for especificado.",
+ "symbols/CallsMicrosoftGraph/description": "Especifica se o aplicativo Web chama o Microsoft Graph. Esta opção só se aplica se --auth SingleOrg for especificado.",
+ "symbols/CalledApiScopes/description": "Escopos a serem solicitados para chamar a API do aplicativo Web. Essa opção se aplica somente se --auth SingleOrg ou --auth IndividualB2C for especificado.",
+ "symbols/DisableOpenAPI/description": "Desabilitar suporte a OpenAPI (Swagger)",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ru.json
index f82adc667d..514d679ce2 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,38 +1,38 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Веб-API ASP.NET Core",
+ "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом контроллера для службы HTTP RESTful. Этот шаблон можно также использовать для представлений MVC и контроллеров ASP.NET Core.",
+ "symbols/auth/choices/None/description": "Без проверки подлинности",
+ "symbols/auth/choices/IndividualB2C/description": "Индивидуальная проверка подлинности в Azure AD B2C",
+ "symbols/auth/choices/SingleOrg/description": "Проверка подлинности в организации для одного клиента",
+ "symbols/auth/choices/Windows/description": "Проверка подлинности Windows",
+ "symbols/auth/description": "Тип используемой проверки подлинности",
+ "symbols/AAdB2CInstance/description": "Экземпляр Azure Active Directory B2C, к которому нужно подключиться (используется с проверкой подлинности IndividualB2C).",
+ "symbols/SignUpSignInPolicyId/description": "Идентификатор политики входа и регистрации для этого проекта (используется с проверкой подлинности IndividualB2C).",
+ "symbols/AADInstance/description": "Экземпляр Azure Active Directory, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/ClientId/description": "Идентификатор клиента для этого проекта (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/Domain/description": "Домен для клиента каталога (используется с проверкой подлинности SingleOrg или IndividualB2C).",
+ "symbols/DefaultScope/description": "Область API, необходимая клиенту для запроса на подготовку маркера доступа (используется с IndividualB2C, SingleOrg).",
+ "symbols/TenantId/description": "Идентификатор TenantId каталога, к которому нужно подключиться (используется с проверкой подлинности SingleOrg).",
+ "symbols/OrgReadAccess/description": "Следует ли предоставлять этому приложению доступ на чтение к каталогу (применяется только к проверке подлинности SingleOrg).",
+ "symbols/UserSecretsId/description": "Идентификатор, используемый для секретов (используется с проверкой подлинности OrgReadAccess или Individual).",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json. Этот параметр применим только в том случае, если no-https не используется (при использовании IndividualB2C или OrganizationalAuth no-https игнорируется).",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS. Этот параметр применяется, только если для --auth не используются IndividualB2C, SingleOrg или MultiOrg.",
+ "symbols/UseLocalDB/description": "Следует ли использовать LocalDB вместо SQLite. Этот параметр применяется, только если указывается --auth Individual или --auth IndividualB2C.",
+ "symbols/UseMinimalAPIs/description": "Следует ли использовать минимальные API вместо контроллеров.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/CalledApiUrl/description": "URL-адрес API для вызова из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg или --auth IndividualB2C.",
+ "symbols/CallsMicrosoftGraph/description": "Указывает, вызывает ли веб-приложение Microsoft Graph. Этот параметр применяется, только если указывается --auth SingleOrg.",
+ "symbols/CalledApiScopes/description": "Области для запроса вызова API из веб-приложения. Этот параметр применяется, только если указывается --auth SingleOrg или --auth IndividualB2C.",
+ "symbols/DisableOpenAPI/description": "Отключение поддержки OpenAPI (Swagger)",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.tr.json
index f82adc667d..49d5afea1a 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web API'si",
+ "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.",
+ "symbols/auth/choices/None/description": "Kimlik doğrulaması yok",
+ "symbols/auth/choices/IndividualB2C/description": "Azure AD B2C ile bireysel kimlik doğrulaması",
+ "symbols/auth/choices/SingleOrg/description": "Tek bir kiracı için kuruluş kimlik doğrulaması",
+ "symbols/auth/choices/Windows/description": "Windows kimlik doğrulaması",
+ "symbols/auth/description": "Kullanılacak kimlik doğrulaması türü",
+ "symbols/AAdB2CInstance/description": "Bağlanılacak Azure Active Directory B2C örneği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/SignUpSignInPolicyId/description": "Bu proje için oturum açma ve kaydolma ilkesi kimliği (IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/AADInstance/description": "Bağlanılacak Azure Active Directory örneği (SingleOrg kimlik doğrulaması ile kullanın).",
+ "symbols/ClientId/description": "Bu proje için İstemci Kimliği (SingleOrg veya IndividualB2C kimlik doğrulaması ile kullanın).",
+ "symbols/Domain/description": "Dizin kiracısı için etki alanı (SingleOrg veya IndividualB2C kimlik doğrulamasıyla kullanın).",
+ "symbols/DefaultScope/description": "İstemcinin erişim belirteci sağlamak amacıyla istekte bulunmak için ihtiyacı olan API kapsamı. (IndividualB2C, SingleOrg ile kullanın).",
+ "symbols/TenantId/description": "Bağlanılacak dizinin TenantId kimliği (SingleOrg kimlik doğrulamasıyla kullanın).",
+ "symbols/OrgReadAccess/description": "Bu uygulamanın dizin okuma erişimine izin verilip verilmeyeceği (yalnızca SingleOrg kimlik doğrulaması için geçerlidir).",
+ "symbols/UserSecretsId/description": "Gizli diziler için kullanılan kimlik (OrgReadAccess veya Bireysel kimlik doğrulaması ile kullanın).",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablonda dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası. Bu seçenek yalnızca no-https parametresi kullanılmazsa uygulanabilir (IndividualB2C veya OrganizationalAuth kullanılırsa no-https yoksayılır).",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı. Bu seçenek yalnızca IndividualB2C, SingleOrg veya MultiOrg -- auth için kullanılmazsa geçerlidir.",
+ "symbols/UseLocalDB/description": "SQLite yerine LocalDB'nin kullanılıp kullanılmayacağı. Bu seçenek yalnızca --auth Individual veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/UseMinimalAPIs/description": "Denetleyiciler yerine minimal API’lerin kullanılıp kullanılmayacağı.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/CalledApiUrl/description": "Web uygulamasından çağrılan API URL'si. Bu seçenek yalnızca --auth SingleOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/CallsMicrosoftGraph/description": "Web uygulamasının Microsoft Graph çağırıp çağırmadığını belirtir. Bu seçenek yalnızca --auth SingleOrg belirtilirse geçerlidir.",
+ "symbols/CalledApiScopes/description": "Web uygulamasından API çağırma istek kapsamları. Bu seçenek yalnızca --auth SingleOrg veya --auth IndividualB2C belirtilirse geçerlidir.",
+ "symbols/DisableOpenAPI/description": "OpenAPI (Swagger) desteğini devre dışı bırak",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index f82adc667d..4f2f2310b4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "用于创建包含 RESTful HTTP 服务示例控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 ASP.NET Core MVC 视图和控制器。",
+ "symbols/auth/choices/None/description": "无身份验证",
+ "symbols/auth/choices/IndividualB2C/description": "使用 Azure AD B2C 进行个人身份验证",
+ "symbols/auth/choices/SingleOrg/description": "单个租户的组织身份验证",
+ "symbols/auth/choices/Windows/description": "Windows 身份验证",
+ "symbols/auth/description": "要使用的身份验证类型",
+ "symbols/AAdB2CInstance/description": "要连接到的 Azure Active Directory B2C 实例(与 IndividualB2C 身份验证一起使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此项目的登录和注册策略 ID (与 IndividualB2C 身份验证一起使用)。",
+ "symbols/AADInstance/description": "要连接到的 Azure Active Directory 实例(与 SingleOrg 身份验证一起使用)。",
+ "symbols/ClientId/description": "此项目的客户端 ID (与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/Domain/description": "目录租户的域(与 SingleOrg 或 IndividualB2C 身份验证一起使用)。",
+ "symbols/DefaultScope/description": "客户端预配访问令牌需要请求的 API 范围。(与 IndividualB2C、SingleOrg 一起使用)。",
+ "symbols/TenantId/description": "要连接到的目录的 TenantId ID (与 SingleOrg 身份验证一起使用)。",
+ "symbols/OrgReadAccess/description": "是否允许此应用程序对目录进行读取访问(仅适用于 SingleOrg 身份验证)。",
+ "symbols/UserSecretsId/description": "用于机密的 ID (与 OrgReadAccess 或个人身份验证一起使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否在生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。仅当不使用参数 no-https 时,此选项才适用(如果使用 IndividualB2C 或 OrganizationalAuth,则将忽略 no-https)。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。仅当 IndividualB2C、SingleOrg 或 MultiOrg 不用于 --auth 时,此选项才适用。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而不是 SQLite。仅当指定了 --auth Individual 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/UseMinimalAPIs/description": "是否使用最小 API 而不是控制器。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/CalledApiUrl/description": "要从 Web 应用调用的 API 的 URL。仅当指定了 --auth SingleOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 应用是否调用 Microsoft Graph。仅当指定了 --auth SingleOrg 时,此选项才适用。",
+ "symbols/CalledApiScopes/description": "请求从 Web 应用调用 API 的范围。仅当指定了 --auth SingleOrg 或 --auth IndividualB2C 时,此选项才适用。",
+ "symbols/DisableOpenAPI/description": "禁用 OpenAI (Swagger)支持",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index f82adc667d..dbace4046a 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,38 +1,38 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
- "symbols/auth/choices/None/description": "No authentication",
- "symbols/auth/choices/IndividualB2C/description": "Individual authentication with Azure AD B2C",
- "symbols/auth/choices/SingleOrg/description": "Organizational authentication for a single tenant",
- "symbols/auth/choices/Windows/description": "Windows authentication",
- "symbols/auth/description": "The type of authentication to use",
- "symbols/AAdB2CInstance/description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth).",
- "symbols/SignUpSignInPolicyId/description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth).",
- "symbols/AADInstance/description": "The Azure Active Directory instance to connect to (use with SingleOrg auth).",
- "symbols/ClientId/description": "The Client ID for this project (use with SingleOrg or IndividualB2C auth).",
- "symbols/Domain/description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth).",
- "symbols/DefaultScope/description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg).",
- "symbols/TenantId/description": "The TenantId ID of the directory to connect to (use with SingleOrg auth).",
- "symbols/OrgReadAccess/description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg auth).",
- "symbols/UserSecretsId/description": "The ID to use for secrets (use with OrgReadAccess or Individual auth).",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json in the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "symbols/UseLocalDB/description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified.",
- "symbols/UseMinimalAPIs/description": "Whether to use minimal APIs instead of controllers.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/CalledApiUrl/description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/CallsMicrosoftGraph/description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg is specified.",
- "symbols/CalledApiScopes/description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg or --auth IndividualB2C is specified.",
- "symbols/DisableOpenAPI/description": "Disable OpenAPI (Swagger) support",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 RESTful HTTP 服務的控制器範例。此範本也可用於 ASP.NET Core MVC 的檢視及控制器。",
+ "symbols/auth/choices/None/description": "沒有驗證",
+ "symbols/auth/choices/IndividualB2C/description": "具有 Azure AD B2C 的個別驗證",
+ "symbols/auth/choices/SingleOrg/description": "單一租用戶的組織驗證",
+ "symbols/auth/choices/Windows/description": "Windows 驗證",
+ "symbols/auth/description": "要使用的驗證類型。",
+ "symbols/AAdB2CInstance/description": "要連線的 Azure Active Directory B2C 執行個體 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/SignUpSignInPolicyId/description": "此專案的登入和註冊原則識別碼 (搭配 IndividualB2C 驗證使用)。",
+ "symbols/AADInstance/description": "要連線到的 Azure Active Directory 執行個體 (搭配 SingleOrg 驗證使用)。",
+ "symbols/ClientId/description": "此專案的用戶端識別碼 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/Domain/description": "目錄租用戶的網域 (搭配 SingleOrg 或 IndividualB2C 驗證使用)。",
+ "symbols/DefaultScope/description": "用戶端佈建存取權杖所需的 API 範圍。(搭配 IndividualB2C、SingleOrg 使用)。",
+ "symbols/TenantId/description": "要連線到目錄的 TenantId 識別碼 (搭配 SingleOrg 驗證使用)。",
+ "symbols/OrgReadAccess/description": "是否要允許此應用程式讀取存取目錄 (只適用於 SingleOrg 驗證)。",
+ "symbols/UserSecretsId/description": "用於祕密的識別碼 (搭配 OrgReadAccess 或個別驗證使用)。",
+ "symbols/ExcludeLaunchSettings/description": "是否要在產生的範本中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。只有在未使用參數 no-https 時,才適用用此選項 (如果使用 IndividualB2C 或 OrganizationalAuth,則會忽略 no-https)。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。只有當 IndividualB2C、SingleOrg 或 MultiOrg 未用於 --auth 時,才適用此選項。",
+ "symbols/UseLocalDB/description": "是否使用 LocalDB 而非 SQLite。只有在已指定 --auth Individual 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/UseMinimalAPIs/description": "是否要使用最小 API 而不是控制器。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/CalledApiUrl/description": "要從 Web 應用程式呼叫的 API URL。只有在已指定 --auth SingleOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/CallsMicrosoftGraph/description": "指定 Web 應用程式呼叫是否 Microsoft Graph。只有在已指定 --auth SingleOrg 時,才適用此選項。",
+ "symbols/CalledApiScopes/description": "要求從 Web 應用程式呼叫 API 的範圍。只有在已指定 --auth SingleOrg 或 --auth IndividualB2C 時,才適用此選項。",
+ "symbols/DisableOpenAPI/description": "停用 OpenAPI (Swagger) 支援",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ 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/strings.json
index b343560037..fdf26f549b 100644
--- 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/strings.json
@@ -1,11 +1,11 @@
-{
+{
"version": "1.0.0.0",
"strings": {
- "name": "Internetowy interfejs API platformy ASP.NET Core",
+ "name": "ASP.NET Core Web 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.",
"parameter.DisableOpenAPI.name": "Włącz obsługę interfejsu _OpenAPI",
"parameter.DisableOpenAPI.description": "Włącza obsługę interfejsu OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Użyj kontrolerów (usuń zaznaczenie, aby używać minimalnej ilości interfejsów API)",
- "parameter.UseMinimalAPIs.description": "Określa, czy używać minimalnej ilości interfejsów API zamiast kontrolerów."
+ "parameter.UseMinimalAPIs.description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu."
}
} \ 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
index 2c07afece2..67a528e203 100644
--- 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
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "API Web do ASP.NET Core",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "Habilitar o suporte a _OpenAPI",
"parameter.DisableOpenAPI.description": "Habilita o suporte a OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Usar controladores (desmarque para usar APIs mínimas)",
- "parameter.UseMinimalAPIs.description": "Se usar APIs mínimas em vez de controladores."
+ "parameter.UseMinimalAPIs.description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior."
}
} \ 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/strings.json
index bb529502b9..52601f794b 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "Веб-API ASP.NET Core",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "Включить поддержку _OpenAPI",
"parameter.DisableOpenAPI.description": "Включает поддержку OpenAPI (Swagger)",
"parameter.UseMinimalAPIs.name": "Использовать контроллеры (снимите флажок, чтобы использовать минимальные API)",
- "parameter.UseMinimalAPIs.description": "Использование минимальных API вместо контроллеров."
+ "parameter.UseMinimalAPIs.description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня."
}
} \ 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/strings.json
index 8583f13373..55a9e3cf64 100644
--- 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/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "ASP.NET Core Web API'si",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "_OpenAPI desteğini etkinleştir",
"parameter.DisableOpenAPI.description": "OpenAPI (Swagger) desteğini etkinleştirir",
"parameter.UseMinimalAPIs.name": "Denetleyicileri kullan (minimal API’leri kullanmak için onay işaretini kaldırın)",
- "parameter.UseMinimalAPIs.description": "Denetleyiciler yerine minimal API’lerin kullanılıp kullanılmayacağını belirtir."
+ "parameter.UseMinimalAPIs.description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir."
}
} \ 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-Hans/strings.json
index 066bf6c699..50932dbfde 100644
--- 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-Hans/strings.json
@@ -1,11 +1,11 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "ASP.NET Core Web API",
"description": "用于创建包含 RESTful HTTP 服务示例控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 ASP.NET Core MVC 视图和控制器。",
"parameter.DisableOpenAPI.name": "启用 OpenAPI 支持(_O)",
- "parameter.DisableOpenAPI.description": "启用 OpenAPI (Swagger)支持",
+ "parameter.DisableOpenAPI.description": "启用 OpenAI (Swagger)支持",
"parameter.UseMinimalAPIs.name": "使用控制器(取消选中以使用最小 API)",
- "parameter.UseMinimalAPIs.description": "是否使用最小 API 而不是控制器。"
+ "parameter.UseMinimalAPIs.description": "是否生成显式程序类和主方法,而不是顶级语句。"
}
-}
+} \ 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-Hant/strings.json
index b4faea763f..e2f5a6dbb9 100644
--- 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-Hant/strings.json
@@ -1,4 +1,4 @@
-{
+{
"version": "1.0.0.0",
"strings": {
"name": "ASP.NET Core Web API",
@@ -6,6 +6,6 @@
"parameter.DisableOpenAPI.name": "啟用 OpenAPI 支援(_O)",
"parameter.DisableOpenAPI.description": "啟用 OpenAPI (Swagger) 支援",
"parameter.UseMinimalAPIs.name": "使用控制器 (取消勾選以使用最低 API)",
- "parameter.UseMinimalAPIs.description": "是否要使用迷你 API 而不是控制器。"
+ "parameter.UseMinimalAPIs.description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。"
}
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.cs.json
index 10dfdafb04..6136bca8b3 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.cs.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Webové rozhraní API pro ASP.NET Core",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/kestrelHttpPort/description": "Číslo portu, který se má použít pro koncový bod HTTP v souboru launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Číslo portu, který se má použít pro koncový bod HTTPS v souboru launchSettings.json.",
+ "symbols/iisHttpPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTP v souboru launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Číslo portu, který se má použít pro koncový bod IIS Express HTTPS v souboru launchSettings.json.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/NoHttps/description": "Určuje, jestli se má vypnout protokol HTTPS.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.de.json
index 10dfdafb04..30dcbb104a 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.de.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
+ "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.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json.",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.es.json
index 10dfdafb04..670347c07a 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.es.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
+ "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.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json.",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json.",
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.fr.json
index 10dfdafb04..65eab02b60 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.fr.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "API web ASP.NET Core",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/kestrelHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP dans launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS dans launchSettings.json.",
+ "symbols/iisHttpPort/description": "Numéro de port à utiliser pour le point de terminaison HTTP IIS Express dans launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numéro de port à utiliser pour le point de terminaison HTTPS IIS Express dans launchSettings.json.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/NoHttps/description": "Indique s’il faut désactiver HTTPS.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.it.json
index 10dfdafb04..299bf1c0f7 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.it.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "API Web ASP.NET Core",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/kestrelHttpPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Numero di porta da usare per l'endpoint HTTP in launchSettings.json.",
+ "symbols/iisHttpPort/description": "Numero di porta da usare per l'endpoint HTTP IIS Express in launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Numero di porta da usare per l'endpoint HTTPS IIS Express in launchSettings.json.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/NoHttps/description": "Indica se disattivare HTTPS.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ja.json
index 10dfdafb04..3c5e891ae5 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ja.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "RESTful HTTP サービスのサンプル コントローラーで ASP.NET Core アプリケーションを作成するためのプロジェクト テンプレートです。このテンプレートは ASP.NET Core MVC のビューとコントローラーでも使用できます。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json の HTTP エンドポイントに使用するポート番号。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json の HTTPS エンドポイントに使用するポート番号。",
+ "symbols/iisHttpPort/description": "launchSettings.json の IIS Express HTTP エンドポイントに使用するポート番号。",
+ "symbols/iisHttpsPort/description": "launchSettings.json の IIS Express HTTPS エンドポイントに使用するポート番号。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/NoHttps/description": "HTTPS をオフにするかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ko.json
index 10dfdafb04..49b304a0b9 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ko.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core 웹 API",
+ "description": "RESTful HTTP 서비스용 예제 컨트롤러를 사용하여 ASP.NET Core 애플리케이션을 만드는 데 사용되는 프로젝트 템플릿입니다. 이 템플릿은 ASP.NET Core MVC 뷰 및 컨트롤러에도 사용할 수 있습니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json의 HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json의 HTTPS 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpPort/description": "launchSettings.json의 IIS Express HTTP 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/iisHttpsPort/description": "launchSettings.json의 IIS Express HTTPS 엔드포인트에 사용할 포트 번호입니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/NoHttps/description": "HTTPS를 끌지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pl.json
index 10dfdafb04..7222dcc6c8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pl.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
+ "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.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
"symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
+ "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json.",
"symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json.",
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
+ "symbols/NoHttps/description": "Whether to turn off HTTPS.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pt-BR.json
index 10dfdafb04..3d7b28bc53 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "API Web do ASP.NET Core",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/kestrelHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP em launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS em launchSettings.json.",
+ "symbols/iisHttpPort/description": "Número da porta a ser usada para o ponto de extremidade HTTP do IIS Express em launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Número da porta a ser usada para o ponto de extremidade HTTPS do IIS Express em launchSettings.json.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/NoHttps/description": "Se o HTTPS deve ser desativado.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ru.json
index 10dfdafb04..0d7e4203dd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.ru.json
@@ -1,16 +1,16 @@
-{
- "author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+{
+ "author": "Майкрософт",
+ "name": "Веб-API ASP.NET Core",
+ "description": "Шаблон проекта для создания приложения ASP.NET Core с образцом контроллера для службы HTTP RESTful. Этот шаблон можно также использовать для представлений MVC и контроллеров ASP.NET Core.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/kestrelHttpPort/description": "Номер порта, используемый для конечной точки HTTP в launchSettings.json.",
+ "symbols/kestrelHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS в launchSettings.json.",
+ "symbols/iisHttpPort/description": "Номер порта, используемый для конечной точки HTTP IIS Express в launchSettings.json.",
+ "symbols/iisHttpsPort/description": "Номер порта, используемый для конечной точки HTTPS IIS Express в launchSettings.json.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/NoHttps/description": "Следует ли отключить HTTPS.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.tr.json
index 10dfdafb04..617e1d7bf3 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.tr.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
- "name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ASP.NET Core Web API'si",
+ "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.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/kestrelHttpPort/description": "launchSettings.json içinde HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json içinde HTTPS uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpPort/description": "launchSettings.json içinde IIS Express HTTP uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/iisHttpsPort/description": "launchSettings.json içinde IIS Express HTTPS uç noktası için kullanılacak bağlantı noktası numarası.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/NoHttps/description": "HTTPS'nin kapatılıp kapatılmayacağı.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hans.json
index 10dfdafb04..ee0214b37f 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "用于创建包含 RESTful HTTP 服务示例控制器的 ASP.NET Core 应用程序的项目模板。此模板还可以用于 ASP.NET Core MVC 视图和控制器。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "要用于 launchSettings.json 中 HTTP 终结点的端口号。",
+ "symbols/kestrelHttpsPort/description": "要用于 launchSettings.json 中 HTTPS 终结点的端口号。",
+ "symbols/iisHttpPort/description": "要用于 launchSettings.json 中 IIS Express HTTP 终结点的端口号。",
+ "symbols/iisHttpsPort/description": "要用于 launchSettings.json 中 IIS Express HTTPS 终结点的端口号。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/NoHttps/description": "是否禁用 HTTPS。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hant.json
index 10dfdafb04..9b84bb8213 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebApi-FSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,16 +1,16 @@
-{
+{
"author": "Microsoft",
"name": "ASP.NET Core Web 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.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/kestrelHttpPort/description": "Port number to use for the HTTP endpoint in launchSettings.json.",
- "symbols/kestrelHttpsPort/description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/iisHttpPort/description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json.",
- "symbols/iisHttpsPort/description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used).",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/NoHttps/description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "用於建立 ASP.NET Core 應用程式的專案範本,附有 RESTful HTTP 服務的控制器範例。此範本也可用於 ASP.NET Core MVC 的檢視及控制器。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/kestrelHttpPort/description": "launchSettings.json 中 HTTP 端點要使用的連接埠號碼。",
+ "symbols/kestrelHttpsPort/description": "launchSettings.json 中 HTTPS 端點要使用的連接埠號碼。",
+ "symbols/iisHttpPort/description": "launchSettings.json 中 IIS Express HTTP 端點要使用的連接埠號碼。",
+ "symbols/iisHttpsPort/description": "launchSettings.json 中 IIS Express HTTPS 端點要使用的連接埠號碼。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/NoHttps/description": "是否要關閉 HTTPS。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.cs.json
index 23507879a5..3d46491c7d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.cs.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Služba pracovního procesu",
+ "description": "Šablona prázdného projektu pro vytvoření služby Worker Service",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "symbols/UseProgramMain/displayName": "Nepoužívat příkazy nejvyšší úrovně",
+ "symbols/UseProgramMain/description": "Určuje, jestli se má místo příkazů nejvyšší úrovně generovat explicitní třída Program a metoda Main.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.de.json
index 23507879a5..71bf389ae1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.de.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
+ "description": "Eine leere Projektvorlage zum Erstellen eines Workerdiensts.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
+ "symbols/UseProgramMain/displayName": "Keine Anweisungen der obersten Ebene verwenden",
+ "symbols/UseProgramMain/description": "Gibt an, ob anstelle von Anweisungen der obersten Ebene eine explizite Programmklasse und eine Main-Methode generiert werden soll.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.es.json
index 23507879a5..13da740872 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.es.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
+ "description": "Una plantilla de proyecto vacía para crear un servicio Worker.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
+ "symbols/UseProgramMain/displayName": "No usar instrucciones de nivel superior",
+ "symbols/UseProgramMain/description": "Indica si se debe generar una clase Program explícita y un método Main en lugar de instrucciones de nivel superior.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.fr.json
index 23507879a5..a848f1214c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.fr.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Service Worker",
+ "description": "Modèle de projet vide pour la création d'un service Worker.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "symbols/UseProgramMain/displayName": "N’utilisez pas d’instructions de niveau supérieur",
+ "symbols/UseProgramMain/description": "Indique s’il faut générer une classe Programme explicite et une méthode Main au lieu d’instructions de niveau supérieur.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.it.json
index 23507879a5..14d64e2c84 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.it.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Servizio del ruolo di lavoro",
+ "description": "Modello di progetto vuoto per la creazione di un'istanza di Worker Service.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "symbols/UseProgramMain/displayName": "Non usare istruzioni di primo livello",
+ "symbols/UseProgramMain/description": "Indica se generare una classe Program esplicita e un metodo Main anziché istruzioni di primo livello.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ja.json
index 23507879a5..42ac9e867e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ja.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ワーカー サービス",
+ "description": "Worker Service を作成するための空のプロジェクト テンプレート。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "symbols/UseProgramMain/displayName": "最上位レベルのステートメントを使用しない",
+ "symbols/UseProgramMain/description": "最上位レベルのステートメントではなく、明示的な Program クラスと Main メソッドを生成するかどうか。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ko.json
index 23507879a5..986a76de9d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ko.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "작업자 서비스",
+ "description": "Worker Service를 만드는 데 사용하는 빈 프로젝트 템플릿입니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "symbols/UseProgramMain/displayName": "최상위 문 사용 안 함",
+ "symbols/UseProgramMain/description": "최상위 문 대신 명시적 Program 클래스 및 Main 메서드를 생성할지 여부입니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pl.json
index 23507879a5..c5a85c3c7a 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pl.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
+ "description": "Szablon pustego projektu służący do tworzenia usługi procesu roboczego.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
+ "symbols/UseProgramMain/displayName": "Nie używaj instrukcji najwyższego poziomu",
+ "symbols/UseProgramMain/description": "Określa, czy wygenerować jawną klasę Program i metodę Main zamiast instrukcji najwyższego poziomu.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pt-BR.json
index 23507879a5..aa7127a679 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Serviço de Trabalho",
+ "description": "Um modelo de projeto vazio para criar um worker service.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "symbols/UseProgramMain/displayName": "Não usar instruções de nível superior",
+ "symbols/UseProgramMain/description": "Se deve gerar uma classe de Programa explícita e um método principal em vez de instruções de nível superior.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ru.json
index 23507879a5..610d4a26d1 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.ru.json
@@ -1,13 +1,13 @@
-{
- "author": "Microsoft",
+{
+ "author": "Майкрософт",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "Шаблон пустого проекта для создания службы Worker Service.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "symbols/UseProgramMain/displayName": "Не использовать операторы верхнего уровня",
+ "symbols/UseProgramMain/description": "Следует ли создавать явный класс Program и метод Main вместо операторов верхнего уровня.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.tr.json
index 23507879a5..837e4fe273 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.tr.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Çalışan Hizmeti",
+ "description": "Çalışan hizmeti oluşturmaya yönelik boş proje şablonu.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "symbols/UseProgramMain/displayName": "Üst düzey deyimler kullanmayın",
+ "symbols/UseProgramMain/description": "Üst düzey deyimler yerine açık bir Program sınıfı ve Ana yöntem oluşturup oluşturulmayacağını belirtir.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hans.json
index 23507879a5..502425b362 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "辅助角色服务",
+ "description": "用于创建 worker service 的空项目模板。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "symbols/UseProgramMain/displayName": "不使用顶级语句",
+ "symbols/UseProgramMain/description": "是否生成显式程序类和主方法,而不是顶级语句。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hant.json
index 23507879a5..f7426d04f0 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-CSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,13 +1,13 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "symbols/UseProgramMain/displayName": "Use a Program class with a Main method",
- "symbols/UseProgramMain/description": "Whether to generate an explicit Program class and Main method instead of top-level statements.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "背景工作服務",
+ "description": "用於建立 Worker Service 的空白專案範本。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "symbols/UseProgramMain/displayName": "不要使用最上層語句",
+ "symbols/UseProgramMain/description": "是否要產生明確的 Program 類別和 Main 方法,而非最上層語句。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.cs.json
index 018f87d2e8..4f12749510 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.cs.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.cs.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Služba pracovního procesu",
+ "description": "Šablona prázdného projektu pro vytvoření služby Worker Service",
+ "symbols/ExcludeLaunchSettings/description": "Určuje, jestli se má z vygenerované šablony vyloučit soubor launchSettings.json.",
+ "symbols/Framework/description": "Cílová architektura pro projekt",
+ "symbols/Framework/choices/net7.0/description": "Cílový net7.0",
+ "symbols/skipRestore/description": "Pokud se tato možnost zadá, přeskočí automatické obnovení projektu při vytvoření.",
+ "postActions/restore/description": "Obnoví balíčky NuGet vyžadované tímto projektem.",
+ "postActions/restore/manualInstructions/default/text": "Spustit dotnet restore"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.de.json
index 018f87d2e8..f7cb765ec4 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.de.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.de.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
+ "description": "Eine leere Projektvorlage zum Erstellen eines Workerdiensts.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
+ "symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.",
+ "postActions/restore/description": "„NuGet-Pakete“ wiederherstellen, die für dieses Projekt erforderlich sind.",
+ "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.es.json
index 018f87d2e8..b6b689378e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.es.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.es.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
+ "description": "Una plantilla de proyecto vacía para crear un servicio Worker.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Framework/description": "Marco de destino del proyecto.",
+ "symbols/Framework/choices/net7.0/description": "Objetivo net7.0",
+ "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.",
+ "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.",
+ "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.fr.json
index 018f87d2e8..a11a43b6dd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.fr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.fr.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Service Worker",
+ "description": "Modèle de projet vide pour la création d'un service Worker.",
+ "symbols/ExcludeLaunchSettings/description": "Indique s’il faut exclure launchSettings.json du modèle généré.",
+ "symbols/Framework/description": "Framework cible du projet.",
+ "symbols/Framework/choices/net7.0/description": "Cible net7.0",
+ "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.",
+ "postActions/restore/description": "Restaurez les packages NuGet requis par ce projet.",
+ "postActions/restore/manualInstructions/default/text": "Exécuter « dotnet restore »"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.it.json
index 018f87d2e8..9efb989881 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.it.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.it.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Servizio del ruolo di lavoro",
+ "description": "Modello di progetto vuoto per la creazione di un'istanza di Worker Service.",
+ "symbols/ExcludeLaunchSettings/description": "Indica se escludere launchSettings.json dal modello generato.",
+ "symbols/Framework/description": "Il framework di destinazione per il progetto.",
+ "symbols/Framework/choices/net7.0/description": "Destinazione net7.0",
+ "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.",
+ "postActions/restore/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.",
+ "postActions/restore/manualInstructions/default/text": "Esegui 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ja.json
index 018f87d2e8..0d42321e3e 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ja.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ja.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "ワーカー サービス",
+ "description": "Worker Service を作成するための空のプロジェクト テンプレート。",
+ "symbols/ExcludeLaunchSettings/description": "生成されたテンプレートから launchSettings.json を除外するかどうか。",
+ "symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
+ "symbols/Framework/choices/net7.0/description": "ターゲット net7.0",
+ "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。",
+ "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ko.json
index 018f87d2e8..1ec30c1086 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ko.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ko.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "작업자 서비스",
+ "description": "Worker Service를 만드는 데 사용하는 빈 프로젝트 템플릿입니다.",
+ "symbols/ExcludeLaunchSettings/description": "생성된 템플릿에서 launchSettings.json을 제외할지 여부입니다.",
+ "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
+ "symbols/Framework/choices/net7.0/description": "대상 net7.0",
+ "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.",
+ "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pl.json
index 018f87d2e8..719dc109b6 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pl.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pl.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
+ "description": "Szablon pustego projektu służący do tworzenia usługi procesu roboczego.",
"symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "symbols/Framework/description": "Platforma docelowa dla tego projektu.",
+ "symbols/Framework/choices/net7.0/description": "Docelowe środowisko net7.0",
+ "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.",
+ "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.",
+ "postActions/restore/manualInstructions/default/text": "Uruchom polecenie \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pt-BR.json
index 018f87d2e8..14c471994d 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pt-BR.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.pt-BR.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Serviço de Trabalho",
+ "description": "Um modelo de projeto vazio para criar um worker service.",
+ "symbols/ExcludeLaunchSettings/description": "Se deve excluir launchSettings.json do modelo gerado.",
+ "symbols/Framework/description": "A estrutura de destino do projeto.",
+ "symbols/Framework/choices/net7.0/description": "Alvo .NET7.0",
+ "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.",
+ "postActions/restore/description": "Restaure os pacotes NuGet exigidos por este projeto.",
+ "postActions/restore/manualInstructions/default/text": "Executar 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ru.json
index 018f87d2e8..c77334d2bd 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ru.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.ru.json
@@ -1,11 +1,11 @@
-{
- "author": "Microsoft",
+{
+ "author": "Майкрософт",
"name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "description": "Шаблон пустого проекта для создания службы Worker Service.",
+ "symbols/ExcludeLaunchSettings/description": "Следует ли исключить launchSettings.json из созданного шаблона.",
+ "symbols/Framework/description": "Целевая платформа для проекта.",
+ "symbols/Framework/choices/net7.0/description": "Целевая версия net7.0",
+ "symbols/skipRestore/description": "Если установлено, автоматическое восстановление проекта при создании пропускается.",
+ "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.",
+ "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.tr.json
index 018f87d2e8..d0b6b53c84 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.tr.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.tr.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "Çalışan Hizmeti",
+ "description": "Çalışan hizmeti oluşturmaya yönelik boş proje şablonu.",
+ "symbols/ExcludeLaunchSettings/description": "launchSettings.json öğesinin oluşturulan şablondan dışlanıp dışlanmayacağı.",
+ "symbols/Framework/description": "Projenin hedef çerçevesi.",
+ "symbols/Framework/choices/net7.0/description": "Hedef net7.0",
+ "symbols/skipRestore/description": "Belirtilirse, oluşturma sırasında projenin otomatik geri yüklenmesini atlar.",
+ "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.",
+ "postActions/restore/manualInstructions/default/text": "'dotnet restore' çalıştır"
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hans.json
index 018f87d2e8..ab217cb05c 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hans.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "辅助角色服务",
+ "description": "用于创建 worker service 的空项目模板。",
+ "symbols/ExcludeLaunchSettings/description": "是否从生成的模板中排除 launchSettings.json。",
+ "symbols/Framework/description": "项目的目标框架。",
+ "symbols/Framework/choices/net7.0/description": "目标 net7.0",
+ "symbols/skipRestore/description": "如果指定,则在创建时跳过项目的自动还原。",
+ "postActions/restore/description": "还原此项目所需的 NuGet 包。",
+ "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\""
} \ No newline at end of file
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hant.json
index 018f87d2e8..b8718216c8 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hant.json
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/Worker-FSharp/.template.config/localize/templatestrings.zh-Hant.json
@@ -1,11 +1,11 @@
-{
+{
"author": "Microsoft",
- "name": "Worker Service",
- "description": "An empty project template for creating a worker service.",
- "symbols/ExcludeLaunchSettings/description": "Whether to exclude launchSettings.json from the generated template.",
- "symbols/Framework/description": "The target framework for the project.",
- "symbols/Framework/choices/net7.0/description": "Target net7.0",
- "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",
- "postActions/restore/description": "Restore NuGet packages required by this project.",
- "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'"
+ "name": "背景工作服務",
+ "description": "用於建立 Worker Service 的空白專案範本。",
+ "symbols/ExcludeLaunchSettings/description": "是否要從產生的範本排除 launchSettings.json。",
+ "symbols/Framework/description": "專案的目標 Framework。",
+ "symbols/Framework/choices/net7.0/description": "目標 net7.0",
+ "symbols/skipRestore/description": "若指定,會在建立時跳過專案的自動還原。",
+ "postActions/restore/description": "還原此專案所需的 NuGet 套件。",
+ "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'"
} \ No newline at end of file
diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs
index 826ff9e6ff..2435c6f4c7 100644
--- a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs
+++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs
@@ -174,6 +174,9 @@ public class CookieAuthenticationHandler : SignInAuthenticationHandler<CookieAut
if (Options.SessionStore != null)
{
await Options.SessionStore.RemoveAsync(_sessionKey!, Context, Context.RequestAborted);
+
+ // Clear out the session key if its expired, so renew doesn't try to use it
+ _sessionKey = null;
}
return AuthenticateResult.Fail("Ticket expired");
}
diff --git a/src/Security/Authentication/Core/src/AuthenticationConfigureOptions.cs b/src/Security/Authentication/Core/src/AuthenticationConfigureOptions.cs
deleted file mode 100644
index 4224b59c68..0000000000
--- a/src/Security/Authentication/Core/src/AuthenticationConfigureOptions.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Extensions.Options;
-
-namespace Microsoft.AspNetCore.Authentication;
-
-internal sealed class AuthenticationConfigureOptions : IConfigureOptions<AuthenticationOptions>
-{
- private readonly IAuthenticationConfigurationProvider _authenticationConfigurationProvider;
- private const string DefaultSchemeKey = "DefaultScheme";
-
- public AuthenticationConfigureOptions(IAuthenticationConfigurationProvider configurationProvider)
- {
- _authenticationConfigurationProvider = configurationProvider;
- }
-
- public void Configure(AuthenticationOptions options)
- {
- var authenticationConfig = _authenticationConfigurationProvider.AuthenticationConfiguration;
- var defaultScheme = authenticationConfig[DefaultSchemeKey];
- // Only set the default scheme from config if it has not
- // already been set and is provided in options
- if (!string.IsNullOrEmpty(defaultScheme) && string.IsNullOrEmpty(options.DefaultScheme))
- {
- options.DefaultScheme = defaultScheme;
- }
- }
-}
diff --git a/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs b/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs
index 7a31344f68..a318eb3a30 100644
--- a/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs
+++ b/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs
@@ -3,7 +3,6 @@
using Microsoft.AspNetCore.Authentication;
using Microsoft.Extensions.DependencyInjection.Extensions;
-using Microsoft.Extensions.Options;
namespace Microsoft.Extensions.DependencyInjection;
@@ -29,7 +28,6 @@ public static class AuthenticationServiceCollectionExtensions
services.AddWebEncoders();
services.TryAddSingleton<ISystemClock, SystemClock>();
services.TryAddSingleton<IAuthenticationConfigurationProvider, DefaultAuthenticationConfigurationProvider>();
- services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<AuthenticationOptions>, AuthenticationConfigureOptions>());
return new AuthenticationBuilder(services);
}
diff --git a/src/Security/Authentication/JwtBearer/samples/MinimalJwtBearerSample/Program.cs b/src/Security/Authentication/JwtBearer/samples/MinimalJwtBearerSample/Program.cs
index 470b722d6e..734c8e413d 100644
--- a/src/Security/Authentication/JwtBearer/samples/MinimalJwtBearerSample/Program.cs
+++ b/src/Security/Authentication/JwtBearer/samples/MinimalJwtBearerSample/Program.cs
@@ -2,15 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Security.Claims;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);
-builder.Authentication.AddJwtBearer();
-builder.Authentication.AddJwtBearer("ClaimedDetails");
-builder.Authentication.AddJwtBearer("InvalidScheme");
+builder.Services.AddAuthentication()
+ .AddJwtBearer()
+ .AddJwtBearer("ClaimedDetails")
+ .AddJwtBearer("InvalidScheme");
builder.Services.AddAuthorization(options =>
options.AddPolicy("is_admin", policy =>
diff --git a/src/Security/Authentication/JwtBearer/src/JwtBearerConfigureOptions.cs b/src/Security/Authentication/JwtBearer/src/JwtBearerConfigureOptions.cs
index 995eed4203..fba8afab01 100644
--- a/src/Security/Authentication/JwtBearer/src/JwtBearerConfigureOptions.cs
+++ b/src/Security/Authentication/JwtBearer/src/JwtBearerConfigureOptions.cs
@@ -13,18 +13,15 @@ namespace Microsoft.AspNetCore.Authentication;
internal sealed class JwtBearerConfigureOptions : IConfigureNamedOptions<JwtBearerOptions>
{
private readonly IAuthenticationConfigurationProvider _authenticationConfigurationProvider;
- private readonly IConfiguration _configuration;
/// <summary>
/// Initializes a new <see cref="JwtBearerConfigureOptions"/> given the configuration
/// provided by the <paramref name="configurationProvider"/>.
/// </summary>
- /// <param name="configurationProvider">An <see cref="IAuthenticationConfigurationProvider"/> instance.</param>
- /// <param name="configuration">An <see cref="IConfiguration"/> instance for accessing configuration elements not in the schema.</param>
- public JwtBearerConfigureOptions(IAuthenticationConfigurationProvider configurationProvider, IConfiguration configuration)
+ /// <param name="configurationProvider">An <see cref="IAuthenticationConfigurationProvider"/> instance.</param>\
+ public JwtBearerConfigureOptions(IAuthenticationConfigurationProvider configurationProvider)
{
_authenticationConfigurationProvider = configurationProvider;
- _configuration = configuration;
}
/// <inheritdoc />
@@ -51,7 +48,7 @@ internal sealed class JwtBearerConfigureOptions : IConfigureNamedOptions<JwtBear
ValidateAudience = audiences.Length > 0,
ValidAudiences = audiences,
ValidateIssuerSigningKey = true,
- IssuerSigningKey = GetIssuerSigningKey(_configuration, issuer),
+ IssuerSigningKey = GetIssuerSigningKey(configSection, issuer),
};
}
diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs b/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs
index d2e53fa2e8..0a9f556c83 100644
--- a/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs
+++ b/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs
@@ -411,7 +411,7 @@ public class EventTests
var builder = new HostBuilder()
.ConfigureServices(services => services
.AddRouting()
- .AddAuthentication(NegotiateDefaults.AuthenticationScheme)
+ .AddAuthentication()
.AddNegotiate(options =>
{
options.StateFactory = new TestNegotiateStateFactory();
diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs b/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs
index b41ee5556d..f84b5b5b57 100644
--- a/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs
+++ b/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs
@@ -255,7 +255,7 @@ public class NegotiateHandlerTests
{
var builder = new HostBuilder()
.ConfigureServices(services => services
- .AddAuthentication(NegotiateDefaults.AuthenticationScheme)
+ .AddAuthentication()
.AddNegotiate(options =>
{
options.StateFactory = new TestNegotiateStateFactory();
@@ -382,7 +382,7 @@ public class NegotiateHandlerTests
var builder = new HostBuilder()
.ConfigureServices(services => services
.AddRouting()
- .AddAuthentication(NegotiateDefaults.AuthenticationScheme)
+ .AddAuthentication()
.AddNegotiate(options =>
{
options.StateFactory = new TestNegotiateStateFactory();
diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.Test/ServerDeferralTests.cs b/src/Security/Authentication/Negotiate/test/Negotiate.Test/ServerDeferralTests.cs
index ba106aec5b..5fbe301936 100644
--- a/src/Security/Authentication/Negotiate/test/Negotiate.Test/ServerDeferralTests.cs
+++ b/src/Security/Authentication/Negotiate/test/Negotiate.Test/ServerDeferralTests.cs
@@ -44,7 +44,7 @@ public class ServerDeferralTests
var builder = new HostBuilder()
.ConfigureServices(services =>
{
- services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
+ services.AddAuthentication()
.AddNegotiate();
if (supportsAuth)
diff --git a/src/Security/Authentication/test/AuthenticationMiddlewareTests.cs b/src/Security/Authentication/test/AuthenticationMiddlewareTests.cs
index 9c11dc1e35..d83f2e4a23 100644
--- a/src/Security/Authentication/test/AuthenticationMiddlewareTests.cs
+++ b/src/Security/Authentication/test/AuthenticationMiddlewareTests.cs
@@ -154,7 +154,7 @@ public class AuthenticationMiddlewareTests
}
[Fact]
- public async Task WebApplicationBuilder_RegistersAuthenticationMiddlewares()
+ public async Task WebApplicationBuilder_RegistersAuthenticationAndAuthorizationMiddlewares()
{
var builder = WebApplication.CreateBuilder();
builder.Configuration.AddInMemoryCollection(new[]
@@ -162,25 +162,41 @@ public class AuthenticationMiddlewareTests
new KeyValuePair<string, string>("Authentication:Schemes:Bearer:ClaimsIssuer", "SomeIssuer"),
new KeyValuePair<string, string>("Authentication:Schemes:Bearer:Audiences:0", "https://localhost:5001")
});
- builder.Authentication.AddJwtBearer();
+ builder.Services.AddAuthorization();
+ builder.Services.AddAuthentication().AddJwtBearer();
await using var app = builder.Build();
- var webAppAuthBuilder = Assert.IsType<WebApplicationAuthenticationBuilder>(builder.Authentication);
- Assert.True(webAppAuthBuilder.IsAuthenticationConfigured);
-
// Authentication middleware isn't registered until application
// is built on startup
Assert.False(app.Properties.ContainsKey("__AuthenticationMiddlewareSet"));
+ Assert.False(app.Properties.ContainsKey("__AuthorizationMiddlewareSet"));
await app.StartAsync();
Assert.True(app.Properties.ContainsKey("__AuthenticationMiddlewareSet"));
+ Assert.True(app.Properties.ContainsKey("__AuthorizationMiddlewareSet"));
var options = app.Services.GetService<IOptionsMonitor<JwtBearerOptions>>().Get(JwtBearerDefaults.AuthenticationScheme);
Assert.Equal(new[] { "SomeIssuer" }, options.TokenValidationParameters.ValidIssuers);
Assert.Equal(new[] { "https://localhost:5001" }, options.TokenValidationParameters.ValidAudiences);
}
+ [Fact]
+ public async Task WebApplicationBuilder_OnlyRegistersMiddlewareWithSupportedServices()
+ {
+ var builder = WebApplication.CreateBuilder();
+ builder.Services.AddAuthentication().AddJwtBearer();
+ await using var app = builder.Build();
+
+ Assert.False(app.Properties.ContainsKey("__AuthenticationMiddlewareSet"));
+ Assert.False(app.Properties.ContainsKey("__AuthorizationMiddlewareSet"));
+
+ await app.StartAsync();
+
+ Assert.True(app.Properties.ContainsKey("__AuthenticationMiddlewareSet"));
+ Assert.False(app.Properties.ContainsKey("__AuthorizationMiddlewareSet"));
+ }
+
private HttpContext GetHttpContext(
Action<IServiceCollection> registerServices = null,
IAuthenticationService authenticationService = null)
diff --git a/src/Security/Authentication/test/CertificateTests.cs b/src/Security/Authentication/test/CertificateTests.cs
index 823f5c50e8..04f39ce29f 100644
--- a/src/Security/Authentication/test/CertificateTests.cs
+++ b/src/Security/Authentication/test/CertificateTests.cs
@@ -844,7 +844,7 @@ public class ClientCertificateAuthenticationTests
AuthenticationBuilder authBuilder;
if (configureOptions != null)
{
- authBuilder = services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme).AddCertificate(options =>
+ authBuilder = services.AddAuthentication().AddCertificate(options =>
{
options.CustomTrustStore = configureOptions.CustomTrustStore;
options.ChainTrustValidationMode = configureOptions.ChainTrustValidationMode;
@@ -859,7 +859,7 @@ public class ClientCertificateAuthenticationTests
}
else
{
- authBuilder = services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme).AddCertificate();
+ authBuilder = services.AddAuthentication().AddCertificate();
}
if (useCache)
{
diff --git a/src/Security/Authentication/test/CookieTests.cs b/src/Security/Authentication/test/CookieTests.cs
index e18a57daaf..d4169b2e6c 100644
--- a/src/Security/Authentication/test/CookieTests.cs
+++ b/src/Security/Authentication/test/CookieTests.cs
@@ -101,7 +101,7 @@ public class CookieTests : SharedAuthenticationTests<CookieAuthenticationOptions
Assert.Equal("http://example.com/Account/Login?ReturnUrl=%2FCustomRedirect", location.ToString());
}
- private Task SignInAsAlice(HttpContext context)
+ private static Task SignInAsAlice(HttpContext context)
{
var user = new ClaimsIdentity(new GenericIdentity("Alice", "Cookies"));
user.AddClaim(new Claim("marker", "true"));
@@ -110,7 +110,7 @@ public class CookieTests : SharedAuthenticationTests<CookieAuthenticationOptions
new AuthenticationProperties());
}
- private Task SignInAsWrong(HttpContext context)
+ private static Task SignInAsWrong(HttpContext context)
{
return context.SignInAsync("Oops",
new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity("Alice", "Cookies"))),
@@ -147,6 +147,107 @@ public class CookieTests : SharedAuthenticationTests<CookieAuthenticationOptions
Assert.Equal("no-cache", transaction.Response.Headers.Pragma.ToString());
}
+ private class TestTicketStore : ITicketStore
+ {
+ private const string KeyPrefix = "AuthSessionStore-";
+ public readonly Dictionary<string, AuthenticationTicket> Store = new Dictionary<string, AuthenticationTicket>();
+
+ public async Task<string> StoreAsync(AuthenticationTicket ticket)
+ {
+ var guid = Guid.NewGuid();
+ var key = KeyPrefix + guid.ToString();
+ await RenewAsync(key, ticket);
+ return key;
+ }
+
+ public Task RenewAsync(string key, AuthenticationTicket ticket)
+ {
+ Store[key] = ticket;
+
+ return Task.FromResult(0);
+ }
+
+ public Task<AuthenticationTicket> RetrieveAsync(string key)
+ {
+ AuthenticationTicket ticket;
+ Store.TryGetValue(key, out ticket);
+ return Task.FromResult(ticket);
+ }
+
+ public Task RemoveAsync(string key)
+ {
+ Store.Remove(key);
+ return Task.FromResult(0);
+ }
+ }
+
+ [Fact]
+ public async Task SignInWithTicketStoreWorks()
+ {
+ var sessionStore = new TestTicketStore();
+ using var host = await CreateHostWithServices(s =>
+ {
+ s.AddSingleton<ISystemClock>(_clock);
+ s.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(o =>
+ {
+ o.SessionStore = sessionStore;
+ });
+ }, SignInAsAlice);
+
+ using var server = host.GetTestServer();
+ var transaction1 = await SendAsync(server, "http://example.com/testpath");
+
+ var transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue);
+
+ // Make sure we have one key as the session id
+ var key1 = Assert.Single(sessionStore.Store.Keys);
+ Assert.Equal("Alice", FindClaimValue(transaction2, ClaimTypes.Name));
+
+ // Make sure the session is expired
+ _clock.Add(TimeSpan.FromDays(60));
+
+ // Verify that a new session is generated with a new key
+ var transaction3 = await SendAsync(server, "http://example.com/signinalice", transaction1.CookieNameValue);
+
+ var transaction4 = await SendAsync(server, "http://example.com/me/Cookies", transaction3.CookieNameValue);
+
+ var key2 = Assert.Single(sessionStore.Store.Keys);
+ Assert.Equal("Alice", FindClaimValue(transaction4, ClaimTypes.Name));
+ Assert.NotEqual(key1, key2);
+ }
+
+ [Fact]
+ public async Task SessionStoreRemovesExpired()
+ {
+ var sessionStore = new TestTicketStore();
+ using var host = await CreateHostWithServices(s =>
+ {
+ s.AddSingleton<ISystemClock>(_clock);
+ s.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(o =>
+ {
+ o.SessionStore = sessionStore;
+ });
+ }, SignInAsAlice);
+
+ using var server = host.GetTestServer();
+ var transaction1 = await SendAsync(server, "http://example.com/testpath");
+
+ var transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue);
+
+ // Make sure we have one key as the session id
+ var key1 = Assert.Single(sessionStore.Store.Keys);
+ Assert.Equal("Alice", FindClaimValue(transaction2, ClaimTypes.Name));
+
+ // Make sure the session is expired
+ _clock.Add(TimeSpan.FromDays(60));
+
+ // Verify that a new session is generated with a new key
+ var transaction3 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue);
+
+ Assert.Empty(sessionStore.Store.Keys);
+ Assert.Null(FindClaimValue(transaction3, ClaimTypes.Name));
+ }
+
[Fact]
public async Task CustomAuthSchemeEncodesCookieName()
{
@@ -1667,17 +1768,6 @@ public class CookieTests : SharedAuthenticationTests<CookieAuthenticationOptions
return property.Attribute("value").Value;
}
- private static async Task<XElement> GetAuthData(TestServer server, string url, string cookie)
- {
- var request = new HttpRequestMessage(HttpMethod.Get, url);
- request.Headers.Add("Cookie", cookie);
-
- var response2 = await server.CreateClient().SendAsync(request);
- var text = await response2.Content.ReadAsStringAsync();
- var me = XElement.Parse(text);
- return me;
- }
-
private class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal p)
@@ -1735,6 +1825,10 @@ public class CookieTests : SharedAuthenticationTests<CookieAuthenticationOptions
{
await context.ChallengeAsync(CookieAuthenticationDefaults.AuthenticationScheme);
}
+ else if (req.Path == new PathString("/signinalice"))
+ {
+ await SignInAsAlice(context);
+ }
else if (req.Path == new PathString("/signout"))
{
await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
diff --git a/src/Security/Authentication/test/FacebookTests.cs b/src/Security/Authentication/test/FacebookTests.cs
index 375272a1b5..0b6b6b242c 100644
--- a/src/Security/Authentication/test/FacebookTests.cs
+++ b/src/Security/Authentication/test/FacebookTests.cs
@@ -118,7 +118,7 @@ public class FacebookTests : RemoteAuthenticationTests<FacebookOptions>
app => app.UseAuthentication(),
services =>
{
- services.AddAuthentication().AddFacebook(o =>
+ services.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddFacebook(o =>
{
o.AppId = "Test App Id";
o.AppSecret = "Test App Secret";
@@ -148,7 +148,7 @@ public class FacebookTests : RemoteAuthenticationTests<FacebookOptions>
app => app.UseAuthentication(),
services =>
{
- services.AddAuthentication().AddFacebook(o =>
+ services.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddFacebook(o =>
{
o.AppId = "Test App Id";
o.AppSecret = "Test App Secret";
@@ -180,7 +180,7 @@ public class FacebookTests : RemoteAuthenticationTests<FacebookOptions>
app => app.UseAuthentication(),
services =>
{
- services.AddAuthentication().AddFacebook(o =>
+ services.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddFacebook(o =>
{
o.AppId = "Test App Id";
o.AppSecret = "Test App Secret";
diff --git a/src/Security/Authentication/test/JwtBearerTests.cs b/src/Security/Authentication/test/JwtBearerTests.cs
index 936e137f2e..19ff159cf3 100755
--- a/src/Security/Authentication/test/JwtBearerTests.cs
+++ b/src/Security/Authentication/test/JwtBearerTests.cs
@@ -885,41 +885,6 @@ public class JwtBearerTests : SharedAuthenticationTests<JwtBearerOptions>
Assert.Equal(JsonValueKind.Null, dom.RootElement.GetProperty("issued").ValueKind);
}
- [Fact]
- public async Task ForwardSchemeOverridesSchemeFromConfig()
- {
- // Arrange
- var defaultSchemeFromConfig = "DefaultSchemeFromConfig";
- var defaultSchemeFromForward = "DefaultSchemeFromForward";
- var services = new ServiceCollection().AddLogging();
- var config = new ConfigurationBuilder().AddInMemoryCollection(new[]
- {
- new KeyValuePair<string, string>("Authentication:DefaultScheme", defaultSchemeFromConfig)
- }).Build();
- services.AddSingleton<IConfiguration>(config);
-
- // Act
- var builder = services.AddAuthentication(o =>
- {
- o.AddScheme<TestHandler>(defaultSchemeFromForward, defaultSchemeFromForward);
- });
- builder.AddJwtBearer(defaultSchemeFromConfig, o => o.ForwardAuthenticate = defaultSchemeFromForward);
- var forwardAuthentication = new TestHandler();
- services.AddSingleton(forwardAuthentication);
-
- var sp = services.BuildServiceProvider();
- var context = new DefaultHttpContext();
- context.RequestServices = sp;
-
- // Assert
- Assert.Equal(0, forwardAuthentication.AuthenticateCount);
- await context.AuthenticateAsync();
- Assert.Equal(1, forwardAuthentication.AuthenticateCount);
- var schemeProvider = sp.GetRequiredService<IAuthenticationSchemeProvider>();
- var defaultSchemeFromServices = await schemeProvider.GetDefaultAuthenticateSchemeAsync();
- Assert.Equal(defaultSchemeFromConfig, defaultSchemeFromServices.Name);
- }
-
class InvalidTokenValidator : ISecurityTokenValidator
{
public InvalidTokenValidator()
diff --git a/src/Security/Authentication/test/OAuthTests.cs b/src/Security/Authentication/test/OAuthTests.cs
index 8d348d8e4a..ef4c447dec 100644
--- a/src/Security/Authentication/test/OAuthTests.cs
+++ b/src/Security/Authentication/test/OAuthTests.cs
@@ -115,7 +115,7 @@ public class OAuthTests : RemoteAuthenticationTests<OAuthOptions>
public async Task RedirectToIdentityProvider_SetsCorrelationIdCookiePath_ToCallBackPath()
{
using var host = await CreateHost(
- s => s.AddAuthentication().AddOAuth(
+ s => s.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddOAuth(
"Weblie",
opt =>
{
@@ -142,7 +142,7 @@ public class OAuthTests : RemoteAuthenticationTests<OAuthOptions>
public async Task RedirectToAuthorizeEndpoint_CorrelationIdCookieOptions_CanBeOverriden()
{
using var host = await CreateHost(
- s => s.AddAuthentication().AddOAuth(
+ s => s.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddOAuth(
"Weblie",
opt =>
{
@@ -170,7 +170,7 @@ public class OAuthTests : RemoteAuthenticationTests<OAuthOptions>
public async Task RedirectToAuthorizeEndpoint_HasScopeAsConfigured()
{
using var host = await CreateHost(
- s => s.AddAuthentication().AddOAuth(
+ s => s.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddOAuth(
"Weblie",
opt =>
{
@@ -197,7 +197,7 @@ public class OAuthTests : RemoteAuthenticationTests<OAuthOptions>
public async Task RedirectToAuthorizeEndpoint_HasScopeAsOverwritten()
{
using var host = await CreateHost(
- s => s.AddAuthentication().AddOAuth(
+ s => s.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddOAuth(
"Weblie",
opt =>
{
@@ -226,7 +226,7 @@ public class OAuthTests : RemoteAuthenticationTests<OAuthOptions>
public async Task RedirectToAuthorizeEndpoint_HasScopeAsOverwrittenWithBaseAuthenticationProperties()
{
using var host = await CreateHost(
- s => s.AddAuthentication().AddOAuth(
+ s => s.AddAuthentication(o => o.DisableAutoDefaultScheme = true).AddOAuth(
"Weblie",
opt =>
{
diff --git a/src/Security/Authentication/test/SharedAuthenticationTests.cs b/src/Security/Authentication/test/SharedAuthenticationTests.cs
index 13570baab6..bc3a74fe31 100644
--- a/src/Security/Authentication/test/SharedAuthenticationTests.cs
+++ b/src/Security/Authentication/test/SharedAuthenticationTests.cs
@@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Security.Claims;
-using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authentication.Tests;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
@@ -545,92 +544,4 @@ public abstract class SharedAuthenticationTests<TOptions> where TOptions : Authe
Assert.Equal(HandlerType, scheme.HandlerType);
Assert.Equal(DisplayName, scheme.DisplayName);
}
-
- [Fact]
- public async Task RespectsDefaultSchemeInConfig()
- {
- // Arrange
- var defaultSchemeFromConfig = "DefaultSchemeFromConfig";
- var services = new ServiceCollection();
- var config = new ConfigurationBuilder().AddInMemoryCollection(new[]
- {
- new KeyValuePair<string, string>("Authentication:DefaultScheme", defaultSchemeFromConfig)
- }).Build();
- services.AddSingleton<IConfiguration>(config);
-
- // Act
- var builder = services.AddAuthentication(o =>
- {
- o.AddScheme<TestHandler>(defaultSchemeFromConfig, defaultSchemeFromConfig);
- });
- RegisterAuth(builder, _ => { });
- var sp = services.BuildServiceProvider();
-
- // Assert
- var schemeProvider = sp.GetRequiredService<IAuthenticationSchemeProvider>();
- var defaultSchemeFromServices = await schemeProvider.GetDefaultAuthenticateSchemeAsync();
- Assert.Equal(defaultSchemeFromConfig, defaultSchemeFromServices.Name);
- }
-
- [Fact]
- public async Task CanOverrideDefaultInConfigViaAddAuthentication()
- {
- // Arrange
- var defaultSchemeFromConfig = "DefaultSchemeFromConfig";
- var defaultSchemeFromAddAuth = "DefaultSchemeFromAddAuth";
- var services = new ServiceCollection();
- var config = new ConfigurationBuilder().AddInMemoryCollection(new[]
- {
- new KeyValuePair<string, string>("Authentication:DefaultScheme", defaultSchemeFromConfig)
- }).Build();
- services.AddSingleton<IConfiguration>(config);
-
- // Act
- var builder = services.AddAuthentication(o =>
- {
- o.DefaultScheme = defaultSchemeFromAddAuth;
- o.AddScheme<TestHandler>(defaultSchemeFromConfig, defaultSchemeFromConfig);
- o.AddScheme<TestHandler>(defaultSchemeFromAddAuth, defaultSchemeFromAddAuth);
- });
- RegisterAuth(builder, _ => { });
- var sp = services.BuildServiceProvider();
-
- // Assert
- var schemeProvider = sp.GetRequiredService<IAuthenticationSchemeProvider>();
- var defaultSchemeFromServices = await schemeProvider.GetDefaultAuthenticateSchemeAsync();
- Assert.Equal(defaultSchemeFromAddAuth, defaultSchemeFromServices.Name);
- }
-
- [Fact]
- public async Task DoesNotOverrideDefaultSchemeSetViaOptions()
- {
- // Arrange
- var defaultSchemeFromConfig = "DefaultSchemeFromConfig";
- var defaultSchemeFromOptions = "DefaultSchemeFromOptions";
- var services = new ServiceCollection();
- var config = new ConfigurationBuilder().AddInMemoryCollection(new[]
- {
- new KeyValuePair<string, string>("Authentication:DefaultScheme", defaultSchemeFromConfig)
- }).Build();
- services.AddSingleton<IConfiguration>(config);
-
- // Act
- services.Configure<AuthenticationOptions>(options =>
- {
- options.DefaultScheme = defaultSchemeFromOptions;
- });
- var builder = services.AddAuthentication(o =>
- {
- o.AddScheme<TestHandler>(defaultSchemeFromConfig, defaultSchemeFromConfig);
- o.AddScheme<TestHandler>(defaultSchemeFromOptions, defaultSchemeFromOptions);
- });
- RegisterAuth(builder, _ => { });
- var sp = services.BuildServiceProvider();
-
- // Assert
- var schemeProvider = sp.GetRequiredService<IAuthenticationSchemeProvider>();
- var defaultSchemeFromServices = await schemeProvider.GetDefaultAuthenticateSchemeAsync();
- Assert.Equal(defaultSchemeFromOptions, defaultSchemeFromServices.Name);
-
- }
}
diff --git a/src/Security/Authorization/Core/src/AuthorizationBuilder.cs b/src/Security/Authorization/Core/src/AuthorizationBuilder.cs
new file mode 100644
index 0000000000..793d2ab270
--- /dev/null
+++ b/src/Security/Authorization/Core/src/AuthorizationBuilder.cs
@@ -0,0 +1,149 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Microsoft.AspNetCore.Authorization;
+
+/// <summary>
+/// Used to configure authorization
+/// </summary>
+public class AuthorizationBuilder
+{
+ /// <summary>
+ /// Initializes a new instance of <see cref="AuthorizationBuilder"/>.
+ /// </summary>
+ /// <param name="services">The services being configured.</param>
+ public AuthorizationBuilder(IServiceCollection services)
+ => Services = services;
+
+ /// <summary>
+ /// The services being configured.
+ /// </summary>
+ public virtual IServiceCollection Services { get; }
+
+ /// <summary>
+ /// Determines whether authorization handlers should be invoked after <see cref="AuthorizationHandlerContext.HasFailed"/>.
+ /// Defaults to true.
+ /// </summary>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder SetInvokeHandlersAfterFailure(bool invoke)
+ {
+ Services.Configure<AuthorizationOptions>(o => o.InvokeHandlersAfterFailure = invoke);
+ return this;
+ }
+
+ /// <summary>
+ /// Sets the default authorization policy. Defaults to require authenticated users.
+ /// </summary>
+ /// <remarks>
+ /// The default policy used when evaluating <see cref="IAuthorizeData"/> with no policy name specified.
+ /// </remarks>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder SetDefaultPolicy(AuthorizationPolicy policy)
+ {
+ Services.Configure<AuthorizationOptions>(o => o.DefaultPolicy = policy);
+ return this;
+ }
+
+ /// <summary>
+ /// Sets the fallback authorization policy used by <see cref="AuthorizationPolicy.CombineAsync(IAuthorizationPolicyProvider, IEnumerable{IAuthorizeData})"/>
+ /// when no IAuthorizeData have been provided. As a result, the AuthorizationMiddleware uses the fallback policy
+ /// if there are no <see cref="IAuthorizeData"/> instances for a resource. If a resource has any <see cref="IAuthorizeData"/>
+ /// then they are evaluated instead of the fallback policy. By default the fallback policy is null, and usually will have no
+ /// effect unless you have the AuthorizationMiddleware in your pipeline. It is not used in any way by the
+ /// default <see cref="IAuthorizationService"/>.
+ /// </summary>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder SetFallbackPolicy(AuthorizationPolicy? policy)
+ {
+ Services.Configure<AuthorizationOptions>(o => o.FallbackPolicy = policy);
+ return this;
+ }
+
+ /// <summary>
+ /// Adds a <see cref="AuthorizationPolicy"/> which can be used by <see cref="IAuthorizationService"/>.
+ /// </summary>
+ /// <param name="name">The name of this policy.</param>
+ /// <param name="policy">The <see cref="AuthorizationPolicy"/>.></param>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder AddPolicy(string name, AuthorizationPolicy policy)
+ {
+ Services.Configure<AuthorizationOptions>(o => o.AddPolicy(name, policy));
+ return this;
+ }
+
+ /// <summary>
+ /// Add a policy that is built from a delegate with the provided name.
+ /// </summary>
+ /// <param name="name">The name of the policy.</param>
+ /// <param name="configurePolicy">The delegate that will be used to build the policy.</param>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder AddPolicy(string name, Action<AuthorizationPolicyBuilder> configurePolicy)
+ {
+ Services.Configure<AuthorizationOptions>(o => o.AddPolicy(name, configurePolicy));
+ return this;
+ }
+
+ /// <summary>
+ /// Add a policy that is built from a delegate with the provided name and used as the default policy.
+ /// </summary>
+ /// <param name="name">The name of the default policy.</param>
+ /// <param name="policy">The default <see cref="AuthorizationPolicy"/>.></param>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder AddDefaultPolicy(string name, AuthorizationPolicy policy)
+ {
+ SetDefaultPolicy(policy);
+ return AddPolicy(name, policy);
+ }
+
+ /// <summary>
+ /// Add a policy that is built from a delegate with the provided name and used as the DefaultPolicy.
+ /// </summary>
+ /// <param name="name">The name of the DefaultPolicy.</param>
+ /// <param name="configurePolicy">The delegate that will be used to build the DefaultPolicy.</param>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder AddDefaultPolicy(string name, Action<AuthorizationPolicyBuilder> configurePolicy)
+ {
+ if (configurePolicy == null)
+ {
+ throw new ArgumentNullException(nameof(configurePolicy));
+ }
+
+ var policyBuilder = new AuthorizationPolicyBuilder();
+ configurePolicy(policyBuilder);
+ return AddDefaultPolicy(name, policyBuilder.Build());
+ }
+
+ /// <summary>
+ /// Add a policy that is built from a delegate with the provided name and used as the FallbackPolicy.
+ /// </summary>
+ /// <param name="name">The name of the FallbackPolicy.</param>
+ /// <param name="policy">The Fallback <see cref="AuthorizationPolicy"/>.></param>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder AddFallbackPolicy(string name, AuthorizationPolicy policy)
+ {
+ SetFallbackPolicy(policy);
+ return AddPolicy(name, policy);
+ }
+
+ /// <summary>
+ /// Add a policy that is built from a delegate with the provided name and used as the FallbackPolicy.
+ /// </summary>
+ /// <param name="name">The name of the Fallback policy.</param>
+ /// <param name="configurePolicy">The delegate that will be used to build the Fallback policy.</param>
+ /// <returns>The builder.</returns>
+ public virtual AuthorizationBuilder AddFallbackPolicy(string name, Action<AuthorizationPolicyBuilder> configurePolicy)
+ {
+ if (configurePolicy == null)
+ {
+ throw new ArgumentNullException(nameof(configurePolicy));
+ }
+
+ var policyBuilder = new AuthorizationPolicyBuilder();
+ configurePolicy(policyBuilder);
+ return AddFallbackPolicy(name, policyBuilder.Build());
+ }
+}
diff --git a/src/Security/Authorization/Core/src/AuthorizationOptions.cs b/src/Security/Authorization/Core/src/AuthorizationOptions.cs
index 1b53575a61..041553819e 100644
--- a/src/Security/Authorization/Core/src/AuthorizationOptions.cs
+++ b/src/Security/Authorization/Core/src/AuthorizationOptions.cs
@@ -14,7 +14,7 @@ public class AuthorizationOptions
private Dictionary<string, AuthorizationPolicy> PolicyMap { get; } = new Dictionary<string, AuthorizationPolicy>(StringComparer.OrdinalIgnoreCase);
/// <summary>
- /// Determines whether authentication handlers should be invoked after <see cref="AuthorizationHandlerContext.HasFailed"/>.
+ /// Determines whether authorization handlers should be invoked after <see cref="AuthorizationHandlerContext.HasFailed"/>.
/// Defaults to true.
/// </summary>
public bool InvokeHandlersAfterFailure { get; set; } = true;
diff --git a/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt b/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt
index 30396d6df2..38f8cdf2c0 100644
--- a/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt
+++ b/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt
@@ -1,3 +1,15 @@
#nullable enable
+Microsoft.AspNetCore.Authorization.AuthorizationBuilder
+Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AuthorizationBuilder(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void
Microsoft.AspNetCore.Authorization.Infrastructure.PassThroughAuthorizationHandler.PassThroughAuthorizationHandler(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Authorization.AuthorizationOptions!>! options) -> void
static Microsoft.AspNetCore.Authorization.AuthorizationPolicy.CombineAsync(Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider! policyProvider, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Authorization.IAuthorizeData!>! authorizeData, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Authorization.AuthorizationPolicy!>! policies) -> System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy?>!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AddDefaultPolicy(string! name, Microsoft.AspNetCore.Authorization.AuthorizationPolicy! policy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AddDefaultPolicy(string! name, System.Action<Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder!>! configurePolicy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AddFallbackPolicy(string! name, Microsoft.AspNetCore.Authorization.AuthorizationPolicy! policy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AddFallbackPolicy(string! name, System.Action<Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder!>! configurePolicy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AddPolicy(string! name, Microsoft.AspNetCore.Authorization.AuthorizationPolicy! policy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.AddPolicy(string! name, System.Action<Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder!>! configurePolicy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.SetDefaultPolicy(Microsoft.AspNetCore.Authorization.AuthorizationPolicy! policy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.SetFallbackPolicy(Microsoft.AspNetCore.Authorization.AuthorizationPolicy? policy) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
+virtual Microsoft.AspNetCore.Authorization.AuthorizationBuilder.SetInvokeHandlersAfterFailure(bool invoke) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
diff --git a/src/Security/Authorization/Policy/src/AuthorizationAppBuilderExtensions.cs b/src/Security/Authorization/Policy/src/AuthorizationAppBuilderExtensions.cs
index 1e6cedfc5b..74b23c01f8 100644
--- a/src/Security/Authorization/Policy/src/AuthorizationAppBuilderExtensions.cs
+++ b/src/Security/Authorization/Policy/src/AuthorizationAppBuilderExtensions.cs
@@ -12,6 +12,8 @@ namespace Microsoft.AspNetCore.Builder;
/// </summary>
public static class AuthorizationAppBuilderExtensions
{
+ internal const string AuthorizationMiddlewareSetKey = "__AuthorizationMiddlewareSet";
+
/// <summary>
/// Adds the <see cref="AuthorizationMiddleware"/> to the specified <see cref="IApplicationBuilder"/>, which enables authorization capabilities.
/// <para>
@@ -30,6 +32,7 @@ public static class AuthorizationAppBuilderExtensions
VerifyServicesRegistered(app);
+ app.Properties[AuthorizationMiddlewareSetKey] = true;
return app.UseMiddleware<AuthorizationMiddleware>();
}
diff --git a/src/Security/Authorization/Policy/src/PolicyServiceCollectionExtensions.cs b/src/Security/Authorization/Policy/src/PolicyServiceCollectionExtensions.cs
index 4c4a958a09..dd7cfd7ccc 100644
--- a/src/Security/Authorization/Policy/src/PolicyServiceCollectionExtensions.cs
+++ b/src/Security/Authorization/Policy/src/PolicyServiceCollectionExtensions.cs
@@ -13,6 +13,14 @@ namespace Microsoft.Extensions.DependencyInjection;
public static class PolicyServiceCollectionExtensions
{
/// <summary>
+ /// Adds authorization services to the specified <see cref="IServiceCollection" />.
+ /// </summary>
+ /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
+ /// <returns>The <see cref="AuthorizationBuilder"/> so that additional calls can be chained.</returns>
+ public static AuthorizationBuilder AddAuthorizationBuilder(this IServiceCollection services)
+ => new AuthorizationBuilder(services.AddAuthorization());
+
+ /// <summary>
/// Adds the authorization policy evaluator service to the specified <see cref="IServiceCollection" />.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
diff --git a/src/Security/Authorization/Policy/src/PublicAPI.Unshipped.txt b/src/Security/Authorization/Policy/src/PublicAPI.Unshipped.txt
index 9c11d1e7b2..4150e1ff1c 100644
--- a/src/Security/Authorization/Policy/src/PublicAPI.Unshipped.txt
+++ b/src/Security/Authorization/Policy/src/PublicAPI.Unshipped.txt
@@ -1,3 +1,4 @@
#nullable enable
static Microsoft.AspNetCore.Builder.AuthorizationEndpointConventionBuilderExtensions.RequireAuthorization<TBuilder>(this TBuilder builder, Microsoft.AspNetCore.Authorization.AuthorizationPolicy! policy) -> TBuilder
static Microsoft.AspNetCore.Builder.AuthorizationEndpointConventionBuilderExtensions.RequireAuthorization<TBuilder>(this TBuilder builder, System.Action<Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder!>! configurePolicy) -> TBuilder
+static Microsoft.Extensions.DependencyInjection.PolicyServiceCollectionExtensions.AddAuthorizationBuilder(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Authorization.AuthorizationBuilder!
diff --git a/src/Security/Authorization/test/AuthorizationBuilderTests.cs b/src/Security/Authorization/test/AuthorizationBuilderTests.cs
new file mode 100644
index 0000000000..46c2b66066
--- /dev/null
+++ b/src/Security/Authorization/test/AuthorizationBuilderTests.cs
@@ -0,0 +1,116 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.AspNetCore.Authorization.Infrastructure;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+
+namespace Microsoft.AspNetCore.Authorization.Test;
+
+public class AuthorizationBuilderTests
+{
+ [Fact]
+ public void CanSetFallbackPolicy()
+ {
+ // Arrange
+ var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
+ var builder = TestHelpers.CreateAuthorizationBuilder()
+ // Act
+ .SetFallbackPolicy(policy);
+
+ var options = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AuthorizationOptions>>().Value;
+
+ // Assert
+ Assert.Equal(policy, options.FallbackPolicy);
+ }
+
+ [Fact]
+ public void CanUnSetFallbackPolicy()
+ {
+ // Arrange
+ var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
+ var builder = TestHelpers.CreateAuthorizationBuilder()
+ .SetFallbackPolicy(policy)
+ // Act
+ .SetFallbackPolicy(null);
+
+ var options = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AuthorizationOptions>>().Value;
+
+ // Assert
+ Assert.Null(options.FallbackPolicy);
+ }
+
+ [Fact]
+ public void CanSetDefaultPolicy()
+ {
+ // Arrange
+ var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
+ var builder = TestHelpers.CreateAuthorizationBuilder()
+ // Act
+ .SetDefaultPolicy(policy);
+
+ var options = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AuthorizationOptions>>().Value;
+
+ // Assert
+ Assert.Equal(policy, options.DefaultPolicy);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public void CanSetInvokeHandlersAfterFailure(bool invoke)
+ {
+ // Arrange
+ var builder = TestHelpers.CreateAuthorizationBuilder()
+ // Act
+ .SetInvokeHandlersAfterFailure(invoke);
+
+ var options = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AuthorizationOptions>>().Value;
+
+ // Assert
+ Assert.Equal(invoke, options.InvokeHandlersAfterFailure);
+ }
+
+ [Fact]
+ public void CanAddPolicyInstance()
+ {
+ // Arrange
+ var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
+ var builder = TestHelpers.CreateAuthorizationBuilder()
+ // Act
+ .AddPolicy("name", policy);
+
+ var options = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AuthorizationOptions>>().Value;
+
+ // Assert
+ Assert.Equal(policy, options.GetPolicy("name"));
+ }
+
+ [Fact]
+ public void CanAddPolicyDelegate()
+ {
+ // Arrange
+ var builder = TestHelpers.CreateAuthorizationBuilder()
+ // Act
+ .AddPolicy("name", p => p.RequireAssertion(_ => true));
+
+ var options = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AuthorizationOptions>>().Value;
+
+ // Assert
+ var policy = options.GetPolicy("name");
+ Assert.NotNull(policy);
+ Assert.Equal(1, policy.Requirements.Count);
+ Assert.IsType<AssertionRequirement>(policy.Requirements.First());
+ }
+}
+
+internal class TestHelpers
+{
+ public static AuthorizationBuilder CreateAuthorizationBuilder()
+ {
+ var services = new ServiceCollection();
+ services.AddLogging();
+ services.AddOptions();
+ return services.AddAuthorizationBuilder();
+ }
+}
diff --git a/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs b/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs
index 937adbc55e..fcab4e0388 100644
--- a/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs
+++ b/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs
@@ -37,12 +37,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage")));
var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] { new Claim("Permission", "CanViewPage") }));
// Act
@@ -58,13 +53,10 @@ public class DefaultAuthorizationServiceTests
// Arrange
var authorizationService = BuildAuthorizationService(services =>
{
- services.AddAuthorization(options =>
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy =>
{
- options.AddPolicy("Basic", policy =>
- {
- policy.AddAuthenticationSchemes("Basic");
- policy.RequireClaim("Permission", "CanViewPage");
- });
+ policy.AddAuthenticationSchemes("Basic");
+ policy.RequireClaim("Permission", "CanViewPage");
});
});
var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] { new Claim("Permission", "CanViewPage") }, "Basic"));
@@ -81,12 +73,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage", "CanViewAnything"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage", "CanViewAnything")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
@@ -113,10 +100,7 @@ public class DefaultAuthorizationServiceTests
{
services.AddSingleton<IAuthorizationHandler>(handler1);
services.AddSingleton<IAuthorizationHandler>(handler2);
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Custom", policy => policy.Requirements.Add(new CustomRequirement()));
- });
+ services.AddAuthorizationBuilder().AddPolicy("Custom", policy => policy.Requirements.Add(new CustomRequirement()));
});
// Act
@@ -141,11 +125,9 @@ public class DefaultAuthorizationServiceTests
{
services.AddSingleton<IAuthorizationHandler>(handler1);
services.AddSingleton<IAuthorizationHandler>(handler2);
- services.AddAuthorization(options =>
- {
- options.InvokeHandlersAfterFailure = invokeAllHandlers;
- options.AddPolicy("Custom", policy => policy.Requirements.Add(new CustomRequirement()));
- });
+ services.AddAuthorizationBuilder()
+ .AddPolicy("Custom", policy => policy.Requirements.Add(new CustomRequirement()))
+ .SetInvokeHandlersAfterFailure(invokeAllHandlers);
});
// Act
@@ -196,10 +178,7 @@ public class DefaultAuthorizationServiceTests
services.AddSingleton<IAuthorizationHandler>(handler1);
services.AddSingleton<IAuthorizationHandler>(handler2);
services.AddSingleton<IAuthorizationHandler>(handler3);
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Custom", policy => policy.Requirements.Add(new CustomRequirement()));
- });
+ services.AddAuthorizationBuilder().AddPolicy("Custom", policy => policy.Requirements.Add(new CustomRequirement()));
});
// Act
@@ -222,12 +201,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage", "CanViewAnything"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage", "CanViewAnything")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
@@ -249,12 +223,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage", "CanViewAnything"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage", "CanViewAnything")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
@@ -275,12 +244,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
@@ -301,12 +265,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[0],
@@ -325,12 +284,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage")));
// Act
var allowed = await authorizationService.AuthorizeAsync(null, null, "Basic");
@@ -344,12 +298,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage")));
var user = new ClaimsPrincipal(new ClaimsIdentity());
// Act
@@ -364,12 +313,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireClaim("Permission", "CanViewPage")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
@@ -517,12 +461,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => policy.RequireRole("Admin", "Users"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => policy.RequireRole("Admin", "Users")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
@@ -541,12 +480,7 @@ public class DefaultAuthorizationServiceTests
public void PolicyThrowsWithNoRequirements()
{
Assert.Throws<InvalidOperationException>(() => BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Basic", policy => { });
- });
- }));
+ services.AddAuthorizationBuilder().AddPolicy("Basic", policy => { })));
}
[Fact]
@@ -554,12 +488,7 @@ public class DefaultAuthorizationServiceTests
{
// Arrange
var authorizationService = BuildAuthorizationService(services =>
- {
- services.AddAuthorization(options =>
- {
- options.AddPolicy("Hao", policy => policy.RequireUserName("Hao"));
- });
- });
+ services.AddAuthorizationBuilder().AddPolicy("Hao", policy => policy.RequireUserName("Hao")));
var user = new ClaimsPrincipal(
new ClaimsIdentity(
new Claim[] {
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
index 7d397c7662..e85b795c68 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
@@ -3,44 +3,11 @@
<BuildHelixPayload>false</BuildHelixPayload>
</PropertyGroup>
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|ARM64">
- <Configuration>Debug</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|Any CPU">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|ARM64">
- <Configuration>Release</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Any CPU">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
+ <Import Project="..\..\build\Config.Definitions.Props" />
+
<PropertyGroup Label="Globals">
<ProjectGuid>{1eac8125-1765-4e2d-8cbe-56dc98a1c8c1}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
- <PlatformToolsetVersion Condition=" '$(PlatformToolsetVersion)' == '' ">v143</PlatformToolsetVersion>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>$(PlatformToolsetVersion)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
diff --git a/src/Servers/IIS/IIS/src/Core/IISConfigurationData.cs b/src/Servers/IIS/IIS/src/Core/IISConfigurationData.cs
index 612c2072c4..41f3aba13f 100644
--- a/src/Servers/IIS/IIS/src/Core/IISConfigurationData.cs
+++ b/src/Servers/IIS/IIS/src/Core/IISConfigurationData.cs
@@ -19,8 +19,8 @@ internal struct IISConfigurationData
public string pwzBindings;
public uint maxRequestBodySize;
- [CustomTypeMarshaller(typeof(IISConfigurationData), CustomTypeMarshallerKind.Value, Features = CustomTypeMarshallerFeatures.UnmanagedResources | CustomTypeMarshallerFeatures.TwoStageMarshalling)]
- public unsafe ref struct Marshaller
+ [CustomMarshaller(typeof(IISConfigurationData), MarshalMode.Default, typeof(Marshaller))]
+ public static class Marshaller
{
public struct Native
{
@@ -34,53 +34,49 @@ internal struct IISConfigurationData
public uint maxRequestBodySize;
}
- private Native _native;
-
- public Marshaller(IISConfigurationData managed)
+ public static Native ConvertToUnmanaged(IISConfigurationData managed)
{
- _native.pNativeApplication = managed.pNativeApplication;
- _native.pwzFullApplicationPath = managed.pwzFullApplicationPath is null ? IntPtr.Zero : Marshal.StringToBSTR(managed.pwzFullApplicationPath);
- _native.pwzVirtualApplicationPath = managed.pwzVirtualApplicationPath is null ? IntPtr.Zero : Marshal.StringToBSTR(managed.pwzVirtualApplicationPath);
- _native.fWindowsAuthEnabled = managed.fWindowsAuthEnabled ? 1 : 0;
- _native.fBasicAuthEnabled = managed.fBasicAuthEnabled ? 1 : 0;
- _native.fAnonymousAuthEnable = managed.fAnonymousAuthEnable ? 1 : 0;
- _native.pwzBindings = managed.pwzBindings is null ? IntPtr.Zero : Marshal.StringToBSTR(managed.pwzBindings);
- _native.maxRequestBodySize = managed.maxRequestBodySize;
+ Native native;
+ native.pNativeApplication = managed.pNativeApplication;
+ native.pwzFullApplicationPath = managed.pwzFullApplicationPath is null ? IntPtr.Zero : Marshal.StringToBSTR(managed.pwzFullApplicationPath);
+ native.pwzVirtualApplicationPath = managed.pwzVirtualApplicationPath is null ? IntPtr.Zero : Marshal.StringToBSTR(managed.pwzVirtualApplicationPath);
+ native.fWindowsAuthEnabled = managed.fWindowsAuthEnabled ? 1 : 0;
+ native.fBasicAuthEnabled = managed.fBasicAuthEnabled ? 1 : 0;
+ native.fAnonymousAuthEnable = managed.fAnonymousAuthEnable ? 1 : 0;
+ native.pwzBindings = managed.pwzBindings is null ? IntPtr.Zero : Marshal.StringToBSTR(managed.pwzBindings);
+ native.maxRequestBodySize = managed.maxRequestBodySize;
+ return native;
}
- public Native ToNativeValue() => _native;
-
- public void FromNativeValue(Native value) => _native = value;
-
- public IISConfigurationData ToManaged()
+ public static void Free(Native native)
{
- return new()
+ if (native.pwzFullApplicationPath != IntPtr.Zero)
{
- pNativeApplication = _native.pNativeApplication,
- pwzFullApplicationPath = _native.pwzFullApplicationPath == IntPtr.Zero ? string.Empty : Marshal.PtrToStringBSTR(_native.pwzFullApplicationPath),
- pwzVirtualApplicationPath = _native.pwzVirtualApplicationPath == IntPtr.Zero ? string.Empty : Marshal.PtrToStringBSTR(_native.pwzVirtualApplicationPath),
- fWindowsAuthEnabled = _native.fWindowsAuthEnabled != 0,
- fBasicAuthEnabled = _native.fBasicAuthEnabled != 0,
- fAnonymousAuthEnable = _native.fAnonymousAuthEnable != 0,
- pwzBindings = _native.pwzBindings == IntPtr.Zero ? string.Empty : Marshal.PtrToStringBSTR(_native.pwzBindings),
- maxRequestBodySize = _native.maxRequestBodySize
- };
- }
-
- public void FreeNative()
- {
- if (_native.pwzFullApplicationPath != IntPtr.Zero)
- {
- Marshal.FreeBSTR(_native.pwzFullApplicationPath);
+ Marshal.FreeBSTR(native.pwzFullApplicationPath);
}
- if (_native.pwzVirtualApplicationPath != IntPtr.Zero)
+ if (native.pwzVirtualApplicationPath != IntPtr.Zero)
{
- Marshal.FreeBSTR(_native.pwzVirtualApplicationPath);
+ Marshal.FreeBSTR(native.pwzVirtualApplicationPath);
}
- if (_native.pwzBindings != IntPtr.Zero)
+ if (native.pwzBindings != IntPtr.Zero)
{
- Marshal.FreeBSTR(_native.pwzBindings);
+ Marshal.FreeBSTR(native.pwzBindings);
}
}
+
+ public static IISConfigurationData ConvertToManaged(Native native)
+ {
+ return new()
+ {
+ pNativeApplication = native.pNativeApplication,
+ pwzFullApplicationPath = native.pwzFullApplicationPath == IntPtr.Zero ? string.Empty : Marshal.PtrToStringBSTR(native.pwzFullApplicationPath),
+ pwzVirtualApplicationPath = native.pwzVirtualApplicationPath == IntPtr.Zero ? string.Empty : Marshal.PtrToStringBSTR(native.pwzVirtualApplicationPath),
+ fWindowsAuthEnabled = native.fWindowsAuthEnabled != 0,
+ fBasicAuthEnabled = native.fBasicAuthEnabled != 0,
+ fAnonymousAuthEnable = native.fAnonymousAuthEnable != 0,
+ pwzBindings = native.pwzBindings == IntPtr.Zero ? string.Empty : Marshal.PtrToStringBSTR(native.pwzBindings),
+ maxRequestBodySize = native.maxRequestBodySize
+ };
+ }
}
}
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/AspNetCorePortTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/AspNetCorePortTests.cs
index 25a684a12e..fd878578a3 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/AspNetCorePortTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/AspNetCorePortTests.cs
@@ -1,14 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.Collections.Generic;
using System.Globalization;
-using System.Linq;
using System.Net;
using System.Net.Sockets;
-using System.Threading.Tasks;
-using Xunit;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Testing;
@@ -58,11 +53,11 @@ public class AspNetCorePortTests : IISFunctionalTestBase
var port = GetUnusedRandomPort();
deploymentParameters.WebConfigBasedEnvironmentVariables["ASPNETCORE_PORT"] = port.ToString(CultureInfo.InvariantCulture);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var responseText = await deploymentResult.HttpClient.GetStringAsync("/ServerAddresses");
-
- Assert.Equal(port, new Uri(responseText).Port);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var responseText = await deploymentResult.HttpClient.GetStringAsync("/ServerAddresses");
+ Assert.Equal(port, new Uri(responseText).Port);
+ });
}
[ConditionalTheory]
@@ -73,12 +68,13 @@ public class AspNetCorePortTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
deploymentParameters.WebConfigBasedEnvironmentVariables["ASPNETCORE_PORT"] = string.Empty;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var responseText = await deploymentResult.HttpClient.GetStringAsync("/ServerAddresses");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var responseText = await deploymentResult.HttpClient.GetStringAsync("/ServerAddresses");
- // If env var is empty, ANCM should assign a random port (same as no env var)
- Assert.InRange(new Uri(responseText).Port, _minPort, _maxPort);
+ // If env var is empty, ANCM should assign a random port (same as no env var)
+ Assert.InRange(new Uri(responseText).Port, _minPort, _maxPort);
+ });
}
[ConditionalTheory]
@@ -89,11 +85,11 @@ public class AspNetCorePortTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
deploymentParameters.WebConfigBasedEnvironmentVariables["ASPNETCORE_PORT"] = port;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/ServerAddresses");
-
- Assert.Equal(HttpStatusCode.BadGateway, response.StatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/ServerAddresses");
+ Assert.Equal(HttpStatusCode.BadGateway, response.StatusCode);
+ });
}
[ConditionalTheory]
@@ -104,45 +100,46 @@ public class AspNetCorePortTests : IISFunctionalTestBase
// Must publish to set env vars in web.config
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- // Shutdown once
- var response = await deploymentResult.HttpClient.GetAsync("/Shutdown");
-
- // Wait for server to start again.
- int i;
- for (i = 0; i < 10; i++)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- // ANCM should eventually recover from being shutdown multiple times.
- response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- if (response.IsSuccessStatusCode)
+ // Shutdown once
+ var response = await deploymentResult.HttpClient.GetAsync("/Shutdown");
+
+ // Wait for server to start again.
+ int i;
+ for (i = 0; i < 10; i++)
{
- break;
+ // ANCM should eventually recover from being shutdown multiple times.
+ response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ if (response.IsSuccessStatusCode)
+ {
+ break;
+ }
}
- }
- if (i == 10)
- {
- // Didn't restart after 10 retries
- Assert.False(true);
- }
+ if (i == 10)
+ {
+ // Didn't restart after 10 retries
+ Assert.False(true);
+ }
- // Shutdown again
- response = await deploymentResult.HttpClient.GetAsync("/Shutdown");
+ // Shutdown again
+ response = await deploymentResult.HttpClient.GetAsync("/Shutdown");
- // return if server starts again.
- for (i = 0; i < 10; i++)
- {
- // ANCM should eventually recover from being shutdown multiple times.
- response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- if (response.IsSuccessStatusCode)
+ // return if server starts again.
+ for (i = 0; i < 10; i++)
{
- return;
+ // ANCM should eventually recover from being shutdown multiple times.
+ response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ if (response.IsSuccessStatusCode)
+ {
+ return;
+ }
}
- }
- // Test failure if this happens.
- Assert.False(true);
+ // Test failure if this happens.
+ Assert.False(true);
+ });
}
private static int GetUnusedRandomPort()
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/GlobalVersionTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/GlobalVersionTests.cs
index 16dd1cab12..56269aa895 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/GlobalVersionTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/GlobalVersionTests.cs
@@ -1,17 +1,12 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.IO;
-using System.Linq;
using System.Net;
-using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -46,11 +41,12 @@ public class GlobalVersionTests : IISFunctionalTestBase
deploymentParameters.HandlerSettings["handlerVersion"] = _handlerVersion20;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
- var responseText = await response.Content.ReadAsStringAsync();
- Assert.Equal(_helloWorldResponse, responseText);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
+ var responseText = await response.Content.ReadAsStringAsync();
+ Assert.Equal(_helloWorldResponse, responseText);
+ });
}
[ConditionalFact]
@@ -66,16 +62,18 @@ public class GlobalVersionTests : IISFunctionalTestBase
deploymentParameters.PublishApplicationBeforeDeployment = true;
deploymentParameters.EnvironmentVariables["ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER"] = temporaryFile;
- var deploymentResult = await DeployAsync(deploymentParameters);
- var requestHandlerPath = Path.Combine(GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20), "aspnetcorev2_outofprocess.dll");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var requestHandlerPath = Path.Combine(GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20), "aspnetcorev2_outofprocess.dll");
- File.Delete(temporaryFile);
- File.Move(requestHandlerPath, temporaryFile);
+ File.Delete(temporaryFile);
+ File.Move(requestHandlerPath, temporaryFile);
- var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
- var responseText = await response.Content.ReadAsStringAsync();
- Assert.Equal(_helloWorldResponse, responseText);
- StopServer();
+ var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
+ var responseText = await response.Content.ReadAsStringAsync();
+ Assert.Equal(_helloWorldResponse, responseText);
+ StopServer();
+ });
}
finally
{
@@ -93,12 +91,13 @@ public class GlobalVersionTests : IISFunctionalTestBase
var deploymentParameters = GetGlobalVersionBaseDeploymentParameters();
deploymentParameters.HandlerSettings["handlerVersion"] = version;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
- Assert.False(response.IsSuccessStatusCode);
- var responseString = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.0", responseString);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
+ Assert.False(response.IsSuccessStatusCode);
+ var responseString = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.0", responseString);
+ });
}
[ConditionalTheory]
@@ -112,16 +111,17 @@ public class GlobalVersionTests : IISFunctionalTestBase
CopyShimToOutput(deploymentParameters);
deploymentParameters.HandlerSettings["handlerVersion"] = version;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
- var newANCMPath = GetANCMRequestHandlerPath(deploymentResult, version);
- Directory.Move(originalANCMPath, newANCMPath);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
+ var newANCMPath = GetANCMRequestHandlerPath(deploymentResult, version);
+ Directory.Move(originalANCMPath, newANCMPath);
- var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
- var responseText = await response.Content.ReadAsStringAsync();
- Assert.Equal(_helloWorldResponse, responseText);
- AssertLoadedVersion(version);
+ var response = await deploymentResult.HttpClient.GetAsync(_helloWorldRequest);
+ var responseText = await response.Content.ReadAsStringAsync();
+ Assert.Equal(_helloWorldResponse, responseText);
+ AssertLoadedVersion(version);
+ });
}
[ConditionalTheory]
@@ -133,20 +133,21 @@ public class GlobalVersionTests : IISFunctionalTestBase
{
var deploymentParameters = GetGlobalVersionBaseDeploymentParameters();
CopyShimToOutput(deploymentParameters);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
- var newANCMPath = GetANCMRequestHandlerPath(deploymentResult, version);
+ var newANCMPath = GetANCMRequestHandlerPath(deploymentResult, version);
- CopyDirectory(originalANCMPath, newANCMPath);
+ CopyDirectory(originalANCMPath, newANCMPath);
- deploymentResult.HttpClient.DefaultRequestHeaders.Add("ANCMRHPath", newANCMPath);
- var response = await deploymentResult.HttpClient.GetAsync("CheckRequestHandlerVersion");
- var responseText = await response.Content.ReadAsStringAsync();
+ deploymentResult.HttpClient.DefaultRequestHeaders.Add("ANCMRHPath", newANCMPath);
+ var response = await deploymentResult.HttpClient.GetAsync("CheckRequestHandlerVersion");
+ var responseText = await response.Content.ReadAsStringAsync();
- Assert.Equal(_helloWorldResponse, responseText);
- AssertLoadedVersion(version);
+ Assert.Equal(_helloWorldResponse, responseText);
+ AssertLoadedVersion(version);
+ });
}
[ConditionalTheory]
@@ -158,32 +159,34 @@ public class GlobalVersionTests : IISFunctionalTestBase
{
var deploymentParameters = GetGlobalVersionBaseDeploymentParameters();
CopyShimToOutput(deploymentParameters);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
-
- deploymentResult.HttpClient.DefaultRequestHeaders.Add("ANCMRHPath", originalANCMPath);
- var response = await deploymentResult.HttpClient.GetAsync("CheckRequestHandlerVersion");
- var responseText = await response.Content.ReadAsStringAsync();
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
- Assert.Equal(_helloWorldResponse, responseText);
+ deploymentResult.HttpClient.DefaultRequestHeaders.Add("ANCMRHPath", originalANCMPath);
+ var response = await deploymentResult.HttpClient.GetAsync("CheckRequestHandlerVersion");
+ var responseText = await response.Content.ReadAsStringAsync();
- StopServer();
+ Assert.Equal(_helloWorldResponse, responseText);
- deploymentResult = await DeployAsync(deploymentParameters);
+ StopServer();
+ });
- originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
- var newANCMPath = GetANCMRequestHandlerPath(deploymentResult, version);
+ var newANCMPath = GetANCMRequestHandlerPath(deploymentResult, version);
- CopyDirectory(originalANCMPath, newANCMPath);
+ CopyDirectory(originalANCMPath, newANCMPath);
- deploymentResult.HttpClient.DefaultRequestHeaders.Add("ANCMRHPath", newANCMPath);
- response = await deploymentResult.HttpClient.GetAsync("CheckRequestHandlerVersion");
- responseText = await response.Content.ReadAsStringAsync();
+ deploymentResult.HttpClient.DefaultRequestHeaders.Add("ANCMRHPath", newANCMPath);
+ var response = await deploymentResult.HttpClient.GetAsync("CheckRequestHandlerVersion");
+ var responseText = await response.Content.ReadAsStringAsync();
- Assert.Equal(_helloWorldResponse, responseText);
- AssertLoadedVersion(version);
+ Assert.Equal(_helloWorldResponse, responseText);
+ AssertLoadedVersion(version);
+ });
}
[ConditionalFact]
@@ -191,19 +194,18 @@ public class GlobalVersionTests : IISFunctionalTestBase
{
var deploymentParameters = GetGlobalVersionBaseDeploymentParameters();
CopyShimToOutput(deploymentParameters);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
- Directory.Delete(originalANCMPath, true);
- var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var originalANCMPath = GetANCMRequestHandlerPath(deploymentResult, _handlerVersion20);
+ Directory.Delete(originalANCMPath, true);
+ var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ });
}
private IISDeploymentParameters GetGlobalVersionBaseDeploymentParameters()
- {
- return Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
- }
+ => Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
private void CopyDirectory(string from, string to)
{
@@ -217,11 +219,9 @@ public class GlobalVersionTests : IISFunctionalTestBase
}
private string GetANCMRequestHandlerPath(IISDeploymentResult deploymentResult, string version)
- {
- return Path.Combine(deploymentResult.ContentRoot,
+ => Path.Combine(deploymentResult.ContentRoot,
deploymentResult.DeploymentParameters.RuntimeArchitecture.ToString(),
version);
- }
private void AssertLoadedVersion(string version)
{
@@ -255,12 +255,12 @@ public class GlobalVersionTests : IISFunctionalTestBase
private static void CopyFiles(DirectoryInfo source, DirectoryInfo target)
{
- foreach (DirectoryInfo directoryInfo in source.GetDirectories())
+ foreach (var directoryInfo in source.GetDirectories())
{
CopyFiles(directoryInfo, target.CreateSubdirectory(directoryInfo.Name));
}
- foreach (FileInfo fileInfo in source.GetFiles())
+ foreach (var fileInfo in source.GetFiles())
{
var destFileName = Path.Combine(target.FullName, fileInfo.Name);
fileInfo.CopyTo(destFileName, overwrite: true);
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/FunctionalTestsBase.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/FunctionalTestsBase.cs
index f23b04caf8..6738a0889e 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/FunctionalTestsBase.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/FunctionalTestsBase.cs
@@ -33,6 +33,14 @@ public class FunctionalTestsBase : LoggedTest
return IISApplicationDeployerFactory.Create(parameters, LoggerFactory);
}
+ protected virtual async Task RunTest(IISDeploymentParameters deploymentParameters, Action<IISDeploymentResult> testCode)
+ {
+ using (var deploymentResult = await DeployAsync(deploymentParameters))
+ {
+ testCode(deploymentResult);
+ }
+ }
+
protected virtual async Task<IISDeploymentResult> DeployAsync(IISDeploymentParameters parameters)
{
_deployer = (IISDeployerBase)CreateDeployer(parameters);
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/IISFunctionalTestBase.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/IISFunctionalTestBase.cs
index c57e0ce97f..dc3295ac15 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/IISFunctionalTestBase.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Infrastructure/IISFunctionalTestBase.cs
@@ -1,15 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.IO;
using System.Net;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.Extensions.Logging;
-using Xunit;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
@@ -34,6 +29,9 @@ public class IISFunctionalTestBase : FunctionalTestsBase
return await DeployAsync(deploymentParameters);
}
+ public Task RunTest(HostingModel hostingModel, Action<IISDeploymentResult> testCode)
+ => RunTest(Fixture.GetBaseDeploymentParameters(hostingModel: hostingModel), testCode);
+
public void AddAppOffline(string appPath, string content = "The app is offline.")
{
File.WriteAllText(Path.Combine(appPath, "app_offline.htm"), content);
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Inprocess/MaxRequestBodySizeTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Inprocess/MaxRequestBodySizeTests.cs
index 00bceeba84..f6e5a118fd 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Inprocess/MaxRequestBodySizeTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Inprocess/MaxRequestBodySizeTests.cs
@@ -3,12 +3,10 @@
using System.Net;
using System.Net.Http;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -59,13 +57,14 @@ public class MaxRequestBodySizeTests : IISFunctionalTestBase
.GetOrAdd("requestFiltering")
.GetOrAdd("requestLimits", "maxAllowedContentLength", "1");
});
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var result = await deploymentResult.HttpClient.PostAsync("/ReadRequestBody", new StringContent("test"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.PostAsync("/ReadRequestBody", new StringContent("test"));
- // IIS either returns a 404 or a 413 based on versions of IIS.
- // Check for both as we don't know which specific patch version.
- Assert.True(result.StatusCode == HttpStatusCode.NotFound || result.StatusCode == HttpStatusCode.RequestEntityTooLarge);
+ // IIS either returns a 404 or a 413 based on versions of IIS.
+ // Check for both as we don't know which specific patch version.
+ Assert.True(result.StatusCode == HttpStatusCode.NotFound || result.StatusCode == HttpStatusCode.RequestEntityTooLarge);
+ });
}
[ConditionalFact]
@@ -82,11 +81,11 @@ public class MaxRequestBodySizeTests : IISFunctionalTestBase
.GetOrAdd("requestFiltering")
.GetOrAdd("requestLimits", "maxAllowedContentLength", "100000000");
});
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var result = await deploymentResult.HttpClient.PostAsync("/ReadRequestBodyLarger", new StringContent(new string('a', 100000000)));
-
- Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.PostAsync("/ReadRequestBodyLarger", new StringContent(new string('a', 100000000)));
+ Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ });
}
[ConditionalFact]
@@ -103,11 +102,11 @@ public class MaxRequestBodySizeTests : IISFunctionalTestBase
.GetOrAdd("requestFiltering")
.GetOrAdd("requestLimits", "maxAllowedContentLength", "4294967295");
});
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var result = await deploymentResult.HttpClient.PostAsync("/ReadRequestBodyLarger", new StringContent(new string('a', 10000)));
-
- Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.PostAsync("/ReadRequestBodyLarger", new StringContent(new string('a', 10000)));
+ Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ });
}
[ConditionalFact]
@@ -115,19 +114,20 @@ public class MaxRequestBodySizeTests : IISFunctionalTestBase
public async Task IISRejectsContentLengthTooLargeByDefault()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- using (var connection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port))
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await connection.Send(
- "POST /HelloWorld HTTP/1.1",
- $"Content-Length: 30000001",
- "Host: localhost",
- "",
- "A");
- var requestLine = await connection.ReadLineAsync();
- Assert.True(requestLine.Contains("404") || requestLine.Contains("413"));
- }
+ using (var connection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port))
+ {
+ await connection.Send(
+ "POST /HelloWorld HTTP/1.1",
+ $"Content-Length: 30000001",
+ "Host: localhost",
+ "",
+ "A");
+ var requestLine = await connection.ReadLineAsync();
+ Assert.True(requestLine.Contains("404") || requestLine.Contains("413"));
+ }
+ });
}
[ConditionalFact]
@@ -149,18 +149,19 @@ public class MaxRequestBodySizeTests : IISFunctionalTestBase
.GetOrAdd("requestFiltering")
.GetOrAdd("requestLimits", "maxAllowedContentLength", "1");
});
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var result = await deploymentResult.HttpClient.PostAsync("/IncreaseRequestLimit", new StringContent("1"));
- Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.PostAsync("/IncreaseRequestLimit", new StringContent("1"));
+ Assert.Equal(HttpStatusCode.OK, result.StatusCode);
- StopServer();
+ StopServer();
- if (deploymentParameters.ServerType == ServerType.IISExpress)
- {
- Assert.Single(TestSink.Writes, w => w.Message.Contains("Increasing the MaxRequestBodySize conflicts with the max value for IIS limit maxAllowedContentLength." +
- " HTTP requests that have a content length greater than maxAllowedContentLength will still be rejected by IIS." +
- " You can disable the limit by either removing or setting the maxAllowedContentLength value to a higher limit."));
- }
+ if (deploymentParameters.ServerType == ServerType.IISExpress)
+ {
+ Assert.Single(TestSink.Writes, w => w.Message.Contains("Increasing the MaxRequestBodySize conflicts with the max value for IIS limit maxAllowedContentLength." +
+ " HTTP requests that have a content length greater than maxAllowedContentLength will still be rejected by IIS." +
+ " You can disable the limit by either removing or setting the maxAllowedContentLength value to a higher limit."));
+ }
+ });
}
}
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Latin1Tests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Latin1Tests.cs
index 16492ab0fd..cde8e404ff 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/Latin1Tests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/Latin1Tests.cs
@@ -1,15 +1,12 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
using System.Net;
using System.Net.Http;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -40,15 +37,16 @@ public class Latin1Tests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.TransformArguments((a, _) => $"{a} AddLatin1");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var client = new HttpClient(new LoggingHandler(new WinHttpHandler() { SendTimeout = TimeSpan.FromMinutes(3) }, deploymentResult.Logger));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var client = new HttpClient(new LoggingHandler(new WinHttpHandler() { SendTimeout = TimeSpan.FromMinutes(3) }, deploymentResult.Logger));
- var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{deploymentResult.ApplicationBaseUri}Latin1");
- requestMessage.Headers.Add("foo", "£");
+ var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{deploymentResult.ApplicationBaseUri}Latin1");
+ requestMessage.Headers.Add("foo", "£");
- var result = await client.SendAsync(requestMessage);
- Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ var result = await client.SendAsync(requestMessage);
+ Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ });
}
[ConditionalFact]
@@ -58,15 +56,16 @@ public class Latin1Tests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.TransformArguments((a, _) => $"{a}");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var client = new HttpClient(new LoggingHandler(new WinHttpHandler() { SendTimeout = TimeSpan.FromMinutes(3) }, deploymentResult.Logger));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var client = new HttpClient(new LoggingHandler(new WinHttpHandler() { SendTimeout = TimeSpan.FromMinutes(3) }, deploymentResult.Logger));
- var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{deploymentResult.ApplicationBaseUri}InvalidCharacter");
- requestMessage.Headers.Add("foo", "£");
+ var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{deploymentResult.ApplicationBaseUri}InvalidCharacter");
+ requestMessage.Headers.Add("foo", "£");
- var result = await client.SendAsync(requestMessage);
- Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ var result = await client.SendAsync(requestMessage);
+ Assert.Equal(HttpStatusCode.OK, result.StatusCode);
+ });
}
[ConditionalFact]
@@ -75,20 +74,20 @@ public class Latin1Tests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.TransformArguments((a, _) => $"{a} AddLatin1");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- using (var connection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port))
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await connection.Send(
- "GET /ReadAndFlushEcho HTTP/1.1",
- "Host: localhost",
- "Connection: close",
- "foo: £\0a",
- "",
- "");
-
- await connection.ReceiveStartsWith("HTTP/1.1 400 Bad Request");
- }
+ using (var connection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port))
+ {
+ await connection.Send(
+ "GET /ReadAndFlushEcho HTTP/1.1",
+ "Host: localhost",
+ "Connection: close",
+ "foo: £\0a",
+ "",
+ "");
+
+ await connection.ReceiveStartsWith("HTTP/1.1 400 Bad Request");
+ }
+ });
}
}
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/LoggingTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/LoggingTests.cs
index 5650fa36dd..8fb01d53c8 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/LoggingTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/LoggingTests.cs
@@ -1,17 +1,12 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.Diagnostics;
using System.Globalization;
-using System.IO;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -65,18 +60,15 @@ public class LoggingTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
deploymentParameters.EnableLogging(LogFolderPath);
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await Helpers.AssertStarts(deploymentResult, path);
-
- StopServer();
-
- var contents = Helpers.ReadAllTextFromFile(Helpers.GetExpectedLogName(deploymentResult, LogFolderPath), Logger);
-
- Assert.Contains("TEST MESSAGE", contents);
- Assert.DoesNotContain("\r\n\r\n", contents);
- Assert.Contains("\r\n", contents);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await Helpers.AssertStarts(deploymentResult, path);
+ StopServer();
+ var contents = Helpers.ReadAllTextFromFile(Helpers.GetExpectedLogName(deploymentResult, LogFolderPath), Logger);
+ Assert.Contains("TEST MESSAGE", contents);
+ Assert.DoesNotContain("\r\n\r\n", contents);
+ Assert.Contains("\r\n", contents);
+ });
}
// Move to separate file
@@ -85,22 +77,20 @@ public class LoggingTests : IISFunctionalTestBase
public async Task InvalidFilePathForLogs_ServerStillRuns(TestVariant variant)
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
-
deploymentParameters.WebConfigActionList.Add(
WebConfigHelpers.AddOrModifyAspNetCoreSection("stdoutLogEnabled", "true"));
deploymentParameters.WebConfigActionList.Add(
WebConfigHelpers.AddOrModifyAspNetCoreSection("stdoutLogFile", Path.Combine("Q:", "std")));
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await Helpers.AssertStarts(deploymentResult, "HelloWorld");
-
- StopServer();
- if (variant.HostingModel == HostingModel.InProcess)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- // Error is getting logged twice, from shim and handler
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.CouldNotStartStdoutFileRedirection("Q:\\std", deploymentResult), Logger, allowMultiple: true);
- }
+ await Helpers.AssertStarts(deploymentResult, "HelloWorld");
+ StopServer();
+ if (variant.HostingModel == HostingModel.InProcess)
+ {
+ // Error is getting logged twice, from shim and handler
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.CouldNotStartStdoutFileRedirection("Q:\\std", deploymentResult), Logger, allowMultiple: true);
+ }
+ });
}
[ConditionalTheory]
@@ -111,12 +101,11 @@ public class LoggingTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
deploymentParameters.HandlerSettings["debugLevel"] = "file";
deploymentParameters.HandlerSettings["debugFile"] = "subdirectory\\debug.txt";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await deploymentResult.HttpClient.GetAsync("/");
-
- AssertLogs(Path.Combine(deploymentResult.ContentRoot, "subdirectory", "debug.txt"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.HttpClient.GetAsync("/");
+ AssertLogs(Path.Combine(deploymentResult.ContentRoot, "subdirectory", "debug.txt"));
+ });
}
[ConditionalTheory]
@@ -125,12 +114,11 @@ public class LoggingTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
deploymentParameters.HandlerSettings["debugLevel"] = "file";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await deploymentResult.HttpClient.GetAsync("/");
-
- AssertLogs(Path.Combine(deploymentResult.ContentRoot, "aspnetcore-debug.log"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.HttpClient.GetAsync("/");
+ AssertLogs(Path.Combine(deploymentResult.ContentRoot, "aspnetcore-debug.log"));
+ });
}
[ConditionalTheory]
@@ -142,11 +130,11 @@ public class LoggingTests : IISFunctionalTestBase
deploymentParameters.EnvironmentVariables["ASPNETCORE_MODULE_DEBUG"] = "file";
// Add empty debugFile handler setting to prevent IIS deployer from overriding debug settings
deploymentParameters.HandlerSettings["debugFile"] = "";
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await deploymentResult.HttpClient.GetAsync("/");
-
- AssertLogs(Path.Combine(deploymentResult.ContentRoot, "aspnetcore-debug.log"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.HttpClient.GetAsync("/");
+ AssertLogs(Path.Combine(deploymentResult.ContentRoot, "aspnetcore-debug.log"));
+ });
}
[ConditionalTheory]
@@ -162,17 +150,17 @@ public class LoggingTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
deploymentParameters.EnvironmentVariables["ASPNETCORE_MODULE_DEBUG_FILE"] = firstTempFile;
deploymentParameters.AddDebugLogToWebConfig(secondTempFile);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/");
+ StopServer();
+ var logContents = Helpers.ReadAllTextFromFile(firstTempFile, Logger);
- StopServer();
- var logContents = Helpers.ReadAllTextFromFile(firstTempFile, Logger);
+ Assert.Contains("Switching debug log files to", logContents);
- Assert.Contains("Switching debug log files to", logContents);
-
- AssertLogs(secondTempFile);
+ AssertLogs(secondTempFile);
+ });
}
finally
{
@@ -205,17 +193,15 @@ public class LoggingTests : IISFunctionalTestBase
var logFolderPath = LogFolderPath + "\\彡⾔";
deploymentParameters.EnableLogging(logFolderPath);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync(path);
-
- Assert.False(response.IsSuccessStatusCode);
-
- StopServer();
-
- var contents = Helpers.ReadAllTextFromFile(Helpers.GetExpectedLogName(deploymentResult, logFolderPath), Logger);
- Assert.Contains("彡⾔", contents);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessThreadExitStdOut(deploymentResult, "12", "(.*)彡⾔(.*)"), Logger);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync(path);
+ Assert.False(response.IsSuccessStatusCode);
+ StopServer();
+ var contents = Helpers.ReadAllTextFromFile(Helpers.GetExpectedLogName(deploymentResult, logFolderPath), Logger);
+ Assert.Contains("彡⾔", contents);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessThreadExitStdOut(deploymentResult, "12", "(.*)彡⾔(.*)"), Logger);
+ });
}
[ConditionalTheory]
@@ -223,15 +209,13 @@ public class LoggingTests : IISFunctionalTestBase
public async Task OnlyOneFileCreatedWithProcessStartTime(TestVariant variant)
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(variant);
-
deploymentParameters.EnableLogging(LogFolderPath);
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- await Helpers.AssertStarts(deploymentResult, "ConsoleWrite");
-
- StopServer();
-
- Assert.Single(Directory.GetFiles(LogFolderPath), Helpers.GetExpectedLogName(deploymentResult, LogFolderPath));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await Helpers.AssertStarts(deploymentResult, "ConsoleWrite");
+ StopServer();
+ Assert.Single(Directory.GetFiles(LogFolderPath), Helpers.GetExpectedLogName(deploymentResult, LogFolderPath));
+ });
}
[ConditionalFact]
@@ -239,13 +223,12 @@ public class LoggingTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
deploymentParameters.TransformArguments((a, _) => $"{a} ConsoleWriteSingle");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("Test");
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.OutOfProcessFailedToStart(deploymentResult, "Wow!"), Logger);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("Test");
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.OutOfProcessFailedToStart(deploymentResult, "Wow!"), Logger);
+ });
}
[ConditionalFact]
@@ -255,13 +238,12 @@ public class LoggingTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
deploymentParameters.HandlerSettings["enableOutOfProcessConsoleRedirection"] = "false";
deploymentParameters.TransformArguments((a, _) => $"{a} ConsoleWriteSingle");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("Test");
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.OutOfProcessFailedToStart(deploymentResult, ""), Logger);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("Test");
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.OutOfProcessFailedToStart(deploymentResult, ""), Logger);
+ });
}
[ConditionalFact]
@@ -269,13 +251,12 @@ public class LoggingTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
deploymentParameters.TransformArguments((a, _) => $"{a} ConsoleWrite30Kb");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("Test");
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.OutOfProcessFailedToStart(deploymentResult, new string('a', 30000)), Logger);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("Test");
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.OutOfProcessFailedToStart(deploymentResult, new string('a', 30000)), Logger);
+ });
}
[ConditionalTheory]
@@ -284,22 +265,18 @@ public class LoggingTests : IISFunctionalTestBase
public async Task CheckStdoutLoggingToPipeWithFirstWrite(string path)
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
-
var firstWriteString = "TEST MESSAGE";
-
deploymentParameters.TransformArguments((a, _) => $"{a} {path}");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await Helpers.AssertStarts(deploymentResult);
-
- StopServer();
-
- if (deploymentParameters.ServerType == ServerType.IISExpress)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- // We can't read stdout logs from IIS as they aren't redirected.
- Assert.Contains(TestSink.Writes, context => context.Message.Contains(firstWriteString));
- }
+ await Helpers.AssertStarts(deploymentResult);
+ StopServer();
+ if (deploymentParameters.ServerType == ServerType.IISExpress)
+ {
+ // We can't read stdout logs from IIS as they aren't redirected.
+ Assert.Contains(TestSink.Writes, context => context.Message.Contains(firstWriteString));
+ }
+ });
}
[ConditionalFact]
@@ -307,28 +284,29 @@ public class LoggingTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await Helpers.AssertStarts(deploymentResult);
-
- StopServer();
-
- var aspnetcorev2Log = TestSink.Writes.First(w => w.Message.Contains("Description: IIS ASP.NET Core Module V2. Commit:"));
- var aspnetcoreHandlerLog = TestSink.Writes.First(w => w.Message.Contains("Description: IIS ASP.NET Core Module V2 Request Handler. Commit:"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await Helpers.AssertStarts(deploymentResult);
- var processIdPattern = new Regex("Process Id: (\\d+)\\.", RegexOptions.Singleline);
- var processIdMatch = processIdPattern.Match(aspnetcorev2Log.Message);
- Assert.True(processIdMatch.Success, $"'{processIdPattern}' did not match '{aspnetcorev2Log}'");
- var processId = int.Parse(processIdMatch.Groups[1].Value, CultureInfo.InvariantCulture);
+ StopServer();
- if (DeployerSelector.HasNewShim)
- {
- AssertTimestampAndPIDPrefix(processId, aspnetcorev2Log.Message);
- }
- if (DeployerSelector.HasNewHandler)
- {
- AssertTimestampAndPIDPrefix(processId, aspnetcoreHandlerLog.Message);
- }
+ var aspnetcorev2Log = TestSink.Writes.First(w => w.Message.Contains("Description: IIS ASP.NET Core Module V2. Commit:"));
+ var aspnetcoreHandlerLog = TestSink.Writes.First(w => w.Message.Contains("Description: IIS ASP.NET Core Module V2 Request Handler. Commit:"));
+
+ var processIdPattern = new Regex("Process Id: (\\d+)\\.", RegexOptions.Singleline);
+ var processIdMatch = processIdPattern.Match(aspnetcorev2Log.Message);
+ Assert.True(processIdMatch.Success, $"'{processIdPattern}' did not match '{aspnetcorev2Log}'");
+ var processId = int.Parse(processIdMatch.Groups[1].Value, CultureInfo.InvariantCulture);
+
+ if (DeployerSelector.HasNewShim)
+ {
+ AssertTimestampAndPIDPrefix(processId, aspnetcorev2Log.Message);
+ }
+ if (DeployerSelector.HasNewHandler)
+ {
+ AssertTimestampAndPIDPrefix(processId, aspnetcoreHandlerLog.Message);
+ }
+ });
}
private static string ReadLogs(string logPath)
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs
index 31b38eea5b..4cca5c215b 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs
@@ -1,16 +1,11 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -42,10 +37,12 @@ public class MultiApplicationTests : IISFunctionalTestBase
{
var parameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
parameters.ServerConfigActionList.Add(DuplicateApplication);
- var result = await DeployAsync(parameters);
- var id1 = await result.HttpClient.GetStringAsync("/app1/ProcessId");
- var id2 = await result.HttpClient.GetStringAsync("/app2/ProcessId");
- Assert.NotEqual(id2, id1);
+ await RunTest(parameters, async result =>
+ {
+ var id1 = await result.HttpClient.GetStringAsync("/app1/ProcessId");
+ var id2 = await result.HttpClient.GetStringAsync("/app2/ProcessId");
+ Assert.NotEqual(id2, id1);
+ });
}
[ConditionalFact]
@@ -76,24 +73,25 @@ public class MultiApplicationTests : IISFunctionalTestBase
{
var parameters = Fixture.GetBaseDeploymentParameters(firstApp);
parameters.ServerConfigActionList.Add(DuplicateApplication);
- var result = await DeployAsync(parameters);
-
- // Modify hosting model of other app to be the opposite
- var otherApp = firstApp == HostingModel.InProcess ? HostingModel.OutOfProcess : HostingModel.InProcess;
- SetHostingModel(_publishedApplication.Path, otherApp);
-
- var result1 = await result.HttpClient.GetAsync("/app1/HelloWorld");
- var result2 = await result.HttpClient.GetAsync("/app2/HelloWorld");
- Assert.Equal(200, (int)result1.StatusCode);
- Assert.Equal(500, (int)result2.StatusCode);
- StopServer();
-
- if (DeployerSelector.HasNewShim)
+ await RunTest(parameters, async result =>
{
- Assert.Contains("500.34", await result2.Content.ReadAsStringAsync());
- }
-
- EventLogHelpers.VerifyEventLogEvent(result, "Mixed hosting model is not supported.", Logger);
+ // Modify hosting model of other app to be the opposite
+ var otherApp = firstApp == HostingModel.InProcess ? HostingModel.OutOfProcess : HostingModel.InProcess;
+ SetHostingModel(_publishedApplication.Path, otherApp);
+
+ var result1 = await result.HttpClient.GetAsync("/app1/HelloWorld");
+ var result2 = await result.HttpClient.GetAsync("/app2/HelloWorld");
+ Assert.Equal(200, (int)result1.StatusCode);
+ Assert.Equal(500, (int)result2.StatusCode);
+ StopServer();
+
+ if (DeployerSelector.HasNewShim)
+ {
+ Assert.Contains("500.34", await result2.Content.ReadAsStringAsync());
+ }
+
+ EventLogHelpers.VerifyEventLogEvent(result, "Mixed hosting model is not supported.", Logger);
+ });
}
private void SetHostingModel(string directory, HostingModel model)
diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs
index 17a375e9f4..6407f672fd 100644
--- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs
@@ -1,14 +1,11 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
using System.Net.Http;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -48,13 +45,14 @@ public class WindowsAuthTests : IISFunctionalTestBase
deploymentParameters.SetWindowsAuth();
// The default in hosting sets windows auth to true.
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var client = deploymentResult.CreateClient(new HttpClientHandler { UseDefaultCredentials = true });
- var response = await client.GetAsync("/Auth");
- var responseText = await response.Content.ReadAsStringAsync();
-
- Assert.StartsWith("Windows:", responseText);
- Assert.Contains(Environment.UserName, responseText);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var client = deploymentResult.CreateClient(new HttpClientHandler { UseDefaultCredentials = true });
+ var response = await client.GetAsync("/Auth");
+ var responseText = await response.Content.ReadAsStringAsync();
+
+ Assert.StartsWith("Windows:", responseText);
+ Assert.Contains(Environment.UserName, responseText);
+ });
}
}
diff --git a/src/Servers/IIS/IIS/test/Common.LongTests/ShutdownTests.cs b/src/Servers/IIS/IIS/test/Common.LongTests/ShutdownTests.cs
index 1b45ede43b..0860666670 100644
--- a/src/Servers/IIS/IIS/test/Common.LongTests/ShutdownTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.LongTests/ShutdownTests.cs
@@ -42,15 +42,14 @@ public class ShutdownTests : IISFunctionalTestBase
deploymentParameters.WebConfigActionList.Add(
WebConfigHelpers.AddOrModifyAspNetCoreSection("shutdownTimeLimit", "1"));
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- Assert.Equal("Hello World", await deploymentResult.HttpClient.GetStringAsync("/HelloWorld"));
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvents(deploymentResult,
- EventLogHelpers.InProcessStarted(deploymentResult),
- EventLogHelpers.InProcessFailedToStop(deploymentResult, ""));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ Assert.Equal("Hello World", await deploymentResult.HttpClient.GetStringAsync("/HelloWorld"));
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvents(deploymentResult,
+ EventLogHelpers.InProcessStarted(deploymentResult),
+ EventLogHelpers.InProcessFailedToStop(deploymentResult, ""));
+ });
}
[ConditionalTheory]
@@ -61,17 +60,18 @@ public class ShutdownTests : IISFunctionalTestBase
// Canceled token doesn't affect shutdown, in-proc doesn't handle ungraceful shutdown
// IIS's ShutdownTimeLimit will handle that.
var parameters = Fixture.GetBaseDeploymentParameters();
- var deploymentResult = await DeployAsync(parameters);
- try
- {
- await deploymentResult.HttpClient.GetAsync(path);
- }
- catch (HttpRequestException ex) when (ex.InnerException is IOException)
+ await RunTest(parameters, async deploymentResult =>
{
- // Server might close a connection before request completes
- }
-
- deploymentResult.AssertWorkerProcessStop();
+ try
+ {
+ await deploymentResult.HttpClient.GetAsync(path);
+ }
+ catch (HttpRequestException ex) when (ex.InnerException is IOException)
+ {
+ // Server might close a connection before request completes
+ }
+ deploymentResult.AssertWorkerProcessStop();
+ });
}
[ConditionalFact]
@@ -89,47 +89,49 @@ public class ShutdownTests : IISFunctionalTestBase
[RequiresNewShim]
public async Task AppOfflineDroppedWhileSiteIsDown_SiteReturns503_OutOfProcess()
{
- var deploymentResult = await DeployApp(HostingModel.OutOfProcess);
-
- AddAppOffline(deploymentResult.ContentRoot);
-
- await AssertAppOffline(deploymentResult);
- DeletePublishOutput(deploymentResult);
+ await RunTest(HostingModel.OutOfProcess, async deploymentResult =>
+ {
+ AddAppOffline(deploymentResult.ContentRoot);
+ await AssertAppOffline(deploymentResult);
+ DeletePublishOutput(deploymentResult);
+ });
}
[ConditionalFact]
public async Task LockedAppOfflineDroppedWhileSiteIsDown_SiteReturns503_InProcess()
{
- var deploymentResult = await DeployApp(HostingModel.InProcess);
-
- // Add app_offline without shared access
- using (var stream = File.Open(Path.Combine(deploymentResult.ContentRoot, "app_offline.htm"), FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))
- using (var writer = new StreamWriter(stream))
+ await RunTest(HostingModel.InProcess, async deploymentResult =>
{
- await writer.WriteLineAsync("App if offline but you wouldn't see this message");
- await writer.FlushAsync();
- await AssertAppOffline(deploymentResult, "");
- }
+ // Add app_offline without shared access
+ using (var stream = File.Open(Path.Combine(deploymentResult.ContentRoot, "app_offline.htm"), FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))
+ using (var writer = new StreamWriter(stream))
+ {
+ await writer.WriteLineAsync("App if offline but you wouldn't see this message");
+ await writer.FlushAsync();
+ await AssertAppOffline(deploymentResult, "");
+ }
- DeletePublishOutput(deploymentResult);
+ DeletePublishOutput(deploymentResult);
+ });
}
[ConditionalFact]
[RequiresNewShim]
public async Task LockedAppOfflineDroppedWhileSiteIsDown_SiteReturns503_OutOfProcess()
{
- var deploymentResult = await DeployApp(HostingModel.OutOfProcess);
-
- // Add app_offline without shared access
- using (var stream = File.Open(Path.Combine(deploymentResult.ContentRoot, "app_offline.htm"), FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))
- using (var writer = new StreamWriter(stream))
+ await RunTest(HostingModel.OutOfProcess, async deploymentResult =>
{
- await writer.WriteLineAsync("App if offline but you wouldn't see this message");
- await writer.FlushAsync();
- await AssertAppOffline(deploymentResult, "");
- }
+ // Add app_offline without shared access
+ using (var stream = File.Open(Path.Combine(deploymentResult.ContentRoot, "app_offline.htm"), FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))
+ using (var writer = new StreamWriter(stream))
+ {
+ await writer.WriteLineAsync("App if offline but you wouldn't see this message");
+ await writer.FlushAsync();
+ await AssertAppOffline(deploymentResult, "");
+ }
- DeletePublishOutput(deploymentResult);
+ DeletePublishOutput(deploymentResult);
+ });
}
[ConditionalFact]
@@ -137,17 +139,17 @@ public class ShutdownTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(hostingModel: HostingModel.InProcess);
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("processPath", "nonexistent"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(500, (int)result.StatusCode);
+ Assert.Contains("500.0", await result.Content.ReadAsStringAsync());
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(500, (int)result.StatusCode);
- Assert.Contains("500.0", await result.Content.ReadAsStringAsync());
-
- AddAppOffline(deploymentResult.ContentRoot);
+ AddAppOffline(deploymentResult.ContentRoot);
- await AssertAppOffline(deploymentResult);
- DeletePublishOutput(deploymentResult);
+ await AssertAppOffline(deploymentResult);
+ DeletePublishOutput(deploymentResult);
+ });
}
[ConditionalFact]
@@ -156,34 +158,35 @@ public class ShutdownTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(hostingModel: HostingModel.OutOfProcess);
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("processPath", "nonexistent"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(502, (int)result.StatusCode);
+ Assert.Contains("502.5", await result.Content.ReadAsStringAsync());
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(502, (int)result.StatusCode);
- Assert.Contains("502.5", await result.Content.ReadAsStringAsync());
-
- AddAppOffline(deploymentResult.ContentRoot);
+ AddAppOffline(deploymentResult.ContentRoot);
- await AssertAppOffline(deploymentResult);
- DeletePublishOutput(deploymentResult);
+ await AssertAppOffline(deploymentResult);
+ DeletePublishOutput(deploymentResult);
+ });
}
[ConditionalFact]
public async Task AppOfflineDroppedWhileSiteFailedToStartInRequestHandler_SiteStops_InProcess()
{
- var deploymentResult = await DeployApp(HostingModel.InProcess);
-
- // Set file content to empty so it fails at runtime
- File.WriteAllText(Path.Combine(deploymentResult.ContentRoot, "Microsoft.AspNetCore.Server.IIS.dll"), "");
+ await RunTest(HostingModel.InProcess, async deploymentResult =>
+ {
+ // Set file content to empty so it fails at runtime
+ File.WriteAllText(Path.Combine(deploymentResult.ContentRoot, "Microsoft.AspNetCore.Server.IIS.dll"), "");
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(500, (int)result.StatusCode);
- Assert.Contains("500.30", await result.Content.ReadAsStringAsync());
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(500, (int)result.StatusCode);
+ Assert.Contains("500.30", await result.Content.ReadAsStringAsync());
- AddAppOffline(deploymentResult.ContentRoot);
+ AddAppOffline(deploymentResult.ContentRoot);
- await deploymentResult.AssertRecycledAsync(() => AssertAppOffline(deploymentResult));
+ await deploymentResult.AssertRecycledAsync(() => AssertAppOffline(deploymentResult));
+ });
}
[ConditionalFact]
@@ -195,69 +198,69 @@ public class ShutdownTests : IISFunctionalTestBase
// and graceful shutdown occurs.
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} IncreaseShutdownLimit");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- var deploymentResult = await DeployAsync(deploymentParameters);
+ // Send two requests that will hang until data is sent from the client.
+ var connectionList = new List<TestConnection>();
- var result = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ for (var i = 0; i < 2; i++)
+ {
+ var connection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port);
+ await connection.Send(
+ "POST /ReadAndCountRequestBody HTTP/1.1",
+ "Content-Length: 1",
+ "Host: localhost",
+ "Connection: close",
+ "",
+ "");
+
+ await connection.Receive(
+ "HTTP/1.1 200 OK", "");
+ await connection.ReceiveHeaders();
+ await connection.Receive("1", $"{i + 1}");
+ connectionList.Add(connection);
+ }
- // Send two requests that will hang until data is sent from the client.
- var connectionList = new List<TestConnection>();
+ // Send a request that will end once app lifetime is triggered (ApplicationStopping cts).
+ var statusConnection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port);
- for (var i = 0; i < 2; i++)
- {
- var connection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port);
- await connection.Send(
- "POST /ReadAndCountRequestBody HTTP/1.1",
- "Content-Length: 1",
+ await statusConnection.Send(
+ "GET /WaitForAppToStartShuttingDown HTTP/1.1",
"Host: localhost",
"Connection: close",
"",
"");
- await connection.Receive(
- "HTTP/1.1 200 OK", "");
- await connection.ReceiveHeaders();
- await connection.Receive("1", $"{i + 1}");
- connectionList.Add(connection);
- }
-
- // Send a request that will end once app lifetime is triggered (ApplicationStopping cts).
- var statusConnection = new TestConnection(deploymentResult.HttpClient.BaseAddress.Port);
-
- await statusConnection.Send(
- "GET /WaitForAppToStartShuttingDown HTTP/1.1",
- "Host: localhost",
- "Connection: close",
- "",
- "");
+ await statusConnection.Receive("HTTP/1.1 200 OK",
+ "");
- await statusConnection.Receive("HTTP/1.1 200 OK",
- "");
+ await statusConnection.ReceiveHeaders();
- await statusConnection.ReceiveHeaders();
+ // Receiving some data means we are currently waiting for IHostApplicationLifetime.
+ await statusConnection.Receive("5",
+ "test1",
+ "");
- // Receiving some data means we are currently waiting for IHostApplicationLifetime.
- await statusConnection.Receive("5",
- "test1",
- "");
+ AddAppOffline(deploymentResult.ContentRoot);
- AddAppOffline(deploymentResult.ContentRoot);
+ // Receive the rest of all open connections.
+ await statusConnection.Receive("5", "test2", "");
- // Receive the rest of all open connections.
- await statusConnection.Receive("5", "test2", "");
-
- for (var i = 0; i < 2; i++)
- {
- await connectionList[i].Send("a", "");
- await connectionList[i].Receive("", "4", "done");
- connectionList[i].Dispose();
- }
+ for (var i = 0; i < 2; i++)
+ {
+ await connectionList[i].Send("a", "");
+ await connectionList[i].Receive("", "4", "done");
+ connectionList[i].Dispose();
+ }
- deploymentResult.AssertWorkerProcessStop();
+ deploymentResult.AssertWorkerProcessStop();
- // Shutdown should be graceful here!
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- EventLogHelpers.InProcessShutdown(), Logger);
+ // Shutdown should be graceful here!
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ EventLogHelpers.InProcessShutdown(), Logger);
+ });
}
[ConditionalFact]
@@ -289,30 +292,26 @@ public class ShutdownTests : IISFunctionalTestBase
[ConditionalFact]
public async Task AppOfflineDropped_CanRemoveAppOfflineAfterAddingAndSiteWorks_InProcess()
{
- var deploymentResult = await DeployApp(HostingModel.InProcess);
-
- AddAppOffline(deploymentResult.ContentRoot);
-
- await AssertAppOffline(deploymentResult);
-
- RemoveAppOffline(deploymentResult.ContentRoot);
-
- await AssertRunning(deploymentResult);
+ await RunTest(HostingModel.InProcess, async deploymentResult =>
+ {
+ AddAppOffline(deploymentResult.ContentRoot);
+ await AssertAppOffline(deploymentResult);
+ RemoveAppOffline(deploymentResult.ContentRoot);
+ await AssertRunning(deploymentResult);
+ });
}
[ConditionalFact]
[RequiresNewShim]
public async Task AppOfflineDropped_CanRemoveAppOfflineAfterAddingAndSiteWorks_OutOfProcess()
{
- var deploymentResult = await DeployApp(HostingModel.OutOfProcess);
-
- AddAppOffline(deploymentResult.ContentRoot);
-
- await AssertAppOffline(deploymentResult);
-
- RemoveAppOffline(deploymentResult.ContentRoot);
-
- await AssertRunning(deploymentResult);
+ await RunTest(HostingModel.OutOfProcess, async deploymentResult =>
+ {
+ AddAppOffline(deploymentResult.ContentRoot);
+ await AssertAppOffline(deploymentResult);
+ RemoveAppOffline(deploymentResult.ContentRoot);
+ await AssertRunning(deploymentResult);
+ });
}
[ConditionalFact]
@@ -375,15 +374,15 @@ public class ShutdownTests : IISFunctionalTestBase
public async Task ConfigurationChangeStopsInProcess()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.InProcess);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.AssertStarts();
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await deploymentResult.AssertStarts();
-
- // Just "touching" web.config should be enough
- deploymentResult.ModifyWebConfig(element => { });
+ // Just "touching" web.config should be enough
+ deploymentResult.ModifyWebConfig(element => { });
- await deploymentResult.AssertRecycledAsync();
+ await deploymentResult.AssertRecycledAsync();
+ });
}
[ConditionalFact]
@@ -392,16 +391,17 @@ public class ShutdownTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
- // Just "touching" web.config should be enough
- deploymentResult.ModifyWebConfig(element => { });
+ // Just "touching" web.config should be enough
+ deploymentResult.ModifyWebConfig(element => { });
- // Have to retry here to allow ANCM to receive notification and react to it
- // Verify that worker process gets restarted with new process id
- await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() != processBefore);
+ // Have to retry here to allow ANCM to receive notification and react to it
+ // Verify that worker process gets restarted with new process id
+ await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() != processBefore);
+ });
}
[ConditionalFact]
@@ -410,19 +410,19 @@ public class ShutdownTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.InProcess);
deploymentParameters.HandlerSettings["disallowRotationOnConfigChange"] = "true";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
-
- await deploymentResult.AssertStarts();
+ await deploymentResult.AssertStarts();
- // Just "touching" web.config should be enough
- deploymentResult.ModifyWebConfig(element => { });
+ // Just "touching" web.config should be enough
+ deploymentResult.ModifyWebConfig(element => { });
- // Have to retry here to allow ANCM to receive notification and react to it
- // Verify that worker process does not get restarted with new process id
- await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() == processBefore);
+ // Have to retry here to allow ANCM to receive notification and react to it
+ // Verify that worker process does not get restarted with new process id
+ await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() == processBefore);
+ });
}
[ConditionalFact]
@@ -430,19 +430,19 @@ public class ShutdownTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.InProcess);
deploymentParameters.HandlerSettings["disallowRotationOnConfigChange"] = "true";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
-
- await deploymentResult.AssertStarts();
+ await deploymentResult.AssertStarts();
- // Just "touching" applicationHost.config should be enough
- _deployer.ModifyApplicationHostConfig(element => { });
+ // Just "touching" applicationHost.config should be enough
+ _deployer.ModifyApplicationHostConfig(element => { });
- // Have to retry here to allow ANCM to receive notification and react to it
- // Verify that worker process does not get restarted with new process id
- await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() == processBefore);
+ // Have to retry here to allow ANCM to receive notification and react to it
+ // Verify that worker process does not get restarted with new process id
+ await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() == processBefore);
+ });
}
[ConditionalFact]
@@ -451,38 +451,38 @@ public class ShutdownTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
deploymentParameters.HandlerSettings["disallowRotationOnConfigChange"] = "true";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var processBefore = await deploymentResult.HttpClient.GetStringAsync("/ProcessId");
-
- // Just "touching" web.config should be enough
- deploymentResult.ModifyWebConfig(element => { });
+ // Just "touching" web.config should be enough
+ deploymentResult.ModifyWebConfig(element => { });
- // Have to retry here to allow ANCM to receive notification and react to it
- // Verify that worker process does not get restarted with new process id
- await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() == processBefore);
+ // Have to retry here to allow ANCM to receive notification and react to it
+ // Verify that worker process does not get restarted with new process id
+ await deploymentResult.HttpClient.RetryRequestAsync("/ProcessId", async r => await r.Content.ReadAsStringAsync() == processBefore);
+ });
}
[ConditionalFact]
public async Task OutOfProcessToInProcessHostingModelSwitchWorks()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await deploymentResult.AssertStarts();
-
- deploymentResult.ModifyWebConfig(element => element
- .Descendants("system.webServer")
- .Single()
- .GetOrAdd("aspNetCore")
- .SetAttributeValue("hostingModel", "inprocess"));
-
- // Have to retry here to allow ANCM to receive notification and react to it
- // Verify that inprocess application was created and started, checking the server
- // header to see that it is running inprocess
- await deploymentResult.HttpClient.RetryRequestAsync("/HelloWorld", r => r.Headers.Server.ToString().StartsWith("Microsoft", StringComparison.Ordinal));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.AssertStarts();
+
+ deploymentResult.ModifyWebConfig(element => element
+ .Descendants("system.webServer")
+ .Single()
+ .GetOrAdd("aspNetCore")
+ .SetAttributeValue("hostingModel", "inprocess"));
+
+ // Have to retry here to allow ANCM to receive notification and react to it
+ // Verify that inprocess application was created and started, checking the server
+ // header to see that it is running inprocess
+ await deploymentResult.HttpClient.RetryRequestAsync("/HelloWorld", r => r.Headers.Server.ToString().StartsWith("Microsoft", StringComparison.Ordinal));
+ });
}
[ConditionalFact]
@@ -494,37 +494,38 @@ public class ShutdownTests : IISFunctionalTestBase
private async Task ConfigurationTouchedStress(HostingModel hostingModel)
{
- var deploymentResult = await DeployAsync(Fixture.GetBaseDeploymentParameters(hostingModel));
-
- await deploymentResult.AssertStarts();
- var load = Helpers.StressLoad(deploymentResult.HttpClient, "/HelloWorld", response =>
+ await RunTest(Fixture.GetBaseDeploymentParameters(hostingModel), async deploymentResult =>
{
- var statusCode = (int)response.StatusCode;
- Assert.True(statusCode == 200 || statusCode == 503, "Status code was " + statusCode);
- });
+ await deploymentResult.AssertStarts();
+ var load = Helpers.StressLoad(deploymentResult.HttpClient, "/HelloWorld", response =>
+ {
+ var statusCode = (int)response.StatusCode;
+ Assert.True(statusCode == 200 || statusCode == 503, "Status code was " + statusCode);
+ });
- for (var i = 0; i < 100; i++)
- {
- // ModifyWebConfig might fail if web.config is being read by IIS
- RetryHelper.RetryOperation(
- () => deploymentResult.ModifyWebConfig(element => { }),
- e => Logger.LogError($"Failed to touch web.config : {e.Message}"),
- retryCount: 3,
- retryDelayMilliseconds: RetryDelay.Milliseconds);
- }
+ for (var i = 0; i < 100; i++)
+ {
+ // ModifyWebConfig might fail if web.config is being read by IIS
+ RetryHelper.RetryOperation(
+ () => deploymentResult.ModifyWebConfig(element => { }),
+ e => Logger.LogError($"Failed to touch web.config : {e.Message}"),
+ retryCount: 3,
+ retryDelayMilliseconds: RetryDelay.Milliseconds);
+ }
- try
- {
- await load;
- }
- catch (HttpRequestException ex) when (ex.InnerException is IOException | ex.InnerException is SocketException)
- {
- // IOException in InProcess is fine, just means process stopped
- if (hostingModel != HostingModel.InProcess)
+ try
{
- throw;
+ await load;
}
- }
+ catch (HttpRequestException ex) when (ex.InnerException is IOException | ex.InnerException is SocketException)
+ {
+ // IOException in InProcess is fine, just means process stopped
+ if (hostingModel != HostingModel.InProcess)
+ {
+ throw;
+ }
+ }
+ });
}
[ConditionalFact]
@@ -534,14 +535,14 @@ public class ShutdownTests : IISFunctionalTestBase
try
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/Abort").TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/Abort").TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue);
-
- Assert.Equal(HttpStatusCode.BadGateway, response.StatusCode);
- // 0x80072f78 ERROR_HTTP_INVALID_SERVER_RESPONSE The server returned an invalid or unrecognized response
- Assert.Contains("0x80072f78", await response.Content.ReadAsStringAsync());
+ Assert.Equal(HttpStatusCode.BadGateway, response.StatusCode);
+ // 0x80072f78 ERROR_HTTP_INVALID_SERVER_RESPONSE The server returned an invalid or unrecognized response
+ Assert.Contains("0x80072f78", await response.Content.ReadAsStringAsync());
+ });
}
catch (HttpRequestException)
{
@@ -555,11 +556,11 @@ public class ShutdownTests : IISFunctionalTestBase
try
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.InProcess);
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var response = await deploymentResult.HttpClient.GetAsync("/Abort").TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue);
-
- Assert.True(false, "Should not reach here");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/Abort").TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue);
+ Assert.True(false, "Should not reach here");
+ });
}
catch (HttpRequestException)
{
diff --git a/src/Servers/IIS/IIS/test/Common.LongTests/StartupTests.cs b/src/Servers/IIS/IIS/test/Common.LongTests/StartupTests.cs
index 6d47754bd1..79e2640b03 100644
--- a/src/Servers/IIS/IIS/test/Common.LongTests/StartupTests.cs
+++ b/src/Servers/IIS/IIS/test/Common.LongTests/StartupTests.cs
@@ -63,23 +63,24 @@ public class StartupTests : IISFunctionalTestBase
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("processPath", path));
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("arguments", arguments));
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
- StopServer();
+ StopServer();
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.UnableToStart(deploymentResult, subError), Logger);
- if (DeployerSelector.HasNewShim)
- {
- Assert.Contains("500.0", await response.Content.ReadAsStringAsync());
- }
- else
- {
- Assert.Contains("500.0", await response.Content.ReadAsStringAsync());
- }
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.UnableToStart(deploymentResult, subError), Logger);
+ if (DeployerSelector.HasNewShim)
+ {
+ Assert.Contains("500.0", await response.Content.ReadAsStringAsync());
+ }
+ else
+ {
+ Assert.Contains("500.0", await response.Content.ReadAsStringAsync());
+ }
+ });
}
[ConditionalFact]
@@ -111,16 +112,15 @@ public class StartupTests : IISFunctionalTestBase
public async Task StartsWithDotnetOnThePath(string path)
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
-
deploymentParameters.EnvironmentVariables["PATH"] = Path.GetDirectoryName(_dotnetLocation);
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("processPath", path));
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- await deploymentResult.AssertStarts();
-
- StopServer();
- // Verify that in this scenario where.exe was invoked only once by shim and request handler uses cached value
- Assert.Equal(1, TestSink.Writes.Count(w => w.Message.Contains("Invoking where.exe to find dotnet.exe")));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.AssertStarts();
+ StopServer();
+ // Verify that in this scenario where.exe was invoked only once by shim and request handler uses cached value
+ Assert.Equal(1, TestSink.Writes.Count(w => w.Message.Contains("Invoking where.exe to find dotnet.exe")));
+ });
}
[ConditionalFact]
@@ -146,13 +146,15 @@ public class StartupTests : IISFunctionalTestBase
"InstallLocation",
installDir))
{
- var deploymentResult = await DeployAsync(deploymentParameters);
- await deploymentResult.AssertStarts();
- StopServer();
- // Verify that in this scenario dotnet.exe was found using InstallLocation lookup
- // I would've liked to make a copy of dotnet directory in this test and use it for verification
- // but dotnet roots are usually very large on dev machines so this test would take disproportionally long time and disk space
- Assert.Equal(1, TestSink.Writes.Count(w => w.Message.Contains($"Found dotnet.exe in InstallLocation at '{installDir}\\dotnet.exe'")));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await deploymentResult.AssertStarts();
+ StopServer();
+ // Verify that in this scenario dotnet.exe was found using InstallLocation lookup
+ // I would've liked to make a copy of dotnet directory in this test and use it for verification
+ // but dotnet roots are usually very large on dev machines so this test would take disproportionally long time and disk space
+ Assert.Equal(1, TestSink.Writes.Count(w => w.Message.Contains($"Found dotnet.exe in InstallLocation at '{installDir}\\dotnet.exe'")));
+ });
}
}
}
@@ -163,24 +165,21 @@ public class StartupTests : IISFunctionalTestBase
public async Task DoesNotStartIfDisabled()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
-
using (new TestRegistryKey(
Registry.LocalMachine,
"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module V2\\Parameters",
"DisableANCM",
1))
{
- var deploymentResult = await DeployAsync(deploymentParameters);
- // Disabling ANCM produces no log files
- deploymentResult.AllowNoLogs();
-
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
-
- Assert.False(response.IsSuccessStatusCode);
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, "AspNetCore Module is disabled", Logger);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ // Disabling ANCM produces no log files
+ deploymentResult.AllowNoLogs();
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, "AspNetCore Module is disabled", Logger);
+ });
}
}
@@ -209,13 +208,13 @@ public class StartupTests : IISFunctionalTestBase
// We need the right dotnet on the path in IIS
deploymentParameters.EnvironmentVariables["PATH"] = Path.GetDirectoryName(DotNetCommands.GetDotNetExecutable(deploymentParameters.RuntimeArchitecture));
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- Assert.True(File.Exists(Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.exe")));
- Assert.False(File.Exists(Path.Combine(deploymentResult.ContentRoot, "hostfxr.dll")));
- Assert.Contains("InProcessWebSite.exe", Helpers.ReadAllTextFromFile(Path.Combine(deploymentResult.ContentRoot, "web.config"), Logger));
-
- await deploymentResult.AssertStarts();
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ Assert.True(File.Exists(Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.exe")));
+ Assert.False(File.Exists(Path.Combine(deploymentResult.ContentRoot, "hostfxr.dll")));
+ Assert.Contains("InProcessWebSite.exe", Helpers.ReadAllTextFromFile(Path.Combine(deploymentResult.ContentRoot, "web.config"), Logger));
+ await deploymentResult.AssertStarts();
+ });
}
[ConditionalFact]
@@ -223,16 +222,15 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} OverriddenServer");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var response = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvents(deploymentResult,
- EventLogHelpers.InProcessFailedToStart(deploymentResult, "CLR worker thread exited prematurely"),
- EventLogHelpers.InProcessThreadException(deploymentResult, ".*?Application is running inside IIS process but is not configured to use IIS server"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvents(deploymentResult,
+ EventLogHelpers.InProcessFailedToStart(deploymentResult, "CLR worker thread exited prematurely"),
+ EventLogHelpers.InProcessThreadException(deploymentResult, ".*?Application is running inside IIS process but is not configured to use IIS server"));
+ });
}
[ConditionalFact]
@@ -240,17 +238,15 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} Throw");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvents(deploymentResult,
- EventLogHelpers.InProcessFailedToStart(deploymentResult, "CLR worker thread exited prematurely"),
- EventLogHelpers.InProcessThreadException(deploymentResult, ", exception code = '0xe0434352'"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvents(deploymentResult,
+ EventLogHelpers.InProcessFailedToStart(deploymentResult, "CLR worker thread exited prematurely"),
+ EventLogHelpers.InProcessThreadException(deploymentResult, ", exception code = '0xe0434352'"));
+ });
}
[ConditionalFact]
@@ -258,16 +254,15 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} EarlyReturn");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvents(deploymentResult,
- EventLogHelpers.InProcessFailedToStart(deploymentResult, "CLR worker thread exited prematurely"),
- EventLogHelpers.InProcessThreadExit(deploymentResult, "12"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvents(deploymentResult,
+ EventLogHelpers.InProcessFailedToStart(deploymentResult, "CLR worker thread exited prematurely"),
+ EventLogHelpers.InProcessThreadExit(deploymentResult, "12"));
+ });
}
[ConditionalFact]
@@ -275,30 +270,28 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.ApplicationType = ApplicationType.Standalone;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- File.Copy(
- Path.Combine(deploymentResult.ContentRoot, "aspnetcorev2_inprocess.dll"),
- Path.Combine(deploymentResult.ContentRoot, "hostfxr.dll"),
- true);
-
- if (DeployerSelector.HasNewShim)
- {
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.32");
- }
- else
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
- }
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessHostfxrInvalid(deploymentResult), Logger);
+ File.Copy(
+ Path.Combine(deploymentResult.ContentRoot, "aspnetcorev2_inprocess.dll"),
+ Path.Combine(deploymentResult.ContentRoot, "hostfxr.dll"),
+ true);
+ if (DeployerSelector.HasNewShim)
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.32");
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
+ }
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessHostfxrInvalid(deploymentResult), Logger);
+ });
}
[ConditionalFact]
public async Task PublishWithWrongBitness()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
-
if (deploymentParameters.ServerType == ServerType.IISExpress)
{
return;
@@ -311,27 +304,27 @@ public class StartupTests : IISFunctionalTestBase
});
// Change ANCM dll to 32 bit
- deploymentParameters.AddServerConfigAction(
- element =>
- {
- var ancmElement = element
- .RequiredElement("system.webServer")
- .RequiredElement("globalModules")
- .Elements("add")
- .FirstOrDefault(e => e.Attribute("name").Value == "AspNetCoreModuleV2");
-
- ancmElement.SetAttributeValue("image", ancmElement.Attribute("image").Value.Replace("x64", "x86"));
- });
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- if (DeployerSelector.HasNewShim)
+ deploymentParameters.AddServerConfigAction(element =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.32");
- }
- else
+ var ancmElement = element
+ .RequiredElement("system.webServer")
+ .RequiredElement("globalModules")
+ .Elements("add")
+ .FirstOrDefault(e => e.Attribute("name").Value == "AspNetCoreModuleV2");
+
+ ancmElement.SetAttributeValue("image", ancmElement.Attribute("image").Value.Replace("x64", "x86"));
+ });
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.0");
- }
+ if (DeployerSelector.HasNewShim)
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.32");
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.0");
+ }
+ });
}
[ConditionalFact]
@@ -340,40 +333,39 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.ApplicationType = ApplicationType.Standalone;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- // We don't distinguish between load failure types so making dll empty should be enough
- File.WriteAllText(Path.Combine(deploymentResult.ContentRoot, "hostfxr.dll"), "");
-
- if (DeployerSelector.HasNewShim)
- {
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.32");
- }
- else
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
- }
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessHostfxrUnableToLoad(deploymentResult), Logger);
+ // We don't distinguish between load failure types so making dll empty should be enough
+ File.WriteAllText(Path.Combine(deploymentResult.ContentRoot, "hostfxr.dll"), "");
+ if (DeployerSelector.HasNewShim)
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.32");
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
+ }
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessHostfxrUnableToLoad(deploymentResult), Logger);
+ });
}
[ConditionalFact]
public async Task TargedDifferenceSharedFramework_FailedToFindNativeDependencies()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
- if (DeployerSelector.HasNewShim)
- {
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.31");
- }
- else
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
- }
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindNativeDependencies(deploymentResult), Logger);
+ Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
+ if (DeployerSelector.HasNewShim)
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.31");
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
+ }
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindNativeDependencies(deploymentResult), Logger);
+ });
}
[ConditionalFact]
@@ -381,17 +373,18 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.ApplicationType = ApplicationType.Standalone;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- File.Delete(Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.dll"));
- if (DeployerSelector.HasNewShim)
- {
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.38");
- }
- else
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
- }
+ File.Delete(Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.dll"));
+ if (DeployerSelector.HasNewShim)
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.38");
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
+ }
+ });
}
[ConditionalFact]
@@ -399,22 +392,23 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.WebConfigBasedEnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "TRUE";
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
- if (DeployerSelector.HasNewShim)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
+ if (DeployerSelector.HasNewShim)
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
- var responseContent = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.31", responseContent);
- Assert.Contains("Framework: 'Microsoft.NETCore.App', version '2.9.9'", responseContent);
- }
- else
- {
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
- }
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ var responseContent = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.31", responseContent);
+ Assert.Contains("Framework: 'Microsoft.NETCore.App', version '2.9.9'", responseContent);
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
+ }
+ });
}
[ConditionalFact]
@@ -422,22 +416,20 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.ApplicationType = ApplicationType.Standalone;
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- File.Delete(Path.Combine(deploymentResult.ContentRoot, "aspnetcorev2_inprocess.dll"));
-
- if (DeployerSelector.HasNewShim)
- {
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.33");
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindRequestHandler(deploymentResult), Logger);
- }
- else
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindRequestHandler(deploymentResult), Logger);
- }
+ File.Delete(Path.Combine(deploymentResult.ContentRoot, "aspnetcorev2_inprocess.dll"));
+ if (DeployerSelector.HasNewShim)
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult, "500.33");
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindRequestHandler(deploymentResult), Logger);
+ }
+ else
+ {
+ await AssertSiteFailsToStartWithInProcessStaticContent(deploymentResult);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessFailedToFindRequestHandler(deploymentResult), Logger);
+ }
+ });
}
[ConditionalFact]
@@ -453,24 +445,24 @@ public class StartupTests : IISFunctionalTestBase
deploymentParameters.TransformArguments((a, _) => $"{a} Hang");
deploymentParameters.WebConfigActionList.Add(
WebConfigHelpers.AddOrModifyAspNetCoreSection("startupTimeLimit", "1"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- // Startup timeout now recycles process.
- deploymentResult.AssertWorkerProcessStop();
+ // Startup timeout now recycles process.
+ deploymentResult.AssertWorkerProcessStop();
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- EventLogHelpers.InProcessFailedToStart(deploymentResult, "Managed server didn't initialize after 1000 ms."),
- Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ EventLogHelpers.InProcessFailedToStart(deploymentResult, "Managed server didn't initialize after 1000 ms."),
+ Logger);
- if (DeployerSelector.HasNewHandler)
- {
- var responseContent = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.37", responseContent);
- }
+ if (DeployerSelector.HasNewHandler)
+ {
+ var responseContent = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.37", responseContent);
+ }
+ });
}
}
@@ -487,22 +479,20 @@ public class StartupTests : IISFunctionalTestBase
deploymentParameters.WebConfigActionList.Add(
WebConfigHelpers.AddOrModifyAspNetCoreSection("startupTimeLimit", "1"));
deploymentParameters.HandlerSettings["suppressRecycleOnStartupTimeout"] = "true";
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/");
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- StopServer(gracefulShutdown: false);
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- EventLogHelpers.InProcessFailedToStart(deploymentResult, "Managed server didn't initialize after 1000 ms."),
- Logger);
-
- if (DeployerSelector.HasNewHandler)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- var responseContent = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.37", responseContent);
- }
+ var response = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ StopServer(gracefulShutdown: false);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ EventLogHelpers.InProcessFailedToStart(deploymentResult, "Managed server didn't initialize after 1000 ms."),
+ Logger);
+ if (DeployerSelector.HasNewHandler)
+ {
+ var responseContent = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.37", responseContent);
+ }
+ });
}
}
@@ -511,18 +501,14 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("hostingModel", "bogus"));
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
-
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvents(deploymentResult,
- EventLogHelpers.ConfigurationLoadError(deploymentResult, "Unknown hosting model 'bogus'. Please specify either hostingModel=\"inprocess\" or hostingModel=\"outofprocess\" in the web.config file.")
- );
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvents(deploymentResult,
+ EventLogHelpers.ConfigurationLoadError(deploymentResult, "Unknown hosting model 'bogus'. Please specify either hostingModel=\"inprocess\" or hostingModel=\"outofprocess\" in the web.config file."));
+ });
}
private static Dictionary<string, (string, Action<XElement>)> InvalidConfigTransformations = InitInvalidConfigTransformations();
@@ -535,18 +521,20 @@ public class StartupTests : IISFunctionalTestBase
var (expectedError, action) = InvalidConfigTransformations[scenario];
var iisDeploymentParameters = Fixture.GetBaseDeploymentParameters();
iisDeploymentParameters.WebConfigActionList.Add((element, _) => action(element));
- var deploymentResult = await DeployAsync(iisDeploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.Equal(HttpStatusCode.InternalServerError, result.StatusCode);
+ await RunTest(iisDeploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.Equal(HttpStatusCode.InternalServerError, result.StatusCode);
- // Config load errors might not allow us to initialize log file
- deploymentResult.AllowNoLogs();
+ // Config load errors might not allow us to initialize log file
+ deploymentResult.AllowNoLogs();
- StopServer();
+ StopServer();
- EventLogHelpers.VerifyEventLogEvents(deploymentResult,
- EventLogHelpers.ConfigurationLoadError(deploymentResult, expectedError)
- );
+ EventLogHelpers.VerifyEventLogEvents(deploymentResult,
+ EventLogHelpers.ConfigurationLoadError(deploymentResult, expectedError)
+ );
+ });
}
public static Dictionary<string, (string, Action<XElement>)> InitInvalidConfigTransformations()
@@ -580,8 +568,8 @@ public class StartupTests : IISFunctionalTestBase
var action = PortableConfigTransformations[scenario];
var iisDeploymentParameters = Fixture.GetBaseDeploymentParameters();
var expectedArguments = action(iisDeploymentParameters);
- var result = await DeployAsync(iisDeploymentParameters);
- Assert.Equal(expectedArguments, await result.HttpClient.GetStringAsync("/CommandLineArgs"));
+ await RunTest(iisDeploymentParameters, async result =>
+ Assert.Equal(expectedArguments, await result.HttpClient.GetStringAsync("/CommandLineArgs")));
}
public static Dictionary<string, Func<IISDeploymentParameters, string>> InitPortableWebConfigTransformations()
@@ -651,8 +639,8 @@ public class StartupTests : IISFunctionalTestBase
var iisDeploymentParameters = Fixture.GetBaseDeploymentParameters();
iisDeploymentParameters.ApplicationType = ApplicationType.Standalone;
var expectedArguments = action(iisDeploymentParameters);
- var result = await DeployAsync(iisDeploymentParameters);
- Assert.Equal(expectedArguments, await result.HttpClient.GetStringAsync("/CommandLineArgs"));
+ await RunTest(iisDeploymentParameters, async result =>
+ Assert.Equal(expectedArguments, await result.HttpClient.GetStringAsync("/CommandLineArgs")));
}
public static Dictionary<string, Func<IISDeploymentParameters, string>> InitStandaloneConfigTransformations()
@@ -687,14 +675,14 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.HandlerSettings["SetCurrentDirectory"] = "false";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- Assert.Equal(deploymentResult.ContentRoot, await deploymentResult.HttpClient.GetStringAsync("/ContentRootPath"));
- Assert.Equal(deploymentResult.ContentRoot + "\\wwwroot", await deploymentResult.HttpClient.GetStringAsync("/WebRootPath"));
- Assert.Equal(Path.GetDirectoryName(deploymentResult.HostProcess.MainModule.FileName), await deploymentResult.HttpClient.GetStringAsync("/CurrentDirectory"));
- Assert.Equal(deploymentResult.ContentRoot + "\\", await deploymentResult.HttpClient.GetStringAsync("/BaseDirectory"));
- Assert.Equal(deploymentResult.ContentRoot + "\\", await deploymentResult.HttpClient.GetStringAsync("/ASPNETCORE_IIS_PHYSICAL_PATH"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ Assert.Equal(deploymentResult.ContentRoot, await deploymentResult.HttpClient.GetStringAsync("/ContentRootPath"));
+ Assert.Equal(deploymentResult.ContentRoot + "\\wwwroot", await deploymentResult.HttpClient.GetStringAsync("/WebRootPath"));
+ Assert.Equal(Path.GetDirectoryName(deploymentResult.HostProcess.MainModule.FileName), await deploymentResult.HttpClient.GetStringAsync("/CurrentDirectory"));
+ Assert.Equal(deploymentResult.ContentRoot + "\\", await deploymentResult.HttpClient.GetStringAsync("/BaseDirectory"));
+ Assert.Equal(deploymentResult.ContentRoot + "\\", await deploymentResult.HttpClient.GetStringAsync("/ASPNETCORE_IIS_PHYSICAL_PATH"));
+ });
}
[ConditionalFact]
@@ -711,25 +699,26 @@ public class StartupTests : IISFunctionalTestBase
var startWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, eventPrefix + "ANCM_TestEvent");
var suspendedWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, eventPrefix + "ANCM_TestEvent_suspended");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var request = deploymentResult.AssertStarts();
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var request = deploymentResult.AssertStarts();
- Assert.True(suspendedWaitHandle.WaitOne(TimeoutExtensions.DefaultTimeoutValue));
+ Assert.True(suspendedWaitHandle.WaitOne(TimeoutExtensions.DefaultTimeoutValue));
- // didn't figure out a better way to check that ANCM is waiting to start
- var applicationDll = Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.dll");
- var handlerDll = Path.Combine(deploymentResult.ContentRoot, "aspnetcorev2_inprocess.dll");
- // Make sure application dll is not locked
- File.WriteAllBytes(applicationDll, File.ReadAllBytes(applicationDll));
- // Make sure handler dll is not locked
- File.WriteAllBytes(handlerDll, File.ReadAllBytes(handlerDll));
- // Make sure request is not completed
- Assert.False(request.IsCompleted);
+ // didn't figure out a better way to check that ANCM is waiting to start
+ var applicationDll = Path.Combine(deploymentResult.ContentRoot, "InProcessWebSite.dll");
+ var handlerDll = Path.Combine(deploymentResult.ContentRoot, "aspnetcorev2_inprocess.dll");
+ // Make sure application dll is not locked
+ File.WriteAllBytes(applicationDll, File.ReadAllBytes(applicationDll));
+ // Make sure handler dll is not locked
+ File.WriteAllBytes(handlerDll, File.ReadAllBytes(handlerDll));
+ // Make sure request is not completed
+ Assert.False(request.IsCompleted);
- startWaitHandle.Set();
+ startWaitHandle.Set();
- await request;
+ await request;
+ });
}
[ConditionalTheory]
@@ -748,17 +737,19 @@ public class StartupTests : IISFunctionalTestBase
deploymentParameters.EnvironmentVariables.Remove("ASPNETCORE_DETAILEDERRORS");
deploymentParameters.EnvironmentVariables[environmentVariable] = value;
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.False(result.IsSuccessStatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.False(result.IsSuccessStatusCode);
- var content = await result.Content.ReadAsStringAsync();
- Assert.Contains("InvalidOperationException", content);
- Assert.Contains("TestSite.Program.Main", content);
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.Contains("InvalidOperationException", content);
+ Assert.Contains("TestSite.Program.Main", content);
- StopServer();
+ StopServer();
- VerifyDotnetRuntimeEventLog(deploymentResult);
+ VerifyDotnetRuntimeEventLog(deploymentResult);
+ });
}
[ConditionalFact]
@@ -767,22 +758,22 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.TransformArguments((a, _) => $"{a} Throw");
-
// Deployment parameters by default set ASPNETCORE_DETAILEDERRORS to true
deploymentParameters.EnvironmentVariables.Remove("ASPNETCORE_DETAILEDERRORS");
deploymentParameters.WebConfigBasedEnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "TRUE";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.False(result.IsSuccessStatusCode);
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.False(result.IsSuccessStatusCode);
-
- var content = await result.Content.ReadAsStringAsync();
- Assert.Contains("InvalidOperationException", content);
- Assert.Contains("TestSite.Program.Main", content);
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.Contains("InvalidOperationException", content);
+ Assert.Contains("TestSite.Program.Main", content);
- StopServer();
+ StopServer();
- VerifyDotnetRuntimeEventLog(deploymentResult);
+ VerifyDotnetRuntimeEventLog(deploymentResult);
+ });
}
[ConditionalTheory]
@@ -794,19 +785,17 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.TransformArguments((a, _) => $"{a} {startupType}");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.False(result.IsSuccessStatusCode);
-
- var content = await result.Content.ReadAsStringAsync();
- Assert.Contains("InvalidOperationException", content);
- Assert.Contains("TestSite.Program.Main", content);
- Assert.Contains("From Configure", content);
-
- StopServer();
-
- VerifyDotnetRuntimeEventLog(deploymentResult);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.False(result.IsSuccessStatusCode);
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.Contains("InvalidOperationException", content);
+ Assert.Contains("TestSite.Program.Main", content);
+ Assert.Contains("From Configure", content);
+ StopServer();
+ VerifyDotnetRuntimeEventLog(deploymentResult);
+ });
}
[ConditionalFact]
@@ -819,17 +808,18 @@ public class StartupTests : IISFunctionalTestBase
deploymentParameters.EnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "";
deploymentParameters.EnvironmentVariables["ASPNETCORE_ENVIRONMENT"] = "Development";
deploymentParameters.HandlerSettings["callStartupHook"] = "false";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.False(result.IsSuccessStatusCode);
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.False(result.IsSuccessStatusCode);
-
- var content = await result.Content.ReadAsStringAsync();
- Assert.DoesNotContain("InvalidOperationException", content);
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.DoesNotContain("InvalidOperationException", content);
- StopServer();
+ StopServer();
- VerifyDotnetRuntimeEventLog(deploymentResult);
+ VerifyDotnetRuntimeEventLog(deploymentResult);
+ });
}
[ConditionalFact]
@@ -842,16 +832,18 @@ public class StartupTests : IISFunctionalTestBase
// Deployment parameters by default set ASPNETCORE_DETAILEDERRORS to true
deploymentParameters.EnvironmentVariables["ASPNETCORE_DETAILEDERRORS"] = "";
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/");
- Assert.False(result.IsSuccessStatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/");
+ Assert.False(result.IsSuccessStatusCode);
- var content = await result.Content.ReadAsStringAsync();
- Assert.DoesNotContain("InvalidOperationException", content);
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.DoesNotContain("InvalidOperationException", content);
- StopServer();
+ StopServer();
- VerifyDotnetRuntimeEventLog(deploymentResult);
+ VerifyDotnetRuntimeEventLog(deploymentResult);
+ });
}
[ConditionalFact]
@@ -862,13 +854,13 @@ public class StartupTests : IISFunctionalTestBase
// Deployment parameters by default set ASPNETCORE_DETAILEDERRORS to true
deploymentParameters.WebConfigBasedEnvironmentVariables["DOTNET_STARTUP_HOOKS"] = "InProcessWebSite";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/StartupHook");
- var content = await result.Content.ReadAsStringAsync();
- Assert.Equal("True", content);
-
- StopServer();
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/StartupHook");
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.Equal("True", content);
+ StopServer();
+ });
}
[ConditionalFact]
@@ -880,13 +872,13 @@ public class StartupTests : IISFunctionalTestBase
// Deployment parameters by default set ASPNETCORE_DETAILEDERRORS to true
deploymentParameters.WebConfigBasedEnvironmentVariables["DOTNET_STARTUP_HOOKS"] = "InProcessWebSite";
deploymentParameters.HandlerSettings["callStartupHook"] = "false";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/StartupHook");
- var content = await result.Content.ReadAsStringAsync();
- Assert.Equal("True", content);
-
- StopServer();
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/StartupHook");
+ var content = await result.Content.ReadAsStringAsync();
+ Assert.Equal("True", content);
+ StopServer();
+ });
}
[ConditionalFact]
@@ -894,9 +886,11 @@ public class StartupTests : IISFunctionalTestBase
public async Task StackOverflowIsAvoidedBySettingLargerStack()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/StackSize");
- Assert.True(result.IsSuccessStatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/StackSize");
+ Assert.True(result.IsSuccessStatusCode);
+ });
}
[ConditionalFact]
@@ -905,10 +899,11 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.HandlerSettings["stackSize"] = "10000000";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var result = await deploymentResult.HttpClient.GetAsync("/StackSizeLarge");
- Assert.True(result.IsSuccessStatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var result = await deploymentResult.HttpClient.GetAsync("/StackSizeLarge");
+ Assert.True(result.IsSuccessStatusCode);
+ });
}
[ConditionalTheory]
@@ -920,10 +915,8 @@ public class StartupTests : IISFunctionalTestBase
public async Task EnvironmentVariableForLauncherPathIsPreferred(HostingModel hostingModel)
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(hostingModel);
-
deploymentParameters.EnvironmentVariables["ANCM_LAUNCHER_PATH"] = _dotnetLocation;
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("processPath", "nope"));
-
await StartAsync(deploymentParameters);
}
@@ -937,10 +930,8 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(hostingModel);
using var publishedApp = await deploymentParameters.ApplicationPublisher.Publish(deploymentParameters, LoggerFactory.CreateLogger("test"));
-
deploymentParameters.EnvironmentVariables["ANCM_LAUNCHER_ARGS"] = Path.ChangeExtension(Path.Combine(publishedApp.Path, deploymentParameters.ApplicationPublisher.ApplicationPath), ".dll");
deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("arguments", "nope"));
-
await StartAsync(deploymentParameters);
}
@@ -949,18 +940,17 @@ public class StartupTests : IISFunctionalTestBase
public async Task OnCompletedDoesNotFailRequest()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/OnCompletedThrows");
- Assert.True(response.IsSuccessStatusCode);
-
- StopServer();
-
- if (deploymentParameters.ServerType == ServerType.IISExpress)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- // We can't read stdout logs from IIS as they aren't redirected.
- Assert.Contains(TestSink.Writes, context => context.Message.Contains("An unhandled exception was thrown by the application."));
- }
+ var response = await deploymentResult.HttpClient.GetAsync("/OnCompletedThrows");
+ Assert.True(response.IsSuccessStatusCode);
+ StopServer();
+ if (deploymentParameters.ServerType == ServerType.IISExpress)
+ {
+ // We can't read stdout logs from IIS as they aren't redirected.
+ Assert.Contains(TestSink.Writes, context => context.Message.Contains("An unhandled exception was thrown by the application."));
+ }
+ });
}
[ConditionalTheory]
@@ -972,20 +962,21 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} {mode}");
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await AssertFailsToStart(deploymentResult);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await AssertFailsToStart(deploymentResult);
- StopServer();
+ StopServer();
- // Logs can be split due to the ANCM logging occuring at the same time as logs from the app, so check for a portion of the
- // string instead of the entire string. The entire string will still be present in the event log.
- var expectedLogString = new string('a', 16);
+ // Logs can be split due to the ANCM logging occuring at the same time as logs from the app, so check for a portion of the
+ // string instead of the entire string. The entire string will still be present in the event log.
+ var expectedLogString = new string('a', 16);
- Assert.Contains(TestSink.Writes, context => context.Message.Contains(expectedLogString));
- var expectedEventLogString = new string('a', 30000);
+ Assert.Contains(TestSink.Writes, context => context.Message.Contains(expectedLogString));
+ var expectedEventLogString = new string('a', 30000);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessThreadExitStdOut(deploymentResult, "12", expectedEventLogString), Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessThreadExitStdOut(deploymentResult, "12", expectedEventLogString), Logger);
+ });
}
[ConditionalTheory]
@@ -996,22 +987,22 @@ public class StartupTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} {mode}");
deploymentParameters.EnableLogging(LogFolderPath);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await AssertFailsToStart(deploymentResult);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await AssertFailsToStart(deploymentResult);
-
- var contents = GetLogFileContent(deploymentResult);
+ var contents = GetLogFileContent(deploymentResult);
- // Logs can be split due to the ANCM logging occuring at the same time as logs from the app, so check for a portion of the
- // string instead of the entire string. The entire string will still be present in the event log.
- var expectedLogString = new string('a', 16);
+ // Logs can be split due to the ANCM logging occuring at the same time as logs from the app, so check for a portion of the
+ // string instead of the entire string. The entire string will still be present in the event log.
+ var expectedLogString = new string('a', 16);
- Assert.Contains(expectedLogString, contents);
+ Assert.Contains(expectedLogString, contents);
- var expectedEventLogString = new string('a', 30000);
+ var expectedEventLogString = new string('a', 30000);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessThreadExitStdOut(deploymentResult, "12", expectedEventLogString), Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, EventLogHelpers.InProcessThreadExitStdOut(deploymentResult, "12", expectedEventLogString), Logger);
+ });
}
[ConditionalFact]
@@ -1019,12 +1010,11 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} CheckConsoleFunctions");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- await AssertFailsToStart(deploymentResult);
-
- Assert.Contains(TestSink.Writes, context => context.Message.Contains("Is Console redirection: True"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ await AssertFailsToStart(deploymentResult);
+ Assert.Contains(TestSink.Writes, context => context.Message.Contains("Is Console redirection: True"));
+ });
}
[ConditionalFact]
@@ -1032,15 +1022,14 @@ public class StartupTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
deploymentParameters.TransformArguments((a, _) => $"{a} EarlyReturn");
-
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.False(response.IsSuccessStatusCode);
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
-
- var responseText = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.30", responseText);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ var responseText = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.30", responseText);
+ });
}
[ConditionalFact]
@@ -1088,19 +1077,20 @@ public class StartupTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
deploymentParameters.HandlerSettings["handlerVersion"] = "88.93";
deploymentParameters.EnvironmentVariables["ANCM_ADDITIONAL_ERROR_PAGE_LINK"] = "http://example";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
- var deploymentResult = await DeployAsync(deploymentParameters);
- var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
-
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
- StopServer();
+ StopServer();
- var responseString = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.0", responseString);
- VerifyNoExtraTrailingBytes(responseString);
+ var responseString = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.0", responseString);
+ VerifyNoExtraTrailingBytes(responseString);
- await AssertLink(response);
+ await AssertLink(response);
+ });
}
[ConditionalFact]
@@ -1111,19 +1101,20 @@ public class StartupTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters();
deploymentParameters.TransformArguments((a, _) => $"{a} EarlyReturn");
deploymentParameters.EnvironmentVariables["ANCM_ADDITIONAL_ERROR_PAGE_LINK"] = "http://example";
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
- var deploymentResult = await DeployAsync(deploymentParameters);
- var response = await deploymentResult.HttpClient.GetAsync("HelloWorld");
-
- Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
+ Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
- StopServer();
+ StopServer();
- var responseString = await response.Content.ReadAsStringAsync();
- Assert.Contains("500.30", responseString);
- VerifyNoExtraTrailingBytes(responseString);
+ var responseString = await response.Content.ReadAsStringAsync();
+ Assert.Contains("500.30", responseString);
+ VerifyNoExtraTrailingBytes(responseString);
- await AssertLink(response);
+ await AssertLink(response);
+ });
}
[ConditionalFact]
@@ -1279,7 +1270,6 @@ public class StartupTests : IISFunctionalTestBase
public async Task ServerAddressesIncludesBaseAddress()
{
var appName = "\u041C\u043E\u0451\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435";
-
var port = TestPortHelper.GetNextSSLPort();
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.InProcess);
deploymentParameters.ApplicationBaseUriHint = $"https://localhost:{port}/";
@@ -1291,10 +1281,11 @@ public class StartupTests : IISFunctionalTestBase
element.Descendants("site").Single().Element("application").SetAttributeValue("path", "/" + appName);
Helpers.CreateEmptyApplication(element, root);
});
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var client = CreateNonValidatingClient(deploymentResult);
- Assert.Equal(deploymentParameters.ApplicationBaseUriHint + appName, await client.GetStringAsync($"/{appName}/ServerAddresses"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var client = CreateNonValidatingClient(deploymentResult);
+ Assert.Equal(deploymentParameters.ApplicationBaseUriHint + appName, await client.GetStringAsync($"/{appName}/ServerAddresses"));
+ });
}
[ConditionalFact]
@@ -1303,7 +1294,6 @@ public class StartupTests : IISFunctionalTestBase
public async Task AncmHttpsPortCanBeOverriden()
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
-
deploymentParameters.AddServerConfigAction(
element =>
{
@@ -1312,14 +1302,13 @@ public class StartupTests : IISFunctionalTestBase
.GetOrAdd("binding", "protocol", "https")
.SetAttributeValue("bindingInformation", $":{TestPortHelper.GetNextSSLPort()}:localhost");
});
-
deploymentParameters.WebConfigBasedEnvironmentVariables["ASPNETCORE_ANCM_HTTPS_PORT"] = "123";
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var client = CreateNonValidatingClient(deploymentResult);
-
- Assert.Equal("123", await client.GetStringAsync("/ANCM_HTTPS_PORT"));
- Assert.Equal("NOVALUE", await client.GetStringAsync("/HTTPS_PORT"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var client = CreateNonValidatingClient(deploymentResult);
+ Assert.Equal("123", await client.GetStringAsync("/ANCM_HTTPS_PORT"));
+ Assert.Equal("NOVALUE", await client.GetStringAsync("/HTTPS_PORT"));
+ });
}
[ConditionalFact]
@@ -1330,7 +1319,6 @@ public class StartupTests : IISFunctionalTestBase
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
deploymentParameters.WebConfigBasedEnvironmentVariables["ENABLE_HTTPS_REDIRECTION"] = "true";
deploymentParameters.ApplicationBaseUriHint = $"http://localhost:{TestPortHelper.GetNextPort()}/";
-
deploymentParameters.AddServerConfigAction(
element =>
{
@@ -1343,29 +1331,30 @@ public class StartupTests : IISFunctionalTestBase
.Single()
.SetAttributeValue("sslFlags", "None");
});
-
- var deploymentResult = await DeployAsync(deploymentParameters);
- var handler = new HttpClientHandler
- {
- ServerCertificateCustomValidationCallback = (a, b, c, d) => true,
- AllowAutoRedirect = false
- };
- var client = new HttpClient(handler)
+ await RunTest(deploymentParameters, async deploymentResult =>
{
- BaseAddress = new Uri(deploymentParameters.ApplicationBaseUriHint),
- Timeout = TimeSpan.FromSeconds(200),
- };
+ var handler = new HttpClientHandler
+ {
+ ServerCertificateCustomValidationCallback = (a, b, c, d) => true,
+ AllowAutoRedirect = false
+ };
+ var client = new HttpClient(handler)
+ {
+ BaseAddress = new Uri(deploymentParameters.ApplicationBaseUriHint),
+ Timeout = TimeSpan.FromSeconds(200),
+ };
- if (DeployerSelector.HasNewHandler)
- {
- var response = await client.GetAsync("/ANCM_HTTPS_PORT");
- Assert.Equal(307, (int)response.StatusCode);
- }
- else
- {
- var response = await client.GetAsync("/ANCM_HTTPS_PORT");
- Assert.Equal(200, (int)response.StatusCode);
- }
+ if (DeployerSelector.HasNewHandler)
+ {
+ var response = await client.GetAsync("/ANCM_HTTPS_PORT");
+ Assert.Equal(307, (int)response.StatusCode);
+ }
+ else
+ {
+ var response = await client.GetAsync("/ANCM_HTTPS_PORT");
+ Assert.Equal(200, (int)response.StatusCode);
+ }
+ });
}
[ConditionalFact]
@@ -1392,10 +1381,11 @@ public class StartupTests : IISFunctionalTestBase
new XAttribute("bindingInformation", $":{anotherSslPort}:localhost")));
});
- var deploymentResult = await DeployAsync(deploymentParameters);
- var client = CreateNonValidatingClient(deploymentResult);
-
- Assert.Equal("NOVALUE", await client.GetStringAsync("/ANCM_HTTPS_PORT"));
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var client = CreateNonValidatingClient(deploymentResult);
+ Assert.Equal("NOVALUE", await client.GetStringAsync("/ANCM_HTTPS_PORT"));
+ });
}
[ConditionalFact]
@@ -1406,12 +1396,12 @@ public class StartupTests : IISFunctionalTestBase
// Only tests OutOfProcess as the Connection header is removed for out of process and not inprocess.
// This test checks a quirk to allow setting the Connection header.
var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.OutOfProcess);
-
deploymentParameters.HandlerSettings["forwardResponseConnectionHeader"] = "true";
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("ConnectionClose");
- Assert.Equal(true, response.Headers.ConnectionClose);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("ConnectionClose");
+ Assert.Equal(true, response.Headers.ConnectionClose);
+ });
}
public static int GetNextSSLPort(int avoid = 0)
diff --git a/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/ApplicationInitializationTests.cs b/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/ApplicationInitializationTests.cs
index f13e6e2e2a..74d1b9caad 100644
--- a/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/ApplicationInitializationTests.cs
+++ b/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/ApplicationInitializationTests.cs
@@ -1,16 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.IO;
-using System.ServiceProcess;
-using System.Threading;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -48,11 +42,12 @@ public class ApplicationInitializationTests : IISFunctionalTestBase
(args, contentRoot) => $"{args} CreateFile \"{Path.Combine(contentRoot, "Started.txt")}\"");
EnablePreload(baseDeploymentParameters);
- var result = await DeployAsync(baseDeploymentParameters);
-
- await Helpers.Retry(async () => await File.ReadAllTextAsync(Path.Combine(result.ContentRoot, "Started.txt")), TimeoutExtensions.DefaultTimeoutValue);
- StopServer();
- EventLogHelpers.VerifyEventLogEvent(result, EventLogHelpers.Started(result), Logger);
+ await RunTest(baseDeploymentParameters, async result =>
+ {
+ await Helpers.Retry(async () => await File.ReadAllTextAsync(Path.Combine(result.ContentRoot, "Started.txt")), TimeoutExtensions.DefaultTimeoutValue);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvent(result, EventLogHelpers.Started(result), Logger);
+ });
}
}
@@ -78,11 +73,12 @@ public class ApplicationInitializationTests : IISFunctionalTestBase
.GetOrAdd("add", "initializationPage", "/CreateFile");
});
- var result = await DeployAsync(baseDeploymentParameters);
-
- await Helpers.Retry(async () => await File.ReadAllTextAsync(Path.Combine(result.ContentRoot, "Started.txt")), TimeoutExtensions.DefaultTimeoutValue);
- StopServer();
- EventLogHelpers.VerifyEventLogEvent(result, EventLogHelpers.Started(result), Logger);
+ await RunTest(baseDeploymentParameters, async result =>
+ {
+ await Helpers.Retry(async () => await File.ReadAllTextAsync(Path.Combine(result.ContentRoot, "Started.txt")), TimeoutExtensions.DefaultTimeoutValue);
+ StopServer();
+ EventLogHelpers.VerifyEventLogEvent(result, EventLogHelpers.Started(result), Logger);
+ });
}
}
diff --git a/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/StdOutRedirectionTests.cs b/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/StdOutRedirectionTests.cs
index 260919c6de..91dfbc4086 100644
--- a/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/StdOutRedirectionTests.cs
+++ b/src/Servers/IIS/IIS/test/IIS.Shared.FunctionalTests/StdOutRedirectionTests.cs
@@ -1,13 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
using Microsoft.AspNetCore.Testing;
-using Xunit;
#if !IIS_FUNCTIONALS
using Microsoft.AspNetCore.Server.IIS.FunctionalTests;
@@ -37,19 +33,20 @@ public class StdOutRedirectionTests : IISFunctionalTestBase
{
var deploymentParameters = Fixture.GetBaseDeploymentParameters(Fixture.InProcessTestSite);
- var deploymentResult = await DeployAsync(deploymentParameters);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
- Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.False(response.IsSuccessStatusCode);
+ StopServer();
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- @"Framework: 'Microsoft.NETCore.App', version '2.9.9' \(x64\)", Logger);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- "To install missing framework, download:", Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ @"Framework: 'Microsoft.NETCore.App', version '2.9.9' \(x64\)", Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ "To install missing framework, download:", Logger);
+ });
}
[ConditionalFact]
@@ -61,23 +58,24 @@ public class StdOutRedirectionTests : IISFunctionalTestBase
deploymentParameters.EnableLogging(LogFolderPath);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ Helpers.ModifyFrameworkVersionInRuntimeConfig(deploymentResult);
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.False(response.IsSuccessStatusCode);
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
- StopServer();
+ StopServer();
- var contents = Helpers.ReadAllTextFromFile(Helpers.GetExpectedLogName(deploymentResult, LogFolderPath), Logger);
- var missingFrameworkString = "To install missing framework, download:";
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- @"Framework: 'Microsoft.NETCore.App', version '2.9.9' \(x64\)", Logger);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult,
- missingFrameworkString, Logger);
- Assert.Contains(@"Framework: 'Microsoft.NETCore.App', version '2.9.9' (x64)", contents);
- Assert.Contains(missingFrameworkString, contents);
+ var contents = Helpers.ReadAllTextFromFile(Helpers.GetExpectedLogName(deploymentResult, LogFolderPath), Logger);
+ var missingFrameworkString = "To install missing framework, download:";
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ @"Framework: 'Microsoft.NETCore.App', version '2.9.9' \(x64\)", Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult,
+ missingFrameworkString, Logger);
+ Assert.Contains(@"Framework: 'Microsoft.NETCore.App', version '2.9.9' (x64)", contents);
+ Assert.Contains(missingFrameworkString, contents);
+ });
}
[ConditionalFact]
@@ -93,17 +91,18 @@ public class StdOutRedirectionTests : IISFunctionalTestBase
deploymentParameters.EnableLogging(LogFolderPath);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.False(response.IsSuccessStatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
- StopServer();
+ StopServer();
- var fileInDirectory = Directory.GetFiles(LogFolderPath).Single();
- var contents = Helpers.ReadAllTextFromFile(fileInDirectory, Logger);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, "Invoked hostfxr", Logger);
- Assert.Contains("Invoked hostfxr", contents);
+ var fileInDirectory = Directory.GetFiles(LogFolderPath).Single();
+ var contents = Helpers.ReadAllTextFromFile(fileInDirectory, Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, "Invoked hostfxr", Logger);
+ Assert.Contains("Invoked hostfxr", contents);
+ });
}
[ConditionalTheory]
@@ -119,15 +118,16 @@ public class StdOutRedirectionTests : IISFunctionalTestBase
deploymentParameters.EnvironmentVariables["COREHOST_TRACE"] = "1";
deploymentParameters.TransformArguments((a, _) => $"{a} {path}");
- var deploymentResult = await DeployAsync(deploymentParameters);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
- Assert.False(response.IsSuccessStatusCode);
+ StopServer();
- StopServer();
-
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, "Invoked hostfxr", Logger);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, "Invoked hostfxr", Logger);
+ });
}
[ConditionalTheory]
@@ -146,17 +146,18 @@ public class StdOutRedirectionTests : IISFunctionalTestBase
deploymentParameters.EnableLogging(LogFolderPath);
- var deploymentResult = await DeployAsync(deploymentParameters);
-
- var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
- Assert.False(response.IsSuccessStatusCode);
+ await RunTest(deploymentParameters, async deploymentResult =>
+ {
+ var response = await deploymentResult.HttpClient.GetAsync("/HelloWorld");
+ Assert.False(response.IsSuccessStatusCode);
- StopServer();
+ StopServer();
- var fileInDirectory = Directory.GetFiles(LogFolderPath).First();
- var contents = Helpers.ReadAllTextFromFile(fileInDirectory, Logger);
+ var fileInDirectory = Directory.GetFiles(LogFolderPath).First();
+ var contents = Helpers.ReadAllTextFromFile(fileInDirectory, Logger);
- EventLogHelpers.VerifyEventLogEvent(deploymentResult, "Invoked hostfxr", Logger);
- Assert.Contains("Invoked hostfxr", contents);
+ EventLogHelpers.VerifyEventLogEvent(deploymentResult, "Invoked hostfxr", Logger);
+ Assert.Contains("Invoked hostfxr", contents);
+ });
}
}
diff --git a/src/Servers/IIS/IntegrationTesting.IIS/src/IISDeployer.cs b/src/Servers/IIS/IntegrationTesting.IIS/src/IISDeployer.cs
index bb2c4ceeb6..eceb8a8f36 100644
--- a/src/Servers/IIS/IntegrationTesting.IIS/src/IISDeployer.cs
+++ b/src/Servers/IIS/IntegrationTesting.IIS/src/IISDeployer.cs
@@ -370,7 +370,7 @@ public class IISDeployer : IISDeployerBase
if (site.State != ObjectState.Stopped && site.State != ObjectState.Stopping)
{
var state = site.Stop();
- Logger.LogInformation($"Stopping site, state: {state.ToString()}");
+ Logger.LogInformation($"Stopping site, state: {state}");
}
var appPool = serverManager.ApplicationPools.SingleOrDefault();
@@ -382,12 +382,12 @@ public class IISDeployer : IISDeployerBase
if (appPool.State != ObjectState.Stopped && appPool.State != ObjectState.Stopping)
{
var state = appPool.Stop();
- Logger.LogInformation($"Stopping pool, state: {state.ToString()}");
+ Logger.LogInformation($"Stopping pool, state: {state}");
}
if (site.State != ObjectState.Stopped)
{
- throw new InvalidOperationException("Site not stopped yet");
+ throw new InvalidOperationException($"Site {site.Name} not stopped yet");
}
try
diff --git a/src/Servers/IIS/IntegrationTesting.IIS/src/IISExpressDeployer.cs b/src/Servers/IIS/IntegrationTesting.IIS/src/IISExpressDeployer.cs
index 82e1004972..951491335c 100644
--- a/src/Servers/IIS/IntegrationTesting.IIS/src/IISExpressDeployer.cs
+++ b/src/Servers/IIS/IntegrationTesting.IIS/src/IISExpressDeployer.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
@@ -455,19 +456,25 @@ public partial class IISExpressDeployer : IISDeployerBase
[LibraryImport("user32.dll", EntryPoint = "GetClassNameW", SetLastError = true)]
internal static partial int GetClassName(IntPtr hWnd, [Out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2)] char[] lpClassName, int nMaxCount);
- [CustomTypeMarshaller(typeof(HandleRef), Direction = CustomTypeMarshallerDirection.In, Features = CustomTypeMarshallerFeatures.UnmanagedResources | CustomTypeMarshallerFeatures.TwoStageMarshalling)]
- internal struct HandleRefMarshaller
+ [CustomMarshaller(typeof(HandleRef), MarshalMode.ManagedToUnmanagedIn, typeof(ManagedToUnmanagedIn))]
+ internal static class HandleRefMarshaller
{
- private readonly HandleRef _handle;
-
- public HandleRefMarshaller(HandleRef handle)
+ internal struct ManagedToUnmanagedIn
{
- _handle = handle;
- }
+ private HandleRef _handle;
- public IntPtr ToNativeValue() => _handle.Handle;
+ public void FromManaged(HandleRef handle)
+ {
+ _handle = handle;
+ }
- public void FreeNative() => GC.KeepAlive(_handle.Wrapper);
+ public IntPtr ToUnmanaged() => _handle.Handle;
+
+ public void OnInvoked() => GC.KeepAlive(_handle.Wrapper);
+
+ [SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "This method is part of the marshaller shape and is required to be an instance method.")]
+ public void Free() {}
+ }
}
}
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/HttpParser.cs b/src/Servers/Kestrel/Core/src/Internal/Http/HttpParser.cs
index 5e18ba0861..63fc8668d6 100644
--- a/src/Servers/Kestrel/Core/src/Internal/Http/HttpParser.cs
+++ b/src/Servers/Kestrel/Core/src/Internal/Http/HttpParser.cs
@@ -313,7 +313,7 @@ public class HttpParser<TRequestHandler> : IHttpParser<TRequestHandler> where TR
}
SequencePosition lineEnd;
- ReadOnlySpan<byte> headerSpan;
+ scoped ReadOnlySpan<byte> headerSpan;
if (currentSlice.Slice(reader.Position, lineEndPosition.Value).Length == currentSlice.Length - 1)
{
// No enough data, so CRLF can't currently be there.
@@ -321,7 +321,8 @@ public class HttpParser<TRequestHandler> : IHttpParser<TRequestHandler> where TR
// Advance 1 to include CR/LF in lineEnd
lineEnd = currentSlice.GetPosition(1, lineEndPosition.Value);
- headerSpan = currentSlice.Slice(reader.Position, lineEnd).ToSpan();
+ var header = currentSlice.Slice(reader.Position, lineEnd);
+ headerSpan = header.IsSingleSegment ? header.FirstSpan : header.ToArray();
if (headerSpan[^1] != ByteCR)
{
RejectRequestHeader(headerSpan);
diff --git a/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs b/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs
index 8119db9df4..6a86097932 100644
--- a/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs
+++ b/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs
@@ -493,10 +493,9 @@ public class KestrelConfigurationLoader
private bool TryGetCertificatePath([NotNullWhen(true)] out string? path)
{
- // This will go away when we implement
- // https://github.com/aspnet/Hosting/issues/1294
+ // See https://github.com/aspnet/Hosting/issues/1294
var appData = Environment.GetEnvironmentVariable("APPDATA");
- var home = Environment.GetEnvironmentVariable("HOME");
+ var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
var basePath = appData != null ? Path.Combine(appData, "ASP.NET", "https") : null;
basePath = basePath ?? (home != null ? Path.Combine(home, ".aspnet", "https") : null);
path = basePath != null ? Path.Combine(basePath, $"{HostEnvironment.ApplicationName}.pfx") : null;
diff --git a/src/Servers/Kestrel/Kestrel.slnf b/src/Servers/Kestrel/Kestrel.slnf
index 8a60f5f91b..db0f9a4af5 100644
--- a/src/Servers/Kestrel/Kestrel.slnf
+++ b/src/Servers/Kestrel/Kestrel.slnf
@@ -2,19 +2,38 @@
"solution": {
"path": "..\\..\\..\\AspNetCore.sln",
"projects": [
+ "src\\DataProtection\\Abstractions\\src\\Microsoft.AspNetCore.DataProtection.Abstractions.csproj",
+ "src\\DataProtection\\Cryptography.Internal\\src\\Microsoft.AspNetCore.Cryptography.Internal.csproj",
+ "src\\DataProtection\\DataProtection\\src\\Microsoft.AspNetCore.DataProtection.csproj",
+ "src\\DefaultBuilder\\src\\Microsoft.AspNetCore.csproj",
"src\\Extensions\\Features\\src\\Microsoft.Extensions.Features.csproj",
"src\\Extensions\\Features\\test\\Microsoft.Extensions.Features.Tests.csproj",
"src\\Hosting\\Abstractions\\src\\Microsoft.AspNetCore.Hosting.Abstractions.csproj",
"src\\Hosting\\Hosting\\src\\Microsoft.AspNetCore.Hosting.csproj",
"src\\Hosting\\Server.Abstractions\\src\\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj",
+ "src\\Http\\Authentication.Abstractions\\src\\Microsoft.AspNetCore.Authentication.Abstractions.csproj",
+ "src\\Http\\Authentication.Core\\src\\Microsoft.AspNetCore.Authentication.Core.csproj",
"src\\Http\\Headers\\src\\Microsoft.Net.Http.Headers.csproj",
"src\\Http\\Http.Abstractions\\src\\Microsoft.AspNetCore.Http.Abstractions.csproj",
"src\\Http\\Http.Extensions\\src\\Microsoft.AspNetCore.Http.Extensions.csproj",
"src\\Http\\Http.Features\\src\\Microsoft.AspNetCore.Http.Features.csproj",
"src\\Http\\Http\\src\\Microsoft.AspNetCore.Http.csproj",
+ "src\\Http\\Metadata\\src\\Microsoft.AspNetCore.Metadata.csproj",
+ "src\\Http\\Routing.Abstractions\\src\\Microsoft.AspNetCore.Routing.Abstractions.csproj",
+ "src\\Http\\Routing\\src\\Microsoft.AspNetCore.Routing.csproj",
"src\\Http\\WebUtilities\\src\\Microsoft.AspNetCore.WebUtilities.csproj",
+ "src\\Middleware\\Diagnostics.Abstractions\\src\\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj",
+ "src\\Middleware\\Diagnostics\\src\\Microsoft.AspNetCore.Diagnostics.csproj",
+ "src\\Middleware\\HostFiltering\\src\\Microsoft.AspNetCore.HostFiltering.csproj",
+ "src\\Middleware\\HttpOverrides\\src\\Microsoft.AspNetCore.HttpOverrides.csproj",
"src\\ObjectPool\\src\\Microsoft.Extensions.ObjectPool.csproj",
+ "src\\Security\\Authentication\\Core\\src\\Microsoft.AspNetCore.Authentication.csproj",
+ "src\\Security\\Authorization\\Core\\src\\Microsoft.AspNetCore.Authorization.csproj",
+ "src\\Security\\Authorization\\Policy\\src\\Microsoft.AspNetCore.Authorization.Policy.csproj",
"src\\Servers\\Connections.Abstractions\\src\\Microsoft.AspNetCore.Connections.Abstractions.csproj",
+ "src\\Servers\\HttpSys\\src\\Microsoft.AspNetCore.Server.HttpSys.csproj",
+ "src\\Servers\\IIS\\IISIntegration\\src\\Microsoft.AspNetCore.Server.IISIntegration.csproj",
+ "src\\Servers\\IIS\\IIS\\src\\Microsoft.AspNetCore.Server.IIS.csproj",
"src\\Servers\\Kestrel\\Core\\src\\Microsoft.AspNetCore.Server.Kestrel.Core.csproj",
"src\\Servers\\Kestrel\\Core\\test\\Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj",
"src\\Servers\\Kestrel\\Kestrel\\src\\Microsoft.AspNetCore.Server.Kestrel.csproj",
@@ -37,7 +56,8 @@
"src\\Servers\\Kestrel\\test\\Sockets.BindTests\\Sockets.BindTests.csproj",
"src\\Servers\\Kestrel\\test\\Sockets.FunctionalTests\\Sockets.FunctionalTests.csproj",
"src\\Servers\\Kestrel\\tools\\CodeGenerator\\CodeGenerator.csproj",
- "src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj"
+ "src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj",
+ "src\\WebEncoders\\src\\Microsoft.Extensions.WebEncoders.csproj"
]
}
} \ No newline at end of file
diff --git a/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs b/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs
index d7a47b65d5..ec2b410752 100644
--- a/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs
+++ b/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs
@@ -378,7 +378,26 @@ internal partial class QuicStreamContext : TransportConnection, IPooledStream, I
var isCompleted = result.IsCompleted;
if (!buffer.IsEmpty)
{
- await _stream.WriteAsync(buffer, endStream: isCompleted);
+ if (buffer.IsSingleSegment)
+ {
+ // Fast path when the buffer is a single segment.
+ await _stream.WriteAsync(buffer.First, endStream: isCompleted);
+ }
+ else
+ {
+ // When then buffer has multiple segments then write them in a loop.
+ // We're not using a standard foreach here because we want to detect
+ // the final write and pass end stream flag with that write.
+ var enumerator = buffer.GetEnumerator();
+ var isLastSegment = !enumerator.MoveNext();
+
+ while (!isLastSegment)
+ {
+ var currentSegment = enumerator.Current;
+ isLastSegment = !enumerator.MoveNext();
+ await _stream.WriteAsync(currentSegment, endStream: isLastSegment && isCompleted);
+ }
+ }
}
output.AdvanceTo(end);
diff --git a/src/Servers/Kestrel/Transport.Quic/test/QuicStreamContextTests.cs b/src/Servers/Kestrel/Transport.Quic/test/QuicStreamContextTests.cs
index 1cfe24d2a7..b024e58884 100644
--- a/src/Servers/Kestrel/Transport.Quic/test/QuicStreamContextTests.cs
+++ b/src/Servers/Kestrel/Transport.Quic/test/QuicStreamContextTests.cs
@@ -112,6 +112,8 @@ public class QuicStreamContextTests : TestApplicationErrorLoggerLoggedTest
var clientStream = await clientConnection.OpenBidirectionalStreamAsync();
await clientStream.WriteAsync(TestData).DefaultTimeout();
+ var readTask = clientStream.ReadUntilEndAsync();
+
var serverStream = await serverConnection.AcceptAsync().DefaultTimeout();
var readResult = await serverStream.Transport.Input.ReadAtLeastAsync(TestData.Length).DefaultTimeout();
serverStream.Transport.Input.AdvanceTo(readResult.Buffer.End);
@@ -123,6 +125,8 @@ public class QuicStreamContextTests : TestApplicationErrorLoggerLoggedTest
await serverStream.Transport.Input.CompleteAsync();
await serverStream.Transport.Output.CompleteAsync();
+ await readTask.DefaultTimeout();
+
var quicStreamContext = Assert.IsType<QuicStreamContext>(serverStream);
// Server starts disposing
@@ -178,6 +182,9 @@ public class QuicStreamContextTests : TestApplicationErrorLoggerLoggedTest
readResult = await serverStream.Transport.Input.ReadAsync().DefaultTimeout();
Assert.True(readResult.IsCompleted);
+ Logger.LogInformation("Client starting to read.");
+ var readingTask = clientStream.ReadUntilEndAsync();
+
Logger.LogInformation("Server sending data.");
await serverStream.Transport.Output.WriteAsync(testData).DefaultTimeout();
@@ -186,7 +193,7 @@ public class QuicStreamContextTests : TestApplicationErrorLoggerLoggedTest
await serverStream.Transport.Output.CompleteAsync().DefaultTimeout();
Logger.LogInformation("Client reading until end of stream.");
- var data = await clientStream.ReadUntilEndAsync().DefaultTimeout();
+ var data = await readingTask.DefaultTimeout();
Assert.Equal(testData.Length, data.Length);
Assert.Equal(testData, data);
diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/Http3/Http3TlsTests.cs b/src/Servers/Kestrel/test/Interop.FunctionalTests/Http3/Http3TlsTests.cs
index 55a0d7fb7f..4b64a326f7 100644
--- a/src/Servers/Kestrel/test/Interop.FunctionalTests/Http3/Http3TlsTests.cs
+++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/Http3/Http3TlsTests.cs
@@ -34,7 +34,7 @@ public class Http3TlsTests : LoggedTest
httpsOptions.ServerCertificateSelector = (context, host) =>
{
Assert.Null(context); // The context isn't available durring the quic handshake.
- Assert.Equal("localhost", host);
+ Assert.Equal("testhost", host);
return TestResources.GetTestCertificate();
};
});
@@ -46,11 +46,9 @@ public class Http3TlsTests : LoggedTest
await host.StartAsync().DefaultTimeout();
- // Using localhost instead of 127.0.0.1 because IPs don't set SNI and the Host header isn't currently used as an override.
- var request = new HttpRequestMessage(HttpMethod.Get, $"https://localhost:{host.GetPort()}/");
+ var request = new HttpRequestMessage(HttpMethod.Get, $"https://127.0.0.1:{host.GetPort()}/");
request.Version = HttpVersion.Version30;
request.VersionPolicy = HttpVersionPolicy.RequestVersionExact;
- // https://github.com/dotnet/runtime/issues/57169 Host isn't used for SNI
request.Headers.Host = "testhost";
var response = await client.SendAsync(request, CancellationToken.None).DefaultTimeout();
diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs b/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs
index effffb7cd8..9835e7a8f5 100644
--- a/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs
+++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs
@@ -600,7 +600,7 @@ public class HttpClientHttp2InteropTests : LoggedTest
var url = host.MakeUrl(scheme);
using var client = CreateClient();
var exception = await Assert.ThrowsAsync<HttpRequestException>(() => client.GetAsync(url)).DefaultTimeout();
- Assert.Equal("The HTTP/2 server reset the stream. HTTP/2 error code 'CANCEL' (0x8).", exception?.InnerException?.InnerException.Message);
+ Assert.Equal("The HTTP/2 server reset the stream. HTTP/2 error code 'CANCEL' (0x8).", exception?.InnerException?.Message);
await host.StopAsync().DefaultTimeout();
}
@@ -629,7 +629,7 @@ public class HttpClientHttp2InteropTests : LoggedTest
response.EnsureSuccessStatusCode();
receivedHeaders.SetResult();
var exception = await Assert.ThrowsAsync<HttpRequestException>(() => response.Content.ReadAsStringAsync()).DefaultTimeout();
- Assert.Equal("The HTTP/2 server reset the stream. HTTP/2 error code 'CANCEL' (0x8).", exception?.InnerException?.InnerException.Message);
+ Assert.Equal("The HTTP/2 server reset the stream. HTTP/2 error code 'CANCEL' (0x8).", exception?.InnerException?.Message);
await host.StopAsync().DefaultTimeout();
}
@@ -743,7 +743,7 @@ public class HttpClientHttp2InteropTests : LoggedTest
await serverReset.Task.DefaultTimeout();
var responseEx = await Assert.ThrowsAsync<HttpRequestException>(() => response.Content.ReadAsStringAsync().DefaultTimeout());
Assert.Contains("The HTTP/2 server reset the stream. HTTP/2 error code 'CANCEL' (0x8)", responseEx.ToString());
- await Assert.ThrowsAsync<IOException>(() => streamingContent.SendAsync("Hello World").DefaultTimeout());
+ await Assert.ThrowsAsync<HttpProtocolException>(() => streamingContent.SendAsync("Hello World").DefaultTimeout());
await Assert.ThrowsAnyAsync<OperationCanceledException>(() => clientEcho.Task.DefaultTimeout());
await host.StopAsync().DefaultTimeout();
@@ -802,7 +802,7 @@ public class HttpClientHttp2InteropTests : LoggedTest
await serverReset.Task.DefaultTimeout();
var responseEx = await Assert.ThrowsAsync<HttpRequestException>(() => response.Content.ReadAsStringAsync().DefaultTimeout());
Assert.Contains("The HTTP/2 server reset the stream. HTTP/2 error code 'CANCEL' (0x8)", responseEx.ToString());
- await Assert.ThrowsAsync<IOException>(() => streamingContent.SendAsync("Hello World").DefaultTimeout());
+ await Assert.ThrowsAsync<HttpProtocolException>(() => streamingContent.SendAsync("Hello World").DefaultTimeout());
await Assert.ThrowsAnyAsync<OperationCanceledException>(() => clientEcho.Task.DefaultTimeout());
await host.StopAsync().DefaultTimeout();
diff --git a/src/Shared/CertificateGeneration/MacOSCertificateManager.cs b/src/Shared/CertificateGeneration/MacOSCertificateManager.cs
index 45b40ae341..28c971680b 100644
--- a/src/Shared/CertificateGeneration/MacOSCertificateManager.cs
+++ b/src/Shared/CertificateGeneration/MacOSCertificateManager.cs
@@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Certificates.Generation;
internal sealed class MacOSCertificateManager : CertificateManager
{
private const string CertificateSubjectRegex = "CN=(.*[^,]+).*";
- private static readonly string MacOSUserKeyChain = Environment.GetEnvironmentVariable("HOME") + "/Library/Keychains/login.keychain-db";
+ private static readonly string MacOSUserKeyChain = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/Library/Keychains/login.keychain-db";
private const string MacOSSystemKeyChain = "/Library/Keychains/System.keychain";
private const string MacOSFindCertificateCommandLine = "security";
private const string MacOSFindCertificateCommandLineArgumentsFormat = "find-certificate -c {0} -a -Z -p " + MacOSSystemKeyChain;
@@ -91,7 +91,7 @@ internal sealed class MacOSCertificateManager : CertificateManager
internal override CheckCertificateStateResult CheckCertificateState(X509Certificate2 candidate, bool interactive)
{
- var sentinelPath = Path.Combine(Environment.GetEnvironmentVariable("HOME")!, ".dotnet", $"certificates.{candidate.GetCertHashString(HashAlgorithmName.SHA256)}.sentinel");
+ var sentinelPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".dotnet", $"certificates.{candidate.GetCertHashString(HashAlgorithmName.SHA256)}.sentinel");
if (!interactive && !File.Exists(sentinelPath))
{
return new CheckCertificateStateResult(false, KeyNotAccessibleWithoutUserInteraction);
diff --git a/src/Shared/PropertyAsParameterInfo.cs b/src/Shared/PropertyAsParameterInfo.cs
index aa2a29314b..08fb46f2d1 100644
--- a/src/Shared/PropertyAsParameterInfo.cs
+++ b/src/Shared/PropertyAsParameterInfo.cs
@@ -61,8 +61,8 @@ internal sealed class PropertyAsParameterInfo : ParameterInfo
[UnconditionalSuppressMessage("Trimmer", "IL2075", Justification = "PropertyAsParameterInfo.Flatten requires unreferenced code.")]
public static ReadOnlySpan<ParameterInfo> Flatten(ParameterInfo[] parameters, ParameterBindingMethodCache cache)
{
- ArgumentNullException.ThrowIfNull(nameof(parameters));
- ArgumentNullException.ThrowIfNull(nameof(cache));
+ ArgumentNullException.ThrowIfNull(parameters);
+ ArgumentNullException.ThrowIfNull(cache);
if (parameters.Length == 0)
{
diff --git a/src/Shared/QueryStringEnumerable.cs b/src/Shared/QueryStringEnumerable.cs
index 5251e41411..8820d518ea 100644
--- a/src/Shared/QueryStringEnumerable.cs
+++ b/src/Shared/QueryStringEnumerable.cs
@@ -30,7 +30,11 @@ internal
/// Constructs an instance of <see cref="QueryStringEnumerable"/>.
/// </summary>
/// <param name="queryString">The query string.</param>
+#if DISABLE_NULLABLE
+ public QueryStringEnumerable(string queryString)
+#else
public QueryStringEnumerable(string? queryString)
+#endif
: this(queryString.AsMemory())
{
}
diff --git a/src/Tools/Tools.slnf b/src/Tools/Tools.slnf
index 4b5a33b510..fd13bb052a 100644
--- a/src/Tools/Tools.slnf
+++ b/src/Tools/Tools.slnf
@@ -5,6 +5,7 @@
"src\\Antiforgery\\src\\Microsoft.AspNetCore.Antiforgery.csproj",
"src\\Components\\Authorization\\src\\Microsoft.AspNetCore.Components.Authorization.csproj",
"src\\Components\\Components\\src\\Microsoft.AspNetCore.Components.csproj",
+ "src\\Components\\CustomElements\\src\\Microsoft.AspNetCore.Components.CustomElements.csproj",
"src\\Components\\Forms\\src\\Microsoft.AspNetCore.Components.Forms.csproj",
"src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
"src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
@@ -18,6 +19,7 @@
"src\\DataProtection\\EntityFrameworkCore\\src\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj",
"src\\DataProtection\\Extensions\\src\\Microsoft.AspNetCore.DataProtection.Extensions.csproj",
"src\\DataProtection\\StackExchangeRedis\\src\\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj",
+ "src\\DefaultBuilder\\src\\Microsoft.AspNetCore.csproj",
"src\\Extensions\\Features\\src\\Microsoft.Extensions.Features.csproj",
"src\\HealthChecks\\Abstractions\\src\\Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.csproj",
"src\\HealthChecks\\HealthChecks\\src\\Microsoft.Extensions.Diagnostics.HealthChecks.csproj",
@@ -52,6 +54,7 @@
"src\\Middleware\\Localization.Routing\\src\\Microsoft.AspNetCore.Localization.Routing.csproj",
"src\\Middleware\\Localization\\src\\Microsoft.AspNetCore.Localization.csproj",
"src\\Middleware\\MiddlewareAnalysis\\src\\Microsoft.AspNetCore.MiddlewareAnalysis.csproj",
+ "src\\Middleware\\OutputCaching\\src\\Microsoft.AspNetCore.OutputCaching.csproj",
"src\\Middleware\\RateLimiting\\src\\Microsoft.AspNetCore.RateLimiting.csproj",
"src\\Middleware\\RequestDecompression\\src\\Microsoft.AspNetCore.RequestDecompression.csproj",
"src\\Middleware\\ResponseCaching.Abstractions\\src\\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj",
diff --git a/src/Tools/dotnet-user-jwts/src/Commands/CreateCommand.cs b/src/Tools/dotnet-user-jwts/src/Commands/CreateCommand.cs
index 5f45ce7b98..da19d155dd 100644
--- a/src/Tools/dotnet-user-jwts/src/Commands/CreateCommand.cs
+++ b/src/Tools/dotnet-user-jwts/src/Commands/CreateCommand.cs
@@ -221,7 +221,7 @@ internal sealed class CreateCommand
{
return 1;
}
- var keyMaterial = DevJwtCliHelpers.GetOrCreateSigningKeyMaterial(userSecretsId);
+ var keyMaterial = DevJwtCliHelpers.GetOrCreateSigningKeyMaterial(userSecretsId, options.Scheme, options.Issuer);
var jwtIssuer = new JwtIssuer(options.Issuer, keyMaterial);
var jwtToken = jwtIssuer.Create(options);
diff --git a/src/Tools/dotnet-user-jwts/src/Commands/KeyCommand.cs b/src/Tools/dotnet-user-jwts/src/Commands/KeyCommand.cs
index a90eb4df14..0ee1a17409 100644
--- a/src/Tools/dotnet-user-jwts/src/Commands/KeyCommand.cs
+++ b/src/Tools/dotnet-user-jwts/src/Commands/KeyCommand.cs
@@ -15,6 +15,18 @@ internal sealed class KeyCommand
{
cmd.Description = Resources.KeyCommand_Description;
+ var schemeOption = cmd.Option(
+ "--scheme",
+ Resources.KeyCommand_SchemeOption_Description,
+ CommandOptionType.SingleValue
+ );
+
+ var issuerOption = cmd.Option(
+ "--issuer",
+ Resources.KeyCommand_IssuerOption_Description,
+ CommandOptionType.SingleValue
+ );
+
var resetOption = cmd.Option(
"--reset",
Resources.KeyCommand_ResetOption_Description,
@@ -29,12 +41,16 @@ internal sealed class KeyCommand
cmd.OnExecute(() =>
{
- return Execute(cmd.Reporter, cmd.ProjectOption.Value(), resetOption.HasValue(), forceOption.HasValue());
+ return Execute(cmd.Reporter,
+ cmd.ProjectOption.Value(),
+ schemeOption.Value() ?? DevJwtsDefaults.Scheme,
+ issuerOption.Value() ?? DevJwtsDefaults.Issuer,
+ resetOption.HasValue(), forceOption.HasValue());
});
});
}
- private static int Execute(IReporter reporter, string projectPath, bool reset, bool force)
+ private static int Execute(IReporter reporter, string projectPath, string schemeName, string issuer, bool reset, bool force)
{
if (!DevJwtCliHelpers.GetProjectAndSecretsId(projectPath, reporter, out var _, out var userSecretsId))
{
@@ -54,15 +70,15 @@ internal sealed class KeyCommand
}
}
- var key = DevJwtCliHelpers.CreateSigningKeyMaterial(userSecretsId, reset: true);
+ var key = DevJwtCliHelpers.CreateSigningKeyMaterial(userSecretsId, schemeName, issuer, reset: true);
reporter.Output(Resources.FormatKeyCommand_KeyCreated(Convert.ToBase64String(key)));
- return 0;
+ return 0;
}
var projectConfiguration = new ConfigurationBuilder()
.AddUserSecrets(userSecretsId)
.Build();
- var signingKeyMaterial = projectConfiguration[DevJwtsDefaults.SigningKeyConfigurationKey];
+ var signingKeyMaterial = projectConfiguration[DevJwtCliHelpers.GetSigningKeyPropertyName(schemeName, issuer)];
if (signingKeyMaterial is null)
{
diff --git a/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtCliHelpers.cs b/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtCliHelpers.cs
index 7a7dc7541c..cbe74ddbde 100644
--- a/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtCliHelpers.cs
+++ b/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtCliHelpers.cs
@@ -14,13 +14,13 @@ namespace Microsoft.AspNetCore.Authentication.JwtBearer.Tools;
internal static class DevJwtCliHelpers
{
- public static string GetOrSetUserSecretsId(IReporter reporter, string projectFilePath)
+ public static string GetOrSetUserSecretsId(string projectFilePath)
{
- var resolver = new ProjectIdResolver(reporter, projectFilePath);
+ var resolver = new ProjectIdResolver(NullReporter.Singleton, projectFilePath);
var id = resolver.Resolve(projectFilePath, configuration: null);
if (string.IsNullOrEmpty(id))
{
- return UserSecretsCreator.CreateUserSecretsId(reporter, projectFilePath, projectFilePath);
+ return UserSecretsCreator.CreateUserSecretsId(NullReporter.Singleton, projectFilePath, projectFilePath);
}
return id;
}
@@ -52,7 +52,7 @@ internal static class DevJwtCliHelpers
return false;
}
- userSecretsId = GetOrSetUserSecretsId(reporter, project);
+ userSecretsId = GetOrSetUserSecretsId(project);
if (userSecretsId == null)
{
reporter.Error($"Project does not contain a user secrets ID.");
@@ -61,13 +61,13 @@ internal static class DevJwtCliHelpers
return true;
}
- public static byte[] GetOrCreateSigningKeyMaterial(string userSecretsId)
+ public static byte[] GetOrCreateSigningKeyMaterial(string userSecretsId, string schemeName, string issuer)
{
var projectConfiguration = new ConfigurationBuilder()
.AddUserSecrets(userSecretsId)
.Build();
- var signingKeyMaterial = projectConfiguration[DevJwtsDefaults.SigningKeyConfigurationKey];
+ var signingKeyMaterial = projectConfiguration[GetSigningKeyPropertyName(schemeName, issuer)];
var keyMaterial = new byte[DevJwtsDefaults.SigningKeyLength];
if (signingKeyMaterial is not null && Convert.TryFromBase64String(signingKeyMaterial, keyMaterial, out var bytesWritten) && bytesWritten == DevJwtsDefaults.SigningKeyLength)
@@ -75,10 +75,10 @@ internal static class DevJwtCliHelpers
return keyMaterial;
}
- return CreateSigningKeyMaterial(userSecretsId);
+ return CreateSigningKeyMaterial(userSecretsId, schemeName, issuer);
}
- public static byte[] CreateSigningKeyMaterial(string userSecretsId, bool reset = false)
+ public static byte[] CreateSigningKeyMaterial(string userSecretsId, string schemeName, string issuer, bool reset = false)
{
// Create signing material and save to user secrets
var newKeyMaterial = System.Security.Cryptography.RandomNumberGenerator.GetBytes(DevJwtsDefaults.SigningKeyLength);
@@ -96,12 +96,13 @@ internal static class DevJwtCliHelpers
}
secrets ??= new JsonObject();
+ var key = GetSigningKeyPropertyName(schemeName, issuer);
- if (reset && secrets.ContainsKey(DevJwtsDefaults.SigningKeyConfigurationKey))
+ if (reset && secrets.ContainsKey(key))
{
- secrets.Remove(DevJwtsDefaults.SigningKeyConfigurationKey);
+ secrets.Remove(key);
}
- secrets.Add(DevJwtsDefaults.SigningKeyConfigurationKey, JsonValue.Create(Convert.ToBase64String(newKeyMaterial)));
+ secrets.Add(key, JsonValue.Create(Convert.ToBase64String(newKeyMaterial)));
using var secretsWriteStream = new FileStream(secretsFilePath, FileMode.Create, FileAccess.Write);
JsonSerializer.Serialize(secretsWriteStream, secrets);
@@ -250,4 +251,7 @@ internal static class DevJwtCliHelpers
}
return true;
}
+
+ public static string GetSigningKeyPropertyName(string scheme, string issuer)
+ => $"Authentication:Schemes:{scheme}:{issuer}:{DevJwtsDefaults.SigningKeyConfigurationKey}";
}
diff --git a/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtDefaults.cs b/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtDefaults.cs
index 595d7c510b..13a1375b69 100644
--- a/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtDefaults.cs
+++ b/src/Tools/dotnet-user-jwts/src/Helpers/DevJwtDefaults.cs
@@ -5,9 +5,10 @@ namespace Microsoft.AspNetCore.Authentication.JwtBearer.Tools;
internal static class DevJwtsDefaults
{
+ public static string Scheme => "Bearer";
public static string Issuer => "dotnet-user-jwts";
- public static string SigningKeyConfigurationKey => $"{Issuer}:KeyMaterial";
+ public static string SigningKeyConfigurationKey => "KeyMaterial";
public static int SigningKeyLength => 32;
}
diff --git a/src/Tools/dotnet-user-jwts/src/Helpers/JwtAuthenticationSchemeSettings.cs b/src/Tools/dotnet-user-jwts/src/Helpers/JwtAuthenticationSchemeSettings.cs
index 77f95e6df1..7a244fd03a 100644
--- a/src/Tools/dotnet-user-jwts/src/Helpers/JwtAuthenticationSchemeSettings.cs
+++ b/src/Tools/dotnet-user-jwts/src/Helpers/JwtAuthenticationSchemeSettings.cs
@@ -10,7 +10,6 @@ namespace Microsoft.AspNetCore.Authentication.JwtBearer.Tools;
internal sealed record JwtAuthenticationSchemeSettings(string SchemeName, List<string> Audiences, string ClaimsIssuer)
{
private const string AuthenticationKey = "Authentication";
- private const string DefaultSchemeKey = "DefaultScheme";
private const string SchemesKey = "Schemes";
private static readonly JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions
@@ -57,15 +56,6 @@ internal sealed record JwtAuthenticationSchemeSettings(string SchemeName, List<s
};
}
- // Set the DefaultScheme if it has not already been set
- // and only a single scheme has been configured thus far
- if (config[AuthenticationKey][DefaultSchemeKey] is null
- && config[AuthenticationKey][SchemesKey] is JsonObject setSchemes
- && setSchemes.Count == 1)
- {
- config[AuthenticationKey][DefaultSchemeKey] = SchemeName;
- }
-
using var writer = new FileStream(filePath, FileMode.Open, FileAccess.Write);
JsonSerializer.Serialize(writer, config, _jsonSerializerOptions);
}
@@ -80,11 +70,6 @@ internal sealed record JwtAuthenticationSchemeSettings(string SchemeName, List<s
authentication[SchemesKey] is JsonObject schemes)
{
schemes.Remove(name);
- if (authentication[DefaultSchemeKey] is JsonValue defaultScheme
- && defaultScheme.GetValue<string>() == name)
- {
- authentication.Remove(DefaultSchemeKey);
- }
}
using var writer = new FileStream(filePath, FileMode.Create, FileAccess.Write);
diff --git a/src/Tools/dotnet-user-jwts/src/Resources.resx b/src/Tools/dotnet-user-jwts/src/Resources.resx
index 06fbf4f2ee..8a75b14372 100644
--- a/src/Tools/dotnet-user-jwts/src/Resources.resx
+++ b/src/Tools/dotnet-user-jwts/src/Resources.resx
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
- <!--
- Microsoft ResX Schema
-
+ <!--
+ Microsoft ResX Schema
+
Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
associated with the data types.
-
+
Example:
-
+
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
-
- There are any number of "resheader" rows that contain simple
+
+ There are any number of "resheader" rows that contain simple
name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
-
+
mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
+ value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
-
+
mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
+ value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
+ value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -246,6 +246,9 @@
<data name="KeyCommand_ForceOption_Description" xml:space="preserve">
<value>Don't prompt for confirmation before resetting the signing key.</value>
</data>
+ <data name="KeyCommand_IssuerOption_Description" xml:space="preserve">
+ <value>The issuer associated with the signing key to be reset or displayed. Defaults to 'dotnet-user-jwts'.</value>
+ </data>
<data name="KeyCommand_KeyCreated" xml:space="preserve">
<value>New signing key created: '{0}'</value>
</data>
@@ -258,6 +261,9 @@
<data name="KeyCommand_ResetOption_Description" xml:space="preserve">
<value>Reset the signing key. This will invalidate all previously issued JWTs for this project.</value>
</data>
+ <data name="KeyCommand_SchemeOption_Description" xml:space="preserve">
+ <value>The scheme name associated with the signing key to be reset or displayed. Defaults to 'Bearer'.</value>
+ </data>
<data name="ListCommand_Description" xml:space="preserve">
<value>Lists the JWTs issued for the project</value>
</data>
@@ -303,4 +309,4 @@
<data name="RemoveCommand_NoJwtFound" xml:space="preserve">
<value>No JWT with ID '{0}' found.</value>
</data>
-</root>
+</root> \ No newline at end of file
diff --git a/src/Tools/dotnet-user-jwts/test/UserJwtsTestFixture.cs b/src/Tools/dotnet-user-jwts/test/UserJwtsTestFixture.cs
index 1e14b7d5d6..c4364d33cb 100644
--- a/src/Tools/dotnet-user-jwts/test/UserJwtsTestFixture.cs
+++ b/src/Tools/dotnet-user-jwts/test/UserJwtsTestFixture.cs
@@ -62,7 +62,7 @@ public class UserJwtsTestFixture : IDisposable
}
}";
- public string CreateProject(bool hasSecret = true, string appSettingsContent = "{}")
+ public string CreateProject(bool hasSecret = true)
{
var projectPath = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "userjwtstest", Guid.NewGuid().ToString()));
Directory.CreateDirectory(Path.Combine(projectPath.FullName, "Properties"));
@@ -81,7 +81,7 @@ public class UserJwtsTestFixture : IDisposable
File.WriteAllText(
Path.Combine(projectPath.FullName, "appsettings.Development.json"),
- appSettingsContent);
+ "{}");
if (hasSecret)
{
diff --git a/src/Tools/dotnet-user-jwts/test/UserJwtsTests.cs b/src/Tools/dotnet-user-jwts/test/UserJwtsTests.cs
index 3c35b0085e..4cbe867f03 100644
--- a/src/Tools/dotnet-user-jwts/test/UserJwtsTests.cs
+++ b/src/Tools/dotnet-user-jwts/test/UserJwtsTests.cs
@@ -49,7 +49,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
var app = new Program(_console);
app.Run(new[] { "list", "--project", project });
- Assert.Contains("Set UserSecretsId to ", _console.GetOutput());
+ Assert.DoesNotContain("Set UserSecretsId to ", _console.GetOutput());
Assert.Contains("No JWTs created yet!", _console.GetOutput());
}
@@ -62,66 +62,20 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
app.Run(new[] { "create", "--project", project });
var output = _console.GetOutput();
Assert.DoesNotContain("could not find SecretManager.targets", output);
- Assert.Contains("Set UserSecretsId to ", output);
+ Assert.DoesNotContain("Set UserSecretsId to ", output);
Assert.Contains("New JWT saved", output);
}
[Fact]
- public async Task Create_SetsDefaultSchemeIfNoOtherSchemesSet()
+ public void Create_WritesGeneratedTokenToDisk()
{
var project = Path.Combine(_fixture.CreateProject(), "TestProject.csproj");
- var appSettingsPath = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
+ var appsettings = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
var app = new Program(_console);
app.Run(new[] { "create", "--project", project });
Assert.Contains("New JWT saved", _console.GetOutput());
-
- using FileStream openStream = File.OpenRead(appSettingsPath);
- var appSettingsFile = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
-
- Assert.True(appSettingsFile.TryGetPropertyValue("Authentication", out var authentication));
- Assert.Equal("Bearer", authentication["DefaultScheme"].GetValue<string>());
- Assert.Equal("dotnet-user-jwts", authentication["Schemes"]["Bearer"]["ClaimsIssuer"].GetValue<string>());
- }
-
- [Fact]
- public async Task Create_DoesNotOverrideDefaultSchemeIfAlreadySet()
- {
- var project = Path.Combine(_fixture.CreateProject(
- hasSecret: true,
- appSettingsContent: @"{ ""Authentication"": { ""DefaultScheme"": ""foobar"" } }"), "TestProject.csproj");
- var appSettingsPath = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
- var app = new Program(_console);
-
- app.Run(new[] { "create", "--project", project });
- Assert.Contains("New JWT saved", _console.GetOutput());
-
- using FileStream openStream = File.OpenRead(appSettingsPath);
- var appSettingsFile = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
-
- Assert.True(appSettingsFile.TryGetPropertyValue("Authentication", out var authentication));
- Assert.Equal("foobar", authentication["DefaultScheme"].GetValue<string>()); //foobar not Bearer
- Assert.Equal("dotnet-user-jwts", authentication["Schemes"]["Bearer"]["ClaimsIssuer"].GetValue<string>());
- }
-
- [Fact]
- public async Task Create_DoesNotSetDefaultSchemeIfMultipleSchemesConfigured()
- {
- var project = Path.Combine(_fixture.CreateProject(
- hasSecret: true,
- appSettingsContent: @"{ ""Authentication"": { ""Schemes"": { ""foobar"" : { } } } }"), "TestProject.csproj");
- var appSettingsPath = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
- var app = new Program(_console);
-
- app.Run(new[] { "create", "--project", project });
- Assert.Contains("New JWT saved", _console.GetOutput());
-
- using FileStream openStream = File.OpenRead(appSettingsPath);
- var appSettingsFile = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
-
- Assert.True(appSettingsFile.TryGetPropertyValue("Authentication", out var authentication));
- Assert.Null(authentication["DefaultScheme"]); // Should not be set beause 2 schemes configured
- Assert.Equal("dotnet-user-jwts", authentication["Schemes"]["Bearer"]["ClaimsIssuer"].GetValue<string>());
+ Assert.Contains("dotnet-user-jwts", File.ReadAllText(appsettings));
}
[Fact]
@@ -138,6 +92,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
public void List_ReturnsIdForGeneratedToken()
{
var project = Path.Combine(_fixture.CreateProject(), "TestProject.csproj");
+ var appsettings = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
var app = new Program(_console);
app.Run(new[] { "create", "--project", project, "--scheme", "MyCustomScheme" });
@@ -148,10 +103,10 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
}
[Fact]
- public async Task Remove_RemovesGeneratedToken()
+ public void Remove_RemovesGeneratedToken()
{
var project = Path.Combine(_fixture.CreateProject(), "TestProject.csproj");
- var appSettingsPath = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
+ var appsettings = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
var app = new Program(_console);
app.Run(new[] { "create", "--project", project });
@@ -160,45 +115,16 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
app.Run(new[] { "create", "--project", project, "--scheme", "Scheme2" });
app.Run(new[] { "remove", id, "--project", project });
-
- using FileStream openStream = File.OpenRead(appSettingsPath);
- var appSettingsFile = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
-
- Assert.True(appSettingsFile.TryGetPropertyValue("Authentication", out var authentication));
- Assert.Null(authentication["Schemes"]["Bearer"]);
- Assert.NotNull(authentication["Schemes"]["Scheme2"]);
- Assert.Null(authentication["DefaultScheme"]);
- }
-
- [Fact]
- public async Task Remove_DoesNotUnsetDefaultSchemeIfNoMatch()
- {
- var project = Path.Combine(_fixture.CreateProject(), "TestProject.csproj");
- var appSettingsPath = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
- var app = new Program(_console);
-
- app.Run(new[] { "create", "--project", project });
- _console.ClearOutput();
- app.Run(new[] { "create", "--project", project, "--scheme", "Scheme2" });
- var matches = Regex.Matches(_console.GetOutput(), "New JWT saved with ID '(.*?)'");
- var id = matches.SingleOrDefault().Groups[1].Value;
-
- app.Run(new[] { "remove", id, "--project", project });
-
- using FileStream openStream = File.OpenRead(appSettingsPath);
- var appSettingsFile = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
-
- Assert.True(appSettingsFile.TryGetPropertyValue("Authentication", out var authentication));
- Assert.NotNull(authentication["Schemes"]["Bearer"]);
- Assert.Null(authentication["Schemes"]["Scheme2"]);
- Assert.NotNull(authentication["DefaultScheme"]); // We haven't removed the Bearer scheme so it's still the default
+ var appsettingsContent = File.ReadAllText(appsettings);
+ Assert.DoesNotContain(DevJwtsDefaults.Scheme, appsettingsContent);
+ Assert.Contains("Scheme2", appsettingsContent);
}
[Fact]
- public async Task Clear_RemovesGeneratedTokens()
+ public void Clear_RemovesGeneratedTokens()
{
var project = Path.Combine(_fixture.CreateProject(), "TestProject.csproj");
- var appSettingsPath = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
+ var appsettings = Path.Combine(Path.GetDirectoryName(project), "appsettings.Development.json");
var app = new Program(_console);
app.Run(new[] { "create", "--project", project });
@@ -207,14 +133,9 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
Assert.Contains("New JWT saved", _console.GetOutput());
app.Run(new[] { "clear", "--project", project, "--force" });
-
- using FileStream openStream = File.OpenRead(appSettingsPath);
- var appSettingsFile = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
-
- Assert.True(appSettingsFile.TryGetPropertyValue("Authentication", out var authentication));
- Assert.Null(authentication["Schemes"]["Bearer"]);
- Assert.Null(authentication["Schemes"]["Scheme2"]);
- Assert.Null(authentication["DefaultScheme"]);
+ var appsettingsContent = File.ReadAllText(appsettings);
+ Assert.DoesNotContain(DevJwtsDefaults.Scheme, appsettingsContent);
+ Assert.DoesNotContain("Scheme2", appsettingsContent);
}
[Fact]
@@ -254,7 +175,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
using FileStream openStream = File.OpenRead(secretsFilePath);
var secretsJson = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
Assert.NotNull(secretsJson);
- Assert.True(secretsJson.ContainsKey(DevJwtsDefaults.SigningKeyConfigurationKey));
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName(DevJwtsDefaults.Scheme, DevJwtsDefaults.Issuer)));
Assert.True(secretsJson.TryGetPropertyValue("Foo", out var fooField));
Assert.Equal("baz", fooField["Bar"].GetValue<string>());
}
@@ -342,7 +263,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
Assert.Contains($"ID: {id}", output);
Assert.Contains($"Name: {Environment.UserName}", output);
- Assert.Contains($"Scheme: Bearer", output);
+ Assert.Contains($"Scheme: {DevJwtsDefaults.Scheme}", output);
Assert.Contains($"Audience(s): http://localhost:23528, https://localhost:44395, https://localhost:5001, http://localhost:5000", output);
}
@@ -361,7 +282,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
Assert.Contains($"ID: {id}", output);
Assert.Contains($"Name: {Environment.UserName}", output);
- Assert.Contains($"Scheme: Bearer", output);
+ Assert.Contains($"Scheme: {DevJwtsDefaults.Scheme}", output);
Assert.Contains($"Audience(s): http://localhost:23528, https://localhost:44395, https://localhost:5001, http://localhost:5000", output);
Assert.Contains($"Roles: [foobar]", output);
Assert.DoesNotContain("Custom Claims", output);
@@ -382,7 +303,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
Assert.Contains($"ID: {id}", output);
Assert.Contains($"Name: {Environment.UserName}", output);
- Assert.Contains($"Scheme: Bearer", output);
+ Assert.Contains($"Scheme: {DevJwtsDefaults.Scheme}", output);
Assert.Contains($"Audience(s): http://localhost:23528, https://localhost:44395, https://localhost:5001, http://localhost:5000", output);
Assert.Contains($"Scopes: none", output);
Assert.Contains($"Roles: [none]", output);
@@ -400,7 +321,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
var deserialized = JsonSerializer.Deserialize<Jwt>(output);
Assert.NotNull(deserialized);
- Assert.Equal("Bearer", deserialized.Scheme);
+ Assert.Equal(DevJwtsDefaults.Scheme, deserialized.Scheme);
Assert.Equal(Environment.UserName, deserialized.Name);
}
@@ -453,7 +374,7 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
using FileStream openStream = File.OpenRead(secretsFilePath);
var secretsJson = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
Assert.NotNull(secretsJson);
- Assert.True(secretsJson.ContainsKey(DevJwtsDefaults.SigningKeyConfigurationKey));
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName(DevJwtsDefaults.Scheme, DevJwtsDefaults.Issuer)));
Assert.True(secretsJson.TryGetPropertyValue("Foo", out var fooField));
Assert.Equal("baz", fooField["Bar"].GetValue<string>());
}
@@ -463,7 +384,6 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
{
var projectPath = _fixture.CreateProject();
var project = Path.Combine(projectPath, "TestProject.csproj");
- var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId);
var app = new Program(_console);
app.Run(new[] { "create", "--project", project});
@@ -475,4 +395,89 @@ public class UserJwtsTests : IClassFixture<UserJwtsTestFixture>
Assert.Contains("New JWT saved", output);
Assert.Contains($"Audience(s): http://localhost:23528, https://localhost:44395, https://localhost:5001, http://localhost:5000", output);
}
+
+ [Fact]
+ public async Task Create_SupportsSettingACustomIssuerAndScheme()
+ {
+ var projectPath = _fixture.CreateProject();
+ var project = Path.Combine(projectPath, "TestProject.csproj");
+ var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId);
+
+ var app = new Program(_console);
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" });
+ var matches = Regex.Matches(_console.GetOutput(), "New JWT saved with ID '(.*?)'");
+ var id = matches.SingleOrDefault().Groups[1].Value;
+ app.Run(new[] { "print", id, "--project", project, "--show-all" });
+ var output = _console.GetOutput();
+
+ Assert.Contains("New JWT saved", output);
+
+ using FileStream openStream = File.OpenRead(secretsFilePath);
+ var secretsJson = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName("test-scheme", "test-issuer")));
+ }
+
+ [Fact]
+ public async Task Create_SupportsSettingMutlipleIssuersAndSingleScheme()
+ {
+ var projectPath = _fixture.CreateProject();
+ var project = Path.Combine(projectPath, "TestProject.csproj");
+ var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId);
+
+ var app = new Program(_console);
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" });
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer-2", "--scheme", "test-scheme" });
+
+ Assert.Contains("New JWT saved", _console.GetOutput());
+
+ using FileStream openStream = File.OpenRead(secretsFilePath);
+ var secretsJson = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName("test-scheme", "test-issuer")));
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName("test-scheme", "test-issuer-2")));
+ }
+
+ [Fact]
+ public async Task Create_SupportsSettingSingleIssuerAndMultipleSchemes()
+ {
+ var projectPath = _fixture.CreateProject();
+ var project = Path.Combine(projectPath, "TestProject.csproj");
+ var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId);
+
+ var app = new Program(_console);
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" });
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme-2" });
+
+ Assert.Contains("New JWT saved", _console.GetOutput());
+
+ using FileStream openStream = File.OpenRead(secretsFilePath);
+ var secretsJson = await JsonSerializer.DeserializeAsync<JsonObject>(openStream);
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName("test-scheme", "test-issuer")));
+ Assert.True(secretsJson.ContainsKey(DevJwtCliHelpers.GetSigningKeyPropertyName("test-scheme-2", "test-issuer")));
+ }
+
+ [Fact]
+ public void Key_CanPrintAndReset_BySchemeAndIssuer()
+ {
+ var projectPath = _fixture.CreateProject();
+ var project = Path.Combine(projectPath, "TestProject.csproj");
+
+ var app = new Program(_console);
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" });
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme-2" });
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer-2", "--scheme", "test-scheme" });
+ app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer-2", "--scheme", "test-scheme-3" });
+
+ Assert.Contains("New JWT saved", _console.GetOutput());
+ _console.ClearOutput();
+
+ app.Run(new[] { "key", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" });
+ var printMatches = Regex.Matches(_console.GetOutput(), "Signing Key: '(.*?)'");
+ var key = printMatches.SingleOrDefault().Groups[1].Value;
+ _console.ClearOutput();
+
+ app.Run(new[] { "key", "--project", project, "--reset", "--force", "--issuer", "test-issuer", "--scheme", "test-scheme" });
+ var resetMatches = Regex.Matches(_console.GetOutput(), "New signing key created: '(.*?)'");
+ var resetKey = resetMatches.SingleOrDefault().Groups[1].Value;
+ Assert.NotEqual(key, resetKey);
+ }
}
diff --git a/src/submodules/googletest b/src/submodules/googletest
-Subproject 5376968f6948923e2411081fd9372e71a59d8e7
+Subproject 4219e7254cb8c473f57f6065bd13d1520d7b708
diff --git a/src/submodules/spa-templates b/src/submodules/spa-templates
-Subproject 89af41aa1c0efd4aef83ee51b5c49ab6489f39e
+Subproject 34c6f4e6a7ad8dcf1de67582233cc02eb69c530