Skip to content

Commit 3656cff

Browse files
committed
preliminary dependency isolation work
1 parent 4e668b4 commit 3656cff

File tree

8 files changed

+56
-21
lines changed

8 files changed

+56
-21
lines changed

FSharp.Compiler.Service.sln

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "package", "package", "{9020
8181
nuget\projectcracker.template = nuget\projectcracker.template
8282
EndProjectSection
8383
EndProject
84+
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Service.MSBuild.v12", "src\fsharp\FSharp.Compiler.Service.MSBuild.v12\FSharp.Compiler.Service.MSBuild.v12.fsproj", "{8157B50E-397D-4232-A4E0-1977AFC7076D}"
85+
EndProject
8486
Global
8587
GlobalSection(SolutionConfigurationPlatforms) = preSolution
8688
Debug|Any CPU = Debug|Any CPU
@@ -283,6 +285,24 @@ Global
283285
{FF76BD3C-5E0A-4752-B6C3-044F6E15719B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
284286
{FF76BD3C-5E0A-4752-B6C3-044F6E15719B}.Release|x86.ActiveCfg = Release|Any CPU
285287
{FF76BD3C-5E0A-4752-B6C3-044F6E15719B}.Release|x86.Build.0 = Release|Any CPU
288+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
289+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|Any CPU.Build.0 = Debug|Any CPU
290+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
291+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
292+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|x86.ActiveCfg = Debug|Any CPU
293+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|x86.Build.0 = Debug|Any CPU
294+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Proto|Any CPU.ActiveCfg = Release|Any CPU
295+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Proto|Any CPU.Build.0 = Release|Any CPU
296+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Proto|Mixed Platforms.ActiveCfg = Release|Any CPU
297+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Proto|Mixed Platforms.Build.0 = Release|Any CPU
298+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Proto|x86.ActiveCfg = Release|Any CPU
299+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Proto|x86.Build.0 = Release|Any CPU
300+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|Any CPU.ActiveCfg = Release|Any CPU
301+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|Any CPU.Build.0 = Release|Any CPU
302+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
303+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
304+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|x86.ActiveCfg = Release|Any CPU
305+
{8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|x86.Build.0 = Release|Any CPU
286306
EndGlobalSection
287307
GlobalSection(SolutionProperties) = preSolution
288308
HideSolutionNode = FALSE

src/assemblyinfo/assemblyinfo.FSharp.Compiler.Service.dll.fs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ open System.Runtime.InteropServices
1010
[<assembly:AssemblyProduct("F# Compiler Service (open source edition)")>]
1111

1212
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.Tests")>]
13+
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.MSBuild.v12")>]
14+
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.MSBuild.v12.Tests")>]
15+
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.MSBuild.v14")>]
16+
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.MSBuild.v14.Tests")>]
17+
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.MSBuild.v15")>]
18+
[<assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.Compiler.Service.MSBuild.v15.Tests")>]
1319
[<assembly:ComVisible(false)>]
1420

1521
#if NO_STRONG_NAMES

src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -604,9 +604,6 @@
604604
<Compile Include="..\..\utils\reshapedmsbuild.fs">
605605
<Link>Service/reshapedmsbuild.fs</Link>
606606
</Compile>
607-
<Compile Include="..\MSBuildReferenceResolver.fs">
608-
<Link>Service/MSBuildReferenceResolver.fs</Link>
609-
</Compile>
610607
<Compile Include="..\vs\service.fsi">
611608
<Link>Service/service.fsi</Link>
612609
</Compile>
@@ -633,21 +630,6 @@
633630
<Reference Include="System.Numerics" />
634631
<Reference Include="System.Runtime.Serialization" />
635632
<Reference Include="System.Xml" />
636-
<Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
637-
<Private>True</Private>
638-
</Reference>
639-
<Reference Include="Microsoft.Build.Engine, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
640-
<Private>True</Private>
641-
</Reference>
642-
<Reference Include="Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
643-
<Private>True</Private>
644-
</Reference>
645-
<Reference Include="Microsoft.Build.Utilities.v12.0">
646-
<Private>True</Private>
647-
</Reference>
648-
<Reference Include="Microsoft.Build.Tasks.v12.0">
649-
<Private>True</Private>
650-
</Reference>
651633
<Reference Include="FSharp.Core, Version=$(TargetFSharpCoreVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
652634
<Private>False</Private>
653635
</Reference>

src/fsharp/MSBuildReferenceResolver.fs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,15 +180,27 @@ module internal MSBuildReferenceResolver =
180180
| AssemblyFolders ->
181181
lineIfExists(resolvedPath)
182182
+ lineIfExists(fusionName)
183+
#if CROSS_PLATFORM_COMPILER
184+
+ "Found by AssemblyFolders registry key"
185+
#else
183186
+ (FSComp.SR.assemblyResolutionFoundByAssemblyFoldersKey())
187+
#endif
184188
| AssemblyFoldersEx ->
185189
lineIfExists(resolvedPath)
186190
+ lineIfExists(fusionName)
191+
#if CROSS_PLATFORM_COMPILER
192+
+ "Found by AssemblyFoldersEx registry key"
193+
#else
187194
+ (FSComp.SR.assemblyResolutionFoundByAssemblyFoldersExKey())
195+
#endif
188196
| TargetFrameworkDirectory ->
189197
lineIfExists(resolvedPath)
190198
+ lineIfExists(fusionName)
199+
#if CROSS_PLATFORM_COMPILER
200+
+ ".NET Framework"
201+
#else
191202
+ (FSComp.SR.assemblyResolutionNetFramework())
203+
#endif
192204
| Unknown ->
193205
// Unknown when resolved by plain directory search without help from MSBuild resolver.
194206
lineIfExists(resolvedPath)
@@ -197,7 +209,11 @@ module internal MSBuildReferenceResolver =
197209
lineIfExists(fusionName)
198210
| GlobalAssemblyCache ->
199211
lineIfExists(fusionName)
212+
#if CROSS_PLATFORM_COMPILER
213+
+ "Global Assembly Cache"
214+
#else
200215
+ (FSComp.SR.assemblyResolutionGAC())+ "\n"
216+
#endif
201217
+ lineIfExists(redist)
202218
| Path _ ->
203219
lineIfExists(resolvedPath)

src/fsharp/ReferenceResolver.fs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,14 @@ module internal ReferenceResolver =
5656
logwarning:(string->string->unit) *
5757
logerror:(string->string->unit)
5858
-> ResolvedFile[]
59+
60+
let GetDefaultResolver() =
61+
let msbuild12 =
62+
let ass = System.Reflection.Assembly.Load("FSharp.Compiler.Service.MSBuild.v12") |> Option.ofObj
63+
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)
65+
let resolver = obj |> Option.bind (fun obj -> match obj with :? Resolver as r -> Some r | _ -> None)
66+
resolver
67+
match msbuild12 with
68+
| None -> failwith "couldn't find FSharp.Compiler.Service.MSBuild.v12 resolver"
69+
| Some r -> r

src/fsharp/fsi/fsi.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2374,7 +2374,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i
23742374
if containsRequiredFiles then defaultFSharpBinariesDir
23752375
else Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None).Value
23762376

2377-
let referenceResolver = MSBuildReferenceResolver.Resolver
2377+
let referenceResolver = ReferenceResolver.GetDefaultResolver()
23782378
let tcConfigB =
23792379
TcConfigBuilder.CreateNew(referenceResolver,
23802380
defaultFSharpBinariesDir,

src/fsharp/vs/SimpleServices.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ namespace Microsoft.FSharp.Compiler.SimpleSourceCodeServices
113113
let checker = InteractiveChecker.Create()
114114
let fileversion = 0
115115
let loadTime = DateTime.Now
116-
let referenceResolver = MSBuildReferenceResolver.Resolver
116+
let referenceResolver = ReferenceResolver.GetDefaultResolver()
117117

118118
/// Tokenize a single line, returning token information and a tokenization state represented by an integer
119119
member x.TokenizeLine (line: string, state: int64) : FSharpTokenInfo[] * int64 =

src/fsharp/vs/service.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2737,7 +2737,7 @@ type FSharpChecker(referenceResolver, projectCacheSize, keepAssemblyContents, ke
27372737

27382738
/// Instantiate an interactive checker.
27392739
static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions) =
2740-
let referenceResolver = MSBuildReferenceResolver.Resolver
2740+
let referenceResolver = ReferenceResolver.GetDefaultResolver()
27412741
let keepAssemblyContents = defaultArg keepAssemblyContents false
27422742
let keepAllBackgroundResolutions = defaultArg keepAllBackgroundResolutions true
27432743
let projectCacheSizeReal = defaultArg projectCacheSize projectCacheSizeDefault

0 commit comments

Comments
 (0)