diff --git a/FSharp.Profiles.props b/FSharp.Profiles.props
index c9e761c997a..65cfa205e64 100644
--- a/FSharp.Profiles.props
+++ b/FSharp.Profiles.props
@@ -5,16 +5,12 @@
$(DefineConstants);CROSS_PLATFORM_COMPILER$(DefineConstants);ENABLE_MONO_SUPPORT
- $(DefineConstants);BE_SECURITY_TRANSPARENT$(DefineConstants);NETSTANDARD$(DefineConstants);FX_NO_APP_DOMAINS$(DefineConstants);FX_NO_CORHOST_SIGNER
- $(DefineConstants);FX_NO_EVENTWAITHANDLE_IDISPOSABLE
- $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS
- $(DefineConstants);FX_NO_PARAMETERIZED_THREAD_START$(DefineConstants);FX_NO_PDB_READER$(DefineConstants);FX_NO_PDB_WRITER$(DefineConstants);FX_NO_SYMBOLSTORE
diff --git a/NuGet.config b/NuGet.config
index ef069a5bdf3..26edd0d796c 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -7,6 +7,7 @@
+
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index cd106ffbc2f..ba0daf34b56 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -340,6 +340,6 @@ stages:
- template: eng/release/insert-into-vs.yml
parameters:
componentBranchName: refs/heads/release/dev16.4
- insertTargetBranch: master
+ insertTargetBranch: rel/d16.4
insertTeamEmail: fsharpteam@microsoft.com
insertTeamName: 'F#'
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 0288911f9e9..6e4ca65dcf2 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -3,9 +3,9 @@
-
+ https://github.com/dotnet/arcade
- 9d34fd008e754e1ada35c8b6bc3694e7a90b4ed7
+ 64e95735b49d37b6cf908cfa5228ff65bee6dfff
diff --git a/eng/Versions.props b/eng/Versions.props
index caa59fe65ea..c68c646708e 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -23,14 +23,14 @@
$(FSCorePackageVersion)-$(PreReleaseVersionLabel).*
- 10.6
+ 10.7$(FSPackageMajorVersion).0$(FSPackageVersion)$(FSPackageVersion).016
- 3
+ 4$(VSMajorVersion).0$(VSMajorVersion).$(VSMinorVersion).0$(VSAssemblyVersionPrefix).0
@@ -74,7 +74,7 @@
4.3.04.3.04.3.0
- 4.5.2
+ 4.5.34.3.04.3.04.3.0
@@ -89,6 +89,7 @@
4.3.04.3.04.3.0
+ 4.11.04.3.04.3.04.5.0
@@ -102,7 +103,7 @@
2.0.17$(RoslynVersion)
- 16.0.461
+ 16.4$(MicrosoftBuildOverallPackagesVersion)$(MicrosoftBuildOverallPackagesVersion)$(MicrosoftBuildOverallPackagesVersion)
@@ -155,7 +156,7 @@
16.1.28917.18115.3.589.0.30729
- 16.0.2264
+ 16.3.209912.0.47.0.48.0.4
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 6662e4bc1ec..a5a1e711d79 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -16,7 +16,7 @@
# condition: eq(variables['Agent.OS'], 'Windows_NT')
# inputs:
# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
-# arguments: -ConfigFile ${Env:BUILD_SOURCESDIRECTORY}/NuGet.config -Password $Env:Token
+# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
# env:
# Token: $(dn-bot-dnceng-artifact-feeds-rw)
@@ -94,41 +94,48 @@ function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Password) {
}
}
-try {
- if (!(Test-Path $ConfigFile -PathType Leaf)) {
- Write-PipelineTelemetryError -Category 'Build' -Message "Couldn't find the file NuGet config file: $ConfigFile"
+if (!(Test-Path $ConfigFile -PathType Leaf)) {
+ Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile"
+ ExitWithExitCode 1
+}
+
+if (!$Password) {
+ Write-PipelineTelemetryError -Category 'Build' -Message 'Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. Please supply a valid PAT'
ExitWithExitCode 1
- }
+}
- # Load NuGet.config
- $doc = New-Object System.Xml.XmlDocument
- $filename = (Get-Item $ConfigFile).FullName
- $doc.Load($filename)
+# Load NuGet.config
+$doc = New-Object System.Xml.XmlDocument
+$filename = (Get-Item $ConfigFile).FullName
+$doc.Load($filename)
- # Get reference to or create one if none exist already
- $sources = $doc.DocumentElement.SelectSingleNode("packageSources")
- if ($sources -eq $null) {
- $sources = $doc.CreateElement("packageSources")
- $doc.DocumentElement.AppendChild($sources) | Out-Null
- }
+# Get reference to or create one if none exist already
+$sources = $doc.DocumentElement.SelectSingleNode("packageSources")
+if ($sources -eq $null) {
+ $sources = $doc.CreateElement("packageSources")
+ $doc.DocumentElement.AppendChild($sources) | Out-Null
+}
- # Looks for a node. Create it if none is found.
- $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials")
- if ($creds -eq $null) {
- $creds = $doc.CreateElement("packageSourceCredentials")
- $doc.DocumentElement.AppendChild($creds) | Out-Null
- }
+# Looks for a node. Create it if none is found.
+$creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials")
+if ($creds -eq $null) {
+ $creds = $doc.CreateElement("packageSourceCredentials")
+ $doc.DocumentElement.AppendChild($creds) | Out-Null
+}
- # Insert credential nodes for Maestro's private feeds
- InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password
+# Insert credential nodes for Maestro's private feeds
+InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password
+$dotnet3Source = $sources.SelectSingleNode("add[@key='dotnet3']")
+if ($dotnet3Source -ne $null) {
AddPackageSource -Sources $sources -SourceName "dotnet3-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
-
- $doc.Save($filename)
}
-catch {
- Write-Host $_.ScriptStackTrace
- Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_
- ExitWithExitCode 1
+
+$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
+if ($dotnet31Source -ne $null) {
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
+ AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
}
+
+$doc.Save($filename)
diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh
index 55ad70e3663..7d6fef27fe4 100644
--- a/eng/common/SetupNugetSources.sh
+++ b/eng/common/SetupNugetSources.sh
@@ -17,7 +17,7 @@
# displayName: Setup Private Feeds Credentials
# inputs:
# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
-# arguments: $BUILD_SOURCESDIRECTORY/NuGet.config $Token
+# arguments: $(Build.SourcesDirectory)/NuGet.config $Token
# condition: ne(variables['Agent.OS'], 'Windows_NT')
# env:
# Token: $(dn-bot-dnceng-artifact-feeds-rw)
@@ -42,7 +42,12 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
. "$scriptroot/tools.sh"
if [ ! -f "$ConfigFile" ]; then
- Write-PipelineTelemetryError -Category 'Build' -Message "Couldn't find the file NuGet config file: $ConfigFile"
+ Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile"
+ ExitWithExitCode 1
+fi
+
+if [ -z "$CredToken" ]; then
+ Write-PipelineTelemetryError -category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. Please supply a valid PAT"
ExitWithExitCode 1
fi
@@ -52,7 +57,7 @@ if [[ `uname -s` == "Darwin" ]]; then
fi
# Ensure there is a ... section.
-grep -i "" $ConfigFile
+grep -i "" $ConfigFile
if [ "$?" != "0" ]; then
echo "Adding ... section."
ConfigNodeHeader=""
@@ -62,7 +67,7 @@ if [ "$?" != "0" ]; then
fi
# Ensure there is a ... section.
-grep -i "" $ConfigFile
+grep -i "" $ConfigFile
if [ "$?" != "0" ]; then
echo "Adding ... section."
@@ -72,37 +77,64 @@ if [ "$?" != "0" ]; then
sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" NuGet.config
fi
-# Ensure dotnet3-internal and dotnet3-internal-transport is in the packageSources
-grep -i "" $ConfigFile
-if [ "$?" != "0" ]; then
- echo "Adding dotnet3-internal to the packageSources."
+PackageSources=()
- PackageSourcesNodeFooter=""
- PackageSourceTemplate="${TB}"
+# Ensure dotnet3-internal and dotnet3-internal-transport are in the packageSources if the public dotnet3 feeds are present
+grep -i "" $ConfigFile
+ if [ "$?" != "0" ]; then
+ echo "Adding dotnet3-internal to the packageSources."
+ PackageSourcesNodeFooter=""
+ PackageSourceTemplate="${TB}"
+
+ sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ fi
+ PackageSources+=('dotnet3-internal')
+
+ grep -i ""
- sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" NuGet.config
+ sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ fi
+ PackageSources+=('dotnet3-internal-transport')
fi
-# Ensure dotnet3-internal and dotnet3-internal-transport is in the packageSources
-grep -i "" $ConfigFile
-if [ "$?" != "0" ]; then
- echo "Adding dotnet3-internal-transport to the packageSources."
+# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present
+grep -i ""
- PackageSourcesNodeFooter=""
- PackageSourceTemplate="${TB}"
+ sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ fi
+ PackageSources+=('dotnet3.1-internal')
+
+ grep -i "" $ConfigFile
+ if [ "$?" != "0" ]; then
+ echo "Adding dotnet3.1-internal-transport to the packageSources."
+ PackageSourcesNodeFooter=""
+ PackageSourceTemplate="${TB}"
- sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" NuGet.config
+ sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ fi
+ PackageSources+=('dotnet3.1-internal-transport')
fi
# I want things split line by line
PrevIFS=$IFS
IFS=$'\n'
-PackageSources=$(grep -oh '"darc-int-[^"]*"' $ConfigFile | tr -d '"')
+PackageSources+="$IFS"
+PackageSources+=$(grep -oh '"darc-int-[^"]*"' $ConfigFile | tr -d '"')
IFS=$PrevIFS
-PackageSources+=('dotnet3-internal')
-PackageSources+=('dotnet3-internal-transport')
-
for FeedName in ${PackageSources[@]} ; do
# Check if there is no existing credential for this FeedName
grep -i "<$FeedName>" $ConfigFile
@@ -112,6 +144,6 @@ for FeedName in ${PackageSources[@]} ; do
PackageSourceCredentialsNodeFooter=""
NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}$FeedName>"
- sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" NuGet.config
+ sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile
fi
done
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index 0fd4d9c7f23..88814514d82 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -62,6 +62,8 @@ function Print-Usage() {
Write-Host "The above arguments can be shortened as much as to be unambiguous (e.g. -co for configuration, -t for test, etc.)."
}
+. $PSScriptRoot\tools.ps1
+
function InitializeCustomToolset {
if (-not $restore) {
return
@@ -113,8 +115,6 @@ function Build {
}
try {
- . $PSScriptRoot\tools.ps1
-
if ($clean) {
if (Test-Path $ArtifactsDir) {
Remove-Item -Recurse -Force $ArtifactsDir
@@ -122,12 +122,7 @@ try {
}
exit 0
}
-
- if ((Test-Path variable:LastExitCode) -And ($LastExitCode -ne 0)) {
- Write-PipelineTelemetryError -Category 'InitializeToolset' -Message 'Eng/common/tools.ps1 returned a non-zero exit code.'
- ExitWithExitCode $LastExitCode
- }
-
+
if ($help -or (($null -ne $properties) -and ($properties.Contains('/help') -or $properties.Contains('/?')))) {
Print-Usage
exit 0
diff --git a/eng/common/init-tools-native.ps1 b/eng/common/init-tools-native.ps1
index f4409f0835a..db830c00a6f 100644
--- a/eng/common/init-tools-native.ps1
+++ b/eng/common/init-tools-native.ps1
@@ -113,14 +113,16 @@ try {
}
$toolInstallationFailure = $true
} else {
- Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message $errMsg
+ # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482
+ Write-Host $errMsg
exit 1
}
}
}
if ((Get-Variable 'toolInstallationFailure' -ErrorAction 'SilentlyContinue') -and $toolInstallationFailure) {
- Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message 'Native tools bootstrap failed'
+ # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482
+ Write-Host 'Native tools bootstrap failed'
exit 1
}
}
diff --git a/eng/common/native/install-tool.ps1 b/eng/common/native/install-tool.ps1
index ca180d03ba1..f397e1c75d4 100644
--- a/eng/common/native/install-tool.ps1
+++ b/eng/common/native/install-tool.ps1
@@ -105,7 +105,7 @@ try {
Write-Error "There are multiple copies of $ToolName in $($ToolInstallDirectory): `n$(@($ToolFilePath | out-string))"
exit 1
} elseif (@($ToolFilePath).Length -Lt 1) {
- Write-Error "$ToolName was not found in $ToolFilePath."
+ Write-Host "$ToolName was not found in $ToolFilePath."
exit 1
}
diff --git a/eng/common/pipeline-logging-functions.ps1 b/eng/common/pipeline-logging-functions.ps1
index e0656185886..a3e1317ad43 100644
--- a/eng/common/pipeline-logging-functions.ps1
+++ b/eng/common/pipeline-logging-functions.ps1
@@ -85,7 +85,7 @@ function Write-PipelineTaskError {
[switch]$AsOutput,
[bool]$IsMultiJobVariable=$true)
- if(-Not (Test-Path variable:ci) -Or !$ci) {
+ if((Test-Path variable:ci) -And $ci) {
Write-LoggingCommand -Area 'task' -Event 'setvariable' -Data $Value -Properties @{
'variable' = $Name
'isSecret' = $Secret
@@ -101,7 +101,7 @@ function Write-PipelineTaskError {
[string]$Path,
[switch]$AsOutput)
- if(-Not (Test-Path variable:ci) -Or !$ci) {
+ if((Test-Path variable:ci) -And $ci) {
Write-LoggingCommand -Area 'task' -Event 'prependpath' -Data $Path -AsOutput:$AsOutput
}
}
@@ -237,4 +237,4 @@ function Write-LogIssue {
}
Write-Host $command -ForegroundColor $foregroundColor -BackgroundColor $backgroundColor
-}
\ No newline at end of file
+}
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index d762c9f044a..09c3a3325ea 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -98,7 +98,7 @@ function Exec-Process([string]$command, [string]$commandArgs) {
}
}
-function InitializeDotNetCli([bool]$install) {
+function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) {
if (Test-Path variable:global:_DotNetInstallDir) {
return $global:_DotNetInstallDir
}
@@ -146,6 +146,22 @@ function InitializeDotNetCli([bool]$install) {
}
$env:DOTNET_INSTALL_DIR = $dotnetRoot
+
+ if ($createSdkLocationFile) {
+ # Create a temporary file under the toolset dir and rename it to sdk.txt to avoid races.
+ do {
+ $sdkCacheFileTemp = Join-Path $ToolsetDir $([System.IO.Path]::GetRandomFileName())
+ }
+ until (!(Test-Path $sdkCacheFileTemp))
+ Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot
+
+ try {
+ Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt'
+ } catch {
+ # Somebody beat us
+ Remove-Item -Path $sdkCacheFileTemp
+ }
+ }
}
# Add dotnet to PATH. This prevents any bare invocation of dotnet in custom
@@ -216,7 +232,10 @@ function InstallDotNet([string] $dotnetRoot,
}
catch {
Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from custom location '$runtimeSourceFeed'."
+ ExitWithExitCode 1
}
+ } else {
+ ExitWithExitCode 1
}
}
}
@@ -274,8 +293,11 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
$vsMajorVersion = $vsMinVersion.Major
$xcopyMSBuildVersion = "$vsMajorVersion.$($vsMinVersion.Minor).0-alpha"
}
-
- $vsInstallDir = InitializeXCopyMSBuild $xcopyMSBuildVersion $install
+
+ $vsInstallDir = $null
+ if ($xcopyMSBuildVersion.Trim() -ine "none") {
+ $vsInstallDir = InitializeXCopyMSBuild $xcopyMSBuildVersion $install
+ }
if ($vsInstallDir -eq $null) {
throw 'Unable to find Visual Studio that has required version and components installed'
}
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index f58db5e25d1..e071af4ee49 100755
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -211,6 +211,8 @@ function InstallDotNet {
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from custom location '$runtimeSourceFeed' (exit code '$exit_code')."
ExitWithExitCode $exit_code
}
+ else
+ ExitWithExitCode $exit_code
fi
fi
}
diff --git a/global.json b/global.json
index 707f7b7357e..7baf11e8275 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"tools": {
- "dotnet": "3.0.100",
+ "dotnet": "3.1.100",
"vs": {
"version": "16.3",
"components": [
@@ -10,7 +10,7 @@
}
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19602.4",
+ "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19614.1",
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2"
}
}
diff --git a/src/absil/illib.fs b/src/absil/illib.fs
index 70e67a0815d..0a7d471e141 100644
--- a/src/absil/illib.fs
+++ b/src/absil/illib.fs
@@ -1361,7 +1361,45 @@ module Shim =
directory.Contains("packages\\") ||
directory.Contains("lib/mono/")
- let mutable FileSystem = DefaultFileSystem() :> IFileSystem
+ let mutable FileSystem = DefaultFileSystem() :> IFileSystem
+
+ // The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure
+ // uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold
+ // plus 1 second. Once past the threshold the incremental builder will be able to retry asynchronously based
+ // on plain old timestamp checking.
+ //
+ // The sleep time of 50ms is chosen so that we can respond to the user more quickly for Intellisense operations.
+ //
+ // This is not run on the UI thread for VS but it is on a thread that must be stopped before Intellisense
+ // can return any result except for pending.
+ let private retryDelayMilliseconds = 50
+ let private numRetries = 60
+
+ let private getReader (filename, codePage: int option, retryLocked: bool) =
+ // Retry multiple times since other processes may be writing to this file.
+ let rec getSource retryNumber =
+ try
+ // Use the .NET functionality to auto-detect the unicode encoding
+ let stream = FileSystem.FileStreamReadShim(filename)
+ match codePage with
+ | None -> new StreamReader(stream,true)
+ | Some n -> new StreamReader(stream,System.Text.Encoding.GetEncoding(n))
+ with
+ // We can get here if the file is locked--like when VS is saving a file--we don't have direct
+ // access to the HRESULT to see that this is EONOACCESS.
+ | :? System.IO.IOException as err when retryLocked && err.GetType() = typeof ->
+ // This second check is to make sure the exception is exactly IOException and none of these for example:
+ // DirectoryNotFoundException
+ // EndOfStreamException
+ // FileNotFoundException
+ // FileLoadException
+ // PathTooLongException
+ if retryNumber < numRetries then
+ System.Threading.Thread.Sleep (retryDelayMilliseconds)
+ getSource (retryNumber + 1)
+ else
+ reraise()
+ getSource 0
type File with
@@ -1374,3 +1412,6 @@ module Shim =
n <- n + stream.Read(buffer, n, len-n)
buffer
+ static member OpenReaderAndRetry (filename, codepage, retryLocked) =
+ getReader (filename, codepage, retryLocked)
+
diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs
index cc5c865515a..de201333a0d 100644
--- a/src/absil/ilread.fs
+++ b/src/absil/ilread.fs
@@ -14,6 +14,7 @@ open System.Collections.Concurrent
open System.Collections.Generic
open System.Diagnostics
open System.IO
+open System.IO.MemoryMappedFiles
open System.Runtime.InteropServices
open System.Text
open Internal.Utilities
@@ -184,124 +185,6 @@ type RawMemoryFile(fileName: string, obj: obj, addr: nativeint, length: int) =
interface BinaryFile with
override __.GetView() = view :>_
-/// Read from memory mapped files.
-module MemoryMapping =
-
- type HANDLE = nativeint
- type ADDR = nativeint
- type SIZE_T = nativeint
-
- []
- extern bool CloseHandle (HANDLE _handler)
-
- []
- extern HANDLE CreateFile (string _lpFileName,
- int _dwDesiredAccess,
- int _dwShareMode,
- HANDLE _lpSecurityAttributes,
- int _dwCreationDisposition,
- int _dwFlagsAndAttributes,
- HANDLE _hTemplateFile)
-
- []
- extern HANDLE CreateFileMapping (HANDLE _hFile,
- HANDLE _lpAttributes,
- int _flProtect,
- int _dwMaximumSizeLow,
- int _dwMaximumSizeHigh,
- string _lpName)
-
- []
- extern ADDR MapViewOfFile (HANDLE _hFileMappingObject,
- int _dwDesiredAccess,
- int _dwFileOffsetHigh,
- int _dwFileOffsetLow,
- SIZE_T _dwNumBytesToMap)
-
- []
- extern bool UnmapViewOfFile (ADDR _lpBaseAddress)
-
- let INVALID_HANDLE = new IntPtr(-1)
- let MAP_READ = 0x0004
- let GENERIC_READ = 0x80000000
- let NULL_HANDLE = IntPtr.Zero
- let FILE_SHARE_NONE = 0x0000
- let FILE_SHARE_READ = 0x0001
- let FILE_SHARE_WRITE = 0x0002
- let FILE_SHARE_READ_WRITE = 0x0003
- let CREATE_ALWAYS = 0x0002
- let OPEN_EXISTING = 0x0003
- let OPEN_ALWAYS = 0x0004
-
-/// A view over a raw pointer to memory given by a memory mapped file.
-/// NOTE: we should do more checking of validity here.
-type MemoryMapView(start: nativeint) =
- inherit BinaryView()
-
- override m.ReadByte i =
- Marshal.ReadByte(start + nativeint i)
-
- override m.ReadBytes i n =
- let res = Bytes.zeroCreate n
- Marshal.Copy(start + nativeint i, res, 0, n)
- res
-
- override m.ReadInt32 i =
- Marshal.ReadInt32(start + nativeint i)
-
- override m.ReadUInt16 i =
- uint16(Marshal.ReadInt16(start + nativeint i))
-
- override m.CountUtf8String i =
- let pStart = start + nativeint i
- let mutable p = start
- while Marshal.ReadByte p <> 0uy do
- p <- p + 1n
- int (p - pStart)
-
- override m.ReadUTF8String i =
- let n = m.CountUtf8String i
- System.Runtime.InteropServices.Marshal.PtrToStringAnsi(start + nativeint i, n)
-
-/// Memory maps a file and creates a single view over the entirety of its contents. The
-/// lock on the file is only released when the object is disposed.
-/// For memory mapping we currently take one view and never release it.
-[]
-type MemoryMapFile(fileName: string, view: MemoryMapView, hMap: MemoryMapping.HANDLE, hView: nativeint) =
-
- do stats.memoryMapFileOpenedCount <- stats.memoryMapFileOpenedCount + 1
- let mutable closed = false
- static member Create fileName =
- let hFile = MemoryMapping.CreateFile (fileName, MemoryMapping.GENERIC_READ, MemoryMapping.FILE_SHARE_READ_WRITE, IntPtr.Zero, MemoryMapping.OPEN_EXISTING, 0, IntPtr.Zero )
- if hFile.Equals MemoryMapping.INVALID_HANDLE then
- failwithf "CreateFile(0x%08x)" (Marshal.GetHRForLastWin32Error())
- let protection = 0x00000002
- let hMap = MemoryMapping.CreateFileMapping (hFile, IntPtr.Zero, protection, 0, 0, null )
- ignore(MemoryMapping.CloseHandle hFile)
- if hMap.Equals MemoryMapping.NULL_HANDLE then
- failwithf "CreateFileMapping(0x%08x)" (Marshal.GetHRForLastWin32Error())
-
- let hView = MemoryMapping.MapViewOfFile (hMap, MemoryMapping.MAP_READ, 0, 0, 0n)
-
- if hView.Equals IntPtr.Zero then
- failwithf "MapViewOfFile(0x%08x)" (Marshal.GetHRForLastWin32Error())
-
- let view = MemoryMapView hView
-
- MemoryMapFile(fileName, view, hMap, hView)
-
- member __.FileName = fileName
-
- member __.Close() =
- stats.memoryMapFileClosedCount <- stats.memoryMapFileClosedCount + 1
- if not closed then
- closed <- true
- MemoryMapping.UnmapViewOfFile hView |> ignore
- MemoryMapping.CloseHandle hMap |> ignore
-
- interface BinaryFile with
- override __.GetView() = (view :> BinaryView)
-
/// Read file from memory blocks
type ByteView(bytes: byte[]) =
inherit BinaryView()
@@ -3989,19 +3872,24 @@ let createByteFileChunk opts fileName chunk =
| Some (start, length) -> File.ReadBinaryChunk(fileName, start, length)
ByteFile(fileName, bytes) :> BinaryFile
-let tryMemoryMapWholeFile opts fileName =
- let file =
- try
- MemoryMapFile.Create fileName :> BinaryFile
- with _ ->
- createByteFileChunk opts fileName None
- let disposer =
- { new IDisposable with
- member __.Dispose() =
- match file with
- | :? MemoryMapFile as m -> m.Close() // Note that the PE file reader is not required after this point for metadata-only reading
- | _ -> () }
- disposer, file
+let createMemoryMapFile fileName =
+ let mmf, accessor, length =
+ let fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
+ let length = fileStream.Length
+ let mmf = MemoryMappedFile.CreateFromFile(fileStream, null, length, MemoryMappedFileAccess.Read, HandleInheritability.None, leaveOpen=false)
+ mmf, mmf.CreateViewAccessor(0L, fileStream.Length, MemoryMappedFileAccess.Read), length
+ let safeHolder =
+ { new obj() with
+ override x.Finalize() =
+ (x :?> IDisposable).Dispose()
+ interface IDisposable with
+ member x.Dispose() =
+ GC.SuppressFinalize x
+ accessor.Dispose()
+ mmf.Dispose()
+ stats.memoryMapFileClosedCount <- stats.memoryMapFileClosedCount + 1 }
+ stats.memoryMapFileOpenedCount <- stats.memoryMapFileOpenedCount + 1
+ safeHolder, RawMemoryFile(fileName, safeHolder, accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length) :> BinaryFile
let OpenILModuleReaderFromBytes fileName bytes opts =
let pefile = ByteFile(fileName, bytes) :> BinaryFile
@@ -4067,7 +3955,7 @@ let OpenILModuleReader fileName opts =
// For metadata-only, always use a temporary, short-lived PE file reader, preferably over a memory mapped file.
// Then use the metadata blob as the long-lived memory resource.
- let disposer, pefileEager = tryMemoryMapWholeFile opts fullPath
+ let disposer, pefileEager = createMemoryMapFile fullPath
use _disposer = disposer
let (metadataPhysLoc, metadataSize, peinfo, pectxtEager, pevEager, _pdb) = openPEFileReader (fullPath, pefileEager, None, false)
let mdfile =
@@ -4106,7 +3994,7 @@ let OpenILModuleReader fileName opts =
// still use an in-memory ByteFile
let _disposer, pefile =
if alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath then
- tryMemoryMapWholeFile opts fullPath
+ createMemoryMapFile fullPath
else
let pefile = createByteFileChunk opts fullPath None
let disposer = { new IDisposable with member __.Dispose() = () }
diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs
index ab20bfcf139..3af0e04e202 100644
--- a/src/fsharp/CompileOps.fs
+++ b/src/fsharp/CompileOps.fs
@@ -3436,7 +3436,7 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp
if verbose then dprintn ("Parsed "+shortFilename)
Some input
with e -> (* errorR(Failure("parse failed")); *) errorRecovery e rangeStartup; None
-
+
let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) =
try
@@ -3445,7 +3445,8 @@ let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompil
if not(FileSystem.SafeExists filename) then
error(Error(FSComp.SR.buildCouldNotFindSourceFile filename, rangeStartup))
let isFeatureSupported featureId = tcConfig.langVersion.SupportsFeature featureId
- let lexbuf = UnicodeLexing.UnicodeFileAsLexbuf(isFeatureSupported, filename, tcConfig.inputCodePage, retryLocked)
+ use reader = File.OpenReaderAndRetry (filename, tcConfig.inputCodePage, retryLocked)
+ let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(isFeatureSupported, reader)
ParseOneInputLexbuf(tcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger)
else error(Error(FSComp.SR.buildInvalidSourceFileExtension(SanitizeFileName filename tcConfig.implicitIncludeDir), rangeStartup))
with e -> (* errorR(Failure("parse failed")); *) errorRecovery e rangeStartup; None
diff --git a/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuspec b/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuspec
index 4814daeb25c..e7f9bcb7da2 100644
--- a/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuspec
+++ b/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuspec
@@ -10,6 +10,7 @@
$CommonFileElements$
+
diff --git a/src/fsharp/FSharp.Core/async.fs b/src/fsharp/FSharp.Core/async.fs
index ece4bbe44e0..b6ab88a16f6 100644
--- a/src/fsharp/FSharp.Core/async.fs
+++ b/src/fsharp/FSharp.Core/async.fs
@@ -1250,31 +1250,28 @@ namespace Microsoft.FSharp.Control
|> unfake)
| Some maxDegreeOfParallelism ->
let mutable i = -1
- let worker = MakeAsync (fun _ ->
- while i < tasks.Length do
+ let rec worker (trampolineHolder : TrampolineHolder) =
+ if i < tasks.Length then
let j = Interlocked.Increment &i
if j < tasks.Length then
- let trampolineHolder = new TrampolineHolder()
- trampolineHolder.ExecuteWithTrampoline (fun () ->
- let ctxt =
+ if innerCTS.Token.IsCancellationRequested then
+ let cexn = new OperationCanceledException (innerCTS.Token)
+ recordFailure (Choice2Of2 cexn) |> unfake
+ worker trampolineHolder |> unfake
+ else
+ let taskCtxt =
AsyncActivation.Create
innerCTS.Token
trampolineHolder
- (fun res -> recordSuccess j res)
- (fun edi -> recordFailure (Choice1Of2 edi))
- (fun cexn -> recordFailure (Choice2Of2 cexn))
- tasks.[j].Invoke ctxt
- )
- |> unfake
+ (fun res -> recordSuccess j res |> unfake; worker trampolineHolder)
+ (fun edi -> recordFailure (Choice1Of2 edi) |> unfake; worker trampolineHolder)
+ (fun cexn -> recordFailure (Choice2Of2 cexn) |> unfake; worker trampolineHolder)
+ tasks.[j].Invoke taskCtxt |> unfake
fake()
- )
for x = 1 to maxDegreeOfParallelism do
- QueueAsync
- innerCTS.Token
- (fun _ -> fake())
- (fun edi -> recordFailure (Choice1Of2 edi))
- (fun cexn -> recordFailure (Choice2Of2 cexn))
- worker
+ let trampolineHolder = new TrampolineHolder()
+ trampolineHolder.QueueWorkItemWithTrampoline (fun () ->
+ worker trampolineHolder)
|> unfake
fake()))
diff --git a/src/fsharp/UnicodeLexing.fs b/src/fsharp/UnicodeLexing.fs
index c776a1f1f76..70a253da1b6 100644
--- a/src/fsharp/UnicodeLexing.fs
+++ b/src/fsharp/UnicodeLexing.fs
@@ -22,50 +22,15 @@ let FunctionAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, bufferF
let SourceTextAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, sourceText) =
LexBuffer.FromSourceText(supportsFeature, sourceText)
-// The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure
-// uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold
-// plus 1 second. Once past the threshold the incremental builder will be able to retry asynchronously based
-// on plain old timestamp checking.
-//
-// The sleep time of 50ms is chosen so that we can respond to the user more quickly for Intellisense operations.
-//
-// This is not run on the UI thread for VS but it is on a thread that must be stopped before Intellisense
-// can return any result except for pending.
-let retryDelayMilliseconds = 50
-let numRetries = 60
-
-/// Standard utility to create a Unicode LexBuffer
-///
-/// One small annoyance is that LexBuffers and not IDisposable. This means
-/// we can't just return the LexBuffer object, since the file it wraps wouldn't
-/// get closed when we're finished with the LexBuffer. Hence we return the stream,
-/// the reader and the LexBuffer. The caller should dispose the first two when done.
-let UnicodeFileAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, filename, codePage: int option, retryLocked: bool): Lexbuf =
- // Retry multiple times since other processes may be writing to this file.
- let rec getSource retryNumber =
- try
- // Use the .NET functionality to auto-detect the unicode encoding
- use stream = FileSystem.FileStreamReadShim(filename)
- use reader =
- match codePage with
- | None -> new StreamReader(stream,true)
- | Some n -> new StreamReader(stream,System.Text.Encoding.GetEncoding(n))
- reader.ReadToEnd()
- with
- // We can get here if the file is locked--like when VS is saving a file--we don't have direct
- // access to the HRESULT to see that this is EONOACCESS.
- | :? System.IO.IOException as err when retryLocked && err.GetType() = typeof ->
- // This second check is to make sure the exception is exactly IOException and none of these for example:
- // DirectoryNotFoundException
- // EndOfStreamException
- // FileNotFoundException
- // FileLoadException
- // PathTooLongException
- if retryNumber < numRetries then
- System.Threading.Thread.Sleep (retryDelayMilliseconds)
- getSource (retryNumber + 1)
- else
- reraise()
- let source = getSource 0
- let lexbuf = LexBuffer<_>.FromChars(supportsFeature, source.ToCharArray())
- lexbuf
+let StreamReaderAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, reader: StreamReader) =
+ let mutable isFinished = false
+ FunctionAsLexbuf (supportsFeature, fun (chars, start, length) ->
+ if isFinished then 0
+ else
+ let nBytesRead = reader.Read(chars, start, length)
+ if nBytesRead = 0 then
+ isFinished <- true
+ 0
+ else
+ nBytesRead
+ )
diff --git a/src/fsharp/UnicodeLexing.fsi b/src/fsharp/UnicodeLexing.fsi
index 2478c7f857b..a3f0fb8fb32 100644
--- a/src/fsharp/UnicodeLexing.fsi
+++ b/src/fsharp/UnicodeLexing.fsi
@@ -2,6 +2,7 @@
module internal FSharp.Compiler.UnicodeLexing
+open System.IO
open FSharp.Compiler.Features
open FSharp.Compiler.Text
open Microsoft.FSharp.Text
@@ -10,5 +11,7 @@ open Internal.Utilities.Text.Lexing
type Lexbuf = LexBuffer
val internal StringAsLexbuf: (Features.LanguageFeature -> bool) * string -> Lexbuf
val public FunctionAsLexbuf: (Features.LanguageFeature -> bool) * (char [] * int * int -> int) -> Lexbuf
-val public UnicodeFileAsLexbuf: (Features.LanguageFeature -> bool) * string * int option * (*retryLocked*) bool -> Lexbuf
val public SourceTextAsLexbuf: (Features.LanguageFeature -> bool) * ISourceText -> Lexbuf
+
+/// Will not dispose of the stream reader.
+val public StreamReaderAsLexbuf: (Features.LanguageFeature -> bool) * StreamReader -> Lexbuf
diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs
index c5e71384f1f..60f53b3964f 100644
--- a/src/fsharp/fsi/fsi.fs
+++ b/src/fsharp/fsi/fsi.fs
@@ -1677,8 +1677,8 @@ type internal FsiStdinLexerProvider
CreateLexerForLexBuffer (Lexhelp.stdinMockFilename, lexbuf, errorLogger)
// Create a new lexer to read an "included" script file
- member __.CreateIncludedScriptLexer (sourceFileName, errorLogger) =
- let lexbuf = UnicodeLexing.UnicodeFileAsLexbuf(isFeatureSupported, sourceFileName, tcConfigB.inputCodePage, (*retryLocked*)false)
+ member __.CreateIncludedScriptLexer (sourceFileName, reader, errorLogger) =
+ let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(isFeatureSupported, reader)
CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger)
// Create a new lexer to read a string
@@ -2037,7 +2037,8 @@ type internal FsiInteractionProcessor
WithImplicitHome (tcConfigB, directoryName sourceFile) (fun () ->
// An included script file may contain maybe several interaction blocks.
// We repeatedly parse and process these, until an error occurs.
- let tokenizer = fsiStdinLexerProvider.CreateIncludedScriptLexer (sourceFile, errorLogger)
+ use reader = File.OpenReaderAndRetry (sourceFile, tcConfigB.inputCodePage, (*retryLocked*)false)
+ let tokenizer = fsiStdinLexerProvider.CreateIncludedScriptLexer (sourceFile, reader, errorLogger)
let rec run istate =
let istate,cont = processor.ParseAndExecOneSetOfInteractionsFromLexbuf ((fun f istate -> f ctok istate), istate, tokenizer, errorLogger)
match cont with Completed _ -> run istate | _ -> istate,cont
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf
index 453d98e749f..2d4481919d4 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Operaci nešlo dokončit z důvodu dřívější chyby.
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ Operace nebyla úspěšná. Text chyby se vytiskl do streamu chyb. Pokud chcete vrátit odpovídající FSharpErrorInfo, použijte EvalInteractionNonThrowing, EvalScriptNonThrowing nebo EvalExpressionNonThrowing.
@@ -19,7 +19,7 @@
- Použití: {0} <parametry> [skript.fsx [<argumenty>]]
+ Použití: {0} <možnosti> [script.fsx [<argumenty>]]
@@ -109,7 +109,7 @@
- Při spuštění procesu F# Interactive se vyskytl problém. Ten mohly způsobit známé potíže s podporou konzoly procesu na pozadí pro aplikace umožňující kódování Unicode v některých systémech Windows. V případě sady Visual Studio zkuste vybrat Nástroje->Možnosti->F# Interactive a zadat: --fsi-server-no-unicode.
+ Při spouštění procesu F# Interactive došlo k potížím. Může to být způsobené známým problémem s podporou procesů na pozadí v konzole pro aplikace podporující Unicode v některých systémech Windows. Zkuste vybrat Nástroje -> Možnosti -> F# Interactive pro Visual Studio a zadat --fsi-server-no-unicode.
@@ -219,22 +219,22 @@
- --> Odkazovaný soubor {0}
+ --> Odkazovalo se na: {0}
- --> Odkazovaný soubor {0} (Soubor musí být procesem F# Interactive uzamčený.)
+ --> Odkazovalo se na: {0} (soubor může být zamknutý procesem F# Interactive)
- --> Odkazováno {0} (na sestavení s odlišným časovým razítkem se už z tohoto umístění odkazovalo, pro načtení aktualizovaného sestavení obnovte soubor fsi)
+ --> Odkazovalo se na: {0} (Z tohoto umístění se už odkazovalo na sestavení s jiným časovým razítkem. Je třeba resetovat fsi, aby se načetlo aktualizované sestavení.)
- --> Soubory přidané do knihovny ({0}) zahrnují cestu.
+ --> Přidali jsme {0} do cesty pro zahrnutí do knihovny
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf
index 9d11e8cf700..80ec70245dc 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Der Vorgang konnte aufgrund eines vorherigen Fehlers nicht abgeschlossen werden.
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ Der Vorgang ist fehlgeschlagen. Der Fehlertext wurde im Fehlerstream ausgegeben. Verwenden Sie EvalInteractionNonThrowing, EvalScriptNonThrowing oder EvalExpressionNonThrowing, um die entsprechende FSharpErrorInfo zurückzugeben.
@@ -19,7 +19,7 @@
- Verwendung: {0} <Optionen> [script.fsx [<Argumente>]]
+ Verwendung: {0} <Optionen> [script.fsx [<arguments>]]
@@ -109,7 +109,7 @@
- Beim Starten des F# Interactive-Prozesses ist ein Fehler aufgetreten. Ursache hierfür kann ein bekanntes Problem mit der Hintergrundprozess-Konsolenunterstützung für Unicode-aktivierte Anwendungen unter manchen Windows-Systemen sein. Wählen Sie "Tools" -> "Optionen" -> "F# Interactive für Visual Studio" aus, und geben Sie "--fsi-server-no-unicode" ein.
+ Beim Starten des F# Interactive-Prozesses ist ein Fehler aufgetreten. Ursache hierfür kann ein bekanntes Problem mit der Hintergrundprozess-Konsolenunterstützung für Unicode-aktivierte Anwendungen unter manchen Windows-Systemen sein. Navigieren Sie zu "Tools > Optionen > F# Interactive für Visual Studio", und geben Sie --fsi-server-no-unicode ein.
@@ -219,22 +219,22 @@
- --> Auf "{0}" wurde verwiesen
+ --> Auf {0} wurde verwiesen
- --> Auf "{0}" wurde verwiesen (die Datei wird möglicherweise vom F# Interactive-Prozess gesperrt)
+ --> Auf {0} wurde verwiesen (die Datei wird möglicherweise vom F# Interactive-Prozess gesperrt).
- --> Auf "{0}" wurde verwiesen (eine Assembly mit einem anderen Zeitstempel wurde bereits von diesem Ort verwiesen; stellen Sie fsi wieder her, um die aktualisierte Assembly zu laden)
+ --> Auf {0} wurde verwiesen (eine Assembly mit einem anderen Zeitstempel wurde bereits von diesem Ort verwiesen; setzen Sie fsi zurück, um die aktualisierte Assembly zu laden).
- --> "{0}" wurde zum Bibliotheksincludepfad hinzugefügt
+ --> {0} wurde zum Bibliotheksincludepfad hinzugefügt.
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf
index de2f164e3a8..d5ec3bf213c 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ La operación no se pudo completar debido a un error anterior
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ Error en la operación. El texto del error se ha impreso en la secuencia de errores. Para devolver el correspondiente FSharpErrorInfo, use EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing
@@ -109,7 +109,7 @@
- Se produjo un problema al iniciar el proceso de F# interactivo. Esto puede deberse a un problema conocido de compatibilidad de la consola de procesos en segundo plano con aplicaciones habilitadas para Unicode en algunos sistemas Windows. Pruebe lo siguiente: seleccione Herramientas->Opciones->F# interactivo para Visual Studio y escriba '--fsi-server-no-unicode'.
+ Se ha producido un problema al iniciar el proceso interactivo de F. Esto puede deberse a un problema conocido con la compatibilidad con la consola de proceso en segundo plano para aplicaciones habilitadas para Unicode en algunos sistemas Windows. Pruebe a seleccionar Herramientas->Opciones->F# interactivo para Visual Studio y escriba "--fsi-server-no-unicode".
@@ -219,22 +219,22 @@
- --> '{0}' referenciado
+ --> "{0}" referenciado
- --> '{0}' al que se hace referencia (el archivo puede estar bloqueado por un proceso de F# interactivo)
+ --> "{0}" referenciado (el archivo puede estar bloqueado por un proceso interactivo de F#)
- --> Se hace referencia a '{0}' (ya se ha hecho referencia a un ensamblado con una marca de tiempo distinta desde esta ubicación, restablecer fsi para cargar el ensamblado actualizado)
+ --> "{0}" referenciado (ya se ha hecho referencia a un ensamblado con una marca de tiempo diferente desde esta ubicación, restablezca fsi para cargar el ensamblado actualizado)
- --> Se agregó '{0}' a la ruta de acceso de inclusión de biblioteca
+ -> Se agregó "{0}" a la ruta de acceso de inclusión de biblioteca
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf
index 040a8021fc7..963d52c6504 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Impossible d'exécuter l'opération en raison d'une erreur antérieure
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ L'opération a échoué. Le texte d'erreur a été imprimé dans le flux d'erreurs. Pour retourner le FSharpErrorInfo correspondant, utiliser EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing
@@ -109,7 +109,7 @@
- Un problème s'est produit lors du démarrage du processus F# Interactive. Cela peut être dû à un problème connu lié à la prise en charge par la console des processus en arrière-plan pour les applications Unicode sur certains systèmes Windows. Essayez de sélectionner Outils->Options->F# Interactive pour Visual Studio, puis entrez '--fsi-server-no-unicode'.
+ Un problème s'est produit au démarrage du processus F# Interactive. Il s'agit peut-être d'un problème connu avec la prise en charge de la console de processus d'arrière-plan pour les applications Unicode sur certains systèmes Windows. Essayez de sélectionner Outils->Options->F# Interactive pour Visual Studio et d'entrer '--fsi-server-no-unicode'.
@@ -219,22 +219,22 @@
- --> Référencement de '{0}'
+ --> '{0}' référencé
- --> Référencement de '{0}' (le fichier est peut-être verrouillé par le processus F# Interactive)
+ --> '{0}' référencé (le fichier est peut-être verrouillé par le processus F# Interactive)
- --> Référencement de '{0}' (un assembly avec un horodatage différent a déjà été référencé à partir de cet emplacement, réinitialisez fsi pour charger l'assembly mis à jour)
+ --> '{0}' référencé (un assembly avec un horodatage différent a déjà été référencé à cet emplacement, réinitialiser fsi pour charger l'assembly mis à jour)
- --> Ajout de '{0}' au chemin d'accès Include de la bibliothèque
+ --> '{0}' ajouté au chemin d'inclusion de bibliothèque
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf
index 9468b8aa2ae..aa030eb6b34 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Non è stato possibile completare l'operazione a causa di un errore precedente
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ L'operazione non è riuscita. Il testo dell'errore è stato stampato nel flusso degli errori. Per restituire l'elemento FSharpErrorInfo corrispondente, usare EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing
@@ -19,7 +19,7 @@
- Sintassi: {0} <opzioni> [script.fsx [<argomenti>]]
+ Utilizzo: {0} <opzioni> [script.fsx [<argomenti>]]
@@ -219,12 +219,12 @@
- --> Riferimento a '{0}'
+ --> Riferimento già presente a '{0}'
- --> Riferimento a '{0}' (il file potrebbe essere bloccato dal processo di F# Interactive)
+ --> Riferimento già presente a '{0}' (il file potrebbe essere bloccato dal processo di F# Interactive)
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf
index 81ab0861dc0..ad4b06f0fd0 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ 以前のエラーが原因で操作を完了できませんでした
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ 操作に失敗しました。エラー テキストがエラー ストリームで印刷されました。対応する FSharpErrorInfo を戻すには、EvalInteractionNonThrowing、EvalScriptuNonThrowing、または EvalExpressionNonThrowing を使用します
@@ -19,7 +19,7 @@
- 使い方: {0} <オプション> [script.fsx [<引数>]]
+ 使用状況: {0} <オプション> [script.fsx [<引数>]]
@@ -109,7 +109,7 @@
- F# インタラクティブのプロセスの開始中に問題が発生しました。この原因は、一部の Windows システム上での Unicode 対応アプリケーションのバックグラウンド プロセス コンソールのサポートに関する既知の問題にある可能性があります。[ツール]5D; の [オプション]5D; から [F# Interactive for Visual Studio]5D; を選択し、「--fsi-server-no-unicode」と入力してください。
+ F# 対話型プロセスの開始で問題が発生しました。これは、一部の Windows システムで Unicode 対応アプリケーションのバックグラウンド プロセス コンソールのサポートに関する既知の問題が原因である可能性があります。Visual Studio で ツール->オプション->F# インタラクティブを選択し、「-fsi-server-no-unicode」と入力します。
@@ -219,17 +219,17 @@
- --> '{0}' を参照しました
+ --> 参照済み '{0}'
- --> '{0}' を参照しました (ファイルが F# インタラクティブのプロセスによってロックされている可能性があります)
+ --> 参照済み '{0}' (ファイルは F# 対話型プロセスによってロックされている可能性があります)
- --> 参照された '{0}' (タイムスタンプが異なるアセンブリが既にこの場所から参照されています。fsi をリセットして更新されたアセンブリを読み込んでください)
+ --> 参照済み '{0}' (異なるタイムスタンプを持つアセンブリがこの場所から既に参照されています、更新されたアセンブリを読み込むには fsi をリセットします)
@@ -239,12 +239,12 @@
- --> 現在タイミングはオンです
+ --> 今すぐタイミング オン
- --> 現在タイミングはオフです
+ --> 今すぐタイミング オフ
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf
index f476d85f8eb..53f9f276082 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ 이전 오류로 인해 작업을 완료할 수 없습니다.
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ 작업이 실패했습니다. 오류 텍스트가 오류 스트림에 인쇄되었습니다. 해당 FSharpErrorInfo를 반환하려면 EvalInteractionNonThrowing, EvalScriptNonThrowing 또는 EvalExpressionNonThrowing를 사용하세요.
@@ -19,7 +19,7 @@
- 사용법: {0} <options> [script.fsx [<arguments>]]
+ 사용법: {0} <옵션> [script.fsx [<인수>]]
@@ -109,7 +109,7 @@
- F# 대화형 프로세스를 시작하는 동안 오류가 발생했습니다. 일부 Windows 시스템에서 나타나는 유니코드 기반 애플리케이션의 백그라운드 프로세스 콘솔 지원과 관련된 알려진 문제가 원인일 수 있습니다. [도구]->[옵션]->[Visual Studio용 F# 대화형]를 선택하고 '--fsi-server-no-unicode'를 입력해 보세요.
+ F# Interactive 프로세스를 시작하는 동안 문제가 발생했습니다. 일부 Windows 시스템의 유니코드 기반 애플리케이션에 대한 백그라운드 프로세스 콘솔 지원과 관련된 알려진 문제가 원인일 수 있습니다. [도구]>[옵션]->[F# Interactive for Visual Studio]를 선택하고 '--fsi-server-no-unicode'를 입력해 보세요.
@@ -219,32 +219,32 @@
- --> '{0}'이(가) 참조되었습니다.
+ --> '{0}'을(를) 참조함
- --> '{0}' 참조됨(파일은 F# 대화형 프로세스에 의해 잠길 수 있음)
+ --> 참조된 '{0}'(파일이 F# Interactive 프로세스에 의해 잠겼을 수 있음)
- --> 참조된 '{0}'(다른 타임스탬프가 포함된 어셈블리가 이 위치에서 이미 참조되었습니다. fsi를 다시 설정하여 업데이트된 어셈블리를 로드하세요.)
+ --> '{0}'을(를) 참조함(다른 타임스탬프가 있는 어셈블리가 이미 이 위치에서 참조되었습니다. fsi를 다시 설정하여 업데이트된 어셈블리를 로드하세요.)
- --> 라이브러리 포함 경로에 '{0}'을(를) 추가했습니다.
+ --> 라이브러리 포함 경로에 '{0}'을(를) 추가함
- --> 타이밍이 설정되었습니다.
+ --> 지금 타이밍 켜기
- --> 타이밍이 해제되었습니다.
+ --> 지금 타이밍 끄기
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf
index 24115c1fa37..3666ea478ed 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Nie udało się ukończyć operacji z powodu wcześniejszego błędu
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ Operacja nie powiodła się. Tekst błędu został umieszczony w strumieniu błędów. Aby zwrócić odpowiedni element FSharpErrorInfo, użyj elementu EvalInteractionNonThrowing, eEvalScriptNonThrowing lub EvalExpressionNonThrowing
@@ -19,7 +19,7 @@
- Składnia: {0} <opcje> [script.fsx [<argumenty>]]
+ Użycie: {0} <opcje> [script.fsx [<argumenty>]]
@@ -109,7 +109,7 @@
- Wystąpił problem podczas uruchamiania procesu narzędzia F# Interactive. Taka sytuacja może być spowodowana znanym problemem z obsługą konsoli procesu w tle dla aplikacji obsługujących kodowanie Unicode w niektórych systemach Windows. Spróbuj wybrać kolejno opcje Narzędzia->Opcje->F# Interactive dla Visual Studio i wprowadź „--fsi-server-no-unicode”.
+ Wystąpił problem podczas uruchamiania procesu narzędzia F# Interactive. Może to być spowodowane znanym problemem z obsługą konsoli procesu w tle dla aplikacji obsługujących standard Unicode w niektórych systemach Windows. Spróbuj wybrać pozycje Narzędzia->Opcje->F# Interactive dla programu Visual Studio i wprowadź ciąg „--fsi-server-no-unicode”.
@@ -229,22 +229,22 @@
- --> Zestaw „{0}” występujący w odwołaniu (zestaw z inną sygnaturą czasową występuje już w odwołaniu z tej lokalizacji; zresetuj narzędzie fsi, aby załadować zaktualizowany zestaw)
+ --> Przywołano element „{0}” (z tej lokalizacji przywołano już zestaw z inną sygnaturą czasową, zresetuj narzędzie fsi, aby załadować zaktualizowany zestaw)
- --> Dodano element „{0}” do ścieżki dołączenia biblioteki
+ --> Dodano element „{0}” do ścieżki dołączania biblioteki
- --> Funkcja chronometrażu została włączona
+ --> Chronometraż jest teraz włączony
- --> Funkcja chronometrażu została wyłączona
+ --> Chronometraż jest teraz wyłączony
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf
index ceaea230ada..9adafa2f096 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Não foi possível concluir a operação devido a um erro anterior
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ Falha na operação. O texto do erro foi impresso no fluxo de erros. Para retornar o FSharpErrorInfo correspondente, use EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing
@@ -19,7 +19,7 @@
- Uso: {0} <opções> [script.fsx [<argumentos>]]
+ Uso: {0} <options> [script.fsx [<arguments>]]
@@ -109,7 +109,7 @@
- Um problema ocorreu na inicialização do processo interativo #F. Isto pode ter ocorrido devido a um problema conhecido com processo de fundo do console de apoio pelo aplicativos habilitados Unicode em alguns sistemas do Windows. Tente Ferramentas->Opções->Interativo F# para Visual Studio e insira '--fsi-server-no-unicode'.
+ Ocorreu um problema ao iniciar o processo do F# Interativo. O motivo pode ser um problema conhecido com o suporte do console do processo em segundo plano para aplicativos habilitados para Unicode em alguns sistemas Windows. Tente selecionar Ferramentas->Opções->F# Interativo para Visual Studio e digite '--fsi-server-no-unicode'.
@@ -219,32 +219,32 @@
- --> Referenciado '{0}'
+ --> '{0}' referenciado
- --> Referenciado '{0}' (o arquivo pode ter sido bloqueado pelo processo F# Interativo)
+ --> '{0}' referenciado (o arquivo pode estar bloqueado pelo processo do F# Interativo)
- --> '{0}' referenciado (um assembly com um carimbo de data/hora diferente já foi referenciado deste local, redefina o fsi para carregar o assembly atualizado)
+ --> '{0}' referenciado (um assembly com um carimbo de data/hora diferente já foi referenciado deste local. Redefina o FSI para carregar o assembly atualizado)
- --> '{0}' foi adicionado à biblioteca de caminho de inclusão
+ --> Foi adicionado '{0}' ao caminho de inclusão da biblioteca
- --> Timing ligado agora
+ --> Sincronização ativada agora
- --> Timing desligado agora
+ --> Sincronização desativada agora
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf
index 25c322aa907..9cbfe6ff50f 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Операция не может быть завершена из-за предыдущей ошибки
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ Не удалось выполнить операцию. Текст ошибки был выведен в потоке ошибок. Чтобы вернуть соответствующие сведения FSharpErrorInfo, используйте EvalInteractionNonThrowing, EvalScriptNonThrowing или EvalExpressionNonThrowing
@@ -109,7 +109,7 @@
- Возникла проблема при запуске процесса F# Interactive. Это может быть вызвано известной проблемой с поддержкой консоли фонового процесса для приложений с поддержкой Юникода в некоторых системах Windows. Попробуйте выбрать "Сервис" -> "Параметры" -> "F# Interactive для Visual Studio" и ввести "--fsi-server-no-unicode".
+ Возникла проблема при запуске процесса F# Interactive. Это может быть связано с известной проблемой с поддержкой консоли в фоновых процессах для приложений с поддержкой Unicode на некоторых системах Windows. Выберите "Инструменты"->"Параметры"->"F# Interactive" для Visual Studio и введите '--fsi-server-no-unicode'.
@@ -219,32 +219,32 @@
- --> Задана ссылка на "{0}"
+ --> Добавлена ссылка на "{0}"
- --> Задана ссылка на "{0}" (возможно, файл заблокирован процессом F# Interactive)
+ --> Добавлена ссылка на "{0}" (файл может быть заблокирован процессом F# Interactive)
- --> "{0}" с заданной ссылкой (из этого расположения уже задана ссылка на сборку с другой меткой времени, выполните сброс fsi, чтобы загрузить обновленную сборку)
+ --> Добавлена ссылка на "{0}" (из этого расположения уже указана ссылка на сборку с другой временной отметкой; чтобы загрузить обновленную сборку, сбросьте fsi)
- --> Выполнено добавление "{0}" по пути включения в библиотеку
+ --> В путь включения библиотеки добавлен "{0}"
- --> Таймер включен
+ --> Синхронизация включена
- --> Таймер отключен
+ --> Синхронизация отключена
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf
index b061a19e37f..65042521c76 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ Önceki hata nedeniyle işlem tamamlanamadı
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ İşlem başarısız oldu. Hata metni hata akışında yazdırıldı. İlgili FSharpErrorInfo bilgilerini döndürmek için EvalInteractionNonThrowing, EvalScriptNonThrowing veya EvalExpressionNonThrowing kullanın
@@ -109,7 +109,7 @@
- F# Etkileşimli işlemi başlatılırken bir sorun oluştu. Bu durum, bazı Windows sistemlerindeki Unicode kullanan uygulamalara yönelik arka plan işlemi konsol desteğinde bilinen bir soruna bağlı olabilir. Visual Studio için Araçlar->Seçenekler->F# Etkileşimli'yi seçmeyi deneyin ve '--fsi-server-no-unicode' girin.
+ F# Interactive işlemi başlatılırken br sorun oluştu. Bu, bazı Windows sistemlerinde Unicode etkin uygulamalar için arka planda işleme konsol desteğiyle ilgili bilinen bir sorundan kaynaklanıyor olabilir. Araçlar->Seçenekler->Visual Studio için F# Interactive seçeneğini belirleyip '--fsi-server-no-unicode' komutunu girmeyi deneyin.
@@ -219,32 +219,32 @@
- --> '{0}' öğesine başvuruldu
+ --> Başvurulan '{0}'
- --> '{0}' öğesine başvuruldu (dosya F# Etkileşimli işlemi tarafından kilitlenmiş olabilir)
+ --> Başvurulan '{0}' (dosya F# Interactive işlemi tarafından kilitlenmiş olabilir)
- --> Başvurulan '{0}' (farklı bir zaman damgası olan bir bütünleştirilmiş koda bu konumdan zaten başvuruldu; güncelleştirilen bütünleştirilmiş kodu yüklemek için fsi'yi sıfırlayın)
+ --> Başvurulan '{0}' (bu konumdan farklı bir zaman damgasına sahip bir derlemeye zaten başvurulmuş, güncelleştirilmiş derlemeyi yüklemek için fsi'yi sıfırlayın)
- --> Kitaplık ekleme yoluna '{0}' eklendi
+ --> '{0}', kitaplık ekleme yoluna eklendi
- --> Zamanlama şimdi açık
+ --> Zamanlama açıldı
- --> Zamanlama şimdi kapalı
+ --> Zamanlama kapatıldı
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf
index 6f28ddc77dd..a97b57363e8 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ 由于早期错误,无法完成操作
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ 操作失败。错误文本已在错误流中打印。要返回相应的 FSharpErrorInfo,请使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing
@@ -109,7 +109,7 @@
- 启动 F# 交互窗口进程时发生问题。此情况可能是由一个已知问题导致的,即某些 Windows 系统上的后台进程控制台不支持启用了 Unicode 的应用程序。请尝试选择“工具”->“选项”->“Visual Studio 的 F# 交互窗口”,然后输入“--fsi-server-no-unicode”。
+ 启动 F# 交互进程时出现问题。这可能是由于某些 Windows 系统上启用 Unicode 的应用程序的后台进程控制台支持存在已知问题。请尝试选择“工具”->“选项”-> "F# Interactive for Visual Studio",然后输入 "--fsi-server-no-unicode"。
@@ -219,32 +219,32 @@
- --> 已引用“{0}”
+ -> 引用的“{0}”
- --> 已引用“{0}”(文件可能由 F# 交互窗口进程锁定)
+ --> 引用的“{0}”(F# 交互进程可能已锁定文件)
- ->引用“{0}”(具有不同时间戳的程序集已经从该位置引用并重置 fsi 以加载更新的程序集)
+ --> 引用的“{0}”(已从此位置引用具有不同时间戳的程序集,请重置 fsi 以加载更新后的程序集)
- --> 已将“{0}”添加到库包含路径
+ --> 已将“{0}”添加到库包括路径
- --> 现在已启用计时
+ -> 计时现在打开
- --> 现在已关闭计时
+ -> 计时现已关闭
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf
index a8d771d1c37..936f04dd787 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf
@@ -4,12 +4,12 @@
- Operation could not be completed due to earlier error
+ 因為先前發生錯誤,所以無法完成作業
- Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing
+ 作業失敗。錯誤文字已列印在錯誤資料流中。若要傳回相對應的 FSharpErrorInfo,請使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing
@@ -19,7 +19,7 @@
- 使用方式: {0} <選項> [script.fsx [<引數>]]
+ 用法: {0} <選項> [script.fsx [<引數>]]
@@ -109,7 +109,7 @@
- 啟動 F# 互動處理序時發生問題。這可能是因為背景處理序主控台對於支援某些 Windows 系統上具備 Unicode 支援功能之應用程式的已知問題所造成。請嘗試選取 [工具] -> [選項] -> [F# Interactive for Visual Studio],然後輸入 '--fsi-server-no-unicode'。
+ 啟動 F# Interactive 處理序時發生錯誤。這可能是某些 Windows 系統上可使用 Unicode 之應用程式的背景處理序主控台支援發生已知錯誤所致。請嘗試選取 [工具]->[選項]->[適用於 Visual Studio 的 F# Interactive] 並輸入 '--fsi-server-no-unicode’。
@@ -219,32 +219,32 @@
- --> 參考的 '{0}'
+ --> 已參考 '{0}’
- --> 參考的 '{0}' (檔案可能已被 F# 互動處理序鎖定)
+ --> 已參考 '{0}' (F# Interactive 處理序可能鎖定了檔案)
- --> 已參考 '{0}' (已經從這個位置參考有不同時間戳記的組件,請重設 fsi 以載入更新的組件)
+ --> 已參考 '{0}' (已從此位置參考具有不同時間戳記的組件,請重設 fsi 以載入更新的組件)
- --> 已將 '{0}' 加入程式庫 Include 路徑
+ --> 已將 '{0}' 新增到程式庫 include 路徑
- --> 計時現已開啟
+ --> 計時現在已開啟
- --> 計時現已關閉
+ --> 計時現在已關閉
diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf
index b59583e3347..77e56a45a16 100644
--- a/src/fsharp/xlf/FSComp.txt.cs.xlf
+++ b/src/fsharp/xlf/FSComp.txt.cs.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Stream nezačíná zdrojem s hodnotou null a není ve formátu .RES.
- Resource header beginning at offset {0} is malformed.
+ Hlavička zdroje začínající na posunu {0} má chybný formát.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Atributy nejde použít pro rozšíření typů.
diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf
index 51348f9b49f..85b84bef7ce 100644
--- a/src/fsharp/xlf/FSComp.txt.de.xlf
+++ b/src/fsharp/xlf/FSComp.txt.de.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Der Stream beginnt nicht mit einer NULL-Ressource und ist nicht im RES-Format.
- Resource header beginning at offset {0} is malformed.
+ Der Ressourcenheader, der am Offset {0} beginnt, ist fehlerhaft formatiert.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Attribute können nicht auf Typerweiterungen angewendet werden.
diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf
index 756116b3626..2b45ad5877d 100644
--- a/src/fsharp/xlf/FSComp.txt.es.xlf
+++ b/src/fsharp/xlf/FSComp.txt.es.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ El flujo no comienza con un recurso nulo ni está en formato ".RES".
- Resource header beginning at offset {0} is malformed.
+ El encabezado de los recursos que comienza en el desplazamiento {0} está mal formado.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Los atributos no se pueden aplicar a las extensiones de tipo.
@@ -164,7 +164,7 @@
- All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
+ Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devolvió un valor de tipo "{0}", pero esta rama devolvió un valor de tipo "\{1 \}".
diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf
index c810c607c1c..7cb592acf73 100644
--- a/src/fsharp/xlf/FSComp.txt.fr.xlf
+++ b/src/fsharp/xlf/FSComp.txt.fr.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Le flux ne commence pas par une ressource null et n'est pas au format '.RES'.
- Resource header beginning at offset {0} is malformed.
+ L'en-tête de ressource commençant au décalage {0} est mal formé.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Impossible d'appliquer des attributs aux extensions de type.
diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf
index 4cb77118a15..1f02bf64d4e 100644
--- a/src/fsharp/xlf/FSComp.txt.it.xlf
+++ b/src/fsharp/xlf/FSComp.txt.it.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Il flusso non inizia con una risorsa Null e non è in formato '.RES'.
- Resource header beginning at offset {0} is malformed.
+ L'intestazione di risorsa che inizia a partire dall'offset {0} non è valida.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Gli attributi non possono essere applicati a estensioni di tipo.
diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf
index 8f9b825a16d..96c1b3c7c32 100644
--- a/src/fsharp/xlf/FSComp.txt.ja.xlf
+++ b/src/fsharp/xlf/FSComp.txt.ja.xlf
@@ -12,6 +12,16 @@
F# {1} のための {0}
+
+
+ ストリームは null リソースでは始まらず、'RES' 形式でもありません。
+
+
+
+
+ オフセット {0} で始まるリソース ヘッダーの形式に誤りがあります。
+
+ 言語バージョンで許可された値を表示し、'最新' や 'プレビュー' などの言語バージョンを指定する
@@ -32,16 +42,6 @@
メンバー定義に予期しない記号 '.' があります。'with'、'=' またはその他のトークンが必要です。
-
-
- Stream does not begin with a null resource and is not in '.RES' format.
-
-
-
-
- Resource header beginning at offset {0} is malformed.
-
- PDB に格納されているソース ファイル チェックサムを計算するためのアルゴリズムを指定します。サポートされる値は次のとおりです: SHA1 または SHA256 (既定)
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ 属性を型拡張に適用することはできません。
diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf
index 1167a278aa6..aa68a787aa2 100644
--- a/src/fsharp/xlf/FSComp.txt.ko.xlf
+++ b/src/fsharp/xlf/FSComp.txt.ko.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ 스트림은 null 리소스로 시작되지 않으며 '.RES' 형식이 아닙니다.
- Resource header beginning at offset {0} is malformed.
+ 오프셋 {0}에서 시작하는 리소스 헤더의 형식이 잘못되었습니다.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ 형식 확장에 특성을 적용할 수 없습니다.
diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf
index 77d8530de51..d1e65e1eda1 100644
--- a/src/fsharp/xlf/FSComp.txt.pl.xlf
+++ b/src/fsharp/xlf/FSComp.txt.pl.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Strumień nie zaczyna się od zasobu o wartości null i nie jest w formacie „.RES”.
- Resource header beginning at offset {0} is malformed.
+ Nagłówek zasobu rozpoczynający się od przesunięcia {0} jest nieprawidłowo sformułowany.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Atrybutów nie można stosować do rozszerzeń typu.
diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf
index 1cd2930f59f..53c41b48559 100644
--- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf
+++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Stream não começa com um recurso nulo e não está no formato '.RES'.
- Resource header beginning at offset {0} is malformed.
+ O cabeçalho do recurso que começa no deslocamento {0} está malformado.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Os atributos não podem ser aplicados às extensões de tipo.
diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf
index f6da40570ba..b5642c8d86b 100644
--- a/src/fsharp/xlf/FSComp.txt.ru.xlf
+++ b/src/fsharp/xlf/FSComp.txt.ru.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Поток не начинается с нулевого ресурса и не соответствует формату ".RES".
- Resource header beginning at offset {0} is malformed.
+ Заголовок ресурса некорректен начиная со смещения {0}.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Атрибуты не могут быть применены к расширениям типа.
diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf
index e711f0f05ed..6e624b554c3 100644
--- a/src/fsharp/xlf/FSComp.txt.tr.xlf
+++ b/src/fsharp/xlf/FSComp.txt.tr.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ Akış null kaynakla başlamıyor ve '.RES' biçiminde değil.
- Resource header beginning at offset {0} is malformed.
+ {0} uzaklığında başlayan kaynak üst bilgisi hatalı biçimlendirilmiş.
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ Öznitelikler tür uzantılarına uygulanamaz.
diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf
index 1e67dc374f2..ca7a3507659 100644
--- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf
+++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ 流应以空资源开头并且应采用 .RES 格式。
- Resource header beginning at offset {0} is malformed.
+ 以偏移量 {0} 开始的资源标头格式不正确。
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ 属性不可应用于类型扩展。
diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf
index 4dcd81a114b..990621595f7 100644
--- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf
+++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf
@@ -14,12 +14,12 @@
- Stream does not begin with a null resource and is not in '.RES' format.
+ 資料流未以 null 資源開頭,並且未使用 '.RES' 格式。
- Resource header beginning at offset {0} is malformed.
+ 從位移 {0} 開始的資源標頭格式錯誤。
@@ -54,7 +54,7 @@
- Attributes cannot be applied to type extensions.
+ 屬性無法套用到類型延伸模組。
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs
index 5ed1c7d5bb1..13428f0493e 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs
@@ -630,6 +630,7 @@ type AsyncModule() =
member this.``Parallel with maxDegreeOfParallelism`` () =
let mutable i = 1
let action j = async {
+ do! Async.Sleep 1
Assert.AreEqual(j, i)
i <- i + 1
}
@@ -662,14 +663,17 @@ type AsyncModule() =
Assert.AreEqual("maxDegreeOfParallelism", exc.ParamName)
Assert.True(exc.Message.Contains("maxDegreeOfParallelism must be positive, was -1"))
-// This has been failing very regularly on LINUX --- issue : https://github.com/dotnet/fsharp/issues/7112
-#if !TESTING_ON_LINUX
[]
- member this.``RaceBetweenCancellationAndError.Parallel``() =
- [| for i in 1 .. 1000 -> async { return i } |]
+ member this.``RaceBetweenCancellationAndError.Parallel(maxDegreeOfParallelism)``() =
+ [| for i in 1 .. 1000 -> async { failwith "boom" } |]
|> fun cs -> Async.Parallel(cs, 1)
+ |> testErrorAndCancelRace "RaceBetweenCancellationAndError.Parallel(maxDegreeOfParallelism)"
+
+ []
+ member this.``RaceBetweenCancellationAndError.Parallel``() =
+ [| for i in 1 .. 1000 -> async { failwith "boom" } |]
+ |> fun cs -> Async.Parallel(cs)
|> testErrorAndCancelRace "RaceBetweenCancellationAndError.Parallel"
-#endif
[]
member this.``error on one workflow should cancel all others with maxDegreeOfParallelism``() =
@@ -679,13 +683,11 @@ type AsyncModule() =
let job i = async {
if i = 55 then failwith "boom"
else
- do! Async.Sleep 1000
incr counter
}
- let! _ = Async.Parallel ([ for i in 1 .. 100 -> job i ], 2) |> Async.Catch
- do! Async.Sleep 5000
+ let! _ = Async.Parallel ([ for i in 1 .. 100 -> job i ], 1) |> Async.Catch
return !counter
} |> Async.RunSynchronously
- Assert.AreEqual(0, counter)
\ No newline at end of file
+ Assert.AreEqual(54, counter)
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf
index 5340031907e..b071e0c5f72 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf
index 2ca4bd450e9..4184f3edc59 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf
index 394481ad696..4b1a5e0d904 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf
index 821545638e2..99d34699194 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf
index dd58cb9a119..8902030751c 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf
index c0221174d97..de4d65e71f8 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf
index 6f540b54250..e7191ac3c4a 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf
index f912b6b4c78..6936b8e97f5 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf
index 5a2b75dce09..fefd197867e 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf
index 2b5303d91de..355d363084e 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf
index 73a72b806a2..86ac32f4b37 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf
index 474f99a3dcd..0537632d5fc 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf
index 16b7339b2a4..17c64ffefb9 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf
@@ -1828,9 +1828,8 @@ CONSIDER: get this from CodeDom
- {0} x {1}
+ {0} x {1}Format string for showing a graphic's size
-
# {0} = width (as an integer)
# {1} = height (as an integer)
#Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456"
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf
index 0d279497901..a9808062bdd 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnostika
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf
index fc1d36391d2..9e48372cb23 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnose
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf
index 24649ecad9f..cd6b650ec60 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnóstico
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf
index d0f77ba3621..90b7e5b378c 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnostics
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf
index a5555f97389..51b5a87f284 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnostica
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf
index 847e2943682..7a59c8c4d34 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ 診断
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf
index 55927919dfa..8ba93bed1b4 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ 진단
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf
index db4a1394856..3d83c8f6ad3 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnostyka
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf
index 5385f6147d2..e3a75c3136e 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Diagnóstico
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf
index ba6871df2ee..106dcd8b87a 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Диагностика
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf
index 9caf1fa8b9c..8525295e6e4 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ Tanılama
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf
index cff797b883f..ff0bad31447 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ 诊断
diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf
index a3267c876f2..1edc051a596 100644
--- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf
@@ -44,7 +44,7 @@
- Diagnostics
+ 診斷
diff --git a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj
index 8c70a8c5e0a..d2613d8c217 100644
--- a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj
+++ b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj
@@ -24,7 +24,9 @@
-
+
+
+