diff --git a/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs b/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs
index 50258738045..83474c1ff61 100644
--- a/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs
+++ b/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs
@@ -3699,26 +3699,93 @@ let _ = XmlProvider<"13">.GetSample()
let cleanFileName a = if a = fileName1 then "file1" else "??"
let fileNames = [|fileName1|]
- let args =
- [| yield! mkProjectCommandLineArgs (dllName, [])
- yield @"-r:" + (__SOURCE_DIRECTORY__ ++ ".." ++ "service" ++ "data" ++ "FSharp.Data.dll")
- yield @"-r:" + sysLib "System.Xml.Linq" |]
- let options = { checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) with SourceFiles = fileNames }
-// ".NET Core SKIPPED: Disabled until FSharp.Data.dll is build for dotnet core."
-[]
+ // Resolve FSharp.Data via dotnet restore in system temp (outside repo NuGet.Config scope),
+ // then copy runtime + design-time DLLs side-by-side so the type provider works with --simpleresolution.
+ let options = lazy (
+ let testDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
+ let stagingDir = Path.Combine(testDir, "FSharp.Data.Staging")
+ Directory.CreateDirectory(stagingDir) |> ignore
+
+ // Create a temp project OUTSIDE the repo tree to avoid the repo's restricted NuGet.Config
+ let restoreDir = Path.Combine(Path.GetTempPath(), "fsharp-test-resolve-fsharp-data")
+ Directory.CreateDirectory(restoreDir) |> ignore
+ let projContent = """
+ netstandard2.0
+
+"""
+ let projPath = Path.Combine(restoreDir, "Resolve.fsproj")
+ File.WriteAllText(projPath, projContent)
+ let packagesDir = Path.Combine(restoreDir, "packages")
+
+ let psi = System.Diagnostics.ProcessStartInfo("dotnet", sprintf "restore \"%s\" --packages \"%s\"" projPath packagesDir)
+ psi.RedirectStandardOutput <- true
+ psi.RedirectStandardError <- true
+ psi.UseShellExecute <- false
+ let p = System.Diagnostics.Process.Start(psi)
+ let stderr = p.StandardError.ReadToEnd()
+ let _stdout = p.StandardOutput.ReadToEnd()
+ p.WaitForExit(60000) |> ignore
+ if p.ExitCode <> 0 then
+ failwith (sprintf "dotnet restore failed (exit %d): %s" p.ExitCode stderr)
+
+ // Find FSharp.Data in the restored packages
+ let fsharpDataDirs = Directory.GetDirectories(packagesDir, "fsharp.data", System.IO.SearchOption.TopDirectoryOnly)
+ let packageDir =
+ if fsharpDataDirs.Length > 0 then
+ let versions = Directory.GetDirectories(fsharpDataDirs.[0])
+ if versions.Length > 0 then versions |> Array.sortDescending |> Array.head
+ else failwith "FSharp.Data package restored but no version directory found"
+ else failwith (sprintf "FSharp.Data not found in %s" packagesDir)
+
+ // Copy runtime + design-time DLLs into staging root
+ let libDir = Path.Combine(packageDir, "lib", "netstandard2.0")
+ if Directory.Exists(libDir) then
+ for src in Directory.GetFiles(libDir, "*.dll") do
+ File.Copy(src, Path.Combine(stagingDir, Path.GetFileName(src)), true)
+ let tpDir = Path.Combine(packageDir, "typeproviders", "fsharp41", "netstandard2.0")
+ if Directory.Exists(tpDir) then
+ for src in Directory.GetFiles(tpDir, "*.dll") do
+ File.Copy(src, Path.Combine(stagingDir, Path.GetFileName(src)), true)
+
+ // Also copy transitive deps (FSharp.Data.*.dll)
+ let transitivePkgs = ["fsharp.data.csv.core"; "fsharp.data.html.core"; "fsharp.data.http"; "fsharp.data.json.core"; "fsharp.data.runtime.utilities"; "fsharp.data.worldbank.core"; "fsharp.data.xml.core"]
+ for pkg in transitivePkgs do
+ let pkgDirs = Directory.GetDirectories(packagesDir, pkg, System.IO.SearchOption.TopDirectoryOnly)
+ if pkgDirs.Length > 0 then
+ let versions = Directory.GetDirectories(pkgDirs.[0])
+ if versions.Length > 0 then
+ let latestVersion = versions |> Array.sortDescending |> Array.head
+ let pkgLib = Path.Combine(latestVersion, "lib", "netstandard2.0")
+ if Directory.Exists(pkgLib) then
+ for src in Directory.GetFiles(pkgLib, "*.dll") do
+ let dest = Path.Combine(stagingDir, Path.GetFileName(src))
+ if not (File.Exists(dest)) then
+ File.Copy(src, dest, true)
+
+ // Build args: standard project args + staged FSharp.Data refs
+ let stagedRefs =
+ Directory.GetFiles(stagingDir, "*.dll")
+ |> Array.map (fun f -> "-r:" + f)
+ let args =
+ [| yield! mkProjectCommandLineArgs (dllName, [])
+ yield! stagedRefs |]
+ { checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) with SourceFiles = fileNames }
+ )
+
+// Resolved via NuGet at test time - skipped on signed CI
+[]
let ``Test Project25 whole project errors`` () =
- let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate
+ let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate
for e in wholeProjectResults.Diagnostics do
printfn "Project25 error: <<<%s>>>" e.Message
wholeProjectResults.Diagnostics.Length |> shouldEqual 0
-// ".NET Core SKIPPED: Disabled until FSharp.Data.dll is build for dotnet core."
-[]
+[]
let ``Test Project25 symbol uses of type-provided members`` () =
- let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate
+ let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate
let backgroundParseResults1, backgroundTypedParse1 =
- checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options)
+ checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options.Value)
|> Async.RunImmediate
let allUses =
@@ -3729,7 +3796,7 @@ let ``Test Project25 symbol uses of type-provided members`` () =
allUses |> shouldEqual
[|("FSharp", "file1", ((3, 5), (3, 11)), ["namespace"]);
- ("FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"; "provided"]);
+ ("FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"]);
("Microsoft.FSharp", "file1", ((3, 5), (3, 11)), ["namespace"]);
("Microsoft.FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"]);
("FSharp.Data.XmlProvider", "file1", ((4, 15), (4, 26)),
@@ -3770,12 +3837,11 @@ let ``Test Project25 symbol uses of type-provided members`` () =
usesOfGetSampleSymbol |> shouldEqual [|("file1", ((5, 8), (5, 25))); ("file1", ((10, 8), (10, 78)))|]
-// ".NET Core SKIPPED: Disabled until FSharp.Data.dll is build for dotnet core.")>]
-[]
+[]
let ``Test Project25 symbol uses of type-provided types`` () =
- let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate
+ let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate
let backgroundParseResults1, backgroundTypedParse1 =
- checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options)
+ checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options.Value)
|> Async.RunImmediate
let getSampleSymbolUseOpt =
@@ -3791,11 +3857,11 @@ let ``Test Project25 symbol uses of type-provided types`` () =
usesOfGetSampleSymbol |> shouldEqual [|("file1", ((4, 15), (4, 26))); ("file1", ((10, 8), (10, 19)))|]
-[]
+[]
let ``Test Project25 symbol uses of fully-qualified records`` () =
- let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate
+ let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate
let backgroundParseResults1, backgroundTypedParse1 =
- checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options)
+ checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options.Value)
|> Async.RunImmediate
let getSampleSymbolUseOpt =
diff --git a/tests/service/data/FSharp.Data.DesignTime.dll b/tests/service/data/FSharp.Data.DesignTime.dll
deleted file mode 100644
index db2a3317bbc..00000000000
Binary files a/tests/service/data/FSharp.Data.DesignTime.dll and /dev/null differ
diff --git a/tests/service/data/FSharp.Data.dll b/tests/service/data/FSharp.Data.dll
deleted file mode 100644
index 95b4d8a914b..00000000000
Binary files a/tests/service/data/FSharp.Data.dll and /dev/null differ
diff --git a/tests/service/data/sqlite-net-spike/Program.fs b/tests/service/data/sqlite-net-spike/Program.fs
deleted file mode 100644
index 7b92f756dd3..00000000000
--- a/tests/service/data/sqlite-net-spike/Program.fs
+++ /dev/null
@@ -1,49 +0,0 @@
-open System
-
-open SQLite.Net
-open SQLite.Net.Attributes
-open SQLite.Net.Platform.Generic
-
-type Site (url:string) =
- let mutable id = new int()
- let mutable BD = ""
- let mutable site = url
- let mutable shown = false
- let mutable exemplarcontributor = false
- [] []
- member x.ID with get() = id
- and set v = id <- v
- member x.ExemplarContributor with get() = exemplarcontributor
- and set v = exemplarcontributor <- v
- member x.Shown with get() = shown
- and set v = shown <- v
- member x.BreakDown with get() = BD
- and set v = BD <- v
- []
- member x.Site with get() = site
- and set v = site <- v
- member x.Url = url
- new() = Site "www.google.com"
-
-[]
-type Site2 =
- { id : int
- visited : string
- comment : string }
-
-type Database (path) =
- inherit SQLiteConnection(new SQLitePlatformGeneric(), path)
- member x.Setup() =
- base.CreateTable() |> ignore
- base.CreateTable() |> ignore
-
-[]
-let main argv =
- let D = new Database("test.sqlitedb")
- D.Setup() |> ignore
-
- let s = new Site "www.google.com"
- D.Insert(s) |> ignore
- D.Commit|>ignore
- 0
-
diff --git a/tests/service/data/sqlite-net-spike/packages.config b/tests/service/data/sqlite-net-spike/packages.config
deleted file mode 100644
index 666cb7f0e7b..00000000000
--- a/tests/service/data/sqlite-net-spike/packages.config
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/service/data/sqlite-net-spike/paket.references b/tests/service/data/sqlite-net-spike/paket.references
deleted file mode 100644
index 4b717d31d2a..00000000000
--- a/tests/service/data/sqlite-net-spike/paket.references
+++ /dev/null
@@ -1,2 +0,0 @@
-SQLite.Net.Platform.Generic
-SQLite.Net-PCL
\ No newline at end of file
diff --git a/tests/service/data/sqlite-net-spike/sqlite-net-spike.fsproj b/tests/service/data/sqlite-net-spike/sqlite-net-spike.fsproj
deleted file mode 100644
index 1b843e45318..00000000000
--- a/tests/service/data/sqlite-net-spike/sqlite-net-spike.fsproj
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
- Debug
- x86
- {BE87D723-5EAB-4B69-8F65-5EC072EF9E46}
- Exe
- sqlitenetspike
- sqlite-net-spike
- True
- v4.5
- 8.0.30703
- 2.0
-
-
- true
- false
- bin\Debug
- DEBUG
- prompt
- true
- false
- x86
-
-
- false
- none
- true
- bin\Release
- prompt
- x86
- true
- true
-
-
-
-
-
-
- ..\..\..\..\packages\Microsoft.Portable.FSharp.Core.10.1.0\lib\profiles\net40\FSharp.Core.dll
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\..\..\packages\SQLite.Net-PCL\lib\net4\SQLite.Net.dll
- True
- True
-
-
- ..\..\..\..\packages\SQLite.Net-PCL\lib\net4\SQLite.Net.Platform.Win32.dll
- True
- True
-
-
-
-
-
-
- ..\..\..\..\packages\SQLite.Net-PCL\lib\portable-win81+wpa81\SQLite.Net.dll
- True
- True
-
-
- ..\..\..\..\packages\SQLite.Net-PCL\lib\portable-win81+wpa81\SQLite.Net.Platform.WinRT.dll
- True
- True
-
-
-
-
-
-
-
-
- ..\..\..\..\packages\SQLite.Net.Platform.Generic\lib\net40\SQLite.Net.Platform.Generic.dll
- True
- True
-
-
-
-
-
\ No newline at end of file