Skip to content

Commit a37e295

Browse files
committed
misc
1 parent ee381fa commit a37e295

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/fsharp/ReferenceResolver.fs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,51 @@ module internal ReferenceResolver =
5757
logerror:(string->string->unit)
5858
-> ResolvedFile[]
5959

60+
open System
61+
open System.IO
62+
let ScriptingNaiveResolver =
63+
{ new Resolver with
64+
member __.HighestInstalledNetFrameworkVersion() = "v4.5"
65+
member __.DotNetFrameworkReferenceAssembliesRootDirectory = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
66+
member __.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture,
67+
outputDirectory, fsharpCoreDir, explicitIncludeDirs, implicitIncludeDir, logMessage, logWarning, logError) =
68+
69+
let searchPaths =
70+
[ yield! targetFrameworkDirectories
71+
if not (String.IsNullOrEmpty(rawFileName)) then
72+
let rawDir = Path.GetDirectoryName(rawFileName)
73+
if not (String.IsNullOrEmpty(Path.GetDirectoryName(rawFileName))) then
74+
yield rawDir
75+
yield! explicitIncludeDirs
76+
yield fsharpCoreDir
77+
yield implicitIncludeDir
78+
for reg in
79+
"Software\Microsoft\.NetFramework", "AssemblyFoldersEx" , ""
80+
[sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions] @ // Like {Registry:Software\Microsoft\.NETFramework,v2.0,AssemblyFoldersEx}
81+
["{AssemblyFolders}"] @
82+
["{GAC}"] @
83+
// use path to implementation assemblies as the last resort
84+
GetPathToDotNetFrameworkImlpementationAssemblies targetFrameworkVersion
85+
for dir in
86+
(// These are search paths for compile-like resolution. GAC searching is not present.
87+
["{TargetFrameworkDirectory}"] @
88+
rawFileNamePath @ // Quick-resolve straight to filename first
89+
explicitIncludeDirs @ // From -I, #I
90+
[fsharpCoreDir] @ // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe
91+
[implicitIncludeDir] @ // Usually the project directory
92+
[sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions] @ // Like {Registry:Software\Microsoft\.NETFramework,v2.0,AssemblyFoldersEx}
93+
["{AssemblyFolders}"] @
94+
[outputDirectory] @
95+
["{GAC}"] @
96+
// use path to implementation assemblies as the last resort
97+
GetPathToDotNetFrameworkImlpementationAssemblies targetFrameworkVersion
98+
99+
60100
let GetDefaultResolver() =
61101
let msbuild12 =
62102
let ass = System.Reflection.Assembly.Load("FSharp.Compiler.Service.MSBuild.v12") |> Option.ofObj
63103
let ty = ass |> Option.bind (fun ass -> ass.GetType("Microsoft.FSharp.Compiler.MSBuildReferenceResolver") |> Option.ofObj)
64-
let obj = ty |> Option.bind (fun ty -> ty.InvokeMember("Resolver",System.Reflection.BindingFlags.Static ||| System.Reflection.BindingFlags.Public ||| System.Reflection.BindingFlags.InvokeMethod ||| System.Reflection.BindingFlags.NonPublic, null, null, null) |> Option.ofObj)
104+
let obj = ty |> Option.bind (fun ty -> ty.InvokeMember("get_Resolver",System.Reflection.BindingFlags.Static ||| System.Reflection.BindingFlags.Public ||| System.Reflection.BindingFlags.InvokeMethod ||| System.Reflection.BindingFlags.NonPublic, null, null, [| |]) |> Option.ofObj)
65105
let resolver = obj |> Option.bind (fun obj -> match obj with :? Resolver as r -> Some r | _ -> None)
66106
resolver
67107
match msbuild12 with

0 commit comments

Comments
 (0)