@@ -69,6 +69,9 @@ let SimulatedMSBuildResolver =
6969 { new Resolver with
7070 member __.HighestInstalledNetFrameworkVersion () = " v4.5"
7171 member __.DotNetFrameworkReferenceAssembliesRootDirectory =
72+ #if RESHAPED_ MSBUILD
73+ " "
74+ #else
7275 if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then
7376 let PF =
7477 match Environment.GetEnvironmentVariable( " ProgramFiles(x86)" ) with
@@ -77,10 +80,12 @@ let SimulatedMSBuildResolver =
7780 PF + @" \Reference Assemblies\Microsoft\Framework\.NETFramework"
7881 else
7982 " "
83+ #endif
8084
8185 member __.Resolve ( resolutionEnvironment , references , targetFrameworkVersion , targetFrameworkDirectories , targetProcessorArchitecture ,
8286 outputDirectory , fsharpCoreDir , explicitIncludeDirs , implicitIncludeDir , logMessage , logWarning , logError ) =
8387
88+ #if ! RESHAPED_ MSBUILD
8489 let registrySearchPaths () =
8590 [ let registryKey = @" Software\Microsoft\.NetFramework" ;
8691 use key = Registry.LocalMachine.OpenSubKey( registryKey)
@@ -107,23 +112,26 @@ let SimulatedMSBuildResolver =
107112 match subSubSubKey.GetValue( null ) with
108113 | : ? string as s -> yield s
109114 | _ -> () ]
110-
115+ #endif
111116
112117 let results = ResizeArray()
113118 let searchPaths =
114119 [ yield ! targetFrameworkDirectories
115120 yield ! explicitIncludeDirs
116121 yield fsharpCoreDir
117122 yield implicitIncludeDir
123+ #if ! RESHAPED_ MSBUILD
118124 if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then
119- yield ! registrySearchPaths() ]
125+ yield ! registrySearchPaths()
126+ #endif
127+ ]
120128
121129 for ( r, baggage) in references do
122- printfn " resolving %s " r
130+ // printfn "resolving %s" r
123131 let mutable found = false
124132 let success path =
125133 if not found then
126- printfn " resolved %s --> %s " r path
134+ // printfn "resolved %s --> %s" r path
127135 found <- true
128136 results.Add { itemSpec = path; prepareToolTip = snd; baggage= baggage }
129137
@@ -133,6 +141,7 @@ let SimulatedMSBuildResolver =
133141 success r
134142 with e -> logWarning " SR001" ( e.ToString())
135143
144+ #if ! RESHAPED_ MSBUILD
136145 // For this one we need to get the version search exactly right, without doing a load
137146 try
138147 if not found && r.StartsWith( " FSharp.Core, Version=" ) && Environment.OSVersion.Platform = PlatformID.Win32NT then
@@ -147,15 +156,7 @@ let SimulatedMSBuildResolver =
147156 if FileSystem.SafeExists( trialPath) then
148157 success trialPath
149158 with e -> logWarning " SR001" ( e.ToString())
150-
151- // Try to use Assemby.Load rather than searching paths for assemblies with explicit versions
152- try
153- if not found && r.Contains( " ," ) then
154- let ass = try Some ( Assembly.Load( r)) with _ -> None
155- match ass with
156- | None -> ()
157- | Some ass -> success ass.Location
158- with e -> logWarning " SR001" ( e.ToString())
159+ #endif
159160
160161 let isFileName =
161162 r.EndsWith( " dll" , StringComparison.OrdinalIgnoreCase) ||
@@ -171,31 +172,48 @@ let SimulatedMSBuildResolver =
171172 success trialPath
172173 with e -> logWarning " SR001" ( e.ToString())
173174
175+ #if ! RESHAPED_ MSBUILD
174176 try
175177 // Seach the GAC on Windows
176178 if not found && not isFileName && Environment.OSVersion.Platform = PlatformID.Win32NT then
177179 let n = AssemblyName( r)
178180 let netfx = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
179181 let gac = Path.Combine( Path.GetDirectoryName( Path.GetDirectoryName( netfx.TrimEnd( '\\' ))), " assembly" )
180- for gacdir in Directory.EnumerateDirectories( gac) do
181- let assdir = Path.Combine( gacdir, n.Name)
182- if Directory.Exists( assdir) then
183- let verdir = Path.Combine( assdir, " v4.0_" + n.Version.ToString()+ " __" + String.concat " " [| for b in n.GetPublicKeyToken() -> sprintf " %02x " b |])
184- printfn " searching GAC: %s " verdir
185-
186- if Directory.Exists( verdir) then
187- let trialPath = Path.Combine( verdir, qual)
188- printfn " searching GAC: %s " trialPath
189- if FileSystem.SafeExists( trialPath) then
190- success trialPath
182+ match n.Version, n.GetPublicKeyToken() with
183+ | null , _ | _, null ->
184+ let options =
185+ [ for gacdir in Directory.EnumerateDirectories( gac) do
186+ let assdir = Path.Combine( gacdir, n.Name)
187+ if Directory.Exists( assdir) then
188+ for tdir in Directory.EnumerateDirectories( assdir) do
189+ let trialPath = Path.Combine( tdir, qual)
190+ if FileSystem.SafeExists( trialPath) then
191+ yield trialPath ]
192+ //printfn "sorting GAC paths: %A" options
193+ options
194+ |> List.sort // puts latest version last
195+ |> List.tryLast
196+ |> function None -> () | Some p -> success p
197+
198+ | v, tok ->
199+ for gacdir in Directory.EnumerateDirectories( gac) do
200+ //printfn "searching GAC directory: %s" gacdir
201+ let assdir = Path.Combine( gacdir, n.Name)
202+ if Directory.Exists( assdir) then
203+ //printfn "searching GAC directory: %s" assdir
204+
205+ let tokText = String.concat " " [| for b in tok -> sprintf " %02x " b |]
206+ let verdir = Path.Combine( assdir, " v4.0_" + v.ToString()+ " __" + tokText)
207+ //printfn "searching GAC directory: %s" verdir
208+
209+ if Directory.Exists( verdir) then
210+ let trialPath = Path.Combine( verdir, qual)
211+ //printfn "searching GAC: %s" trialPath
212+ if FileSystem.SafeExists( trialPath) then
213+ success trialPath
191214 with e -> logWarning " SR001" ( e.ToString())
215+ #endif
192216
193-
194- //if not found then
195- // let ass = try Some (Assembly.Load(r)) with _ -> None
196- // match ass with
197- // | Some ass -> success ass.Location
198- // | None -> ()
199217 results.ToArray() }
200218
201219let GetDefaultResolver ( msbuildEnabled : bool , msbuildVersion : string option ) =
@@ -244,10 +262,10 @@ let fscoreDir =
244262let resolve s =
245263 SimulatedMSBuildResolver.Resolve( ResolutionEnvironment.CompileTimeLike,[| for a in s -> ( a, " " ) |], " v4.5.1" , [ SimulatedMSBuildResolver.DotNetFrameworkReferenceAssembliesRootDirectory + @" \v4.5.1" ], " " , " " , fscoreDir,[],__ SOURCE_ DIRECTORY__, ignore, ( fun _ _ -> ()), ( fun _ _ -> ()))
246264
247- // Resolve partial name
265+ // Resolve partial name to something on search path
248266resolve [ " FSharp.Core" ]
249267
250- // Resolve partial name
268+ // Resolve DLL name to something on search path
251269resolve [ " FSharp.Core.dll" ]
252270
253271// Resolve from reference assemblies
@@ -261,5 +279,11 @@ resolve [ "FSharp.Core, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7
261279
262280// Resolve from GAC:
263281resolve [ " EventViewer, Version=6.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ]
282+
283+ // Resolve from GAC:
284+ resolve [ " EventViewer" ]
285+
286+ resolve [ " Microsoft.SharePoint.Client, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" ]
287+ resolve [ " Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" ]
264288#endif
265289
0 commit comments