From ffe75f55a0373f14d6044b86f982ac7db5f8d9b0 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 22 Oct 2024 17:36:47 -0700 Subject: [PATCH 01/24] Use the .NET runtime extension to find an appropriate .NET install --- l10n/bundle.l10n.json | 3 + src/lsptoolshost/dotnetRuntimeExtensionApi.ts | 50 +++++ .../dotnetRuntimeExtensionResolver.ts | 181 +++--------------- src/lsptoolshost/roslynLanguageServer.ts | 1 - src/main.ts | 30 +++ src/razor/src/extension.ts | 10 - 6 files changed, 107 insertions(+), 168 deletions(-) create mode 100644 src/lsptoolshost/dotnetRuntimeExtensionApi.ts diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index e504aad2b..1c467debb 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -1,6 +1,9 @@ { ".NET Test Log": ".NET Test Log", ".NET NuGet Restore": ".NET NuGet Restore", + "Update and reload": "Update and reload", + "The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue", + "Version {0} of the .NET Install Tool ({2}) was not found, will not activate.": "Version {0} of the .NET Install Tool ({2}) was not found, will not activate.", "How to setup Remote Debugging": "How to setup Remote Debugging", "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.": "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.", "The C# extension for Visual Studio Code is incompatible on {0} {1}.": "The C# extension for Visual Studio Code is incompatible on {0} {1}.", diff --git a/src/lsptoolshost/dotnetRuntimeExtensionApi.ts b/src/lsptoolshost/dotnetRuntimeExtensionApi.ts new file mode 100644 index 000000000..c5ae1fa79 --- /dev/null +++ b/src/lsptoolshost/dotnetRuntimeExtensionApi.ts @@ -0,0 +1,50 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// Contains APIs defined by the vscode-dotnet-runtime extension + +export interface IDotnetAcquireResult { + dotnetPath: string; +} + +export interface IDotnetFindPathContext { + acquireContext: IDotnetAcquireContext; + versionSpecRequirement: DotnetVersionSpecRequirement; +} + +/** + * https://github.com/dotnet/vscode-dotnet-runtime/blob/main/vscode-dotnet-runtime-library/src/IDotnetAcquireContext.ts + */ +interface IDotnetAcquireContext { + version: string; + requestingExtensionId?: string; + errorConfiguration?: AcquireErrorConfiguration; + installType?: DotnetInstallType; + architecture?: string | null | undefined; + mode?: DotnetInstallMode; +} + +/** + * https://github.com/dotnet/vscode-dotnet-runtime/blob/main/vscode-dotnet-runtime-library/src/IDotnetAcquireContext.ts#L53C8-L53C52 + */ +type DotnetInstallType = 'local' | 'global'; + +/** + * https://github.com/dotnet/vscode-dotnet-runtime/blob/main/vscode-dotnet-runtime-library/src/Utils/ErrorHandler.ts#L22 + */ +enum AcquireErrorConfiguration { + DisplayAllErrorPopups = 0, + DisableErrorPopups = 1, +} + +/** + * https://github.com/dotnet/vscode-dotnet-runtime/blob/main/vscode-dotnet-runtime-library/src/Acquisition/DotnetInstallMode.ts + */ +type DotnetInstallMode = 'sdk' | 'runtime' | 'aspnetcore'; + +/** + * https://github.com/dotnet/vscode-dotnet-runtime/blob/main/vscode-dotnet-runtime-library/src/DotnetVersionSpecRequirement.ts + */ +type DotnetVersionSpecRequirement = 'equal' | 'greater_than_or_equal' | 'less_than_or_equal'; diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index 5c458d22c..ba239a640 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -5,33 +5,23 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import * as semver from 'semver'; import { HostExecutableInformation } from '../shared/constants/hostExecutableInformation'; import { IHostExecutableResolver } from '../shared/constants/IHostExecutableResolver'; import { PlatformInformation } from '../shared/platform'; import { commonOptions, languageServerOptions } from '../shared/options'; import { existsSync } from 'fs'; import { CSharpExtensionId } from '../constants/csharpExtensionId'; -import { getDotnetInfo } from '../shared/utils/getDotnetInfo'; import { readFile } from 'fs/promises'; -import { RuntimeInfo } from '../shared/utils/dotnetInfo'; +import { IDotnetFindPathContext } from './dotnetRuntimeExtensionApi'; export const DotNetRuntimeVersion = '8.0.10'; -interface IDotnetAcquireResult { - dotnetPath: string; -} - /** * Resolves the dotnet runtime for a server executable from given options and the dotnet runtime VSCode extension. */ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { constructor( private platformInfo: PlatformInformation, - /** - * This is a function instead of a string because the server path can change while the extension is active (when the option changes). - */ - private getServerPath: (platform: PlatformInformation) => string, private channel: vscode.OutputChannel, private extensionPath: string ) {} @@ -39,38 +29,37 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { private hostInfo: HostExecutableInformation | undefined; async getHostExecutableInfo(): Promise { - let dotnetRuntimePath = commonOptions.dotnetPath; - const serverPath = this.getServerPath(this.platformInfo); - - // Check if we can find a valid dotnet from dotnet --version on the PATH. - if (!dotnetRuntimePath) { - const dotnetPath = await this.findDotnetFromPath(); - if (dotnetPath) { - return { - version: '' /* We don't need to know the version - we've already verified its high enough */, - path: dotnetPath, - env: this.getEnvironmentVariables(dotnetPath), - }; + let dotnetExecutablePath: string; + if (commonOptions.dotnetPath) { + const dotnetExecutableName = this.getDotnetExecutableName(); + dotnetExecutablePath = path.join(commonOptions.dotnetPath, dotnetExecutableName); + } else { + if (this.hostInfo) { + return this.hostInfo; } - } - - // We didn't find it on the path, see if we can install the correct runtime using the runtime extension. - if (!dotnetRuntimePath) { - const dotnetInfo = await this.acquireDotNetProcessDependencies(serverPath); - dotnetRuntimePath = path.dirname(dotnetInfo.path); - } - const dotnetExecutableName = this.getDotnetExecutableName(); - const dotnetExecutablePath = path.join(dotnetRuntimePath, dotnetExecutableName); - if (!existsSync(dotnetExecutablePath)) { - throw new Error(`Cannot find dotnet path '${dotnetExecutablePath}'`); + this.channel.appendLine(`Acquiring .NET runtime version ${DotNetRuntimeVersion}`); + const extensionArchitecture = (await this.getArchitectureFromTargetPlatform()) ?? process.arch; + const findPathRequest: IDotnetFindPathContext = { + acquireContext: { + version: DotNetRuntimeVersion, + requestingExtensionId: CSharpExtensionId, + architecture: extensionArchitecture, + mode: 'runtime', + }, + versionSpecRequirement: 'greater_than_or_equal', + }; + const result = await vscode.commands.executeCommand('dotnet.findPath', findPathRequest); + dotnetExecutablePath = result; } - return { + const hostInfo = { version: '' /* We don't need to know the version - we've already downloaded the correct one */, path: dotnetExecutablePath, env: this.getEnvironmentVariables(dotnetExecutablePath), }; + this.hostInfo = hostInfo; + return hostInfo; } private getEnvironmentVariables(dotnetExecutablePath: string): NodeJS.ProcessEnv { @@ -96,128 +85,6 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { return env; } - /** - * Acquires the .NET runtime if it is not already present. - * @returns The path to the .NET runtime - */ - private async acquireRuntime(): Promise { - if (this.hostInfo) { - return this.hostInfo; - } - - let status = await vscode.commands.executeCommand('dotnet.acquireStatus', { - version: DotNetRuntimeVersion, - requestingExtensionId: CSharpExtensionId, - }); - if (status === undefined) { - await vscode.commands.executeCommand('dotnet.showAcquisitionLog'); - - status = await vscode.commands.executeCommand('dotnet.acquire', { - version: DotNetRuntimeVersion, - requestingExtensionId: CSharpExtensionId, - }); - if (!status?.dotnetPath) { - throw new Error('Could not resolve the dotnet path!'); - } - } - - return (this.hostInfo = { - version: DotNetRuntimeVersion, - path: status.dotnetPath, - env: process.env, - }); - } - - /** - * Acquires the .NET runtime and any other dependencies required to spawn a particular .NET executable. - * @param path The path to the entrypoint assembly. Typically a .dll. - */ - private async acquireDotNetProcessDependencies(path: string): Promise { - const dotnetInfo = await this.acquireRuntime(); - - const args = [path]; - // This will install any missing Linux dependencies. - await vscode.commands.executeCommand('dotnet.ensureDotnetDependencies', { - command: dotnetInfo.path, - arguments: args, - }); - - return dotnetInfo; - } - - /** - * Checks dotnet --version to see if the value on the path is greater than the minimum required version. - * This is adapated from similar O# server logic and should be removed when we have a stable acquisition extension. - * @returns true if the dotnet version is greater than the minimum required version, false otherwise. - */ - private async findDotnetFromPath(): Promise { - try { - const dotnetInfo = await getDotnetInfo([]); - - const extensionArchitecture = await this.getArchitectureFromTargetPlatform(); - const dotnetArchitecture = dotnetInfo.Architecture; - - // If the extension arhcitecture is defined, we check that it matches the dotnet architecture. - // If its undefined we likely have a platform neutral server and assume it can run on any architecture. - if (extensionArchitecture && extensionArchitecture !== dotnetArchitecture) { - throw new Error( - `The architecture of the .NET runtime (${dotnetArchitecture}) does not match the architecture of the extension (${extensionArchitecture}).` - ); - } - - // Verify that the dotnet we found includes a runtime version that is compatible with our requirement. - const requiredRuntimeVersion = semver.parse(`${DotNetRuntimeVersion}`); - if (!requiredRuntimeVersion) { - throw new Error(`Unable to parse minimum required version ${DotNetRuntimeVersion}`); - } - - const coreRuntimeVersions = dotnetInfo.Runtimes['Microsoft.NETCore.App']; - let matchingRuntime: RuntimeInfo | undefined = undefined; - for (const runtime of coreRuntimeVersions) { - // We consider a match if the runtime is greater than or equal to the required version since we roll forward. - if (semver.gte(runtime.Version, requiredRuntimeVersion)) { - matchingRuntime = runtime; - break; - } - } - - if (!matchingRuntime) { - throw new Error( - `No compatible .NET runtime found. Minimum required version is ${DotNetRuntimeVersion}.` - ); - } - - // The .NET install layout is a well known structure on all platforms. - // See https://github.com/dotnet/designs/blob/main/accepted/2020/install-locations.md#net-core-install-layout - // - // Therefore we know that the runtime path is always in /shared/ - // and the dotnet executable is always at /dotnet(.exe). - // - // Since dotnet --list-runtimes will always use the real assembly path to output the runtime folder (no symlinks!) - // we know the dotnet executable will be two folders up in the install root. - const runtimeFolderPath = matchingRuntime.Path; - const installFolder = path.dirname(path.dirname(runtimeFolderPath)); - const dotnetExecutablePath = path.join(installFolder, this.getDotnetExecutableName()); - if (!existsSync(dotnetExecutablePath)) { - throw new Error( - `dotnet executable path does not exist: ${dotnetExecutablePath}, dotnet installation may be corrupt.` - ); - } - - this.channel.appendLine(`Using dotnet configured on PATH`); - return dotnetExecutablePath; - } catch (e) { - this.channel.appendLine( - 'Failed to find dotnet info from path, falling back to acquire runtime via ms-dotnettools.vscode-dotnet-runtime' - ); - if (e instanceof Error) { - this.channel.appendLine(e.message); - } - } - - return undefined; - } - private async getArchitectureFromTargetPlatform(): Promise { const vsixManifestFile = path.join(this.extensionPath, '.vsixmanifest'); if (!existsSync(vsixManifestFile)) { diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index 1ca6ea1d6..72fe9e4ce 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -1074,7 +1074,6 @@ export async function activateRoslynLanguageServer( const hostExecutableResolver = new DotnetRuntimeExtensionResolver( platformInfo, - getServerPath, outputChannel, context.extensionPath ); diff --git a/src/main.ts b/src/main.ts index e928493e8..aee92a5c7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -41,6 +41,7 @@ import { debugSessionTracker } from './coreclrDebug/provisionalDebugSessionTrack import { getComponentFolder } from './lsptoolshost/builtInComponents'; import { activateOmniSharpLanguageServer, ActivationResult } from './omnisharp/omnisharpLanguageServer'; import { ActionOption, showErrorMessage } from './shared/observers/utils/showMessage'; +import { lt } from 'semver'; export async function activate( context: vscode.ExtensionContext @@ -81,6 +82,35 @@ export async function activate( requiredPackageIds.push('OmniSharp'); } + const dotnetRuntimeExtensionId = 'ms-dotnettools.vscode-dotnet-runtime'; + const requiredDotnetRuntimeExtensionVersion = '2.2.1'; + + const dotnetRuntimeExtension = vscode.extensions.getExtension(dotnetRuntimeExtensionId); + const dotnetRuntimeExtensionVersion = dotnetRuntimeExtension?.packageJSON.version; + if (lt(dotnetRuntimeExtensionVersion, requiredDotnetRuntimeExtensionVersion)) { + const button = vscode.l10n.t('Update and reload'); + const prompt = vscode.l10n.t( + 'The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue', + context.extension.packageJSON.displayName, + requiredDotnetRuntimeExtensionVersion, + dotnetRuntimeExtensionId + ); + await vscode.window.showErrorMessage(prompt, button).then(async (selection) => { + if (selection === button) { + await vscode.commands.executeCommand('workbench.extensions.installExtension', dotnetRuntimeExtensionId); + await vscode.commands.executeCommand('workbench.action.reloadWindow'); + } else { + throw new Error( + vscode.l10n.t( + 'Version {0} of the .NET Install Tool ({2}) was not found, will not activate.', + requiredDotnetRuntimeExtensionVersion, + dotnetRuntimeExtensionId + ) + ); + } + }); + } + // If the dotnet bundle is installed, this will ensure the dotnet CLI is on the path. await initializeDotnetPath(); diff --git a/src/razor/src/extension.ts b/src/razor/src/extension.ts index 5346f4cc0..02386253c 100644 --- a/src/razor/src/extension.ts +++ b/src/razor/src/extension.ts @@ -47,8 +47,6 @@ import TelemetryReporter from '@vscode/extension-telemetry'; import { CSharpDevKitExports } from '../../csharpDevKitExports'; import { DotnetRuntimeExtensionResolver } from '../../lsptoolshost/dotnetRuntimeExtensionResolver'; import { PlatformInformation } from '../../shared/platform'; -import { RazorLanguageServerOptions } from './razorLanguageServerOptions'; -import { resolveRazorLanguageServerOptions } from './razorLanguageServerOptionsResolver'; import { RazorFormatNewFileHandler } from './formatNewFile/razorFormatNewFileHandler'; import { InlayHintHandler } from './inlayHint/inlayHintHandler'; import { InlayHintResolveHandler } from './inlayHint/inlayHintResolveHandler'; @@ -75,16 +73,8 @@ export async function activate( const logger = new RazorLogger(eventEmitterFactory, languageServerLogLevel); try { - const razorOptions: RazorLanguageServerOptions = resolveRazorLanguageServerOptions( - vscodeType, - languageServerDir, - languageServerLogLevel, - logger - ); - const hostExecutableResolver = new DotnetRuntimeExtensionResolver( platformInfo, - () => razorOptions.serverPath, logger.outputChannel, context.extensionPath ); From 630078fddc12c5a0eececcabcfd61fe35dd6d066 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 23 Oct 2024 10:53:00 -0700 Subject: [PATCH 02/24] review feedback --- .../dotnetRuntimeExtensionResolver.ts | 2 +- src/main.ts | 27 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index ba239a640..d6af53c33 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -38,7 +38,7 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { return this.hostInfo; } - this.channel.appendLine(`Acquiring .NET runtime version ${DotNetRuntimeVersion}`); + this.channel.appendLine(`Locating .NET runtime version ${DotNetRuntimeVersion}`); const extensionArchitecture = (await this.getArchitectureFromTargetPlatform()) ?? process.arch; const findPathRequest: IDotnetFindPathContext = { acquireContext: { diff --git a/src/main.ts b/src/main.ts index aee92a5c7..63fd2bfbe 100644 --- a/src/main.ts +++ b/src/main.ts @@ -95,20 +95,19 @@ export async function activate( requiredDotnetRuntimeExtensionVersion, dotnetRuntimeExtensionId ); - await vscode.window.showErrorMessage(prompt, button).then(async (selection) => { - if (selection === button) { - await vscode.commands.executeCommand('workbench.extensions.installExtension', dotnetRuntimeExtensionId); - await vscode.commands.executeCommand('workbench.action.reloadWindow'); - } else { - throw new Error( - vscode.l10n.t( - 'Version {0} of the .NET Install Tool ({2}) was not found, will not activate.', - requiredDotnetRuntimeExtensionVersion, - dotnetRuntimeExtensionId - ) - ); - } - }); + const selection = await vscode.window.showErrorMessage(prompt, button); + if (selection === button) { + await vscode.commands.executeCommand('workbench.extensions.installExtension', dotnetRuntimeExtensionId); + await vscode.commands.executeCommand('workbench.action.reloadWindow'); + } else { + throw new Error( + vscode.l10n.t( + 'Version {0} of the .NET Install Tool ({2}) was not found, will not activate.', + requiredDotnetRuntimeExtensionVersion, + dotnetRuntimeExtensionId + ) + ); + } } // If the dotnet bundle is installed, this will ensure the dotnet CLI is on the path. From 21c65ea0b73ab658ff2e7725df0abd8b48795d44 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 30 Oct 2024 17:21:02 -0700 Subject: [PATCH 03/24] Require version of runtime extension with API fix --- src/lsptoolshost/dotnetRuntimeExtensionResolver.ts | 13 ++++++++++--- src/main.ts | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index d6af53c33..cf80518f2 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -12,7 +12,7 @@ import { commonOptions, languageServerOptions } from '../shared/options'; import { existsSync } from 'fs'; import { CSharpExtensionId } from '../constants/csharpExtensionId'; import { readFile } from 'fs/promises'; -import { IDotnetFindPathContext } from './dotnetRuntimeExtensionApi'; +import { IDotnetAcquireResult, IDotnetFindPathContext } from './dotnetRuntimeExtensionApi'; export const DotNetRuntimeVersion = '8.0.10'; @@ -49,8 +49,15 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { }, versionSpecRequirement: 'greater_than_or_equal', }; - const result = await vscode.commands.executeCommand('dotnet.findPath', findPathRequest); - dotnetExecutablePath = result; + const result = await vscode.commands.executeCommand( + 'dotnet.findPath', + findPathRequest + ); + if (result === undefined) { + throw new Error('Failed to locate .NET runtime'); + } + + dotnetExecutablePath = result.dotnetPath; } const hostInfo = { diff --git a/src/main.ts b/src/main.ts index 63fd2bfbe..53eb9a1df 100644 --- a/src/main.ts +++ b/src/main.ts @@ -83,7 +83,7 @@ export async function activate( } const dotnetRuntimeExtensionId = 'ms-dotnettools.vscode-dotnet-runtime'; - const requiredDotnetRuntimeExtensionVersion = '2.2.1'; + const requiredDotnetRuntimeExtensionVersion = '2.2.2'; const dotnetRuntimeExtension = vscode.extensions.getExtension(dotnetRuntimeExtensionId); const dotnetRuntimeExtensionVersion = dotnetRuntimeExtension?.packageJSON.version; From 9e68455c3456003858323b0aae275b3e6fd49cf2 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 30 Oct 2024 17:47:50 -0700 Subject: [PATCH 04/24] fix error message --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 53eb9a1df..615460350 100644 --- a/src/main.ts +++ b/src/main.ts @@ -102,7 +102,7 @@ export async function activate( } else { throw new Error( vscode.l10n.t( - 'Version {0} of the .NET Install Tool ({2}) was not found, will not activate.', + 'Version {0} of the .NET Install Tool ({1}) was not found, will not activate.', requiredDotnetRuntimeExtensionVersion, dotnetRuntimeExtensionId ) From f36d8bfca77f864fa6a0df061469613b0367dc1b Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 30 Oct 2024 18:21:04 -0700 Subject: [PATCH 05/24] fix string --- l10n/bundle.l10n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 1c467debb..e5f44a0f0 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -3,7 +3,7 @@ ".NET NuGet Restore": ".NET NuGet Restore", "Update and reload": "Update and reload", "The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue", - "Version {0} of the .NET Install Tool ({2}) was not found, will not activate.": "Version {0} of the .NET Install Tool ({2}) was not found, will not activate.", + "Version {0} of the .NET Install Tool ({1}) was not found, will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, will not activate.", "How to setup Remote Debugging": "How to setup Remote Debugging", "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.": "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.", "The C# extension for Visual Studio Code is incompatible on {0} {1}.": "The C# extension for Visual Studio Code is incompatible on {0} {1}.", From 97a83fbd967871822551ef75d48c0bf7cca87bb2 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 31 Oct 2024 11:03:41 -0700 Subject: [PATCH 06/24] Actually acquire .net if does not exist --- .../dotnetRuntimeExtensionResolver.ts | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index cf80518f2..81c2350f7 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -49,15 +49,15 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { }, versionSpecRequirement: 'greater_than_or_equal', }; - const result = await vscode.commands.executeCommand( + let acquireResult = await vscode.commands.executeCommand( 'dotnet.findPath', findPathRequest ); - if (result === undefined) { - throw new Error('Failed to locate .NET runtime'); + if (acquireResult === undefined) { + acquireResult = await this.acquireRuntime(); } - dotnetExecutablePath = result.dotnetPath; + dotnetExecutablePath = acquireResult.dotnetPath; } const hostInfo = { @@ -92,6 +92,30 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { return env; } + /** + * Acquires the .NET runtime if it is not already present. + * @returns The path to the .NET runtime + */ + private async acquireRuntime(): Promise { + let status = await vscode.commands.executeCommand('dotnet.acquireStatus', { + version: DotNetRuntimeVersion, + requestingExtensionId: CSharpExtensionId, + }); + if (status === undefined) { + await vscode.commands.executeCommand('dotnet.showAcquisitionLog'); + + status = await vscode.commands.executeCommand('dotnet.acquire', { + version: DotNetRuntimeVersion, + requestingExtensionId: CSharpExtensionId, + }); + if (!status) { + throw new Error('Could not resolve the dotnet path!'); + } + } + + return status; + } + private async getArchitectureFromTargetPlatform(): Promise { const vsixManifestFile = path.join(this.extensionPath, '.vsixmanifest'); if (!existsSync(vsixManifestFile)) { From e3c7c02555c3ed1796b79e959130c6083f8b52d5 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 31 Oct 2024 11:12:34 -0700 Subject: [PATCH 07/24] log when we acquire .net --- src/lsptoolshost/dotnetRuntimeExtensionResolver.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index 81c2350f7..70fbf5287 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -54,6 +54,9 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { findPathRequest ); if (acquireResult === undefined) { + this.channel.appendLine( + `Failed to find .NET ${DotNetRuntimeVersion} from path, falling back to acquire runtime via ms-dotnettools.vscode-dotnet-runtime` + ); acquireResult = await this.acquireRuntime(); } From 4f21c8eb747aaa9e68c1cdd749bc4f5477cc1791 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 31 Oct 2024 11:15:47 -0700 Subject: [PATCH 08/24] adjust wording --- src/lsptoolshost/dotnetRuntimeExtensionResolver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index 70fbf5287..dd41a0d88 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -55,7 +55,7 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { ); if (acquireResult === undefined) { this.channel.appendLine( - `Failed to find .NET ${DotNetRuntimeVersion} from path, falling back to acquire runtime via ms-dotnettools.vscode-dotnet-runtime` + `Did not find .NET ${DotNetRuntimeVersion} on path, falling back to acquire runtime via ms-dotnettools.vscode-dotnet-runtime` ); acquireResult = await this.acquireRuntime(); } From 8081622f07a6308a2f51a186150224896d181abe Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 31 Oct 2024 12:26:08 -0700 Subject: [PATCH 09/24] fix acquire dependencies --- .../dotnetRuntimeExtensionResolver.ts | 23 ++++++++++++++++++- src/lsptoolshost/roslynLanguageServer.ts | 1 + src/razor/src/extension.ts | 10 ++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index dd41a0d88..296f799ca 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -22,6 +22,10 @@ export const DotNetRuntimeVersion = '8.0.10'; export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { constructor( private platformInfo: PlatformInformation, + /** + * This is a function instead of a string because the server path can change while the extension is active (when the option changes). + */ + private getServerPath: (platform: PlatformInformation) => string, private channel: vscode.OutputChannel, private extensionPath: string ) {} @@ -57,7 +61,7 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { this.channel.appendLine( `Did not find .NET ${DotNetRuntimeVersion} on path, falling back to acquire runtime via ms-dotnettools.vscode-dotnet-runtime` ); - acquireResult = await this.acquireRuntime(); + acquireResult = await this.acquireDotNetProcessDependencies(); } dotnetExecutablePath = acquireResult.dotnetPath; @@ -119,6 +123,23 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { return status; } + /** + * Acquires the .NET runtime and any other dependencies required to spawn a particular .NET executable. + * @param path The path to the entrypoint assembly. Typically a .dll. + */ + private async acquireDotNetProcessDependencies(): Promise { + const acquireResult = await this.acquireRuntime(); + + const args = [this.getServerPath(this.platformInfo)]; + // This will install any missing Linux dependencies. + await vscode.commands.executeCommand('dotnet.ensureDotnetDependencies', { + command: acquireResult.dotnetPath, + arguments: args, + }); + + return acquireResult; + } + private async getArchitectureFromTargetPlatform(): Promise { const vsixManifestFile = path.join(this.extensionPath, '.vsixmanifest'); if (!existsSync(vsixManifestFile)) { diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index 72fe9e4ce..1ca6ea1d6 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -1074,6 +1074,7 @@ export async function activateRoslynLanguageServer( const hostExecutableResolver = new DotnetRuntimeExtensionResolver( platformInfo, + getServerPath, outputChannel, context.extensionPath ); diff --git a/src/razor/src/extension.ts b/src/razor/src/extension.ts index 02386253c..5346f4cc0 100644 --- a/src/razor/src/extension.ts +++ b/src/razor/src/extension.ts @@ -47,6 +47,8 @@ import TelemetryReporter from '@vscode/extension-telemetry'; import { CSharpDevKitExports } from '../../csharpDevKitExports'; import { DotnetRuntimeExtensionResolver } from '../../lsptoolshost/dotnetRuntimeExtensionResolver'; import { PlatformInformation } from '../../shared/platform'; +import { RazorLanguageServerOptions } from './razorLanguageServerOptions'; +import { resolveRazorLanguageServerOptions } from './razorLanguageServerOptionsResolver'; import { RazorFormatNewFileHandler } from './formatNewFile/razorFormatNewFileHandler'; import { InlayHintHandler } from './inlayHint/inlayHintHandler'; import { InlayHintResolveHandler } from './inlayHint/inlayHintResolveHandler'; @@ -73,8 +75,16 @@ export async function activate( const logger = new RazorLogger(eventEmitterFactory, languageServerLogLevel); try { + const razorOptions: RazorLanguageServerOptions = resolveRazorLanguageServerOptions( + vscodeType, + languageServerDir, + languageServerLogLevel, + logger + ); + const hostExecutableResolver = new DotnetRuntimeExtensionResolver( platformInfo, + () => razorOptions.serverPath, logger.outputChannel, context.extensionPath ); From fa16750e695c4e94a696daddbd8add8656f23da9 Mon Sep 17 00:00:00 2001 From: dibarbet Date: Sat, 16 Nov 2024 00:11:24 +0000 Subject: [PATCH 10/24] Update main version --- CHANGELOG.md | 2 ++ version.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57d5fb5ed..27aa79993 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ - Diagnostics related feature requests and improvements [#5951](https://github.com/dotnet/vscode-csharp/issues/5951) - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) +# 2.58.x + # 2.57.x * Update Razor to 9.0.0-preview.24565.1 (PR: [#7793])(https://github.com/dotnet/vscode-csharp/pull/7793) * Update Roslyn to 4.13.0-2.24565.3 (PR: [#7792](https://github.com/dotnet/vscode-csharp/pull/7792)) diff --git a/version.json b/version.json index 5eee7fbcf..fd84246c3 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "2.57", + "version": "2.58", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 253028d0ffd699fe537c3948c60746b175863024 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 18 Nov 2024 17:20:16 -0800 Subject: [PATCH 11/24] Require newest version of .net runtime extension --- src/lsptoolshost/dotnetRuntimeExtensionResolver.ts | 11 +++++++---- src/main.ts | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts index 7d1b81378..3ef4e536f 100644 --- a/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntimeExtensionResolver.ts @@ -14,7 +14,10 @@ import { CSharpExtensionId } from '../constants/csharpExtensionId'; import { readFile } from 'fs/promises'; import { IDotnetAcquireResult, IDotnetFindPathContext } from './dotnetRuntimeExtensionApi'; -export const DotNetRuntimeVersion = '8.0.10'; +const DotNetMajorVersion = '8'; +const DotNetMinorVersion = '0'; +const DotNetPatchVersion = '10'; +export const DotNetRuntimeVersion = `${DotNetMajorVersion}.${DotNetMinorVersion}.${DotNetPatchVersion}`; /** * Resolves the dotnet runtime for a server executable from given options and the dotnet runtime VSCode extension. @@ -104,9 +107,9 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { * @returns The path to the .NET runtime */ private async acquireRuntime(): Promise { - // We have to use '8.0' here because the runtme extension doesn't support acquiring patch versions. - // The acquisition will always acquire the latest however, so it will be at least 8.0.10. - const dotnetAcquireVersion = '8.0'; + // The runtime extension doesn't support specifying a patch versions in the acquire API, so we only use major.minor here. + // That is generally OK, as acquisition will always acquire the latest patch version. + const dotnetAcquireVersion = `${DotNetMajorVersion}.${DotNetMinorVersion}`; let status = await vscode.commands.executeCommand('dotnet.acquireStatus', { version: dotnetAcquireVersion, requestingExtensionId: CSharpExtensionId, diff --git a/src/main.ts b/src/main.ts index db46cfbb0..da02dcae1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -84,7 +84,7 @@ export async function activate( } const dotnetRuntimeExtensionId = 'ms-dotnettools.vscode-dotnet-runtime'; - const requiredDotnetRuntimeExtensionVersion = '2.2.2'; + const requiredDotnetRuntimeExtensionVersion = '2.2.3'; const dotnetRuntimeExtension = vscode.extensions.getExtension(dotnetRuntimeExtensionId); const dotnetRuntimeExtensionVersion = dotnetRuntimeExtension?.packageJSON.version; From 8df49e2734cc7436f623efb10ac849ae19e87d45 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Tue, 19 Nov 2024 00:06:48 -0800 Subject: [PATCH 12/24] Tag new issues as 'untriaged' --- .github/policies/resourceManagement.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/policies/resourceManagement.yml diff --git a/.github/policies/resourceManagement.yml b/.github/policies/resourceManagement.yml new file mode 100644 index 000000000..400966865 --- /dev/null +++ b/.github/policies/resourceManagement.yml @@ -0,0 +1,25 @@ +id: +name: GitOps.PullRequestIssueManagement +description: GitOps.PullRequestIssueManagement primitive +owner: +resource: repository +disabled: false +where: +configuration: + resourceManagementConfiguration: + + eventResponderTasks: + + - description: Add "untriaged" label to issues when opened + triggerOnOwnActions: false + if: + - payloadType: Issues + - or: + - isAction: + action: Opened + then: + - addLabel: + label: untriaged + +onFailure: +onSuccess: \ No newline at end of file From ac730ea4fca478f14d03c6949c1373febc1c931b Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Tue, 19 Nov 2024 00:09:28 -0800 Subject: [PATCH 13/24] Do not trigger CI for GitOps policy changes --- azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7c12c020f..8bc658aab 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -16,7 +16,8 @@ pr: - main paths: exclude: - - ./*.md + - ./*.md + - ./.github/policies/resourceManagement.yml # Run a scheduled build every night on main to run tests against insiders VSCode. # The variable testVSCodeVersion is set to insiders based on the build reason. From 7343f2c7d523f6bc6307e33f9461e70fe12def28 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Tue, 19 Nov 2024 00:11:54 -0800 Subject: [PATCH 14/24] Update excludes for resourceManagement.yml --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8bc658aab..58335f5cc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,7 +17,7 @@ pr: paths: exclude: - ./*.md - - ./.github/policies/resourceManagement.yml + - .github/policies/resourceManagement.yml # Run a scheduled build every night on main to run tests against insiders VSCode. # The variable testVSCodeVersion is set to insiders based on the build reason. From 54554affd889fbc29f4a694fd9d14d2bd381109c Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Tue, 19 Nov 2024 00:14:26 -0800 Subject: [PATCH 15/24] Revise excludes --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 58335f5cc..bcc565860 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,7 +17,7 @@ pr: paths: exclude: - ./*.md - - .github/policies/resourceManagement.yml + - .github/* # Run a scheduled build every night on main to run tests against insiders VSCode. # The variable testVSCodeVersion is set to insiders based on the build reason. From ff944f80ae19eb9b4333100d59a27364adbb3b38 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 19 Nov 2024 13:49:49 -0800 Subject: [PATCH 16/24] review updates --- l10n/bundle.l10n.json | 6 +++--- src/main.ts | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 8fe56f6f9..595688bdb 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -1,9 +1,9 @@ { + "Update and reload": "Update and reload", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", ".NET Test Log": ".NET Test Log", ".NET NuGet Restore": ".NET NuGet Restore", - "Update and reload": "Update and reload", - "The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue", - "Version {0} of the .NET Install Tool ({1}) was not found, will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, will not activate.", "How to setup Remote Debugging": "How to setup Remote Debugging", "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.": "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.", "The C# extension for Visual Studio Code is incompatible on {0} {1}.": "The C# extension for Visual Studio Code is incompatible on {0} {1}.", diff --git a/src/main.ts b/src/main.ts index da02dcae1..953aba697 100644 --- a/src/main.ts +++ b/src/main.ts @@ -91,7 +91,7 @@ export async function activate( if (lt(dotnetRuntimeExtensionVersion, requiredDotnetRuntimeExtensionVersion)) { const button = vscode.l10n.t('Update and reload'); const prompt = vscode.l10n.t( - 'The {0} extension requires version {1} or greater of the .NET Install Tool ({2}) extension. Please update to continue', + 'The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue', context.extension.packageJSON.displayName, requiredDotnetRuntimeExtensionVersion, dotnetRuntimeExtensionId @@ -103,9 +103,10 @@ export async function activate( } else { throw new Error( vscode.l10n.t( - 'Version {0} of the .NET Install Tool ({1}) was not found, will not activate.', + 'Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.', requiredDotnetRuntimeExtensionVersion, - dotnetRuntimeExtensionId + dotnetRuntimeExtensionId, + context.extension.packageJSON.displayName ) ); } From 0251396eb5aacb96b97cdf9fed2b7ac4a20a0230 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 12 Nov 2024 17:41:56 -0800 Subject: [PATCH 17/24] Add client side support for refreshing source generated files --- l10n/bundle.l10n.json | 1 + src/lsptoolshost/roslynLanguageServer.ts | 5 + src/lsptoolshost/roslynProtocol.ts | 10 +- .../sourceGeneratedFilesContentProvider.ts | 96 +++++++++++++++++-- 4 files changed, 101 insertions(+), 11 deletions(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 78c2fbd13..eea581f10 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -163,6 +163,7 @@ "Fix all issues": "Fix all issues", "Select fix all action": "Select fix all action", "Test run already in progress": "Test run already in progress", + "Generated document not found": "Generated document not found", "Server stopped": "Server stopped", "Workspace projects": "Workspace projects", "Your workspace has multiple Visual Studio Solution files; please select one to get full IntelliSense.": "Your workspace has multiple Visual Studio Solution files; please select one to get full IntelliSense.", diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index 69b0d0332..3b43487dc 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -29,6 +29,7 @@ import { CancellationToken, RequestHandler, ResponseError, + NotificationHandler0, } from 'vscode-languageclient/node'; import { PlatformInformation } from '../shared/platform'; import { readConfigurations } from './configurationMiddleware'; @@ -423,6 +424,10 @@ export class RoslynLanguageServer { this._languageClient.addDisposable(this._languageClient.onRequest(type, handler)); } + public registerOnNotification(method: string, handler: NotificationHandler0) { + this._languageClient.addDisposable(this._languageClient.onNotification(method, handler)); + } + public async registerSolutionSnapshot(token: vscode.CancellationToken): Promise { const response = await this.sendRequest0(RoslynProtocol.RegisterSolutionSnapshotRequest.type, token); if (response) { diff --git a/src/lsptoolshost/roslynProtocol.ts b/src/lsptoolshost/roslynProtocol.ts index c9f88c799..bea4640c8 100644 --- a/src/lsptoolshost/roslynProtocol.ts +++ b/src/lsptoolshost/roslynProtocol.ts @@ -233,10 +233,12 @@ export interface CopilotRelatedDocumentsReport { export interface SourceGeneratorGetRequestParams { textDocument: lsp.TextDocumentIdentifier; + resultId?: string; } export interface SourceGeneratedDocumentText { - text: string; + text?: string; + resultId?: string; } export namespace WorkspaceDebugConfigurationRequest { @@ -366,3 +368,9 @@ export namespace SourceGeneratorGetTextRequest { export const messageDirection: lsp.MessageDirection = lsp.MessageDirection.clientToServer; export const type = new lsp.RequestType(method); } + +export namespace RefreshSourceGeneratedDocumentNotification { + export const method = 'workspace/refreshSourceGeneratedDocument'; + export const messageDirection: lsp.MessageDirection = lsp.MessageDirection.serverToClient; + export const type = new lsp.NotificationType(method); +} diff --git a/src/lsptoolshost/sourceGeneratedFilesContentProvider.ts b/src/lsptoolshost/sourceGeneratedFilesContentProvider.ts index 6d070b590..1e31e78c8 100644 --- a/src/lsptoolshost/sourceGeneratedFilesContentProvider.ts +++ b/src/lsptoolshost/sourceGeneratedFilesContentProvider.ts @@ -8,6 +8,7 @@ import * as RoslynProtocol from './roslynProtocol'; import { RoslynLanguageServer } from './roslynLanguageServer'; import { UriConverter } from './uriConverter'; import * as lsp from 'vscode-languageserver-protocol'; +import { IDisposable } from '@microsoft/servicehub-framework'; export function registerSourceGeneratedFilesContentProvider( context: vscode.ExtensionContext, @@ -16,16 +17,91 @@ export function registerSourceGeneratedFilesContentProvider( context.subscriptions.push( vscode.workspace.registerTextDocumentContentProvider( 'roslyn-source-generated', - new (class implements vscode.TextDocumentContentProvider { - async provideTextDocumentContent(uri: vscode.Uri, token: vscode.CancellationToken): Promise { - const result = await languageServer.sendRequest( - RoslynProtocol.SourceGeneratorGetTextRequest.type, - { textDocument: lsp.TextDocumentIdentifier.create(UriConverter.serialize(uri)) }, - token - ); - return result.text; - } - })() + new RoslynSourceGeneratedContentProvider(languageServer) ) ); } + +class RoslynSourceGeneratedContentProvider implements vscode.TextDocumentContentProvider, IDisposable { + private _onDidChangeEmitter: vscode.EventEmitter = new vscode.EventEmitter(); + + // Stores all the source generated documents that we have opened so far and their up to date content. + private _openedDocuments: Map = new Map(); + + // Since we could potentially have multiple refresh notifications in flight at the same time, + // we use a simple queue to ensure that updates to our state map only happen serially. + private _updateQueue?: Promise; + + private _cancellationSource = new vscode.CancellationTokenSource(); + + constructor(private languageServer: RoslynLanguageServer) { + languageServer.registerOnNotification( + RoslynProtocol.RefreshSourceGeneratedDocumentNotification.method, + async () => { + this._openedDocuments.forEach(async (_, key) => { + await this.enqueueDocumentUpdateAsync(key, this._cancellationSource.token); + this._onDidChangeEmitter.fire(key); + }); + } + ); + vscode.workspace.onDidCloseTextDocument((document) => { + const openedDoc = this._openedDocuments.get(document.uri); + if (openedDoc !== undefined) { + this._openedDocuments.delete(document.uri); + } + }); + } + + public onDidChange: vscode.Event = this._onDidChangeEmitter.event; + + async provideTextDocumentContent(uri: vscode.Uri, token: vscode.CancellationToken): Promise { + let content = this._openedDocuments.get(uri); + + if (!content) { + // We're being asked about this document for the first time, so we need to fetch it from the server. + content = await this.enqueueDocumentUpdateAsync(uri, token); + } + + return content.text ?? vscode.l10n.t('Generated document not found'); + } + + private async enqueueDocumentUpdateAsync( + uri: vscode.Uri, + token: vscode.CancellationToken + ): Promise { + if (!this._updateQueue) { + this._updateQueue = this.updateDocumentAsync(uri, token); + } else { + this._updateQueue = this._updateQueue.then(async () => await this.updateDocumentAsync(uri, token)); + } + + return await this._updateQueue; + } + + private async updateDocumentAsync( + uri: vscode.Uri, + token: vscode.CancellationToken + ): Promise { + const currentContent = this._openedDocuments.get(uri); + const newContent = await this.languageServer.sendRequest( + RoslynProtocol.SourceGeneratorGetTextRequest.type, + { + textDocument: lsp.TextDocumentIdentifier.create(UriConverter.serialize(uri)), + resultId: currentContent?.resultId, + }, + token + ); + + // If we had no content before, or the resultId has changed, update the content + if (!currentContent || newContent.resultId !== currentContent?.resultId) { + this._openedDocuments.set(uri, newContent); + return newContent; + } + + return currentContent; + } + + dispose(): void { + this._cancellationSource.cancel(); + } +} From e64ee6a7817967238a06ef31aae93aac22ff2e8b Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 19 Nov 2024 16:10:27 -0800 Subject: [PATCH 18/24] Update roslyn version and changelog --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d076f3cbf..f856c41f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.58.x +* Add support for refreshing opened source generated files (PR: [#7791](https://github.com/dotnet/vscode-csharp/pull/7791)) +* Update Roslyn to 4.13.0-2.24569.1 (PR: [#7791](https://github.com/dotnet/vscode-csharp/pull/7791)) + * Support unbound generic types in 'nameof' operator. (PR: [#75368](https://github.com/dotnet/roslyn/pull/75368)) + * Include list of processes that lock file in `can't write file` error message (PR: [#75946](https://github.com/dotnet/roslyn/pull/75946)) + * Add server side support for refreshing source generated files (PR: [#75939](https://github.com/dotnet/roslyn/pull/75939)) # 2.57.x * Update Razor to 9.0.0-preview.24565.1 (PR: [#7793])(https://github.com/dotnet/vscode-csharp/pull/7793) diff --git a/package.json b/package.json index 9f39e7c3c..0bdf110dc 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.13.0-2.24565.3", + "roslyn": "4.13.0-2.24569.1", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24565.1", "razorOmnisharp": "7.0.0-preview.23363.1", From 4a6b821cc695439f35ff4ee57b0d72b5ac85f2b7 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 20 Nov 2024 01:34:24 +0000 Subject: [PATCH 19/24] Localization result of a92d5b3ec296b96283e1a8819f27a437d1485763. --- l10n/bundle.l10n.cs.json | 1 + l10n/bundle.l10n.de.json | 1 + l10n/bundle.l10n.es.json | 1 + l10n/bundle.l10n.fr.json | 1 + l10n/bundle.l10n.it.json | 1 + l10n/bundle.l10n.ja.json | 1 + l10n/bundle.l10n.ko.json | 1 + l10n/bundle.l10n.pl.json | 1 + l10n/bundle.l10n.pt-br.json | 1 + l10n/bundle.l10n.ru.json | 1 + l10n/bundle.l10n.tr.json | 1 + l10n/bundle.l10n.zh-cn.json | 1 + l10n/bundle.l10n.zh-tw.json | 1 + 13 files changed, 13 insertions(+) diff --git a/l10n/bundle.l10n.cs.json b/l10n/bundle.l10n.cs.json index 96f20f63b..293829b08 100644 --- a/l10n/bundle.l10n.cs.json +++ b/l10n/bundle.l10n.cs.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Další informace najdete na {0}", "For further information visit {0}.": "Další informace najdete na {0}.", "For more information about the 'console' field, see {0}": "Další informace o poli „console“ najdete v tématu {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Získat sadu SDK", "Go to GitHub": "Přejít na GitHub", "Go to output": "Přejít na výstup", diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index 2302e086e..9f44d295a 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Weitere Informationen finden Sie unter {0}", "For further information visit {0}.": "Weitere Informationen finden Sie unter {0}.", "For more information about the 'console' field, see {0}": "Weitere Informationen zum Feld \"Konsole\" finden Sie unter {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "SDK herunterladen", "Go to GitHub": "Zu GitHub wechseln", "Go to output": "Zur Ausgabe wechseln", diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index fa747ac7f..fe41b1542 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Para obtener más información, visite {0}", "For further information visit {0}.": "Para obtener más información, visite {0}.", "For more information about the 'console' field, see {0}": "Para obtener más información sobre el campo \"consola\", consulte {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Obtención del SDK", "Go to GitHub": "Ir a GitHub", "Go to output": "Ir a la salida", diff --git a/l10n/bundle.l10n.fr.json b/l10n/bundle.l10n.fr.json index 7fb854e35..d40f5fdbb 100644 --- a/l10n/bundle.l10n.fr.json +++ b/l10n/bundle.l10n.fr.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Pour plus d’informations, consultez {0}", "For further information visit {0}.": "Pour plus d’informations, consultez {0}.", "For more information about the 'console' field, see {0}": "Pour plus d’informations sur le champ « console », consultez {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Obtention du Kit de développement logiciel (SDK)", "Go to GitHub": "Accéder à GitHub", "Go to output": "Accéder à la sortie", diff --git a/l10n/bundle.l10n.it.json b/l10n/bundle.l10n.it.json index 71e3efab7..7f7fb1cde 100644 --- a/l10n/bundle.l10n.it.json +++ b/l10n/bundle.l10n.it.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Per ulteriori informazioni, visitare {0}", "For further information visit {0}.": "Per ulteriori informazioni, visitare {0}.", "For more information about the 'console' field, see {0}": "Per ulteriori informazioni sul campo 'console', vedere {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Ottieni l'SDK", "Go to GitHub": "Vai a GitHub", "Go to output": "Passa all'output", diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 09df96368..21f0a44f0 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -70,6 +70,7 @@ "For further information visit {0}": "詳細については、{0} を参照してください", "For further information visit {0}.": "詳細については、{0} を参照してください。", "For more information about the 'console' field, see {0}": "'console' フィールドの詳細については、{0} を参照してください", + "Generated document not found": "Generated document not found", "Get the SDK": "SDK の取得", "Go to GitHub": "GitHub に移動する", "Go to output": "出力に移動", diff --git a/l10n/bundle.l10n.ko.json b/l10n/bundle.l10n.ko.json index 852e33486..3bab14ab0 100644 --- a/l10n/bundle.l10n.ko.json +++ b/l10n/bundle.l10n.ko.json @@ -70,6 +70,7 @@ "For further information visit {0}": "자세한 내용은 {0}을(를) 방문하세요.", "For further information visit {0}.": "자세한 내용은 {0}을(를) 방문하세요.", "For more information about the 'console' field, see {0}": "'콘솔' 필드에 대한 자세한 내용은 {0}을(를) 참조하세요.", + "Generated document not found": "Generated document not found", "Get the SDK": "SDK 받기", "Go to GitHub": "GitHub로 이동", "Go to output": "출력으로 이동", diff --git a/l10n/bundle.l10n.pl.json b/l10n/bundle.l10n.pl.json index 4b8be67b4..db5122230 100644 --- a/l10n/bundle.l10n.pl.json +++ b/l10n/bundle.l10n.pl.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Aby uzyskać więcej informacji, odwiedź witrynę {0}", "For further information visit {0}.": "Aby uzyskać więcej informacji, odwiedź witrynę {0}.", "For more information about the 'console' field, see {0}": "Aby uzyskać więcej informacji o polu „console”, zobacz {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Pobierz zestaw SDK", "Go to GitHub": "Przejdź do serwisu GitHub", "Go to output": "Przejdź do danych wyjściowych", diff --git a/l10n/bundle.l10n.pt-br.json b/l10n/bundle.l10n.pt-br.json index d76b405c8..7ffd6cb10 100644 --- a/l10n/bundle.l10n.pt-br.json +++ b/l10n/bundle.l10n.pt-br.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Para obter mais informações, acesse {0}", "For further information visit {0}.": "Para obter mais informações, visite {0}.", "For more information about the 'console' field, see {0}": "Para obter mais informações sobre o campo \"console\", confira {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Obter o SDK", "Go to GitHub": "Acessar o GitHub", "Go to output": "Ir para a saída", diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 0560d8e51..900d9c7e1 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Для получения дополнительных сведений посетите {0}", "For further information visit {0}.": "Для получения дополнительных сведений посетите {0}.", "For more information about the 'console' field, see {0}": "Дополнительные сведения о поле \"console\" см. в {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "Получение пакета SDK", "Go to GitHub": "Перейти в GitHub", "Go to output": "Перейти к выходным данным", diff --git a/l10n/bundle.l10n.tr.json b/l10n/bundle.l10n.tr.json index ae09aca15..716c9a5e4 100644 --- a/l10n/bundle.l10n.tr.json +++ b/l10n/bundle.l10n.tr.json @@ -70,6 +70,7 @@ "For further information visit {0}": "Daha fazla bilgi için bkz. {0}", "For further information visit {0}.": "Daha fazla bilgi için bkz. {0}.", "For more information about the 'console' field, see {0}": "'Konsol' alanı hakkında daha fazla bilgi için bkz. {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "SDK’yi alın", "Go to GitHub": "GitHub'a Git", "Go to output": "Çıkışa git", diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json index f85867b3a..0d2db3d5f 100644 --- a/l10n/bundle.l10n.zh-cn.json +++ b/l10n/bundle.l10n.zh-cn.json @@ -70,6 +70,7 @@ "For further information visit {0}": "有关详细信息,请访问 {0}", "For further information visit {0}.": "有关详细信息,请访问 {0}。", "For more information about the 'console' field, see {0}": "有关“控制台”字段的详细信息,请参阅 {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "获取 SDK", "Go to GitHub": "转到 GitHub", "Go to output": "转到输出", diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json index b59fb84b9..6afafc3a9 100644 --- a/l10n/bundle.l10n.zh-tw.json +++ b/l10n/bundle.l10n.zh-tw.json @@ -70,6 +70,7 @@ "For further information visit {0}": "如需詳細資訊,請造訪 {0}", "For further information visit {0}.": "如需詳細資訊,請造訪 {0}。", "For more information about the 'console' field, see {0}": "如需 [主控台] 欄位的詳細資訊,請參閱 {0}", + "Generated document not found": "Generated document not found", "Get the SDK": "取得 SDK", "Go to GitHub": "移至 GitHub", "Go to output": "前往輸出", From bf8af146d881d5aff0650923b6a6df8d543576f3 Mon Sep 17 00:00:00 2001 From: Andrew Hall Date: Wed, 20 Nov 2024 13:49:05 -0800 Subject: [PATCH 20/24] Use LogOutputWindow (#7805) Extension side of dotnet/razor#11226 --- CHANGELOG.md | 4 + l10n/bundle.l10n.json | 3 - package.json | 18 +-- src/razor/src/configurationChangeListener.ts | 32 ----- src/razor/src/diagnostics/reportIssuePanel.ts | 11 +- src/razor/src/extension.ts | 12 +- src/razor/src/logLevel.ts | 14 --- src/razor/src/razorLanguageServerClient.ts | 18 ++- src/razor/src/razorLanguageServerOptions.ts | 2 - .../src/razorLanguageServerOptionsResolver.ts | 3 - .../src/razorLanguageServerTraceResolver.ts | 42 ------- src/razor/src/razorLogger.ts | 111 ++++++++++-------- src/razor/src/telemetryReporter.ts | 6 +- 13 files changed, 86 insertions(+), 190 deletions(-) delete mode 100644 src/razor/src/configurationChangeListener.ts delete mode 100644 src/razor/src/logLevel.ts delete mode 100644 src/razor/src/razorLanguageServerTraceResolver.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f856c41f4..eeaa7885f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.58.x +* Update Razor to 9.0.0-preview.24569.4 (PR: [#7805](https://github.com/dotnet/vscode-csharp/pull/7805)) + * Allow logging level to be changed in rzls (#11228) (PR: [#11228](https://github.com/dotnet/razor/pull/11228)) + * [Fuse] bind-Value:attribute support (#11214) (PR: [#11214](https://github.com/dotnet/razor/pull/11214)) + * Handle skipped trivia in the C# tokenizer (#11207) (PR: [#11207](https://github.com/dotnet/razor/pull/11207)) * Add support for refreshing opened source generated files (PR: [#7791](https://github.com/dotnet/vscode-csharp/pull/7791)) * Update Roslyn to 4.13.0-2.24569.1 (PR: [#7791](https://github.com/dotnet/vscode-csharp/pull/7791)) * Support unbound generic types in 'nameof' operator. (PR: [#75368](https://github.com/dotnet/roslyn/pull/75368)) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index eea581f10..2eb3b52bd 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -63,7 +63,6 @@ "Cannot load Razor language server because the directory was not found: '{0}'": "Cannot load Razor language server because the directory was not found: '{0}'", "Razor Log": "Razor Log", "Could not find '{0}' in or above '{1}'.": "Could not find '{0}' in or above '{1}'.", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Invalid razor.server.trace setting. Defaulting to '{0}'", "Could not find Razor Language Server executable '{0}' within directory": "Could not find Razor Language Server executable '{0}' within directory", "Server failed to start after retrying 5 times.": "Server failed to start after retrying 5 times.", "Razor Language Server failed to start unexpectedly, please check the 'Razor Log' and report an issue.": "Razor Language Server failed to start unexpectedly, please check the 'Razor Log' and report an issue.", @@ -72,8 +71,6 @@ "Tried to bind on notification logic while server is not started.": "Tried to bind on notification logic while server is not started.", "Cannot stop Razor Language Server as it is already stopped.": "Cannot stop Razor Language Server as it is already stopped.", "Razor Language Server failed to stop correctly, please check the 'Razor Log' and report an issue.": "Razor Language Server failed to stop correctly, please check the 'Razor Log' and report an issue.", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?", - "Restart": "Restart", "Razor HTML Preview": "Razor HTML Preview", "Unexpected error when attaching to HTML preview window.": "Unexpected error when attaching to HTML preview window.", "Razor HTML copied to clipboard": "Razor HTML copied to clipboard", diff --git a/package.json b/package.json index 0bdf110dc..814c9b6bc 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "defaults": { "roslyn": "4.13.0-2.24569.1", "omniSharp": "1.39.11", - "razor": "9.0.0-preview.24565.1", + "razor": "9.0.0-preview.24569.4", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "17.13.35513.19" }, @@ -1505,22 +1505,6 @@ "description": "%configuration.razor.languageServer.debug%", "order": 90 }, - "razor.server.trace": { - "scope": "window", - "type": "string", - "enum": [ - "Trace", - "Debug", - "Information", - "Warning", - "Error", - "Critical", - "None" - ], - "order": 90, - "default": "Information", - "description": "%configuration.razor.server.trace%" - }, "razor.languageServer.forceRuntimeCodeGeneration": { "type": "boolean", "scope": "machine-overridable", diff --git a/src/razor/src/configurationChangeListener.ts b/src/razor/src/configurationChangeListener.ts deleted file mode 100644 index aae277e6e..000000000 --- a/src/razor/src/configurationChangeListener.ts +++ /dev/null @@ -1,32 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as vscode from 'vscode'; -import { RazorLanguageServerClient } from './razorLanguageServerClient'; -import { RazorLogger } from './razorLogger'; -import { ActionOption, showInformationMessage } from '../../shared/observers/utils/showMessage'; - -export function listenToConfigurationChanges(languageServerClient: RazorLanguageServerClient): vscode.Disposable { - return vscode.workspace.onDidChangeConfiguration((event) => { - if (event.affectsConfiguration(RazorLogger.verbositySetting)) { - razorTraceConfigurationChangeHandler(languageServerClient); - } - }); -} - -function razorTraceConfigurationChangeHandler(languageServerClient: RazorLanguageServerClient) { - const promptText: string = vscode.l10n.t( - 'Would you like to restart the Razor Language Server to enable the Razor trace configuration change?' - ); - const restartButtonText: ActionOption = { - title: vscode.l10n.t('Restart'), - action: async () => { - await languageServerClient.stop(); - languageServerClient.updateTraceLevel(); - await languageServerClient.start(); - }, - }; - showInformationMessage(vscode, promptText, restartButtonText); -} diff --git a/src/razor/src/diagnostics/reportIssuePanel.ts b/src/razor/src/diagnostics/reportIssuePanel.ts index 83551174a..e839c0ee6 100644 --- a/src/razor/src/diagnostics/reportIssuePanel.ts +++ b/src/razor/src/diagnostics/reportIssuePanel.ts @@ -5,7 +5,6 @@ import * as vscode from 'vscode'; import { RazorLogger } from '../razorLogger'; -import { LogLevel } from '../logLevel'; import { ReportIssueCreator } from './reportIssueCreator'; import { ReportIssueDataCollector } from './reportIssueDataCollector'; import { ReportIssueDataCollectorFactory } from './reportIssueDataCollectorFactory'; @@ -105,7 +104,7 @@ export class ReportIssuePanel { } }); - this.traceLevelChange = this.logger.onTraceLevelChange(async () => this.update()); + this.traceLevelChange = this.logger.outputChannel.onDidChangeLogLevel(async () => this.update()); this.panel.onDidDispose(() => { if (this.traceLevelChange) { @@ -121,7 +120,7 @@ export class ReportIssuePanel { } let panelBodyContent = ''; - if (this.logger.logLevel.valueOf() <= LogLevel.Debug) { + if (this.logger.logLevel <= vscode.LogLevel.Debug) { const startButtonLabel = vscode.l10n.t('Start'); const startButton = ``; const firstLine = vscode.l10n.t('Press {0}', startButton); @@ -159,9 +158,9 @@ ${privacyAnchor} `; } else { - const verbositySettingName = `${RazorLogger.verbositySetting}`; - const currentVerbositySettingValue = `${LogLevel[this.logger.logLevel]}`; - const neededVerbositySettingValue = `${LogLevel[LogLevel.Debug]}`; + const verbositySettingName = `Razor Logging Level`; + const currentVerbositySettingValue = `${vscode.LogLevel[this.logger.logLevel]}`; + const neededVerbositySettingValue = `${vscode.LogLevel[vscode.LogLevel.Debug]}`; panelBodyContent = '

' + diff --git a/src/razor/src/extension.ts b/src/razor/src/extension.ts index 5346f4cc0..fe96bbcc8 100644 --- a/src/razor/src/extension.ts +++ b/src/razor/src/extension.ts @@ -6,13 +6,11 @@ import * as vscode from 'vscode'; import * as vscodeapi from 'vscode'; import { ExtensionContext } from 'vscode'; -import { BlazorDebugConfigurationProvider } from './blazorDebug/blazorDebugConfigurationProvider'; import { CodeActionsHandler } from './codeActions/codeActionsHandler'; import { CompletionHandler } from './completion/completionHandler'; import { RazorCodeActionRunner } from './codeActions/razorCodeActionRunner'; import { RazorCodeLensProvider } from './codeLens/razorCodeLensProvider'; import { ColorPresentationHandler } from './colorPresentation/colorPresentationHandler'; -import { listenToConfigurationChanges } from './configurationChangeListener'; import { RazorCSharpFeature } from './csharp/razorCSharpFeature'; import { RazorDefinitionProvider } from './definition/razorDefinitionProvider'; import { ReportIssueCommand } from './diagnostics/reportIssueCommand'; @@ -33,7 +31,6 @@ import { ProposedApisFeature } from './proposedApisFeature'; import { RazorLanguage } from './razorLanguage'; import { RazorLanguageConfiguration } from './razorLanguageConfiguration'; import { RazorLanguageServerClient } from './razorLanguageServerClient'; -import { resolveRazorLanguageServerLogLevel } from './razorLanguageServerTraceResolver'; import { RazorLanguageServiceClient } from './razorLanguageServiceClient'; import { RazorLogger } from './razorLogger'; import { RazorReferenceProvider } from './reference/razorReferenceProvider'; @@ -71,14 +68,12 @@ export async function activate( create: () => new vscode.EventEmitter(), }; - const languageServerLogLevel = resolveRazorLanguageServerLogLevel(vscodeType); - const logger = new RazorLogger(eventEmitterFactory, languageServerLogLevel); + const logger = new RazorLogger(eventEmitterFactory); try { const razorOptions: RazorLanguageServerOptions = resolveRazorLanguageServerOptions( vscodeType, languageServerDir, - languageServerLogLevel, logger ); @@ -125,6 +120,7 @@ export async function activate( razorTelemetryReporter, platformInfo ); + const documentSynchronizer = new RazorDocumentSynchronizer(documentManager, logger); reportTelemetryForDocuments(documentManager, razorTelemetryReporter); const languageConfiguration = new RazorLanguageConfiguration(); @@ -269,7 +265,6 @@ export async function activate( htmlFeature.register(), documentSynchronizer.register(), reportIssueCommand.register(), - listenToConfigurationChanges(languageServerClient), razorCodeActionRunner.register() ); @@ -300,9 +295,6 @@ export async function activate( localRegistrations.length = 0; }); - const provider = new BlazorDebugConfigurationProvider(logger, vscodeType); - context.subscriptions.push(vscodeType.debug.registerDebugConfigurationProvider('blazorwasm', provider)); - languageServerClient.onStarted(async () => { await documentManager.initialize(); }); diff --git a/src/razor/src/logLevel.ts b/src/razor/src/logLevel.ts deleted file mode 100644 index 93c0493de..000000000 --- a/src/razor/src/logLevel.ts +++ /dev/null @@ -1,14 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -export enum LogLevel { - Trace = 0, - Debug = 1, - Information = 2, - Warning = 3, - Error = 4, - Critical = 5, - None = 6, -} diff --git a/src/razor/src/razorLanguageServerClient.ts b/src/razor/src/razorLanguageServerClient.ts index af4295b4c..5944a0ba2 100644 --- a/src/razor/src/razorLanguageServerClient.ts +++ b/src/razor/src/razorLanguageServerClient.ts @@ -12,7 +12,6 @@ import { ServerOptions } from 'vscode-languageclient/node'; import { RazorLanguage } from './razorLanguage'; import { RazorLanguageServerOptions } from './razorLanguageServerOptions'; import { resolveRazorLanguageServerOptions } from './razorLanguageServerOptionsResolver'; -import { resolveRazorLanguageServerLogLevel } from './razorLanguageServerTraceResolver'; import { RazorLogger } from './razorLogger'; import { TelemetryReporter as RazorTelemetryReporter } from './telemetryReporter'; import TelemetryReporter from '@vscode/extension-telemetry'; @@ -56,12 +55,6 @@ export class RazorLanguageServerClient implements vscode.Disposable { return this.client.initializeResult; } - public updateTraceLevel() { - const languageServerLogLevel = resolveRazorLanguageServerLogLevel(this.vscodeType); - this.setupLanguageServer(); - this.logger.setTraceLevel(languageServerLogLevel); - } - public onStarted(listener: () => Promise) { this.onStartedListeners.push(listener); } @@ -115,6 +108,10 @@ export class RazorLanguageServerClient implements vscode.Disposable { await this.client.start(); this.logger.logMessage('Server started, waiting for client to be ready...'); this.isStarted = true; + + // Server is ready, hook up so logging changes can be reported + this.logger.languageServerClient = this; + for (const listener of this.onStartListeners) { await listener(); } @@ -123,6 +120,7 @@ export class RazorLanguageServerClient implements vscode.Disposable { resolve(); this.logger.logMessage('Server ready!'); + for (const listener of this.onStartedListeners) { await listener(); } @@ -230,11 +228,9 @@ export class RazorLanguageServerClient implements vscode.Disposable { } private setupLanguageServer() { - const languageServerTrace = resolveRazorLanguageServerLogLevel(this.vscodeType); const options: RazorLanguageServerOptions = resolveRazorLanguageServerOptions( this.vscodeType, this.languageServerDir, - languageServerTrace, this.logger ); this.clientOptions = { @@ -247,8 +243,8 @@ export class RazorLanguageServerClient implements vscode.Disposable { this.logger.logMessage(`Razor language server path: ${options.serverPath}`); args.push('--logLevel'); - args.push(options.logLevel.toString()); - this.razorTelemetryReporter.reportTraceLevel(options.logLevel); + args.push(this.logger.logLevelForRZLS.toString()); + this.razorTelemetryReporter.reportTraceLevel(this.logger.logLevel); if (options.debug) { this.razorTelemetryReporter.reportDebugLanguageServer(); diff --git a/src/razor/src/razorLanguageServerOptions.ts b/src/razor/src/razorLanguageServerOptions.ts index 0f4df5562..e93802c84 100644 --- a/src/razor/src/razorLanguageServerOptions.ts +++ b/src/razor/src/razorLanguageServerOptions.ts @@ -4,13 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { LogLevel } from './logLevel'; export interface RazorLanguageServerOptions { serverPath: string; outputChannel?: vscode.OutputChannel; debug?: boolean; - logLevel: LogLevel; usingOmniSharp: boolean; forceRuntimeCodeGeneration: boolean; useRoslynTokenizer: boolean; diff --git a/src/razor/src/razorLanguageServerOptionsResolver.ts b/src/razor/src/razorLanguageServerOptionsResolver.ts index 4bb395ca5..977741f42 100644 --- a/src/razor/src/razorLanguageServerOptionsResolver.ts +++ b/src/razor/src/razorLanguageServerOptionsResolver.ts @@ -10,13 +10,11 @@ import * as vscodeAdapter from './vscodeAdapter'; import * as vscode from 'vscode'; import { RazorLanguageServerOptions } from './razorLanguageServerOptions'; import { RazorLogger } from './razorLogger'; -import { LogLevel } from './logLevel'; import { getCSharpDevKit } from '../../utils/getCSharpDevKit'; export function resolveRazorLanguageServerOptions( vscodeApi: vscodeAdapter.api, languageServerDir: string, - logLevel: LogLevel, logger: RazorLogger ) { const languageServerExecutablePath = findLanguageServerExecutable(languageServerDir); @@ -31,7 +29,6 @@ export function resolveRazorLanguageServerOptions( return { serverPath: languageServerExecutablePath, debug: debugLanguageServer, - logLevel: logLevel, outputChannel: logger.outputChannel, usingOmniSharp, forceRuntimeCodeGeneration, diff --git a/src/razor/src/razorLanguageServerTraceResolver.ts b/src/razor/src/razorLanguageServerTraceResolver.ts deleted file mode 100644 index b8cd340ce..000000000 --- a/src/razor/src/razorLanguageServerTraceResolver.ts +++ /dev/null @@ -1,42 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { LogLevel } from './logLevel'; -import * as vscodeAdapter from './vscodeAdapter'; -import * as vscode from 'vscode'; - -export function resolveRazorLanguageServerLogLevel(vscodeApi: vscodeAdapter.api) { - const languageConfig = vscodeApi.workspace.getConfiguration('razor.server'); - const traceString = languageConfig.get('trace'); - const logLevel = parseTraceString(traceString); - - return logLevel; -} - -function parseTraceString(traceString: string | undefined) { - switch (traceString) { - case 'Trace': - return LogLevel.Trace; - case 'Verbose': // For importing old config values - case 'Debug': - return LogLevel.Debug; - case 'Messages': // For importing old config values - case 'Information': - return LogLevel.Information; - case 'Warning': - return LogLevel.Warning; - case 'Error': - return LogLevel.Error; - case 'Critical': - return LogLevel.Critical; - case 'Off': // For importing old config values - case 'None': - return LogLevel.None; - - default: - console.log(vscode.l10n.t("Invalid razor.server.trace setting. Defaulting to '{0}'", 'Information')); - return LogLevel.Information; - } -} diff --git a/src/razor/src/razorLogger.ts b/src/razor/src/razorLogger.ts index 7d685834b..985f5af3d 100644 --- a/src/razor/src/razorLogger.ts +++ b/src/razor/src/razorLogger.ts @@ -8,52 +8,69 @@ import * as path from 'path'; import * as vscodeAdapter from './vscodeAdapter'; import * as vscode from 'vscode'; import { IEventEmitterFactory } from './IEventEmitterFactory'; -import { LogLevel } from './logLevel'; +import { RazorLanguageServerClient } from './razorLanguageServerClient'; export class RazorLogger implements vscodeAdapter.Disposable { public static readonly logName = 'Razor Log'; - public static readonly verbositySetting = 'razor.server.trace'; public verboseEnabled!: boolean; public messageEnabled!: boolean; - public readonly outputChannel: vscode.OutputChannel; + public readonly outputChannel: vscode.LogOutputChannel; + public languageServerClient: RazorLanguageServerClient | undefined; private readonly onLogEmitter: vscodeAdapter.EventEmitter; - private readonly onTraceLevelChangeEmitter: vscodeAdapter.EventEmitter; - constructor(eventEmitterFactory: IEventEmitterFactory, public logLevel: LogLevel) { - this.processTraceLevel(); + constructor(eventEmitterFactory: IEventEmitterFactory) { + this.outputChannel = vscode.window.createOutputChannel(vscode.l10n.t('Razor Log'), { log: true }); this.onLogEmitter = eventEmitterFactory.create(); - this.onTraceLevelChangeEmitter = eventEmitterFactory.create(); + this.processTraceLevel(); - this.outputChannel = vscode.window.createOutputChannel(vscode.l10n.t('Razor Log')); + this.outputChannel.onDidChangeLogLevel(async () => { + await this.updateLogLevelAsync(); + }); this.logRazorInformation(); this.setupToStringOverrides(); } - public setTraceLevel(trace: LogLevel) { - this.logLevel = trace; - this.processTraceLevel(); - this.logMessage(`Updated log level to: ${LogLevel[this.logLevel]}`); - this.onTraceLevelChangeEmitter.fire(this.logLevel); + public get logLevel(): vscode.LogLevel { + return this.outputChannel.logLevel; + } + + /** + * Gets the log level in numeric form that matches what is expected in rzls. + * Matches https://github.com/dotnet/razor/blob/7390745dcd9c8831d4459437ed2e9e94125f3dd3/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Logging/LogLevel.cs#L6 + */ + public get logLevelForRZLS(): number { + switch (this.logLevel) { + case vscode.LogLevel.Off: + return 0; + case vscode.LogLevel.Trace: + return 1; + case vscode.LogLevel.Debug: + return 2; + case vscode.LogLevel.Info: + return 3; + case vscode.LogLevel.Warning: + return 4; + case vscode.LogLevel.Error: + return 5; + default: + throw new Error('Unexpected log level value. Do not know how to convert'); + } } public get onLog() { return this.onLogEmitter.event; } - public get onTraceLevelChange() { - return this.onTraceLevelChangeEmitter.event; - } - public logAlways(message: string) { - this.logWithMarker(message); + this.outputChannel.info(message); + this.onLogEmitter.fire(message); } public logWarning(message: string) { - // Always log warnings - const warningPrefixedMessage = `(Warning) ${message}`; - this.logAlways(warningPrefixedMessage); + this.outputChannel.warn(message); + this.onLogEmitter.fire(message); } public logError(message: string, error: unknown) { @@ -67,13 +84,15 @@ export class RazorLogger implements vscodeAdapter.Disposable { public logMessage(message: string) { if (this.messageEnabled) { - this.logWithMarker(message); + this.outputChannel.info(message); + this.onLogEmitter.fire(message); } } public logVerbose(message: string) { if (this.verboseEnabled) { - this.logWithMarker(message); + this.outputChannel.trace(message); + this.onLogEmitter.fire(message); } } @@ -81,42 +100,40 @@ export class RazorLogger implements vscodeAdapter.Disposable { this.outputChannel.dispose(); } + private async updateLogLevelAsync() { + this.processTraceLevel(); + + if (this.languageServerClient) { + await this.languageServerClient.sendNotification('razor/updateLogLevel', { + logLevel: this.logLevelForRZLS, + }); + } + } + private logErrorInternal(message: string, error: Error) { // Always log errors - const errorPrefixedMessage = `(Error) ${message} + const errorPrefixedMessage = `${message} ${error.message} Stack Trace: ${error.stack}`; - this.logAlways(errorPrefixedMessage); - } - - private logWithMarker(message: string) { - const timeString = new Date().toLocaleTimeString(); - const markedMessage = `[Client - ${timeString}] ${message}`; - - this.log(markedMessage); - } - - private log(message: string) { - this.outputChannel.appendLine(message); - + this.outputChannel.error(errorPrefixedMessage); this.onLogEmitter.fire(message); } private logRazorInformation() { const packageJsonContents = readOwnPackageJson(); - this.log('--------------------------------------------------------------------------------'); - this.log(`Razor.VSCode version ${packageJsonContents.defaults.razor}`); - this.log('--------------------------------------------------------------------------------'); - this.log(`Razor's log level is currently set to '${LogLevel[this.logLevel]}'`); - this.log(" - To change Razor's log level set 'razor.server.trace' and then restart VSCode."); - this.log(" - To report issues invoke the 'Report a Razor issue' command via the command palette."); - this.log( + this.logAlways('--------------------------------------------------------------------------------'); + this.logAlways(`Razor.VSCode version ${packageJsonContents.defaults.razor}`); + this.logAlways('--------------------------------------------------------------------------------'); + this.logAlways(`Razor's log level is currently set to '${vscode.LogLevel[this.logLevel]}'`); + this.logAlways(" - To change Razor's log level use the gear icon on the output window"); + this.logAlways(" - To report issues invoke the 'Report a Razor issue' command via the command palette."); + this.logAlways( '-----------------------------------------------------------------------' + '------------------------------------------------------' ); - this.log(''); + this.logAlways(''); } private setupToStringOverrides() { @@ -130,8 +147,8 @@ ${error.stack}`; } private processTraceLevel() { - this.verboseEnabled = this.logLevel <= LogLevel.Debug; - this.messageEnabled = this.logLevel <= LogLevel.Information; + this.verboseEnabled = this.outputChannel.logLevel >= vscode.LogLevel.Trace; + this.messageEnabled = this.outputChannel.logLevel >= vscode.LogLevel.Info; } } diff --git a/src/razor/src/telemetryReporter.ts b/src/razor/src/telemetryReporter.ts index 8f7e164ab..58bb8cd79 100644 --- a/src/razor/src/telemetryReporter.ts +++ b/src/razor/src/telemetryReporter.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { createTelemetryErrorEvent, createTelemetryEvent, HostEventStream } from './hostEventStream'; -import { LogLevel } from './logLevel'; +import * as vscode from 'vscode'; export class TelemetryReporter { private readonly razorExtensionActivated = createTelemetryEvent('VSCode.Razor.RazorExtensionActivated'); @@ -18,9 +18,9 @@ export class TelemetryReporter { this.eventStream.post(this.razorExtensionActivated); } - public reportTraceLevel(trace: LogLevel) { + public reportTraceLevel(trace: vscode.LogLevel) { const traceLevelEvent = createTelemetryEvent('VSCode.Razor.TraceLevel', { - trace: LogLevel[trace], + trace: vscode.LogLevel[trace], }); this.eventStream.post(traceLevelEvent); } From 40b51a80dfa965f854d1e907a851f0a1b3df1d60 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 20 Nov 2024 22:05:41 +0000 Subject: [PATCH 21/24] Localization result of bf8af146d881d5aff0650923b6a6df8d543576f3. --- l10n/bundle.l10n.cs.json | 3 --- l10n/bundle.l10n.de.json | 3 --- l10n/bundle.l10n.es.json | 3 --- l10n/bundle.l10n.fr.json | 3 --- l10n/bundle.l10n.it.json | 3 --- l10n/bundle.l10n.ja.json | 3 --- l10n/bundle.l10n.ko.json | 3 --- l10n/bundle.l10n.pl.json | 3 --- l10n/bundle.l10n.pt-br.json | 3 --- l10n/bundle.l10n.ru.json | 3 --- l10n/bundle.l10n.tr.json | 3 --- l10n/bundle.l10n.zh-cn.json | 3 --- l10n/bundle.l10n.zh-tw.json | 3 --- 13 files changed, 39 deletions(-) diff --git a/l10n/bundle.l10n.cs.json b/l10n/bundle.l10n.cs.json index 293829b08..38661a254 100644 --- a/l10n/bundle.l10n.cs.json +++ b/l10n/bundle.l10n.cs.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Ignorování neanalyzovatelných řádků v souboru envFile {0}: {1}", "IntelliCode features will not be available, {0} failed to activate.": "Funkce IntelliCode nebudou k dispozici, {0} se nepodařilo aktivovat.", "Invalid project index": "Neplatný index projektu", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Invalid razor.server.trace setting. Návrat k výchozí hodnotě „{0}“", "Is this a Bug or Feature request?": "Jde o chybu, nebo žádost o funkci?", "Logs": "Protokoly", "Machine information": "Informace o počítači", @@ -132,7 +131,6 @@ "Report Razor Issue": "Nahlásit problém s Razorem", "Report a Razor issue": "Nahlásit problém s Razorem", "Required assets to build and debug are missing from '{0}'. Add them?": "V „{0}“ chybí požadované prostředky pro sestavení a ladění. Chcete je přidat?", - "Restart": "Restartovat", "Restart Language Server": "Restartovat jazykový server", "Restart server": "Restartovat server", "Restore": "Obnovit", @@ -198,7 +196,6 @@ "WARNING": "UPOZORNĚNÍ", "Workspace information": "Informace o pracovním prostoru", "Workspace projects": "Projekty pracovních prostorů", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Chcete restartovat jazykový server Razor, aby se projevila změna konfigurace trasování Razor?", "Yes": "Ano", "You must first start the data collection before copying.": "Před kopírováním je zapotřebí nejdříve spustit shromažďování dat.", "You must first start the data collection before stopping.": "Před zastavením je zapotřebí nejdříve spustit shromažďování dat.", diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index 9f44d295a..52047170e 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Nicht parsebare Zeilen in envFile {0} werden ignoriert: {1}.", "IntelliCode features will not be available, {0} failed to activate.": "IntelliCode-Funktionen sind nicht verfügbar, {0} konnte nicht aktiviert werden.", "Invalid project index": "Ungültiger Projektindex", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Ungültige razor.server.trace-Einstellung. Standardmäßig wird \"{0}\" verwendet.", "Is this a Bug or Feature request?": "Handelt es sich um einen Fehler oder eine Featureanforderung?", "Logs": "Protokolle", "Machine information": "Computerinformationen", @@ -132,7 +131,6 @@ "Report Razor Issue": "Razor-Problem melden", "Report a Razor issue": "Razor-Problem melden", "Required assets to build and debug are missing from '{0}'. Add them?": "Erforderliche Ressourcen zum Erstellen und Debuggen fehlen in \"{0}\". Sie hinzufügen?", - "Restart": "Neu starten", "Restart Language Server": "Sprachserver neu starten", "Restart server": "Server neu starten", "Restore": "Wiederherstellen", @@ -198,7 +196,6 @@ "WARNING": "WARNUNG", "Workspace information": "Arbeitsbereichsinformationen", "Workspace projects": "Arbeitsbereichsprojekte", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Möchten Sie den Razor-Sprachserver neu starten, um die Razor-Ablaufverfolgungskonfigurationsänderung zu aktivieren?", "Yes": "Ja", "You must first start the data collection before copying.": "Sie müssen die Datensammlung vor dem Kopieren starten.", "You must first start the data collection before stopping.": "Sie müssen zuerst die Datensammlung starten, bevor Sie sie beenden.", diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index fe41b1542..1a8e36695 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Se omitirán las líneas de envFile {0}: {1} que no se puedan analizar.", "IntelliCode features will not be available, {0} failed to activate.": "Las características de IntelliCode no estarán disponibles, {0} no se pudieron activar.", "Invalid project index": "Índice de proyecto no válido", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Configuración razor.server.trace no válida. El valor predeterminado pasa a ser \"{0}\"", "Is this a Bug or Feature request?": "¿Se trata de una solicitud de error o característica?", "Logs": "Registros", "Machine information": "Información del equipo", @@ -132,7 +131,6 @@ "Report Razor Issue": "Notificar problema de Razor", "Report a Razor issue": "Notificar un problema de Razor", "Required assets to build and debug are missing from '{0}'. Add them?": "Faltan los recursos en '{0}' necesarios para compilar y depurar. ¿Quiere agregarlos?", - "Restart": "Reiniciar", "Restart Language Server": "Reiniciar servidor de lenguaje", "Restart server": "Reiniciar servidor", "Restore": "Restaurar", @@ -198,7 +196,6 @@ "WARNING": "ADVERTENCIA", "Workspace information": "Ver información del área de trabajo", "Workspace projects": "Proyectos de área de trabajo", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "¿Desea reiniciar el servidor de lenguaje Razor para habilitar el cambio de configuración de seguimiento de Razor?", "Yes": "Sí", "You must first start the data collection before copying.": "Primero debe iniciar la recopilación de datos antes de copiar.", "You must first start the data collection before stopping.": "Primero debe iniciar la recopilación de datos antes de detenerse.", diff --git a/l10n/bundle.l10n.fr.json b/l10n/bundle.l10n.fr.json index d40f5fdbb..301e1302f 100644 --- a/l10n/bundle.l10n.fr.json +++ b/l10n/bundle.l10n.fr.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Lignes non analysables ignorées dans envFile {0} : {1}.", "IntelliCode features will not be available, {0} failed to activate.": "Les fonctionnalités IntelliCode ne seront pas disponibles, {0} n’a pas pu être activée.", "Invalid project index": "Index de projet non valide", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Paramètre razor.server.trace non valide. La valeur par défaut est '{0}'", "Is this a Bug or Feature request?": "S’agit-il d’une demande de bogue ou de fonctionnalité ?", "Logs": "Journaux", "Machine information": "Informations sur l'ordinateur", @@ -132,7 +131,6 @@ "Report Razor Issue": "Signaler un problème Razor", "Report a Razor issue": "Signaler un problème Razor", "Required assets to build and debug are missing from '{0}'. Add them?": "Les ressources requises pour la génération et le débogage sont manquantes dans « {0} ». Les ajouter ?", - "Restart": "Redémarrer", "Restart Language Server": "Redémarrer le serveur de langue", "Restart server": "Redémarrer le serveur", "Restore": "Restaurer", @@ -198,7 +196,6 @@ "WARNING": "AVERTISSEMENT", "Workspace information": "Informations sur l’espace de travail", "Workspace projects": "Projets de l’espace de travail", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Voulez-vous redémarrer le serveur de langage Razor pour activer la modification de la configuration du suivi Razor ?", "Yes": "Oui", "You must first start the data collection before copying.": "Vous devez d’abord démarrer la collecte de données avant de la copier.", "You must first start the data collection before stopping.": "Vous devez commencer par démarrer la collecte de données avant de l’arrêter.", diff --git a/l10n/bundle.l10n.it.json b/l10n/bundle.l10n.it.json index 7f7fb1cde..fc7ccb7da 100644 --- a/l10n/bundle.l10n.it.json +++ b/l10n/bundle.l10n.it.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Le righe non analizzabili in envFile {0}: {1} verranno ignorate.", "IntelliCode features will not be available, {0} failed to activate.": "Le funzionalità IntelliCode non saranno disponibili, non è stato possibile eseguire l'attivazione di {0}.", "Invalid project index": "Indice di progetto non valido", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Impostazione razor.server.trace non valida. Impostazione predefinita su '{0}'", "Is this a Bug or Feature request?": "Si tratta di una richiesta di bug o funzionalità?", "Logs": "Log", "Machine information": "Informazioni computer", @@ -132,7 +131,6 @@ "Report Razor Issue": "Segnala problema Razor", "Report a Razor issue": "Segnala problema Razor", "Required assets to build and debug are missing from '{0}'. Add them?": "Le risorse necessarie per la compilazione e il debug non sono presenti in '{0}'. Aggiungerli?", - "Restart": "Riavvia", "Restart Language Server": "Riavviare il server di linguaggio", "Restart server": "Riavvia server", "Restore": "Ripristina", @@ -198,7 +196,6 @@ "WARNING": "AVVISO", "Workspace information": "Informazioni area di lavoro", "Workspace projects": "Progetti dell’area di lavoro", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Riavviare il server di linguaggio Razor per abilitare la modifica della configurazione della traccia Razor?", "Yes": "Sì", "You must first start the data collection before copying.": "Prima di eseguire la copia, è necessario avviare la raccolta dati.", "You must first start the data collection before stopping.": "Prima di arrestare è necessario avviare la raccolta dati prima.", diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 21f0a44f0..4cdd8b60e 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "envFile {0} 内の解析できない行を無視します: {1}", "IntelliCode features will not be available, {0} failed to activate.": "IntelliCode 機能は使用できません。{0} アクティブ化に失敗しました。", "Invalid project index": "無効なプロジェクト インデックス", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "razor.server.trace 設定が無効です。既定値は '{0}' です", "Is this a Bug or Feature request?": "これはバグまたは機能の要求ですか?", "Logs": "ログ", "Machine information": "コンピューター情報", @@ -132,7 +131,6 @@ "Report Razor Issue": "Razor の問題を報告する", "Report a Razor issue": "Razor の問題を報告する", "Required assets to build and debug are missing from '{0}'. Add them?": "ビルドおよびデバッグに必要な資産が '{0}' にありません。追加しますか?", - "Restart": "再起動", "Restart Language Server": "言語サーバーの再起動", "Restart server": "サーバーを再起動する", "Restore": "復元", @@ -198,7 +196,6 @@ "WARNING": "警告", "Workspace information": "ワークスペース情報", "Workspace projects": "ワークスペース プロジェクト", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Razor トレース構成の変更を有効にするために Razor 言語サーバーを再起動しますか?", "Yes": "はい", "You must first start the data collection before copying.": "コピーする前に、まずデータ収集を開始する必要があります。", "You must first start the data collection before stopping.": "停止する前に、まずデータ収集を開始する必要があります。", diff --git a/l10n/bundle.l10n.ko.json b/l10n/bundle.l10n.ko.json index 3bab14ab0..5898a023f 100644 --- a/l10n/bundle.l10n.ko.json +++ b/l10n/bundle.l10n.ko.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "envFile {0}: {1}에서 구문 분석할 수 없는 행을 무시합니다.", "IntelliCode features will not be available, {0} failed to activate.": "IntelliCode 기능을 사용할 수 없으며 {0}을(를) 활성화하지 못했습니다.", "Invalid project index": "잘못된 프로젝트 인덱스", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "razor.server.trace 설정이 잘못되었습니다. 기본값은 '{0}'입니다.", "Is this a Bug or Feature request?": "버그인가요, 기능 요청인가요?", "Logs": "로그", "Machine information": "컴퓨터 정보", @@ -132,7 +131,6 @@ "Report Razor Issue": "Razor 문제 보고", "Report a Razor issue": "Razor 문제 보고", "Required assets to build and debug are missing from '{0}'. Add them?": "빌드 및 디버그에 필요한 자산이 '{0}'에서 누락되었습니다. 추가하시겠습니까?", - "Restart": "다시 시작", "Restart Language Server": "언어 서버 다시 시작", "Restart server": "서버 다시 시작", "Restore": "복원", @@ -198,7 +196,6 @@ "WARNING": "경고", "Workspace information": "작업 영역 정보", "Workspace projects": "작업 영역 프로젝트", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Razor 추적 구성 변경을 사용하기 위해 Razor 언어 서버를 다시 시작하시겠습니까?", "Yes": "예", "You must first start the data collection before copying.": "복사하기 전에 먼저 데이터 수집을 시작해야 합니다.", "You must first start the data collection before stopping.": "중지하기 전에 먼저 데이터 수집을 시작해야 합니다.", diff --git a/l10n/bundle.l10n.pl.json b/l10n/bundle.l10n.pl.json index db5122230..92f9faa3b 100644 --- a/l10n/bundle.l10n.pl.json +++ b/l10n/bundle.l10n.pl.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Ignorowanie wierszy, których nie przeanalizowano w pliku envFile {0}: {1}.", "IntelliCode features will not be available, {0} failed to activate.": "Funkcje IntelliCode nie będą dostępne, aktywowanie {0} nie powiodło się.", "Invalid project index": "Nieprawidłowy indeks projektu", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Nieprawidłowe ustawienie razor.server.trace. Wartość domyślna to „{0}”", "Is this a Bug or Feature request?": "Czy jest to żądanie dotyczące usterki czy funkcji?", "Logs": "Dzienniki", "Machine information": "Informacje o maszynie", @@ -132,7 +131,6 @@ "Report Razor Issue": "Zgłoś problem z aparatem Razor", "Report a Razor issue": "Zgłoś problem z aparatem Razor", "Required assets to build and debug are missing from '{0}'. Add them?": "Brak wymaganych zasobów do kompilowania i debugowania z „{0}”. Dodać je?", - "Restart": "Uruchom ponownie", "Restart Language Server": "Ponownie uruchom serwer języka", "Restart server": "Ponowne uruchamianie serwera", "Restore": "Przywróć", @@ -198,7 +196,6 @@ "WARNING": "OSTRZEŻENIE", "Workspace information": "Informacje o obszarze roboczym", "Workspace projects": "Projekty obszaru roboczego", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Czy chcesz ponownie uruchomić serwer języka Razor, aby włączyć zmianę konfiguracji śledzenia aparatu Razor?", "Yes": "Tak", "You must first start the data collection before copying.": "Przed skopiowaniem należy najpierw rozpocząć zbieranie danych.", "You must first start the data collection before stopping.": "Przed zatrzymaniem należy najpierw uruchomić zbieranie danych.", diff --git a/l10n/bundle.l10n.pt-br.json b/l10n/bundle.l10n.pt-br.json index 7ffd6cb10..39f3b0e52 100644 --- a/l10n/bundle.l10n.pt-br.json +++ b/l10n/bundle.l10n.pt-br.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Ignorando linhas não analisáveis no envFile {0}: {1}.", "IntelliCode features will not be available, {0} failed to activate.": "Os recursos do IntelliCode não estarão disponíveis, {0} falha ao ativar.", "Invalid project index": "Índice de projeto inválido", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Configuração razor.server.trace inválida. Definindo como padrão '{0}'", "Is this a Bug or Feature request?": "Isso é uma solicitação de bug ou recurso?", "Logs": "Logs", "Machine information": "Informações do computador", @@ -132,7 +131,6 @@ "Report Razor Issue": "Relatar Problema do Razor", "Report a Razor issue": "Relatar um problema do Razor", "Required assets to build and debug are missing from '{0}'. Add them?": "Os ativos necessários para compilar e depurar estão ausentes de \"{0}\". Deseja adicioná-los?", - "Restart": "Reiniciar", "Restart Language Server": "Reiniciar o Servidor de Linguagem", "Restart server": "Reiniciar o servidor", "Restore": "Restaurar", @@ -198,7 +196,6 @@ "WARNING": "AVISO", "Workspace information": "Informações do workspace", "Workspace projects": "Projetos do espaço de trabalho", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Gostaria de reiniciar o Razor Language Server para habilitar a alteração de configuração de rastreamento do Razor?", "Yes": "Sim", "You must first start the data collection before copying.": "Você deve primeiro iniciar a coleta de dados antes de copiar.", "You must first start the data collection before stopping.": "Você deve primeiro iniciar a coleta de dados antes de parar.", diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 900d9c7e1..1b6f756c3 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "Пропускаются строки, не поддающиеся анализу, в envFile {0}: {1}", "IntelliCode features will not be available, {0} failed to activate.": "Возможности IntelliCode не будут доступны, не удалось активировать {0}.", "Invalid project index": "Недопустимый индекс проекта", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Недопустимый параметр razor.server.trace. Применяется значение по умолчанию \"{0}\"", "Is this a Bug or Feature request?": "Это сообщение об ошибке или запрос новой возможности?", "Logs": "Журналы", "Machine information": "Сведения о компьютере", @@ -132,7 +131,6 @@ "Report Razor Issue": "Сообщить о проблеме Razor", "Report a Razor issue": "Сообщить о проблеме Razor", "Required assets to build and debug are missing from '{0}'. Add them?": "Необходимые ресурсы для сборки и отладки отсутствуют в \"{0}\". Добавить их?", - "Restart": "Перезапустить", "Restart Language Server": "Перезапустить языковой сервер", "Restart server": "Перезапустить сервер", "Restore": "Восстановить", @@ -198,7 +196,6 @@ "WARNING": "ПРЕДУПРЕЖДЕНИЕ", "Workspace information": "Сведения о рабочей области", "Workspace projects": "Проекты рабочей области", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Вы хотите перезапустить языковой сервер Razor для активации изменения конфигурации трассировки Razor?", "Yes": "Да", "You must first start the data collection before copying.": "Перед копированием необходимо запустить сбор данных.", "You must first start the data collection before stopping.": "Перед остановкой необходимо запустить сбор данных.", diff --git a/l10n/bundle.l10n.tr.json b/l10n/bundle.l10n.tr.json index 716c9a5e4..a064b511f 100644 --- a/l10n/bundle.l10n.tr.json +++ b/l10n/bundle.l10n.tr.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "envFile {0} dosyasındaki ayrıştırılamayan satırlar yok sayılıyor: {1}.", "IntelliCode features will not be available, {0} failed to activate.": "IntelliCode özellikleri kullanılamayacak, {0} etkinleştirilemedi.", "Invalid project index": "Geçersiz proje dizini", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "Geçersiz razor.server.trace ayarı. Varsayılan '{0}' değerini alıyor", "Is this a Bug or Feature request?": "Bu bir Hata bildirimi mi Özellik isteği mi?", "Logs": "Günlükler", "Machine information": "Makine bilgileri", @@ -132,7 +131,6 @@ "Report Razor Issue": "Razor Sorunu Bildir", "Report a Razor issue": "Razor sorunu bildirin", "Required assets to build and debug are missing from '{0}'. Add them?": "'{0}' derleme ve hata ayıklama için gerekli varlıklara sahip değil. Eklensin mi?", - "Restart": "Yeniden Başlat", "Restart Language Server": "Dil Sunucusunu Yeniden Başlat", "Restart server": "Sunucuyu yeniden başlat", "Restore": "Geri yükle", @@ -198,7 +196,6 @@ "WARNING": "UYARI", "Workspace information": "Çalışma alanı bilgileri", "Workspace projects": "Çalışma alanı projeleri", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "Razor izleme yapılandırması değişikliğini etkinleştirmek için Razor Dil Sunucusu'nu yeniden başlatmak istiyor musunuz?", "Yes": "Evet", "You must first start the data collection before copying.": "Kopyalamadan önce veri toplamayı başlatmalısınız.", "You must first start the data collection before stopping.": "Durdurmadan önce veri toplamayı başlatmalısınız.", diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json index 0d2db3d5f..974eece21 100644 --- a/l10n/bundle.l10n.zh-cn.json +++ b/l10n/bundle.l10n.zh-cn.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "忽略 envFile {0} 中不可分析的行: {1}", "IntelliCode features will not be available, {0} failed to activate.": "IntelliCode 功能将不可用,{0} 未能激活。", "Invalid project index": "项目索引无效", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "razor.server.trace 设置无效。默认为“{0}”", "Is this a Bug or Feature request?": "这是 Bug 或功能请求吗?", "Logs": "日志", "Machine information": "计算机信息", @@ -132,7 +131,6 @@ "Report Razor Issue": "报告 Razor 问题", "Report a Razor issue": "报告 Razor 问题", "Required assets to build and debug are missing from '{0}'. Add them?": "\"{0}\" 中缺少生成和调试所需的资产。添加它们?", - "Restart": "重启", "Restart Language Server": "重启语言服务器", "Restart server": "重启服务器", "Restore": "还原", @@ -198,7 +196,6 @@ "WARNING": "警告", "Workspace information": "工作区信息", "Workspace projects": "工作区项目", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "是否要重启 Razor 语言服务器以启用 Razor 跟踪配置更改?", "Yes": "是", "You must first start the data collection before copying.": "复制前必须先启动数据收集。", "You must first start the data collection before stopping.": "必须先启动数据收集,然后才能停止。", diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json index 6afafc3a9..af639ef95 100644 --- a/l10n/bundle.l10n.zh-tw.json +++ b/l10n/bundle.l10n.zh-tw.json @@ -82,7 +82,6 @@ "Ignoring non-parseable lines in envFile {0}: {1}.": "正在忽略 envFile {0} 中無法剖析的行: {1}。", "IntelliCode features will not be available, {0} failed to activate.": "IntelliCode 功能將無法使用,{0} 無法啟動。", "Invalid project index": "無效的專案索引", - "Invalid razor.server.trace setting. Defaulting to '{0}'": "無效的 razor.server.trace 設定。正在預設為 '{0}'", "Is this a Bug or Feature request?": "這是 Bug 或功能要求嗎?", "Logs": "記錄", "Machine information": "電腦資訊", @@ -132,7 +131,6 @@ "Report Razor Issue": "回報 Razor 問題", "Report a Razor issue": "報告 Razor 問題", "Required assets to build and debug are missing from '{0}'. Add them?": "'{0}' 缺少建置和偵錯所需的資產。要新增嗎?", - "Restart": "重新啟動", "Restart Language Server": "重新啟動語言伺服器", "Restart server": "重新啟動伺服器", "Restore": "還原", @@ -198,7 +196,6 @@ "WARNING": "警告", "Workspace information": "工作區資訊", "Workspace projects": "工作區專案", - "Would you like to restart the Razor Language Server to enable the Razor trace configuration change?": "您要重新啟動 Razor 語言伺服器以啟用 Razor 追蹤設定變更嗎?", "Yes": "是", "You must first start the data collection before copying.": "您必須先啟動資料收集,才能複製。", "You must first start the data collection before stopping.": "您必須先啟動資料收集,才能停止。", From 2bad9670e062241d6f7a07ee211a0007c6575e6c Mon Sep 17 00:00:00 2001 From: Evgeny Tvorun Date: Thu, 21 Nov 2024 09:05:31 -0800 Subject: [PATCH 22/24] Update xamlTools versions to 17.13.35521.31 --- CHANGELOG.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a740690ae..28c4404b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Diagnostics related feature requests and improvements [#5951](https://github.com/dotnet/vscode-csharp/issues/5951) - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) +* Bump xamltools to 17.13.35521.31 (PR: [#7814](https://github.com/dotnet/vscode-csharp/pull/7814)) # 2.57.x * Update Razor to 9.0.0-preview.24561.3 (PR: [#7748](https://github.com/dotnet/vscode-csharp/pull/7748)) diff --git a/package.json b/package.json index 0a3b30e10..14b07f603 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "omniSharp": "1.39.11", "razor": "9.0.0-preview.24561.3", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "17.13.35513.19" + "xamlTools": "17.13.35521.31" }, "main": "./dist/extension", "l10n": "./l10n", From bb6ef118509b92cbbe965cec13879cae92120c99 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Thu, 21 Nov 2024 20:15:56 +0000 Subject: [PATCH 23/24] Localization result of eb8041d0598430f96d516a1ccccba556ca4e88a3. --- l10n/bundle.l10n.cs.json | 3 +++ l10n/bundle.l10n.de.json | 3 +++ l10n/bundle.l10n.es.json | 3 +++ l10n/bundle.l10n.fr.json | 3 +++ l10n/bundle.l10n.it.json | 3 +++ l10n/bundle.l10n.ja.json | 3 +++ l10n/bundle.l10n.ko.json | 3 +++ l10n/bundle.l10n.pl.json | 3 +++ l10n/bundle.l10n.pt-br.json | 3 +++ l10n/bundle.l10n.ru.json | 3 +++ l10n/bundle.l10n.tr.json | 3 +++ l10n/bundle.l10n.zh-cn.json | 3 +++ l10n/bundle.l10n.zh-tw.json | 3 +++ 13 files changed, 39 insertions(+) diff --git a/l10n/bundle.l10n.cs.json b/l10n/bundle.l10n.cs.json index 38661a254..a2e5ea86b 100644 --- a/l10n/bundle.l10n.cs.json +++ b/l10n/bundle.l10n.cs.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Aktivní dokument není součástí otevřeného pracovního prostoru. Nebudou k dispozici všechny jazykové funkce.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Vybraná konfigurace spuštění je nakonfigurovaná tak, aby spustila webový prohlížeč, ale nenašel se žádný důvěryhodný vývojový certifikát. Chcete vytvořit důvěryhodný certifikát podepsaný svým držitelem (self-signed certificate)?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Hodnota {0} pro parametr targetArchitecture v konfiguraci spuštění je neplatná. Očekávala se hodnota x86_64 nebo arm64.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Existují nevyřešené závislosti. Pokud chcete pokračovat, spusťte prosím příkaz pro obnovení.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Při spouštění relace ladění došlo k neočekávané chybě. Pokud chcete získat více informací, podívejte se, jestli se v konzole nenacházejí užitečné protokoly, a projděte si dokumenty k ladění.", "Token cancellation requested: {0}": "Požádáno o zrušení tokenu: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Při připojování k oknu náhledu HTML došlo k neočekávané chybě.", "Unexpected error when attaching to report Razor issue window.": "Při připojování k oknu pro nahlášení problémů s Razorem došlo k neočekávané chybě.", "Unexpected message received from debugger.": "Z ladicího programu byla přijata neočekávaná zpráva.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Použití IntelliSense ke zjištění, které atributy existují pro ladění v jazyce C#", "Use hover for the description of the existing attributes": "Popis existujících atributů zobrazíte najetím myší", "VSCode version": "Verze VSCode", "Version": "Verze", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Zobrazit dokumenty k ladění", "Virtual document file path": "Cesta k souboru virtuálního dokumentu", "WARNING": "UPOZORNĚNÍ", diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index 52047170e..a69bc19cc 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Das aktive Dokument ist nicht Teil des geöffneten Arbeitsbereichs. Nicht alle Sprachfeatures sind verfügbar.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Die ausgewählte Startkonfiguration ist so konfiguriert, dass ein Webbrowser gestartet wird, es wurde jedoch kein vertrauenswürdiges Entwicklungszertifikat gefunden. Vertrauenswürdiges selbstsigniertes Zertifikat erstellen?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Der Wert \"{0}\" für \"targetArchitecture\" in der Startkonfiguration ist ungültig. \"x86_64\" oder \"arm64\" wurde erwartet.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Es sind nicht aufgelöste Abhängigkeiten vorhanden. Führen Sie den Wiederherstellungsbefehl aus, um den Vorgang fortzusetzen.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Unerwarteter Fehler beim Starten der Debugsitzung. Überprüfen Sie die Konsole auf hilfreiche Protokolle, und besuchen Sie die Debugdokumentation, um weitere Informationen zu erhalten.", "Token cancellation requested: {0}": "Tokenabbruch angefordert: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Unerwarteter Fehler beim Anfügen an das HTML-Vorschaufenster.", "Unexpected error when attaching to report Razor issue window.": "Unerwarteter Fehler beim Anfügen an das Fenster \"Razor-Problem melden\"", "Unexpected message received from debugger.": "Unerwartete Nachricht vom Debugger empfangen.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "IntelliSense verwenden, um herauszufinden, welche Attribute für das C#-Debuggen vorhanden sind", "Use hover for the description of the existing attributes": "Hover für die Beschreibung der vorhandenen Attribute verwenden", "VSCode version": "VSCode-Version", "Version": "Version", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Debug-Dokumentation anzeigen", "Virtual document file path": "Pfad der virtuellen Dokumentdatei", "WARNING": "WARNUNG", diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index 1a8e36695..512c99034 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "El documento activo no forma parte del área de trabajo abierta. No todas las características de lenguaje estarán disponibles.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "La configuración de inicio seleccionada está configurada para iniciar un explorador web, pero no se encontró ningún certificado de desarrollo de confianza. ¿Desea crear un certificado autofirmado de confianza?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "El valor “{0}” para “targetArchitecture” en la configuración de inicio no es válido. El valor que se esperaba es “x86_64” o “arm64”.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Hay dependencias sin resolver. Ejecute el comando de restauración para continuar.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Error inesperado al iniciar la sesión de depuración. Compruebe si hay registros útiles en la consola y visite los documentos de depuración para obtener más información.", "Token cancellation requested: {0}": "Cancelación de token solicitada: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Error inesperado al adjuntar a la ventana de vista previa HTML.", "Unexpected error when attaching to report Razor issue window.": "Error inesperado al adjuntar a la ventana de problemas de Razor de informe.", "Unexpected message received from debugger.": "Se ha recibido un mensaje del depurador inesperado.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Use IntelliSense para averiguar qué atributos existen para la depuración de C#.", "Use hover for the description of the existing attributes": "Usar el puntero por encima para la descripción de los atributos existentes", "VSCode version": "Versión de VSCode", "Version": "Versión", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Ver documentos de depuración", "Virtual document file path": "Ruta de archivo del documento virtual", "WARNING": "ADVERTENCIA", diff --git a/l10n/bundle.l10n.fr.json b/l10n/bundle.l10n.fr.json index 301e1302f..f2eee1d79 100644 --- a/l10n/bundle.l10n.fr.json +++ b/l10n/bundle.l10n.fr.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Le document actif ne fait pas partie de l’espace de travail ouvert. Toutes les fonctionnalités de langage ne seront pas disponibles.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "La configuration de lancement sélectionnée est configurée pour lancer un navigateur web, mais aucun certificat de développement approuvé n’a été trouvé. Créer un certificat auto-signé approuvé ?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "La valeur « {0} » pour « Architecture cible » dans la configuration de lancement n'est pas valide. \"x86_64\" ou \"arm64\" attendu.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Il existe des dépendances non résolues. Exécutez la commande de restauration pour continuer.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Une erreur inattendue s’est produite lors du lancement de votre session de débogage. Consultez la console pour obtenir des journaux utiles et consultez les documents de débogage pour plus d’informations.", "Token cancellation requested: {0}": "Annulation de jeton demandée : {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Erreur inattendue lors de l’attachement à la fenêtre d’aperçu HTML.", "Unexpected error when attaching to report Razor issue window.": "Erreur inattendue lors de l’attachement à la fenêtre de rapport du problème Razor.", "Unexpected message received from debugger.": "Message inattendu reçu du débogueur.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Utiliser IntelliSense pour déterminer quels attributs existent pour le débogage C#", "Use hover for the description of the existing attributes": "Utiliser le pointage pour la description des attributs existants", "VSCode version": "Version de VSCode", "Version": "Version", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Afficher les documents de débogage", "Virtual document file path": "Chemin d’accès au fichier de document virtuel", "WARNING": "AVERTISSEMENT", diff --git a/l10n/bundle.l10n.it.json b/l10n/bundle.l10n.it.json index fc7ccb7da..ca4fd7bd4 100644 --- a/l10n/bundle.l10n.it.json +++ b/l10n/bundle.l10n.it.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Il documento attivo non fa parte dell'area di lavoro aperta. Non tutte le funzionalità della lingua saranno disponibili.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "La configurazione di avvio selezionata è configurata per l'avvio di un Web browser, ma non è stato trovato alcun certificato di sviluppo attendibile. Creare un certificato autofirmato attendibile?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Il valore \"{0}\" per \"targetArchitecture\" nella configurazione di avvio non è valido. \"x86_64\" o \"arm64\" previsto.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Sono presenti dipendenze non risolte. Eseguire il comando di ripristino per continuare.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Si è verificato un errore imprevisto durante l'avvio della sessione di debug. Per altre informazioni, controllare la console per i log utili e visitare la documentazione di debug.", "Token cancellation requested: {0}": "Annullamento del token richiesto: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Errore imprevisto durante il collegamento alla finestra di anteprima HTML.", "Unexpected error when attaching to report Razor issue window.": "Errore imprevisto durante il collegamento alla finestra di segnalazione del problema Razor.", "Unexpected message received from debugger.": "Messaggio imprevisto ricevuto dal debugger.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Usare IntelliSense per individuare gli attributi esistenti per il debug C#", "Use hover for the description of the existing attributes": "Usa il passaggio del mouse per la descrizione degli attributi esistenti", "VSCode version": "Versione VSCode", "Version": "Versione", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Visualizza documenti di debug", "Virtual document file path": "Percorso file del documento virtuale", "WARNING": "AVVISO", diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 4cdd8b60e..5e7a5bf63 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "このアクティブなドキュメントは、開いているワークスペースの一部ではありません。一部の言語機能は使用できません。", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "選択した起動構成では Web ブラウザーを起動するように構成されていますが、信頼された開発証明書が見つかりませんでした。信頼された自己署名証明書を作成しますか?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "起動構成の 'targetArchitecture' の値 '{0}' が無効です。'x86_64' または 'arm64' が必要です。", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "未解決の依存関係があります。続行するには、restore コマンドを実行してください。", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "デバッグ セッションの起動中に予期しないエラーが発生しました。 コンソールで役立つログを確認し、詳細についてはデバッグ ドキュメントにアクセスしてください。", "Token cancellation requested: {0}": "トークンのキャンセルが要求されました: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "HTML プレビュー ウィンドウにアタッチするときに予期しないエラーが発生しました。", "Unexpected error when attaching to report Razor issue window.": "Razor の問題ウィンドウを報告するために添付するときに予期しないエラーが発生しました。", "Unexpected message received from debugger.": "デバッガーから予期しないメッセージを受け取りました。", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "IntelliSense を使用して、C# デバッグに存在する属性を確認します", "Use hover for the description of the existing attributes": "既存の属性の説明にホバーを使用する", "VSCode version": "VSCode バージョン", "Version": "バージョン", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "デバッグ ドキュメントの表示", "Virtual document file path": "仮想ドキュメント ファイルのパス", "WARNING": "警告", diff --git a/l10n/bundle.l10n.ko.json b/l10n/bundle.l10n.ko.json index 5898a023f..8aafde689 100644 --- a/l10n/bundle.l10n.ko.json +++ b/l10n/bundle.l10n.ko.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "활성 문서는 열려 있는 작업 영역의 일부가 아닙니다. 일부 언어 기능을 사용할 수 없습니다.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "선택한 시작 구성이 웹 브라우저를 시작하도록 구성되었지만 신뢰할 수 있는 개발 인증서를 찾을 수 없습니다. 신뢰할 수 있는 자체 서명 인증서를 만드시겠습니까?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "시작 구성의 'targetArchitecture'의 '{0}' 값이 잘못되었습니다. 'x86_64' 또는 'arm64'가 필요합니다.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "확인되지 않은 종속성이 있습니다. 계속하려면 복원 명령을 실행하세요.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "디버깅 세션을 시작하는 동안 예기치 않은 오류가 발생했습니다. 콘솔에서 도움이 되는 로그를 확인하세요. 자세한 내용은 디버깅 문서를 참조하세요.", "Token cancellation requested: {0}": "토큰 취소가 요청됨: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "HTML 미리 보기 창에 연결할 때 예기치 않은 오류가 발생했습니다.", "Unexpected error when attaching to report Razor issue window.": "Razor 문제 보고 창에 연결하는 동안 예기치 않은 오류가 발생했습니다.", "Unexpected message received from debugger.": "디버거에서 예기치 않은 메시지를 받았습니다.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "IntelliSense를 사용하여 C# 디버깅을 위해 존재하는 특성 찾기", "Use hover for the description of the existing attributes": "기존 속성 설명에 마우스 오버 사용", "VSCode version": "VSCode 버전", "Version": "버전", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "디버그 문서 보기", "Virtual document file path": "가상 문서 파일 경로", "WARNING": "경고", diff --git a/l10n/bundle.l10n.pl.json b/l10n/bundle.l10n.pl.json index 92f9faa3b..b9e26fa2d 100644 --- a/l10n/bundle.l10n.pl.json +++ b/l10n/bundle.l10n.pl.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Dokument aktywny nie jest częścią otwartego obszaru roboczego. Nie wszystkie funkcje językowe będą dostępne.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Wybrana konfiguracja uruchamiania jest skonfigurowana do uruchamiania przeglądarki internetowej, ale nie znaleziono zaufanego certyfikatu programistycznego. Utworzyć zaufany certyfikat z podpisem własnym?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Wartość „{0}” dla elementu „targetArchitecture” w konfiguracji uruchamiania jest nieprawidłowa. Oczekiwane elementy „x86_64” lub „arm64”.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Istnieją nierozwiązane zależności. Wykonaj polecenie przywracania, aby kontynuować.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Wystąpił nieoczekiwany błąd podczas uruchamiania sesji debugowania. Aby uzyskać więcej informacji, sprawdź konsolę pod kątem przydatnych dzienników i odwiedź dokumentację debugowania.", "Token cancellation requested: {0}": "Zażądano anulowania tokenu: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Nieoczekiwany błąd podczas dołączania do okna podglądu HTML.", "Unexpected error when attaching to report Razor issue window.": "Nieoczekiwany błąd podczas dołączania do okna raportowania problemu Razor.", "Unexpected message received from debugger.": "Odebrano nieoczekiwany komunikat z debugera.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Użyj funkcji IntelliSense, aby dowiedzieć się, które atrybuty istnieją na potrzeby debugowania języka C#", "Use hover for the description of the existing attributes": "Użyj najechania kursorem w przypadku opisu istniejących atrybutów", "VSCode version": "Wersja programu VSCode", "Version": "Wersja", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Wyświetl dokumentację debugowania", "Virtual document file path": "Ścieżka pliku dokumentu wirtualnego", "WARNING": "OSTRZEŻENIE", diff --git a/l10n/bundle.l10n.pt-br.json b/l10n/bundle.l10n.pt-br.json index 39f3b0e52..c918b8bf9 100644 --- a/l10n/bundle.l10n.pt-br.json +++ b/l10n/bundle.l10n.pt-br.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "O documento ativo não faz parte do workspace aberto. Nem todos os recursos de linguagem estarão disponíveis.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "A configuração de inicialização selecionada está configurada para iniciar um navegador da web, mas nenhum certificado de desenvolvimento confiável foi encontrado. Deseja criar um certificado autoassinado confiável?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "O valor “{0}” para “targetArchitecture” na configuração de inicialização é inválido. Esperado “x86_64” ou “arm64”.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Há dependências não resolvidas. Execute o comando de restauração para continuar.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Ocorreu um erro inesperado ao iniciar sua sessão de depuração. Verifique o console para obter logs úteis e visite os documentos de depuração para obter mais informações.", "Token cancellation requested: {0}": "Cancelamento de token solicitado: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Erro inesperado ao anexar à janela de visualização HTML.", "Unexpected error when attaching to report Razor issue window.": "Erro inesperado ao anexar à janela de problema do Razor de relatório.", "Unexpected message received from debugger.": "Mensagem inesperada recebida do depurador.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Usar o IntelliSense para descobrir quais atributos existem para a depuração de C#", "Use hover for the description of the existing attributes": "Passe o mouse sobre a tela para ver a descrição dos atributos existentes", "VSCode version": "Versão do VSCode", "Version": "Versão", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Exibir Documentos de Depuração", "Virtual document file path": "Caminho do arquivo de documento virtual", "WARNING": "AVISO", diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 1b6f756c3..8cc830250 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Активный документ не является частью открытой рабочей области. Не все языковые функции будут доступны.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Выбранная конфигурация запуска настроена на запуск веб-браузера, но доверенный сертификат разработки не найден. Создать доверенный самозаверяющий сертификат?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Недопустимое значение {0} параметра \"targetArchitecture\" в конфигурации запуска. Ожидается значение \"x86_64\" или \"arm64\".", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Есть неразрешенные зависимости. Чтобы продолжить, выполните команду восстановления.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "При запуске сеанса отладки возникла непредвиденная ошибка. Проверьте журналы в консоли и изучите документацию по отладке, чтобы получить дополнительные сведения.", "Token cancellation requested: {0}": "Запрошена отмена маркера {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Возникла непредвиденная ошибка при подключении к окну предварительного просмотра HTML.", "Unexpected error when attaching to report Razor issue window.": "Возникла непредвиденная ошибка при подключении к окну сведений об ошибке Razor.", "Unexpected message received from debugger.": "Получено неожиданное сообщение от отладчика.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "Используйте IntelliSense, чтобы узнать, какие атрибуты существуют для отладки C#.", "Use hover for the description of the existing attributes": "Используйте наведение для описания существующих атрибутов", "VSCode version": "Версия VSCode", "Version": "Версия", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Просмотреть документацию по отладке", "Virtual document file path": "Путь к файлу виртуального документа", "WARNING": "ПРЕДУПРЕЖДЕНИЕ", diff --git a/l10n/bundle.l10n.tr.json b/l10n/bundle.l10n.tr.json index a064b511f..205683121 100644 --- a/l10n/bundle.l10n.tr.json +++ b/l10n/bundle.l10n.tr.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Etkin belge açık çalışma alanının bir parçası değil. Tüm dil özellikleri kullanılamaz.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Seçilen başlatma yapılandırması bir web tarayıcısı başlatmak üzere yapılandırılmış, ancak güvenilir bir geliştirme sertifikası bulunamadı. Otomatik olarak imzalanan güvenilir bir sertifika oluşturulsun mu?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Başlatma yapılandırmasında 'targetArchitecture' için '{0}' değeri geçersiz. 'x86_64' veya 'arm64' bekleniyordu.", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "Çözümlenmemiş bağımlılıklar var. Devam etmek için lütfen restore komutunu çalıştırın.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Hata ayıklama oturumunuz başlatılırken beklenmeyen bir hata oluştu. Konsolda size yardımcı olabilecek günlüklere bakın ve daha fazla bilgi için hata ayıklama belgelerini ziyaret edin.", "Token cancellation requested: {0}": "Belirteç iptali istendi: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "HTML önizleme penceresine eklenirken beklenmeyen hata oluştu.", "Unexpected error when attaching to report Razor issue window.": "Razor sorunu bildirme penceresine eklerken beklenmeyen hata oluştu.", "Unexpected message received from debugger.": "Hata ayıklayıcısından beklenmeyen ileti alındı.", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "C# hata ayıklaması için hangi özniteliklerin mevcut olduğunu bulmak için IntelliSense’i kullanın", "Use hover for the description of the existing attributes": "Var olan özniteliklerin açıklaması için vurgulamayı kullanma", "VSCode version": "VSCode sürümü", "Version": "Sürüm", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "Hata Ayıklama Belgelerini Görüntüle", "Virtual document file path": "Sanal belge dosya yolu", "WARNING": "UYARI", diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json index 974eece21..6420a4bdf 100644 --- a/l10n/bundle.l10n.zh-cn.json +++ b/l10n/bundle.l10n.zh-cn.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "该活动文档不是打开的工作区的一部分。并非所有语言功能都将可用。", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "所选启动配置配置为启动 Web 浏览器,但找不到受信任的开发证书。创建受信任的自签名证书?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "启动配置中“targetArchitecture”的值“{0}”无效。应为“x86_64”或“arm64”。", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "有未解析的依赖项。请执行还原命令以继续。", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "启动调试会话时出现意外错误。检查控制台以获取有用的日志,并访问调试文档了解详细信息。", "Token cancellation requested: {0}": "已请求取消令牌: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "附加到 HTML 预览窗口时出现意外错误。", "Unexpected error when attaching to report Razor issue window.": "附加到报告 Razor 问题窗口时出现意外错误。", "Unexpected message received from debugger.": "从调试器收到意外消息。", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "使用 IntelliSense 找出 C# 调试存在哪些属性", "Use hover for the description of the existing attributes": "将悬停用于现有属性的说明", "VSCode version": "VSCode 版本", "Version": "版本", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "查看调试文档", "Virtual document file path": "虚拟文档文件路径", "WARNING": "警告", diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json index af639ef95..4203a61eb 100644 --- a/l10n/bundle.l10n.zh-tw.json +++ b/l10n/bundle.l10n.zh-tw.json @@ -167,6 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "使用中文件不是開啟中工作區的一部分。並非所有語言功能都可供使用。", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "選取的啟動設定已設為啟動網頁瀏覽器,但找不到信任的開發憑證。要建立信任的自我簽署憑證嗎?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "啟動設定中的 'targetArchitecture' 值 '{0}' 無效。預期是 'x86_64' 或 'arm64'。", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", "There are unresolved dependencies. Please execute the restore command to continue.": "有無法解析的相依性。請執行還原命令以繼續。", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "啟動您的偵錯工作階段時發生意外的錯誤。請檢查主控台是否有實用的記錄,並造訪偵錯文件以取得詳細資訊。", "Token cancellation requested: {0}": "已要求取消權杖: {0}", @@ -187,10 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "連結到 HTML 預覽視窗時發生未預期的錯誤。", "Unexpected error when attaching to report Razor issue window.": "連結到報告 Razor 問題視窗時發生未預期的錯誤。", "Unexpected message received from debugger.": "從偵錯工具收到未預期的訊息。", + "Update and reload": "Update and reload", "Use IntelliSense to find out which attributes exist for C# debugging": "使用 IntelliSense 找出 C# 偵錯具有哪些屬性", "Use hover for the description of the existing attributes": "針對現有屬性的描述使用暫留", "VSCode version": "VSCode 版本", "Version": "版本", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", "View Debug Docs": "檢視偵錯文件", "Virtual document file path": "虛擬文件檔案路徑", "WARNING": "警告", From 763fe14b8bf4c11894521c4987b43bcdd8e5a340 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Sun, 24 Nov 2024 12:16:33 +0000 Subject: [PATCH 24/24] Localization result of 603bd6051958a6e4200d1717a30a5c7187397146. --- l10n/bundle.l10n.de.json | 8 ++++---- l10n/bundle.l10n.pt-br.json | 8 ++++---- l10n/bundle.l10n.ru.json | 8 ++++---- l10n/bundle.l10n.tr.json | 8 ++++---- l10n/bundle.l10n.zh-tw.json | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index a69bc19cc..a052bea44 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -70,7 +70,7 @@ "For further information visit {0}": "Weitere Informationen finden Sie unter {0}", "For further information visit {0}.": "Weitere Informationen finden Sie unter {0}.", "For more information about the 'console' field, see {0}": "Weitere Informationen zum Feld \"Konsole\" finden Sie unter {0}", - "Generated document not found": "Generated document not found", + "Generated document not found": "Das generierte Dokument wurde nicht gefunden", "Get the SDK": "SDK herunterladen", "Go to GitHub": "Zu GitHub wechseln", "Go to output": "Zur Ausgabe wechseln", @@ -167,7 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Das aktive Dokument ist nicht Teil des geöffneten Arbeitsbereichs. Nicht alle Sprachfeatures sind verfügbar.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Die ausgewählte Startkonfiguration ist so konfiguriert, dass ein Webbrowser gestartet wird, es wurde jedoch kein vertrauenswürdiges Entwicklungszertifikat gefunden. Vertrauenswürdiges selbstsigniertes Zertifikat erstellen?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Der Wert \"{0}\" für \"targetArchitecture\" in der Startkonfiguration ist ungültig. \"x86_64\" oder \"arm64\" wurde erwartet.", - "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "Für die Erweiterung {0} ist mindestens {1} der Erweiterung „.NET-Installationstool“ ({2}) erforderlich. Führen Sie eine Aktualisierung durch, um fortzufahren", "There are unresolved dependencies. Please execute the restore command to continue.": "Es sind nicht aufgelöste Abhängigkeiten vorhanden. Führen Sie den Wiederherstellungsbefehl aus, um den Vorgang fortzusetzen.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Unerwarteter Fehler beim Starten der Debugsitzung. Überprüfen Sie die Konsole auf hilfreiche Protokolle, und besuchen Sie die Debugdokumentation, um weitere Informationen zu erhalten.", "Token cancellation requested: {0}": "Tokenabbruch angefordert: {0}", @@ -188,12 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Unerwarteter Fehler beim Anfügen an das HTML-Vorschaufenster.", "Unexpected error when attaching to report Razor issue window.": "Unerwarteter Fehler beim Anfügen an das Fenster \"Razor-Problem melden\"", "Unexpected message received from debugger.": "Unerwartete Nachricht vom Debugger empfangen.", - "Update and reload": "Update and reload", + "Update and reload": "Aktualisieren und neu laden", "Use IntelliSense to find out which attributes exist for C# debugging": "IntelliSense verwenden, um herauszufinden, welche Attribute für das C#-Debuggen vorhanden sind", "Use hover for the description of the existing attributes": "Hover für die Beschreibung der vorhandenen Attribute verwenden", "VSCode version": "VSCode-Version", "Version": "Version", - "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} des .NET-Installationstools ({1}) wurde nicht gefunden, {2} wird nicht aktiviert.", "View Debug Docs": "Debug-Dokumentation anzeigen", "Virtual document file path": "Pfad der virtuellen Dokumentdatei", "WARNING": "WARNUNG", diff --git a/l10n/bundle.l10n.pt-br.json b/l10n/bundle.l10n.pt-br.json index c918b8bf9..4f05fabfd 100644 --- a/l10n/bundle.l10n.pt-br.json +++ b/l10n/bundle.l10n.pt-br.json @@ -70,7 +70,7 @@ "For further information visit {0}": "Para obter mais informações, acesse {0}", "For further information visit {0}.": "Para obter mais informações, visite {0}.", "For more information about the 'console' field, see {0}": "Para obter mais informações sobre o campo \"console\", confira {0}", - "Generated document not found": "Generated document not found", + "Generated document not found": "Documento gerado não encontrado", "Get the SDK": "Obter o SDK", "Go to GitHub": "Acessar o GitHub", "Go to output": "Ir para a saída", @@ -167,7 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "O documento ativo não faz parte do workspace aberto. Nem todos os recursos de linguagem estarão disponíveis.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "A configuração de inicialização selecionada está configurada para iniciar um navegador da web, mas nenhum certificado de desenvolvimento confiável foi encontrado. Deseja criar um certificado autoassinado confiável?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "O valor “{0}” para “targetArchitecture” na configuração de inicialização é inválido. Esperado “x86_64” ou “arm64”.", - "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "A extensão {0} requer pelo menos {1} da extensão .NET Install Tool ({2}). Atualize para continuar", "There are unresolved dependencies. Please execute the restore command to continue.": "Há dependências não resolvidas. Execute o comando de restauração para continuar.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Ocorreu um erro inesperado ao iniciar sua sessão de depuração. Verifique o console para obter logs úteis e visite os documentos de depuração para obter mais informações.", "Token cancellation requested: {0}": "Cancelamento de token solicitado: {0}", @@ -188,12 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Erro inesperado ao anexar à janela de visualização HTML.", "Unexpected error when attaching to report Razor issue window.": "Erro inesperado ao anexar à janela de problema do Razor de relatório.", "Unexpected message received from debugger.": "Mensagem inesperada recebida do depurador.", - "Update and reload": "Update and reload", + "Update and reload": "Atualizar e recarregar", "Use IntelliSense to find out which attributes exist for C# debugging": "Usar o IntelliSense para descobrir quais atributos existem para a depuração de C#", "Use hover for the description of the existing attributes": "Passe o mouse sobre a tela para ver a descrição dos atributos existentes", "VSCode version": "Versão do VSCode", "Version": "Versão", - "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "A versão {0} da Ferramenta de Instalação do .NET ({1}) não foi encontrada, {2} não será ativada.", "View Debug Docs": "Exibir Documentos de Depuração", "Virtual document file path": "Caminho do arquivo de documento virtual", "WARNING": "AVISO", diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 8cc830250..425ddb40a 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -70,7 +70,7 @@ "For further information visit {0}": "Для получения дополнительных сведений посетите {0}", "For further information visit {0}.": "Для получения дополнительных сведений посетите {0}.", "For more information about the 'console' field, see {0}": "Дополнительные сведения о поле \"console\" см. в {0}", - "Generated document not found": "Generated document not found", + "Generated document not found": "Созданный документ не найден", "Get the SDK": "Получение пакета SDK", "Go to GitHub": "Перейти в GitHub", "Go to output": "Перейти к выходным данным", @@ -167,7 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Активный документ не является частью открытой рабочей области. Не все языковые функции будут доступны.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Выбранная конфигурация запуска настроена на запуск веб-браузера, но доверенный сертификат разработки не найден. Создать доверенный самозаверяющий сертификат?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Недопустимое значение {0} параметра \"targetArchitecture\" в конфигурации запуска. Ожидается значение \"x86_64\" или \"arm64\".", - "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "Для расширения {0} требуется по крайней мере версия {1} расширения средства установки .NET ({2}). Обновите, чтобы продолжить", "There are unresolved dependencies. Please execute the restore command to continue.": "Есть неразрешенные зависимости. Чтобы продолжить, выполните команду восстановления.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "При запуске сеанса отладки возникла непредвиденная ошибка. Проверьте журналы в консоли и изучите документацию по отладке, чтобы получить дополнительные сведения.", "Token cancellation requested: {0}": "Запрошена отмена маркера {0}", @@ -188,12 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "Возникла непредвиденная ошибка при подключении к окну предварительного просмотра HTML.", "Unexpected error when attaching to report Razor issue window.": "Возникла непредвиденная ошибка при подключении к окну сведений об ошибке Razor.", "Unexpected message received from debugger.": "Получено неожиданное сообщение от отладчика.", - "Update and reload": "Update and reload", + "Update and reload": "Обновить и перезагрузить", "Use IntelliSense to find out which attributes exist for C# debugging": "Используйте IntelliSense, чтобы узнать, какие атрибуты существуют для отладки C#.", "Use hover for the description of the existing attributes": "Используйте наведение для описания существующих атрибутов", "VSCode version": "Версия VSCode", "Version": "Версия", - "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Версия {0} средства установки .NET ({1}) не найдена. Активация {2} не будет выполнена.", "View Debug Docs": "Просмотреть документацию по отладке", "Virtual document file path": "Путь к файлу виртуального документа", "WARNING": "ПРЕДУПРЕЖДЕНИЕ", diff --git a/l10n/bundle.l10n.tr.json b/l10n/bundle.l10n.tr.json index 205683121..cefdfa38e 100644 --- a/l10n/bundle.l10n.tr.json +++ b/l10n/bundle.l10n.tr.json @@ -70,7 +70,7 @@ "For further information visit {0}": "Daha fazla bilgi için bkz. {0}", "For further information visit {0}.": "Daha fazla bilgi için bkz. {0}.", "For more information about the 'console' field, see {0}": "'Konsol' alanı hakkında daha fazla bilgi için bkz. {0}", - "Generated document not found": "Generated document not found", + "Generated document not found": "Oluşturulan belge bulunamadı", "Get the SDK": "SDK’yi alın", "Go to GitHub": "GitHub'a Git", "Go to output": "Çıkışa git", @@ -167,7 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "Etkin belge açık çalışma alanının bir parçası değil. Tüm dil özellikleri kullanılamaz.", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "Seçilen başlatma yapılandırması bir web tarayıcısı başlatmak üzere yapılandırılmış, ancak güvenilir bir geliştirme sertifikası bulunamadı. Otomatik olarak imzalanan güvenilir bir sertifika oluşturulsun mu?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "Başlatma yapılandırmasında 'targetArchitecture' için '{0}' değeri geçersiz. 'x86_64' veya 'arm64' bekleniyordu.", - "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "Bu {0} uzantısı en az {1} .NET Yükleme Aracı ({2}) uzantısını gerektirir. Devam etmek için lütfen güncelleyin", "There are unresolved dependencies. Please execute the restore command to continue.": "Çözümlenmemiş bağımlılıklar var. Devam etmek için lütfen restore komutunu çalıştırın.", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "Hata ayıklama oturumunuz başlatılırken beklenmeyen bir hata oluştu. Konsolda size yardımcı olabilecek günlüklere bakın ve daha fazla bilgi için hata ayıklama belgelerini ziyaret edin.", "Token cancellation requested: {0}": "Belirteç iptali istendi: {0}", @@ -188,12 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "HTML önizleme penceresine eklenirken beklenmeyen hata oluştu.", "Unexpected error when attaching to report Razor issue window.": "Razor sorunu bildirme penceresine eklerken beklenmeyen hata oluştu.", "Unexpected message received from debugger.": "Hata ayıklayıcısından beklenmeyen ileti alındı.", - "Update and reload": "Update and reload", + "Update and reload": "Güncelleştir ve yeniden yükle", "Use IntelliSense to find out which attributes exist for C# debugging": "C# hata ayıklaması için hangi özniteliklerin mevcut olduğunu bulmak için IntelliSense’i kullanın", "Use hover for the description of the existing attributes": "Var olan özniteliklerin açıklaması için vurgulamayı kullanma", "VSCode version": "VSCode sürümü", "Version": "Sürüm", - "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": ".NET Yükleme Aracı'nın {0} sürümü bulunamadı ({1}), {2} etkinleştirilemedi.", "View Debug Docs": "Hata Ayıklama Belgelerini Görüntüle", "Virtual document file path": "Sanal belge dosya yolu", "WARNING": "UYARI", diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json index 4203a61eb..8ea55caf9 100644 --- a/l10n/bundle.l10n.zh-tw.json +++ b/l10n/bundle.l10n.zh-tw.json @@ -70,7 +70,7 @@ "For further information visit {0}": "如需詳細資訊,請造訪 {0}", "For further information visit {0}.": "如需詳細資訊,請造訪 {0}。", "For more information about the 'console' field, see {0}": "如需 [主控台] 欄位的詳細資訊,請參閱 {0}", - "Generated document not found": "Generated document not found", + "Generated document not found": "找不到產生的文件", "Get the SDK": "取得 SDK", "Go to GitHub": "移至 GitHub", "Go to output": "前往輸出", @@ -167,7 +167,7 @@ "The active document is not part of the open workspace. Not all language features will be available.": "使用中文件不是開啟中工作區的一部分。並非所有語言功能都可供使用。", "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "選取的啟動設定已設為啟動網頁瀏覽器,但找不到信任的開發憑證。要建立信任的自我簽署憑證嗎?", "The value '{0}' for 'targetArchitecture' in launch configuraiton is invalid. Expected 'x86_64' or 'arm64'.": "啟動設定中的 'targetArchitecture' 值 '{0}' 無效。預期是 'x86_64' 或 'arm64'。", - "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue", + "The {0} extension requires at least {1} of the .NET Install Tool ({2}) extension. Please update to continue": "{0} 延伸模組至少需要 {1} .NET 安裝工具 ({2}) 延伸模組。請更新以繼續", "There are unresolved dependencies. Please execute the restore command to continue.": "有無法解析的相依性。請執行還原命令以繼續。", "There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.": "啟動您的偵錯工作階段時發生意外的錯誤。請檢查主控台是否有實用的記錄,並造訪偵錯文件以取得詳細資訊。", "Token cancellation requested: {0}": "已要求取消權杖: {0}", @@ -188,12 +188,12 @@ "Unexpected error when attaching to HTML preview window.": "連結到 HTML 預覽視窗時發生未預期的錯誤。", "Unexpected error when attaching to report Razor issue window.": "連結到報告 Razor 問題視窗時發生未預期的錯誤。", "Unexpected message received from debugger.": "從偵錯工具收到未預期的訊息。", - "Update and reload": "Update and reload", + "Update and reload": "更新並重新載入", "Use IntelliSense to find out which attributes exist for C# debugging": "使用 IntelliSense 找出 C# 偵錯具有哪些屬性", "Use hover for the description of the existing attributes": "針對現有屬性的描述使用暫留", "VSCode version": "VSCode 版本", "Version": "版本", - "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.", + "Version {0} of the .NET Install Tool ({1}) was not found, {2} will not activate.": "找不到 .NET 安裝工具 ({1}) 的版本 {0},{2} 將無法啟動。", "View Debug Docs": "檢視偵錯文件", "Virtual document file path": "虛擬文件檔案路徑", "WARNING": "警告",