Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions src/Compiler/Driver/CompilerConfig.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1405,14 +1405,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
/// 'framework' reference set that is potentially shared across multiple compilations.
member tcConfig.IsSystemAssembly(fileName: string) =
try
let dirName = Path.GetDirectoryName fileName
let baseName = FileSystemUtils.fileNameWithoutExtension fileName

FileSystem.FileExistsShim fileName
&& ((tcConfig.GetTargetFrameworkDirectories()
|> List.exists (fun clrRoot -> clrRoot = Path.GetDirectoryName fileName))
|| (tcConfig
.FxResolver
.GetSystemAssemblies()
.Contains(FileSystemUtils.fileNameWithoutExtension fileName))
|| tcConfig.FxResolver.IsInReferenceAssemblyPackDirectory fileName)
&& ((tcConfig.GetTargetFrameworkDirectories() |> List.contains dirName)
|| FxResolver.GetSystemAssemblies().Contains baseName
|| FxResolver.IsReferenceAssemblyPackDirectoryApprox dirName)
with _ ->
false

Expand Down
15 changes: 4 additions & 11 deletions src/Compiler/Driver/FxResolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,7 @@ type internal FxResolver
// A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared
// resources between projects in the compiler services. Also all assemblies where well-known system types exist
// referenced from TcGlobals must be listed here.
let systemAssemblies =
static let systemAssemblies =
HashSet
[
// NOTE: duplicates are ok in this list
Expand Down Expand Up @@ -789,17 +789,10 @@ type internal FxResolver
"WindowsBase"
]

member _.GetSystemAssemblies() = systemAssemblies
static member GetSystemAssemblies() = systemAssemblies

member _.IsInReferenceAssemblyPackDirectory fileName =
fxlock.AcquireLock(fun fxtok ->
RequireFxResolverLock(fxtok, "assuming all member require lock")

match tryGetNetCoreRefsPackDirectoryRoot () |> replayWarnings with
| _, Some root ->
let path = Path.GetDirectoryName(fileName)
path.StartsWith(root, StringComparison.OrdinalIgnoreCase)
| _ -> false)
static member IsReferenceAssemblyPackDirectoryApprox(dirName: string) =
dirName.Contains "Microsoft.NETCore.App.Ref"

member _.TryGetSdkDir() =
fxlock.AcquireLock(fun fxtok ->
Expand Down
6 changes: 4 additions & 2 deletions src/Compiler/Driver/FxResolver.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,14 @@ type internal FxResolver =

member GetFrameworkRefsPackDirectory: unit -> string option

member GetSystemAssemblies: unit -> HashSet<string>
static member GetSystemAssemblies: unit -> HashSet<string>

/// Gets the selected target framework moniker, e.g netcore3.0, net472, and the running rid of the current machine
member GetTfmAndRid: unit -> string * string

member IsInReferenceAssemblyPackDirectory: fileName: string -> bool
/// Determines if an assembly is in the core set of assemblies with high likelihood of
/// being shared amongst a set of common scripting references
static member IsReferenceAssemblyPackDirectoryApprox: dirName: string -> bool

member TryGetDesiredDotNetSdkVersionForDirectory: unit -> Result<string, exn>

Expand Down