提交 93bd166e 编写于 作者: D Don Syme

use source directory of file if send-to-interactive, and delay actual start of FSI

上级 9d09aa52
......@@ -11,6 +11,7 @@ open System.Globalization
open System.IO
open System.Reflection
open System.Runtime.InteropServices
open System.Text
open Internal.Utilities
open Internal.Utilities.FSharpEnvironment
open FSharp.Compiler.AbstractIL.ILBinaryReader
......@@ -62,18 +63,23 @@ type internal FxResolver(assumeDotNetFramework: bool option, projectDir: string,
if File.Exists(candidate) then candidate else dotnet
| None -> dotnet
static let desiredDotNetSdkVersionForDirectoryCache = ConcurrentDictionary<string, string>()
/// We only try once for each directory (cleared on solution unload) to prevent conditions where
/// we repeatedly try to run dotnet.exe on every keystroke for a script
static let desiredDotNetSdkVersionForDirectoryCache = ConcurrentDictionary<string, Result<string, exn>>()
/// Find the relevant sdk version by running `dotnet --version` in the script/project location,
/// taking into account any global.json
let tryGetDesiredDotNetSdkVersionForDirectory() =
try
desiredDotNetSdkVersionForDirectoryCache.GetOrAdd(projectDir, (fun _ ->
let dotnetHostPath = getDotnetHostPath()
desiredDotNetSdkVersionForDirectoryCache.GetOrAdd(projectDir, (fun _ ->
let dotnetHostPath = getDotnetHostPath()
try
let psi = ProcessStartInfo(dotnetHostPath, "--version")
psi.RedirectStandardOutput <- true
psi.RedirectStandardError <- true
psi.UseShellExecute <- false // use path for 'dotnet'
psi.UseShellExecute <- false
psi.CreateNoWindow <- true
psi.StandardOutputEncoding <- Encoding.UTF8
psi.StandardErrorEncoding <- Encoding.UTF8
if Directory.Exists(projectDir) then
psi.WorkingDirectory <- projectDir
let p = Process.Start(psi)
......@@ -81,12 +87,15 @@ type internal FxResolver(assumeDotNetFramework: bool option, projectDir: string,
let stderr = p.StandardError.ReadToEnd()
p.WaitForExit()
if p.ExitCode <> 0 then
warning(Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, stderr, p.ExitCode), m))
failwith "no sdk determined"
stdout.Trim()))
|> Some
with _ ->
None
Result.Error (Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, stderr, p.ExitCode), m))
else
Result.Ok (stdout.Trim())
with err ->
Result.Error (Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, err.Message, 1), m))))
// Make sure the warning gets replayed each time we call this
|> function
| Result.Ok res -> Some res
| Result.Error exn -> warning(exn); None
/// Get the .NET Core SDK directory relevant to projectDir, used to infer the default target framework assemblies.
let tryGetSdkDir() =
......
......@@ -144,19 +144,22 @@ module ScriptPreprocessClosure =
applyCommandLineArgs tcConfigB
let assumeDotNetFramework =
// Work out the references for the script in its location. This may produce diagnostics.
let assumeDotNetFramework, scriptDefaultReferencesDiagnostics =
match basicReferences with
| None ->
let errorLogger = CapturingErrorLogger("ScriptDefaultReferences")
use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger)
let references, assumeDotNetFramework = fxResolver.GetDefaultReferences (useFsiAuxLib, assumeDotNetFramework, useSdkRefs)
// Add script references
for reference in references do
tcConfigB.AddReferencedAssemblyByPath(range0, reference)
assumeDotNetFramework
| Some rs ->
tcConfigB.AddReferencedAssemblyByPath(range0, reference)
assumeDotNetFramework , errorLogger.Diagnostics
| Some (rs, diagnostics) ->
for m, reference in rs do
tcConfigB.AddReferencedAssemblyByPath(m, reference)
assumeDotNetFramework
assumeDotNetFramework, diagnostics
tcConfigB.resolutionEnvironment <-
match codeContext with
......@@ -171,7 +174,7 @@ module ScriptPreprocessClosure =
tcConfigB.useSdkRefs <- useSdkRefs
tcConfigB.primaryAssembly <- if assumeDotNetFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime
TcConfig.Create(tcConfigB, validate=true)
TcConfig.Create(tcConfigB, validate=true), scriptDefaultReferencesDiagnostics
let ClosureSourceOfFilename(filename, m, inputCodePage, parseRequired) =
try
......@@ -331,7 +334,7 @@ module ScriptPreprocessClosure =
sources, tcConfig, packageReferences
/// Reduce the full directive closure into LoadClosure
let GetLoadClosure(ctok, rootFilename, closureFiles, tcConfig: TcConfig, codeContext, packageReferences) =
let GetLoadClosure(ctok, rootFilename, closureFiles, tcConfig: TcConfig, codeContext, packageReferences, earlierDiagnostics) =
// Mark the last file as isLastCompiland.
let closureFiles =
......@@ -377,8 +380,8 @@ module ScriptPreprocessClosure =
let loadClosureRootDiagnostics, allRootDiagnostics =
match List.rev closureFiles with
| ClosureFile(_, _, _, parseDiagnostics, metaDiagnostics, _) :: _ ->
(metaDiagnostics @ resolutionDiagnostics),
(parseDiagnostics @ metaDiagnostics @ resolutionDiagnostics)
(earlierDiagnostics @ metaDiagnostics @ resolutionDiagnostics),
(parseDiagnostics @ earlierDiagnostics @ metaDiagnostics @ resolutionDiagnostics)
| _ -> [], [] // When no file existed.
let isRootRange exn =
......@@ -421,8 +424,8 @@ module ScriptPreprocessClosure =
//
// This is tries to mimic the action of running the script in F# Interactive - the initial context for scripting is created
// first, then #I and other directives are processed.
let references0, assumeDotNetFramework =
let tcConfig =
let references0, assumeDotNetFramework, scriptDefaultReferencesDiagnostics =
let tcConfig, scriptDefaultReferencesDiagnostics =
CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir,
scriptFileName, codeContext, useSimpleResolution,
useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework,
......@@ -430,17 +433,17 @@ module ScriptPreprocessClosure =
let resolutions0, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(ctok, tcConfig)
let references0 = resolutions0 |> List.map (fun r->r.originalReference.Range, r.resolvedPath) |> Seq.distinct |> List.ofSeq
references0, tcConfig.assumeDotNetFramework
references0, tcConfig.assumeDotNetFramework, scriptDefaultReferencesDiagnostics
let tcConfig =
let tcConfig, scriptDefaultReferencesDiagnostics =
CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, scriptFileName,
codeContext, useSimpleResolution, useFsiAuxLib, Some references0,
codeContext, useSimpleResolution, useFsiAuxLib, Some (references0, scriptDefaultReferencesDiagnostics),
applyCommandLineArgs, assumeDotNetFramework, useSdkRefs,
tryGetMetadataSnapshot, reduceMemoryUsage)
let closureSources = [ClosureSource(scriptFileName, range0, sourceText, true)]
let closureFiles, tcConfig, packageReferences = FindClosureFiles(scriptFileName, range0, closureSources, tcConfig, codeContext, lexResourceManager, dependencyProvider)
GetLoadClosure(ctok, scriptFileName, closureFiles, tcConfig, codeContext, packageReferences)
GetLoadClosure(ctok, scriptFileName, closureFiles, tcConfig, codeContext, packageReferences, scriptDefaultReferencesDiagnostics)
/// Given source filename, find the full load closure
/// Used from fsi.fs and fsc.fs, for #load and command line
......@@ -452,7 +455,7 @@ module ScriptPreprocessClosure =
let mainFile, mainFileRange = List.last files
let closureSources = files |> List.collect (fun (filename, m) -> ClosureSourceOfFilename(filename, m,tcConfig.inputCodePage,true))
let closureFiles, tcConfig, packageReferences = FindClosureFiles(mainFile, mainFileRange, closureSources, tcConfig, codeContext, lexResourceManager, dependencyProvider)
GetLoadClosure(ctok, mainFile, closureFiles, tcConfig, codeContext, packageReferences)
GetLoadClosure(ctok, mainFile, closureFiles, tcConfig, codeContext, packageReferences, [])
type LoadClosure with
/// Analyze a script text and find the closure of its references.
......
......@@ -2156,7 +2156,7 @@ type FsiInteractiveChecker(legacyReferenceResolver,
let backgroundDiagnostics = [| |]
let reduceMemoryUsage = ReduceMemoryFlag.Yes
let assumeDotNetFramework = (tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib)
let useDotNetFramework = (tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib)
let applyCompilerOptions tcConfigB =
let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB
......@@ -2167,7 +2167,7 @@ type FsiInteractiveChecker(legacyReferenceResolver,
filename, sourceText, CodeContext.Editing,
tcConfig.useSimpleResolution, tcConfig.useFsiAuxLib,
tcConfig.useSdkRefs, new Lexhelp.LexResourceManager(),
applyCompilerOptions, assumeDotNetFramework,
applyCompilerOptions, useDotNetFramework,
tryGetMetadataSnapshot=(fun _ -> None),
reduceMemoryUsage=reduceMemoryUsage,
dependencyProvider=tcImports.DependencyProvider)
......
......@@ -47,6 +47,9 @@
<CommandPlacement guid="guidFsiConsoleCmdSet" id="cmdidDetachDebugger" priority="0x0800">
<Parent guid="guidFsiConsoleCmdSet" id="FsiConsoleSessionsGrp"/>
</CommandPlacement>
<CommandPlacement guid="guidFsiConsoleCmdSet" id="cmdidQuitProcess" priority="0x0900">
<Parent guid="guidFsiConsoleCmdSet" id="FsiConsoleSessionsGrp"/>
</CommandPlacement>
<CommandPlacement guid ="FSharpProjectCmdSet" id ="MyFSharpGroup" priority ="0x100">
<Parent guid ="guidSHLMainMenu" id ="IDM_VS_CTXT_ITEMNODE" />
</CommandPlacement>
......
......@@ -4,10 +4,10 @@ cannotCreateToolWindow,"Cannot create window F# Interactive ToolWindow"
exceptionRaisedWhenCreatingRemotingClient,"Exception raised when creating remoting client for launched fsi.exe\n%s"
exceptionRaisedWhenRequestingToolWindow,"Exception raised when requesting FSI ToolWindow.\n%s"
couldNotObtainFSharpLS,"Could not load F# language service"
sessionTerminationDetected,"Session termination detected. Press Enter to restart."
sessionTerminationDetected,"Session termination detected."
fsharpInteractive,"F# Interactive"
couldNotFindFsiExe,"Could not find fsi.exe, the F# Interactive executable.\nThis file does not exist:\n\n%s\n"
killingProcessRaisedException,"Killing process raised exception:\n%s"
sessionIsNotDebugFriendly,"The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings?"
doNotShowWarningInFuture,"Don't show this warning again"
sessionInitialMessage,"Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script."
sessionInitialMessage,"Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script."
......@@ -194,14 +194,18 @@ type internal FsiToolWindow() as this =
let history = HistoryBuffer()
let sessions = Session.FsiSessions()
do fsiLangService.Sessions <- sessions
let writeTextAndScroll (str:string) =
let writeText scroll (str:string) =
if str <> null && textLines <> null then
lock textLines (fun () ->
textStream.DirectWrite(fixServerPrompt str)
setScrollToEndOfBuffer() // I'm not convinced that users want jump to end on output.
) // IP sample did it. Previously, VFSI did not.
// What if there is scrolling output on a timer and a user wants to look over it??
// Maybe, if already at the end, then stay at the end?
if scroll then
setScrollToEndOfBuffer()
)
let writeTextAndScroll (str:string) = writeText true str
let writeTextNoScroll (str:string) = writeText false str
// Merge stdout/stderr events prior to buffering. Paired with StdOut/StdErr keys so we can split them afterwards.
let responseE = Observable.merge (Observable.map (pair StdOut) sessions.Output) (Observable.map (pair StdErr) sessions.Error)
......@@ -219,21 +223,22 @@ type internal FsiToolWindow() as this =
| StdErr,strs -> writeTextAndScroll (String.concat Environment.NewLine strs) // later: hence keep them split.
do responseBufferE.Add(fun keyStrings -> let keyChunks : (Response * string list) list = chunkKeyValues keyStrings
List.iter writeKeyChunk keyChunks)
let showInitialMessage scroll =
writeText scroll ((VFSIstrings.SR.sessionInitialMessage())+Environment.NewLine)
// Write message on a session termination. Should be called on Gui thread.
let recordTermination () =
if not sessions.Alive then // check is likely redundant
synchronizationContext.Post(
System.Threading.SendOrPostCallback(
fun _ -> writeTextAndScroll ((VFSIstrings.SR.sessionTerminationDetected())+Environment.NewLine)
fun _ ->
writeTextAndScroll ((VFSIstrings.SR.sessionTerminationDetected())+Environment.NewLine)
showInitialMessage(true)
), null)
do sessions.Exited.Add(fun _ -> recordTermination())
let showInitialMessage() =
writeTextAndScroll ((VFSIstrings.SR.sessionInitialMessage())+Environment.NewLine)
do showInitialMessage()
do showInitialMessage(false)
let clearUndoStack (textLines:IVsTextLines) = // Clear the UNDO stack.
let undoManager = textLines.GetUndoManager() |> throwOnFailure1
......@@ -312,7 +317,8 @@ type internal FsiToolWindow() as this =
let supportWhenInInputArea (sender:obj) (args:EventArgs) =
let command = sender :?> MenuCommand
if null <> command then // are these null checks needed?
command.Supported <- not source.IsCompletorActive && isCurrentPositionInInputArea()
let enabled = not source.IsCompletorActive && isCurrentPositionInInputArea()
command.Supported <- enabled
/// Support command except when completion is active.
let supportUnlessCompleting (sender:obj) (args:EventArgs) =
......@@ -328,28 +334,40 @@ type internal FsiToolWindow() as this =
let supportWhenAtStartOfInputArea (sender:obj) (e:EventArgs) =
let command = sender :?> MenuCommand
if command <> null then
command.Supported <- isCurrentPositionAtStartOfInputArea()
let enabled = isCurrentPositionAtStartOfInputArea()
command.Enabled <- enabled
command.Supported <- enabled
/// Support when at the start of the input area AND no-selection (e.g. to enable NoAction on BACKSPACE).
let supportWhenAtStartOfInputAreaAndNoSelection (sender:obj) (e:EventArgs) =
let command = sender :?> MenuCommand
if command <> null then
command.Supported <- isCurrentPositionAtStartOfInputArea() && not (haveTextViewSelection())
let enabled = isCurrentPositionAtStartOfInputArea() && not (haveTextViewSelection())
command.Enabled <- enabled
command.Supported <- enabled
let supportWhenSelectionIntersectsWithReadonlyOrNoSelection (sender:obj) (_:EventArgs) =
let command = sender :?> MenuCommand
if command <> null then
command.Supported <- isSelectionIntersectsWithReadonly() || not (haveTextViewSelection())
let enabled = isSelectionIntersectsWithReadonly() || not (haveTextViewSelection())
command.Enabled <- enabled
command.Supported <- enabled
let supportWhenInterruptSupported (sender:obj) (_:EventArgs) =
let visibleWhenInterruptSupported (sender:obj) (_:EventArgs) =
let command = sender :?> MenuCommand
if command <> null then
command.Supported <- sessions.Alive && sessions.SupportsInterrupt
let enabled = sessions.Alive && sessions.SupportsInterrupt
command.Supported <- enabled
command.Enabled <- enabled
command.Visible <- enabled
let supportWhenSessionAlive (sender:obj) (_:EventArgs) =
let visibleWhenSessionAlive (sender:obj) (_:EventArgs) =
let command = sender :?> MenuCommand
if command <> null then
command.Supported <- sessions.Alive
let enabled = sessions.Alive
command.Supported <- enabled
command.Enabled <- enabled
command.Visible <- enabled
// NOTE: On* are command handlers.
......@@ -451,6 +469,11 @@ type internal FsiToolWindow() as this =
| Some _ -> FsiDebuggerState.AttachedToFSI, debuggedFsi
| None -> FsiDebuggerState.AttachedNotToFSI, None
let visibleWhenDebugAttachedFSIProcess (sender:obj) (_:EventArgs) =
let command = sender :?> MenuCommand
if command <> null then
command.Visible <- fst (getDebuggerState ()) = FsiDebuggerState.AttachedToFSI
let getDebugAttachedFSIProcess () =
match getDebuggerState () with
| FsiDebuggerState.AttachedToFSI, opt -> opt
......@@ -522,7 +545,7 @@ type internal FsiToolWindow() as this =
let onQuitProcess (sender:obj) (args:EventArgs) =
sessions.Kill()
showInitialMessage()
showInitialMessage(true)
let sendTextToFSI text =
try
......@@ -694,11 +717,11 @@ type internal FsiToolWindow() as this =
addCommand guidVSStd97CmdID (int32 VSStd97CmdID.Cut) onCutDoCopy (Some supportWhenSelectionIntersectsWithReadonlyOrNoSelection)
addCommand guidVSStd97CmdID (int32 VSStd97CmdID.ClearPane) onClearPane None
addCommand guidVSStd2KCmdID (int32 VSStd2KCmdID.SHOWCONTEXTMENU) showContextMenu None
addCommand Guids.guidInteractiveCommands Guids.cmdIDSessionInterrupt onInterrupt (Some supportWhenInterruptSupported)
addCommand Guids.guidInteractiveCommands Guids.cmdIDSessionRestart (onRestart null) (Some supportWhenSessionAlive)
addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDAttachDebugger onAttachDebugger (Some supportWhenSessionAlive)
addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDDetachDebugger onDetachDebugger None
addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDQuitProcess onQuitProcess None
addCommand Guids.guidInteractiveCommands Guids.cmdIDSessionInterrupt onInterrupt (Some visibleWhenInterruptSupported)
addCommand Guids.guidInteractiveCommands Guids.cmdIDSessionRestart (onRestart null) (Some visibleWhenSessionAlive)
addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDAttachDebugger onAttachDebugger (Some visibleWhenSessionAlive)
addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDDetachDebugger onDetachDebugger (Some visibleWhenDebugAttachedFSIProcess)
addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDQuitProcess onQuitProcess (Some visibleWhenSessionAlive)
addCommand Guids.guidInteractiveShell Guids.cmdIDSendSelection onMLSendSelection None
addCommand Guids.guidInteractiveShell Guids.cmdIDSendLine onMLSendLine None
......
......@@ -234,7 +234,7 @@ let fsiStartInfo channelName sourceFile =
|> addStringOption true "fsi-server-output-codepage" outCP
|> addStringOption true "fsi-server-input-codepage" inCP
|> addStringOption true "fsi-server-lcid" System.Threading.Thread.CurrentThread.CurrentUICulture.LCID
//|> addStringOption true "fsi-initial-file" sourceFile
//|> addStringOption true "fsi-server-association-file" sourceFile
|> addStringOption true "fsi-server" channelName
|> (fun s -> s + sprintf " %s" SessionsProperties.fsiArgs)
|> addBoolOption fsiSupportsShadowcopy "shadowcopyreferences" SessionsProperties.fsiShadowCopy
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Zjistilo se ukončení relace. Pokračovat můžete stisknutím klávesy Enter.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Zjistilo se ukončení relace. Pokračovat můžete stisknutím klávesy Enter.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Es wurde eine Beendigung der Sitzung erkannt. Drücken Sie die EINGABETASTE, um neu zu starten.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Es wurde eine Beendigung der Sitzung erkannt. Drücken Sie die EINGABETASTE, um neu zu starten.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Se detectó una terminación de sesión. Presione Entrar para reiniciar.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Se detectó una terminación de sesión. Presione Entrar para reiniciar.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Fin de session détectée. Appuyez sur Entrée pour redémarrer.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Fin de session détectée. Appuyez sur Entrée pour redémarrer.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Rilevata terminazione di sessione. Premere INVIO per riavviare.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Rilevata terminazione di sessione. Premere INVIO per riavviare.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">セッションの終了が検出されました。再開する場合は Enter キーを押してください。</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">セッションの終了が検出されました。再開する場合は Enter キーを押してください。</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">세션 종료가 검색되었습니다. 다시 시작하려면 &lt;Enter&gt; 키를 누르세요.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">세션 종료가 검색되었습니다. 다시 시작하려면 &lt;Enter&gt; 키를 누르세요.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Wykryto zakończenie sesji. Naciśnij klawisz Enter, aby uruchomić ją ponownie.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Wykryto zakończenie sesji. Naciśnij klawisz Enter, aby uruchomić ją ponownie.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Encerramento da sessão detectado. Pressione a tecla Enter para reiniciar.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Encerramento da sessão detectado. Pressione a tecla Enter para reiniciar.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Обнаружено прекращение сеанса. Нажмите клавишу ВВОД для перезапуска.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Обнаружено прекращение сеанса. Нажмите клавишу ВВОД для перезапуска.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">Oturum sonlandırma algılandı. Yeniden başlatmak için Enter'a basın.</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">Oturum sonlandırma algılandı. Yeniden başlatmak için Enter'a basın.</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">检测到会话已终止。请按 Enter 重新启动会话。</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">检测到会话已终止。请按 Enter 重新启动会话。</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
......@@ -23,13 +23,13 @@
<note />
</trans-unit>
<trans-unit id="sessionInitialMessage">
<source>Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code in F# Interactive, use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. Or press Enter to start an F# Interactive session not associated to any script.</target>
<source>Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</source>
<target state="new">Welcome to F# Interactive. To execute code, either\n 1. 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use settings associated with that script.\n 2. Press 'Enter' to start an F# Interactive process not associated to any script.</target>
<note />
</trans-unit>
<trans-unit id="sessionTerminationDetected">
<source>Session termination detected. Press Enter to restart.</source>
<target state="translated">偵測到工作階段終止。請按 Enter 重新啟動。</target>
<source>Session termination detected.</source>
<target state="needs-review-translation">偵測到工作階段終止。請按 Enter 重新啟動。</target>
<note />
</trans-unit>
<trans-unit id="fsharpInteractive">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册