@@ -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\M icrosoft\. 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