未验证 提交 527a3662 编写于 作者: K Kevin Ransom (msft) 提交者: GitHub

Fix sdk refs (#10839)

上级 45948f16
......@@ -316,7 +316,8 @@ type PackageManagerLine =
[<NoEquality; NoComparison>]
type TcConfigBuilder =
{ mutable primaryAssembly: PrimaryAssembly
{
mutable primaryAssembly: PrimaryAssembly
mutable noFeedback: bool
mutable stackReserveSize: int32 option
mutable implicitIncludeDir: string (* normally "." *)
......@@ -400,7 +401,6 @@ type TcConfigBuilder =
mutable includewin32manifest: bool
mutable linkResources: string list
mutable legacyReferenceResolver: LegacyReferenceResolver
mutable fxResolver: FxResolver
mutable showFullPaths: bool
mutable errorStyle: ErrorStyle
......@@ -464,6 +464,10 @@ type TcConfigBuilder =
/// When false FSI will lock referenced assemblies requiring process restart, false = disable Shadow Copy false (*default*)
mutable shadowCopyReferences: bool
mutable useSdkRefs: bool
mutable fxResolver: FxResolver
/// specify the error range for FxResolver
mutable rangeForErrors: range
/// Override the SDK directory used by FxResolver, used for FCS only
mutable sdkDirOverride: string option
......@@ -571,7 +575,6 @@ type TcConfigBuilder =
includewin32manifest = true
linkResources = []
legacyReferenceResolver = null
fxResolver = Unchecked.defaultof<_>
showFullPaths = false
errorStyle = ErrorStyle.DefaultErrors
......@@ -611,6 +614,8 @@ type TcConfigBuilder =
copyFSharpCore = CopyFSharpCoreFlag.No
shadowCopyReferences = false
useSdkRefs = true
fxResolver = Unchecked.defaultof<FxResolver>
rangeForErrors = range0
sdkDirOverride = None
tryGetMetadataSnapshot = (fun _ -> None)
internalTestSpanStackReferring = false
......@@ -638,8 +643,16 @@ type TcConfigBuilder =
}
|> Seq.distinct
static member CreateNew(legacyReferenceResolver, fxResolver, defaultFSharpBinariesDir, reduceMemoryUsage, implicitIncludeDir,
isInteractive, isInvalidationSupported, defaultCopyFSharpCore, tryGetMetadataSnapshot) =
static member CreateNew(legacyReferenceResolver,
defaultFSharpBinariesDir,
reduceMemoryUsage,
implicitIncludeDir,
isInteractive,
isInvalidationSupported,
defaultCopyFSharpCore,
tryGetMetadataSnapshot,
sdkDirOverride,
rangeForErrors) =
Debug.Assert(FileSystem.IsPathRootedShim implicitIncludeDir, sprintf "implicitIncludeDir should be absolute: '%s'" implicitIncludeDir)
......@@ -652,15 +665,29 @@ type TcConfigBuilder =
defaultFSharpBinariesDir = defaultFSharpBinariesDir
reduceMemoryUsage = reduceMemoryUsage
legacyReferenceResolver = legacyReferenceResolver
fxResolver = fxResolver
isInteractive = isInteractive
isInvalidationSupported = isInvalidationSupported
copyFSharpCore = defaultCopyFSharpCore
tryGetMetadataSnapshot = tryGetMetadataSnapshot
useFsiAuxLib = isInteractive
rangeForErrors = rangeForErrors
sdkDirOverride = sdkDirOverride
}
tcConfigBuilder
member tcConfigB.FxResolver =
let resolver =
lazy (let assumeDotNetFramework = Some (tcConfigB.primaryAssembly = PrimaryAssembly.Mscorlib)
FxResolver(assumeDotNetFramework, tcConfigB.implicitIncludeDir, rangeForErrors=tcConfigB.rangeForErrors, useSdkRefs=tcConfigB.useSdkRefs, isInteractive=tcConfigB.isInteractive, sdkDirOverride=tcConfigB.sdkDirOverride))
if tcConfigB.fxResolver = Unchecked.defaultof<FxResolver> then
lock tcConfigB (fun () ->
if tcConfigB.fxResolver = Unchecked.defaultof<FxResolver> then
tcConfigB.fxResolver <- resolver.Force()
)
tcConfigB.fxResolver
member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) =
use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter
ResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, nm)
......@@ -885,9 +912,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
#endif
None, data.legacyReferenceResolver.Impl.HighestInstalledNetFrameworkVersion()
let systemAssemblies = data.fxResolver.GetSystemAssemblies()
member x.FxResolver = data.fxResolver
member x.FxResolver = data.FxResolver
member x.primaryAssembly = data.primaryAssembly
member x.noFeedback = data.noFeedback
member x.stackReserveSize = data.stackReserveSize
......@@ -1166,7 +1191,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
try
FileSystem.SafeExists filename &&
((tcConfig.GetTargetFrameworkDirectories() |> List.exists (fun clrRoot -> clrRoot = Path.GetDirectoryName filename)) ||
(systemAssemblies.Contains (fileNameWithoutExtension filename)) ||
(tcConfig.FxResolver.GetSystemAssemblies().Contains (fileNameWithoutExtension filename)) ||
tcConfig.FxResolver.IsInReferenceAssemblyPackDirectory filename)
with _ ->
false
......
......@@ -214,7 +214,6 @@ type TcConfigBuilder =
mutable includewin32manifest: bool
mutable linkResources: string list
mutable legacyReferenceResolver: LegacyReferenceResolver
mutable fxResolver: FxResolver
mutable showFullPaths: bool
mutable errorStyle: ErrorStyle
mutable utf8output: bool
......@@ -257,6 +256,8 @@ type TcConfigBuilder =
mutable copyFSharpCore: CopyFSharpCoreFlag
mutable shadowCopyReferences: bool
mutable useSdkRefs: bool
mutable fxResolver: FxResolver
mutable rangeForErrors: range
mutable sdkDirOverride: string option
/// A function to call to try to get an object that acts as a snapshot of the metadata section of a .NET binary,
......@@ -278,14 +279,15 @@ type TcConfigBuilder =
static member CreateNew:
legacyReferenceResolver: LegacyReferenceResolver *
fxResolver: FxResolver *
defaultFSharpBinariesDir: string *
reduceMemoryUsage: ReduceMemoryFlag *
implicitIncludeDir: string *
isInteractive: bool *
isInvalidationSupported: bool *
defaultCopyFSharpCore: CopyFSharpCoreFlag *
tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot
tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot *
sdkDirOverride: string option *
rangeForErrors: range
-> TcConfigBuilder
member DecideNames: string list -> outfile: string * pdbfile: string option * assemblyName: string
......@@ -317,6 +319,9 @@ type TcConfigBuilder =
member AddLoadedSource: m: range * originalPath: string * pathLoadedFrom: string -> unit
member FxResolver: FxResolver
/// Immutable TcConfig, modifications are made via a TcConfigBuilder
[<Sealed>]
type TcConfig =
......
......@@ -763,6 +763,7 @@ type internal FxResolver(assumeDotNetFramework: bool option, projectDir: string,
// The set of references entered into the TcConfigBuilder for scripts prior to computing the load closure.
member _.GetDefaultReferences (useFsiAuxLib, assumeDotNetFramework) =
let defaultReferences =
if assumeDotNetFramework then
getDotNetFrameworkDefaultReferences useFsiAuxLib, assumeDotNetFramework
else
......@@ -797,4 +798,5 @@ type internal FxResolver(assumeDotNetFramework: bool option, projectDir: string,
getDotNetFrameworkDefaultReferences useFsiAuxLib, true
else
getDotNetCoreImplementationReferences useFsiAuxLib, assumeDotNetFramework
defaultReferences
......@@ -130,13 +130,20 @@ module ScriptPreprocessClosure =
let isInvalidationSupported = (codeContext = CodeContext.Editing)
let rangeForErrors = mkFirstLineOfFile filename
let fxResolver = FxResolver(Some assumeDotNetFramework, projectDir, rangeForErrors=rangeForErrors, useSdkRefs=useSdkRefs, isInteractive=isInteractive, sdkDirOverride=sdkDirOverride)
let tcConfigB =
TcConfigBuilder.CreateNew
(legacyReferenceResolver, fxResolver, defaultFSharpBinariesDir, reduceMemoryUsage, projectDir,
isInteractive, isInvalidationSupported, CopyFSharpCoreFlag.No,
tryGetMetadataSnapshot)
let tcb =
TcConfigBuilder.CreateNew(legacyReferenceResolver,
defaultFSharpBinariesDir,
reduceMemoryUsage,
projectDir,
isInteractive,
isInvalidationSupported,
CopyFSharpCoreFlag.No,
tryGetMetadataSnapshot,
sdkDirOverride,
rangeForErrors)
tcb.useSdkRefs <- useSdkRefs
tcb
applyCommandLineArgs tcConfigB
......@@ -147,7 +154,7 @@ module ScriptPreprocessClosure =
| None ->
let errorLogger = CapturingErrorLogger("ScriptDefaultReferences")
use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger)
let references, assumeDotNetFramework = fxResolver.GetDefaultReferences (useFsiAuxLib, assumeDotNetFramework)
let references, assumeDotNetFramework = tcConfigB.FxResolver.GetDefaultReferences (useFsiAuxLib, assumeDotNetFramework)
// Add script references
for reference in references do
tcConfigB.AddReferencedAssemblyByPath(range0, reference)
......
......@@ -445,16 +445,20 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted,
let tryGetMetadataSnapshot = (fun _ -> None)
let fxResolver = FxResolver(None, directoryBuildingFrom, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None)
let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value
let tcConfigB =
TcConfigBuilder.CreateNew(legacyReferenceResolver, fxResolver, defaultFSharpBinariesDir,
reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=directoryBuildingFrom,
isInteractive=false, isInvalidationSupported=false,
TcConfigBuilder.CreateNew(legacyReferenceResolver,
defaultFSharpBinariesDir,
reduceMemoryUsage=reduceMemoryUsage,
implicitIncludeDir=directoryBuildingFrom,
isInteractive=false,
isInvalidationSupported=false,
defaultCopyFSharpCore=defaultCopyFSharpCore,
tryGetMetadataSnapshot=tryGetMetadataSnapshot)
tryGetMetadataSnapshot=tryGetMetadataSnapshot,
sdkDirOverride=None,
rangeForErrors=range0
)
// Preset: --optimize+ -g --tailcalls+ (see 4505)
SetOptimizeSwitch tcConfigB OptionSwitch.On
......@@ -484,9 +488,6 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted,
delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB
exiter.Exit 1
let assumeDotNetFramework = (tcConfigB.primaryAssembly = PrimaryAssembly.Mscorlib)
tcConfigB.fxResolver <- FxResolver(Some assumeDotNetFramework, directoryBuildingFrom, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None)
tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines
// Display the banner text, if necessary
......@@ -633,16 +634,16 @@ let main1OfAst
let directoryBuildingFrom = Directory.GetCurrentDirectory()
let fxResolver = FxResolver(None, directoryBuildingFrom, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None)
let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value
let tcConfigB =
TcConfigBuilder.CreateNew(legacyReferenceResolver, fxResolver, defaultFSharpBinariesDir,
TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir,
reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=directoryBuildingFrom,
isInteractive=false, isInvalidationSupported=false,
defaultCopyFSharpCore=CopyFSharpCoreFlag.No,
tryGetMetadataSnapshot=tryGetMetadataSnapshot)
tryGetMetadataSnapshot=tryGetMetadataSnapshot,
sdkDirOverride=None,
rangeForErrors=range0)
let primaryAssembly =
// temporary workaround until https://github.com/dotnet/fsharp/pull/8043 is merged:
......
......@@ -841,7 +841,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig,
member _.WriteReferencesAndExit = writeReferencesAndExit
member _.DependencyProvider = dependencyProvider
member _.FxResolver = tcConfigB.fxResolver
member _.FxResolver = tcConfigB.FxResolver
/// Set the current ui culture for the current thread.
let internal SetCurrentUICultureForThread (lcid : int option) =
......@@ -2757,21 +2757,17 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i
| None -> SimulatedMSBuildReferenceResolver.getResolver()
| Some rr -> rr
// We know the target framework up front
let assumeDotNetFramework = not FSharpEnvironment.isRunningOnCoreClr
let fxResolver = FxResolver(Some assumeDotNetFramework, currentDirectory, rangeForErrors=range0, useSdkRefs=true, isInteractive=true, sdkDirOverride=None)
let tcConfigB =
TcConfigBuilder.CreateNew(legacyReferenceResolver,
fxResolver,
defaultFSharpBinariesDir=defaultFSharpBinariesDir,
reduceMemoryUsage=ReduceMemoryFlag.Yes,
implicitIncludeDir=currentDirectory,
isInteractive=true,
isInvalidationSupported=false,
defaultCopyFSharpCore=CopyFSharpCoreFlag.No,
tryGetMetadataSnapshot=tryGetMetadataSnapshot)
tryGetMetadataSnapshot=tryGetMetadataSnapshot,
sdkDirOverride=None,
rangeForErrors=range0)
let tcConfigP = TcConfigProvider.BasedOnMutableBuilder(tcConfigB)
do tcConfigB.resolutionEnvironment <- LegacyResolutionEnvironment.CompilationAndEvaluation // See Bug 3608
......
......@@ -1303,29 +1303,32 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput
| Some idx -> Some(commandLineArgs.[idx].Substring(switchString.Length))
| _ -> None
let assumeDotNetFramework =
match loadClosureOpt with
| None -> None
| Some loadClosure -> Some loadClosure.UseDesktopFramework
let sdkDirOverride =
match loadClosureOpt with
| None -> None
| Some loadClosure -> loadClosure.SdkDirOverride
let fxResolver = FxResolver(assumeDotNetFramework, projectDirectory, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=sdkDirOverride)
// see also fsc.fs: runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB
let tcConfigB =
TcConfigBuilder.CreateNew(legacyReferenceResolver,
fxResolver,
defaultFSharpBinariesDir,
implicitIncludeDir=projectDirectory,
reduceMemoryUsage=ReduceMemoryFlag.Yes,
isInteractive=useScriptResolutionRules,
isInvalidationSupported=true,
defaultCopyFSharpCore=CopyFSharpCoreFlag.No,
tryGetMetadataSnapshot=tryGetMetadataSnapshot)
tryGetMetadataSnapshot=tryGetMetadataSnapshot,
sdkDirOverride=sdkDirOverride,
rangeForErrors=range0)
tcConfigB.primaryAssembly <-
match loadClosureOpt with
| None -> PrimaryAssembly.Mscorlib
| Some loadClosure ->
if loadClosure.UseDesktopFramework then
PrimaryAssembly.Mscorlib
else
PrimaryAssembly.System_Runtime
tcConfigB.resolutionEnvironment <- (LegacyResolutionEnvironment.EditingOrCompilation true)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册