From 40f635fe3f746f3b792d9b8c47ac081fdeb37545 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Wed, 24 Oct 2018 15:10:36 -0400 Subject: [PATCH 01/15] Migrate to SDK-style projects --- build.fsx | 6 +- docs/tools/generate.fsx | 2 +- nuget/SqlClient.nuspec | 9 +- src/SqlClient.Tests/Lib/Lib.fsproj | 409 +-------------- .../SqlClient.Tests.NET40.fsproj | 404 +-------------- src/SqlClient.Tests/SqlClient.Tests.fsproj | 470 +----------------- src/SqlClient.Tests/app.config | 3 +- src/SqlClient.Tests/paket.references | 1 + src/SqlClient/Properties/launchSettings.json | 9 + src/SqlClient/SqlClient.fsproj | 451 +---------------- src/SqlClient/SqlCommandProvider.fs | 9 +- 11 files changed, 63 insertions(+), 1710 deletions(-) create mode 100644 src/SqlClient/Properties/launchSettings.json diff --git a/build.fsx b/build.fsx index e44811e8..83c16637 100644 --- a/build.fsx +++ b/build.fsx @@ -40,7 +40,7 @@ let release = let version = release.AssemblyVersion let releaseNotes = release.Notes |> String.concat "\n" -let testDir = "bin" +let testDir = "bin/net451" // -------------------------------------------------------------------------------------- // Generate assembly info files with the right version & up-to-date information @@ -71,7 +71,7 @@ Target.create "CleanDocs" (fun _ -> Target.create "Build" (fun _ -> files (["SqlClient.sln"]) - |> MSBuild.runRelease id "" "Rebuild" + |> MSBuild.runRelease id "" "Restore;Rebuild" |> ignore ) @@ -142,7 +142,7 @@ Target.create "DeployTestDB" (fun _ -> Target.create "BuildTests" (fun _ -> files ["Tests.sln"] - |> MSBuild.runReleaseExt id "" ([]) "Rebuild" + |> MSBuild.runRelease id "" "Restore;Rebuild" |> ignore ) diff --git a/docs/tools/generate.fsx b/docs/tools/generate.fsx index 50c485d9..2a3f1040 100644 --- a/docs/tools/generate.fsx +++ b/docs/tools/generate.fsx @@ -30,7 +30,7 @@ Fake.Core.Context.setExecutionContext (Fake.Core.Context.RuntimeContext.Fake exe let root = "." // Paths with template/source/output locations -let bin = __SOURCE_DIRECTORY__ @@ "../../bin" +let bin = __SOURCE_DIRECTORY__ @@ "../../bin/net40" let content = __SOURCE_DIRECTORY__ @@ "../content" let output = __SOURCE_DIRECTORY__ @@ "../output" let files = __SOURCE_DIRECTORY__ @@ "../files" diff --git a/nuget/SqlClient.nuspec b/nuget/SqlClient.nuspec index 0ac33b3e..5c1ae3a6 100644 --- a/nuget/SqlClient.nuspec +++ b/nuget/SqlClient.nuspec @@ -23,9 +23,10 @@ - - - - + + + + + \ No newline at end of file diff --git a/src/SqlClient.Tests/Lib/Lib.fsproj b/src/SqlClient.Tests/Lib/Lib.fsproj index ad6a20c6..95ca58ad 100644 --- a/src/SqlClient.Tests/Lib/Lib.fsproj +++ b/src/SqlClient.Tests/Lib/Lib.fsproj @@ -1,54 +1,14 @@  - - + - Debug - AnyCPU - 2.0 - 17ee08f0-ce4c-4c17-a376-157249c9abc2 - Library - Lib + net452 Lib - v4.5.2 - 4.4.0.0 + false true - Lib - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - bin\Debug\Lib.XML + + .\bin\release\Lib.XML - - pdbonly - true - true - bin\Release\ - TRACE - 3 - bin\Release\Lib.XML - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - @@ -57,366 +17,11 @@ - ..\..\..\bin\FSharp.Data.SqlClient.dll - - - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Types.dll + ..\..\..\bin\net40\FSharp.Data.SqlClient.dll - - - - - - - - - - ..\..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - - - - ..\..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll - True - True - - - - - - - - - ..\..\..\packages\Microsoft.Win32.Primitives\lib\net46\Microsoft.Win32.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.AppContext\lib\net46\System.AppContext.dll - True - True - - - - - - - - - ..\..\..\packages\System.Console\lib\net46\System.Console.dll - True - True - - - - - - - - - ..\..\..\packages\System.Globalization.Calendars\lib\net46\System.Globalization.Calendars.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO\lib\net462\System.IO.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.Compression\lib\net46\System.IO.Compression.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.IO.Compression.ZipFile\lib\net46\System.IO.Compression.ZipFile.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq\lib\net463\System.Linq.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Net.Http\lib\net46\System.Net.Http.dll - True - True - - - - - - - - - ..\..\..\packages\System.Net.Sockets\lib\net46\System.Net.Sockets.dll - True - True - - - - - - - - - ..\..\..\packages\System.Reflection\lib\net462\System.Reflection.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.Runtime\lib\net462\System.Runtime.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.InteropServices.RuntimeInformation\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.X509Certificates\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - True - - - - - - - - - ..\..\..\packages\System.Text.RegularExpressions\lib\net463\System.Text.RegularExpressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.Thread\lib\net46\System.Threading.Thread.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.ThreadPool\lib\net46\System.Threading.ThreadPool.dll - True - True - - - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net461\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net47\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.Xml.ReaderWriter\lib\net46\System.Xml.ReaderWriter.dll - True - True - - - - + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj b/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj index 3df52d8a..1fbfc94a 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj +++ b/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj @@ -1,60 +1,15 @@  - - + - Debug - AnyCPU - 2.0 - de2ec181-0452-415d-82c3-1d43168d4ff1 Exe - SqlClient.Tests.NET40 + net40 SqlClient.Tests.NET40 - v4.0 + false true - 4.3.0.0 - SqlClient.Tests.NET40 - - ..\..\..\ - - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - AnyCPU - bin\Debug\SqlClient.Tests.NET40.XML - true - pdbonly - true - true - bin\Release\ - TRACE - 3 - AnyCPU bin\Release\SqlClient.Tests.NET40.XML - true - - - 11 - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - @@ -62,360 +17,11 @@ - ..\..\..\bin\FSharp.Data.SqlClient.dll + ..\..\..\bin\net40\FSharp.Data.SqlClient.dll - - - - - - - - - - ..\..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - - - - ..\..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll - True - True - - - - - - - - - ..\..\..\packages\Microsoft.Win32.Primitives\lib\net46\Microsoft.Win32.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.AppContext\lib\net46\System.AppContext.dll - True - True - - - - - - - - - ..\..\..\packages\System.Console\lib\net46\System.Console.dll - True - True - - - - - - - - - ..\..\..\packages\System.Globalization.Calendars\lib\net46\System.Globalization.Calendars.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO\lib\net462\System.IO.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.Compression\lib\net46\System.IO.Compression.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.IO.Compression.ZipFile\lib\net46\System.IO.Compression.ZipFile.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq\lib\net463\System.Linq.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Net.Http\lib\net46\System.Net.Http.dll - True - True - - - - - - - - - ..\..\..\packages\System.Net.Sockets\lib\net46\System.Net.Sockets.dll - True - True - - - - - - - - - ..\..\..\packages\System.Reflection\lib\net462\System.Reflection.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.Runtime\lib\net462\System.Runtime.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.InteropServices.RuntimeInformation\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.X509Certificates\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - True - - - - - - - - - ..\..\..\packages\System.Text.RegularExpressions\lib\net463\System.Text.RegularExpressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.Thread\lib\net46\System.Threading.Thread.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.ThreadPool\lib\net46\System.Threading.ThreadPool.dll - True - True - - - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net461\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net47\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True - True - - - - - - - - - ..\..\..\packages\System.Xml.ReaderWriter\lib\net46\System.Xml.ReaderWriter.dll - True - True - - - - + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.Tests.fsproj b/src/SqlClient.Tests/SqlClient.Tests.fsproj index 531c7154..9b4f299e 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.fsproj +++ b/src/SqlClient.Tests/SqlClient.Tests.fsproj @@ -1,73 +1,20 @@  - - - - + - Debug - AnyCPU - 2.0 - 624c31ff-2003-4334-b02e-ad5a79fe9ed8 - Library - Tests + net451 SqlClient.Tests - v4.5.1 - SqlClient.Tests - ..\ - 4.3.1.0 - + false true - - - true - full - false - false ..\..\bin\ - DEBUG;TRACE - 3 - - 101 - --warnon:1182 - true - - - pdbonly - true - true - ..\..\bin\ - TRACE - 3 - ..\..\bin\SqlClient.Tests.XML - --warnon:1182 - 101 + + DEBUG;TRACE + true - - 11 + + ..\..\bin\net451\SqlClient.Tests.XML - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - - <__paket__xunit_runner_visualstudio_props>net20\xunit.runner.visualstudio - - - - @@ -104,410 +51,13 @@ - ..\..\bin\FSharp.Data.SqlClient.dll + ..\..\bin\net40\FSharp.Data.SqlClient.dll - - - - - - - - - - - ..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - - - - ..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll - True - True - - - - - - - - - ..\..\packages\Microsoft.Win32.Primitives\lib\net46\Microsoft.Win32.Primitives.dll - True - True - - - - - - - - - ..\..\packages\System.AppContext\lib\net46\System.AppContext.dll - True - True - - - - - - - - - ..\..\packages\System.Console\lib\net46\System.Console.dll - True - True - - - - - - - - - ..\..\packages\System.Globalization.Calendars\lib\net46\System.Globalization.Calendars.dll - True - True - - - - - - - - - ..\..\packages\System.IO\lib\net462\System.IO.dll - True - True - - - - - - - - - ..\..\packages\System.IO.Compression\lib\net46\System.IO.Compression.dll - True - True - - - - - - - - - True - - - ..\..\packages\System.IO.Compression.ZipFile\lib\net46\System.IO.Compression.ZipFile.dll - True - True - - - - - - - - - ..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll - True - True - - - - - - - - - ..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - - - - - - - ..\..\packages\System.Linq\lib\net463\System.Linq.dll - True - True - - - - - - - - - ..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.dll - True - True - - - - - - - - - ..\..\packages\System.Net.Http\lib\net46\System.Net.Http.dll - True - True - - - - - - - - - ..\..\packages\System.Net.Sockets\lib\net46\System.Net.Sockets.dll - True - True - - - - - - - - - ..\..\packages\System.Reflection\lib\net462\System.Reflection.dll - True - True - - - - - - - - - True - - - ..\..\packages\System.Runtime\lib\net462\System.Runtime.dll - True - True - - - - - - - - - ..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll - True - True - - - - - - - - - ..\..\packages\System.Runtime.InteropServices.RuntimeInformation\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.X509Certificates\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - True - - - - - - - - - ..\..\packages\System.Text.RegularExpressions\lib\net463\System.Text.RegularExpressions.dll - True - True - - - - - - - - - ..\..\packages\System.Threading.Thread\lib\net46\System.Threading.Thread.dll - True - True - - - - - - - - - ..\..\packages\System.Threading.ThreadPool\lib\net46\System.Threading.ThreadPool.dll - True - True - - - - - - - - - ..\..\packages\System.ValueTuple\lib\net461\System.ValueTuple.dll - True - True - - - - - - - ..\..\packages\System.ValueTuple\lib\net47\System.ValueTuple.dll - True - True - - - - - - - ..\..\packages\System.ValueTuple\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - ..\..\packages\System.ValueTuple\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True - True - - - - - - - - - ..\..\packages\System.Xml.ReaderWriter\lib\net46\System.Xml.ReaderWriter.dll - True - True - - - - - - - - - ..\..\packages\test\FSharp.Configuration\lib\net45\FSharp.Configuration.dll - True - True - - - ..\..\packages\test\FSharp.Configuration\lib\net45\SharpYaml.dll - True - True - - - - - - - - - ..\..\packages\test\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\test\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll - True - True - - - - - - - - - ..\..\packages\test\xunit\lib\net20\xunit.dll - True - True - - - - + \ No newline at end of file diff --git a/src/SqlClient.Tests/app.config b/src/SqlClient.Tests/app.config index ba8af367..89c373c5 100644 --- a/src/SqlClient.Tests/app.config +++ b/src/SqlClient.Tests/app.config @@ -7,8 +7,9 @@ + True - + True diff --git a/src/SqlClient.Tests/paket.references b/src/SqlClient.Tests/paket.references index f1641dd7..63e39467 100644 --- a/src/SqlClient.Tests/paket.references +++ b/src/SqlClient.Tests/paket.references @@ -1,4 +1,5 @@ FSharp.Core +Microsoft.SqlServer.Types group Test FSharp.Configuration diff --git a/src/SqlClient/Properties/launchSettings.json b/src/SqlClient/Properties/launchSettings.json new file mode 100644 index 00000000..c5369615 --- /dev/null +++ b/src/SqlClient/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "SqlClient": { + "commandName": "Executable", + "executablePath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\Common7\\IDE\\devenv.exe", + "commandLineArgs": "..\\..\\Tests.sln" + } + } +} \ No newline at end of file diff --git a/src/SqlClient/SqlClient.fsproj b/src/SqlClient/SqlClient.fsproj index 2ba45353..14b93d92 100644 --- a/src/SqlClient/SqlClient.fsproj +++ b/src/SqlClient/SqlClient.fsproj @@ -1,59 +1,22 @@  - - + - Debug - AnyCPU - 2.0 - 8974ce2e-79b4-4887-859a-b853c2624138 - Library - SqlCommandTypeProvider + net40 FSharp.Data.SqlClient - v4.0 - SqlClient - - 4.3.0.0 - ..\..\ - - - true - full - false - false - ..\..\bin\ - DEBUG;TRACE - 3 - - - Program - C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe - ..\Tests.sln + false + true + ..\..\bin 101 - --warnon:1182 + + true - + DEBUG;TRACE - - pdbonly - true - true - ..\..\bin - TRACE - 3 - ..\..\bin\FSharp.Data.SqlClient.XML - Program - C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe - ..\Tests.sln - - - 101 - --warnon:1182 + + ..\..\bin\net40\FSharp.Data.SqlClient.XML - - - @@ -62,6 +25,10 @@ + + True + ProvidedTypesTesting.fs + True ProvidedTypes.fsi @@ -70,10 +37,6 @@ True ProvidedTypes.fs - - True - ProvidedTypesTesting.fs - @@ -94,389 +57,5 @@ - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - - - - - ..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - - - - ..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll - True - True - - - - - - - - - ..\..\packages\Microsoft.SqlServer.TransactSql.ScriptDom\lib\net40\Microsoft.SqlServer.TransactSql.ScriptDom.dll - True - True - - - - - - - - - ..\..\packages\Microsoft.SqlServer.Types\lib\net40\Microsoft.SqlServer.Types.dll - True - True - - - - - - - - - ..\..\packages\Microsoft.Win32.Primitives\lib\net46\Microsoft.Win32.Primitives.dll - True - True - - - - - - - - - ..\..\packages\System.AppContext\lib\net46\System.AppContext.dll - True - True - - - - - - - - - ..\..\packages\System.Console\lib\net46\System.Console.dll - True - True - - - - - - - - - ..\..\packages\System.Globalization.Calendars\lib\net46\System.Globalization.Calendars.dll - True - True - - - - - - - - - ..\..\packages\System.IO\lib\net462\System.IO.dll - True - True - - - - - - - - - ..\..\packages\System.IO.Compression\lib\net46\System.IO.Compression.dll - True - True - - - - - - - - - True - - - ..\..\packages\System.IO.Compression.ZipFile\lib\net46\System.IO.Compression.ZipFile.dll - True - True - - - - - - - - - ..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll - True - True - - - - - - - - - ..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - - - - - - - ..\..\packages\System.Linq\lib\net463\System.Linq.dll - True - True - - - - - - - - - ..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.dll - True - True - - - - - - - - - ..\..\packages\System.Net.Http\lib\net46\System.Net.Http.dll - True - True - - - - - - - - - ..\..\packages\System.Net.Sockets\lib\net46\System.Net.Sockets.dll - True - True - - - - - - - - - ..\..\packages\System.Reflection\lib\net462\System.Reflection.dll - True - True - - - - - - - - - True - - - ..\..\packages\System.Runtime\lib\net462\System.Runtime.dll - True - True - - - - - - - - - ..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll - True - True - - - - - - - - - ..\..\packages\System.Runtime.InteropServices.RuntimeInformation\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - - - - - - - ..\..\packages\System.Security.Cryptography.X509Certificates\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - True - - - - - - - - - ..\..\packages\System.Text.RegularExpressions\lib\net463\System.Text.RegularExpressions.dll - True - True - - - - - - - - - ..\..\packages\System.Threading.Thread\lib\net46\System.Threading.Thread.dll - True - True - - - - - - - - - ..\..\packages\System.Threading.ThreadPool\lib\net46\System.Threading.ThreadPool.dll - True - True - - - - - - - - - ..\..\packages\System.ValueTuple\lib\net461\System.ValueTuple.dll - True - True - - - - - - - ..\..\packages\System.ValueTuple\lib\net47\System.ValueTuple.dll - True - True - - - - - - - ..\..\packages\System.ValueTuple\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - ..\..\packages\System.ValueTuple\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True - True - - - - - - - - - ..\..\packages\System.Xml.ReaderWriter\lib\net46\System.Xml.ReaderWriter.dll - True - True - - - - + \ No newline at end of file diff --git a/src/SqlClient/SqlCommandProvider.fs b/src/SqlClient/SqlCommandProvider.fs index a0509534..55a717a0 100644 --- a/src/SqlClient/SqlCommandProvider.fs +++ b/src/SqlClient/SqlCommandProvider.fs @@ -25,13 +25,14 @@ open ProviderImplementation.ProvidedTypes #endif do() +module X = + // need to make sure microsoft.sqlserver.types is included as a referenced assembly + let x = Microsoft.SqlServer.Types.SqlHierarchyId() + [] [] type SqlCommandProvider(config : TypeProviderConfig) as this = - inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) - - // need to make sure microsoft.sqlserver.types is included as a referenced assembly - let _ = Microsoft.SqlServer.Types.SqlGeography.Null + inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) let nameSpace = this.GetType().Namespace let assembly = Assembly.LoadFrom( config.RuntimeAssembly) From 4bf0a0a148e3f2c97acf02c6d18ec3736598c675 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Thu, 25 Oct 2018 12:39:29 -0400 Subject: [PATCH 02/15] Simplify provided type caching --- src/SqlClient/ProvidedTypesCache.fs | 22 ++++------ src/SqlClient/SingleRootTypeProvider.fs | 56 ++----------------------- src/SqlClient/SqlClientProvider.fs | 11 +---- src/SqlClient/SqlCommandProvider.fs | 9 +--- src/SqlClient/SqlEnumProvider.fs | 6 +-- 5 files changed, 15 insertions(+), 89 deletions(-) diff --git a/src/SqlClient/ProvidedTypesCache.fs b/src/SqlClient/ProvidedTypesCache.fs index 82e8c4fb..baea7bd7 100644 --- a/src/SqlClient/ProvidedTypesCache.fs +++ b/src/SqlClient/ProvidedTypesCache.fs @@ -1,18 +1,12 @@ [] -module FSharp.Data.SqlClient.Cache +module internal FSharp.Data.SqlClient.Cache -open System -open System.Runtime.Caching -open ProviderImplementation.ProvidedTypes +open System.Collections.Concurrent -type MemoryCache with - member this.GetOrAdd<'T>(key, value: Lazy<'T>, ?expiration): 'T = - let policy = CacheItemPolicy() - policy.SlidingExpiration <- defaultArg expiration <| TimeSpan.FromHours 24. - match this.AddOrGetExisting(key, value, policy) with - | :? Lazy<'T> as item -> - item.Value - | x -> - assert(x = null) - value.Value +type TypeName = string +type Cache<'a>() = + let cache = ConcurrentDictionary>() + + member __.GetOrAdd(typeName: TypeName, value: Lazy<'a>): 'a = + cache.GetOrAdd(typeName, value).Value \ No newline at end of file diff --git a/src/SqlClient/SingleRootTypeProvider.fs b/src/SqlClient/SingleRootTypeProvider.fs index 00ecbdeb..d784d421 100644 --- a/src/SqlClient/SingleRootTypeProvider.fs +++ b/src/SqlClient/SingleRootTypeProvider.fs @@ -1,63 +1,16 @@ namespace ProviderImplementation.ProvidedTypes +open FSharp.Data.SqlClient open Microsoft.FSharp.Core.CompilerServices open System.Reflection -open System.Runtime.Caching open System -open System.Collections.Concurrent - -type CacheWithMonitors (providerName) = - //cache - let changeMonitors = ConcurrentBag() - [] - let mutable isDisposing = false - let cache = new MemoryCache(providerName) - - member x.ClearCache() = - while not changeMonitors.IsEmpty do - let removed, (monitor: CacheEntryChangeMonitor) = changeMonitors.TryTake() - if removed then monitor.Dispose() - - // http://stackoverflow.com/a/29916907 - cache - |> Seq.map (fun e -> e.Key) - |> Seq.toArray - |> Array.iter (cache.Remove >> ignore) - - member x.CacheGetOrAdd(key, value: Lazy, monitors, invalidate) = - let policy = CacheItemPolicy() - monitors |> Seq.iter policy.ChangeMonitors.Add - let existing = cache.AddOrGetExisting(key, value, policy) - let cacheItem = - if existing = null - then - let m = cache.CreateCacheEntryChangeMonitor [ key ] - m.NotifyOnChanged(fun _ -> - x.ClearCache() - invalidate() - ) - changeMonitors.Add(m) - value - else - unbox existing - - cacheItem.Value - - interface IDisposable with - member x.Dispose () = - if not isDisposing then - isDisposing <- true - x.ClearCache() - cache.Dispose() - - [] [] type SingleRootTypeProvider(config: TypeProviderConfig, providerName, parameters, ?isErased) as this = inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) - let cache = new CacheWithMonitors(providerName) + let cache = new Cache() do let isErased = defaultArg isErased true let nameSpace = this.GetType().Namespace @@ -69,12 +22,9 @@ type SingleRootTypeProvider(config: TypeProviderConfig, providerName, parameters parameters = parameters, instantiationFunction = fun typeName args -> let typ, monitors = this.CreateRootType(assembly, nameSpace, typeName, args) - cache.CacheGetOrAdd(typeName, typ, monitors |> Seq.cast, this.Invalidate) + cache.GetOrAdd(typeName, typ) ) this.AddNamespace( nameSpace, [ providerType ]) - do - this.Disposing.Add <| fun _ -> (cache :> IDisposable).Dispose() - abstract CreateRootType: assemblyName: Assembly * nameSpace: string * typeName: string * args: obj[] -> Lazy * obj[] // ChangeMonitor[] underneath but there is a problem https://github.com/fsprojects/FSharp.Data.SqlClient/issues/234#issuecomment-240694390 diff --git a/src/SqlClient/SqlClientProvider.fs b/src/SqlClient/SqlClientProvider.fs index a7ad0b04..3c883e72 100644 --- a/src/SqlClient/SqlClientProvider.fs +++ b/src/SqlClient/SqlClientProvider.fs @@ -7,13 +7,9 @@ open System.Data.SqlClient open System.Diagnostics open System.IO open System.Reflection -open System.Runtime.Caching -open System.Data.SqlTypes open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Quotations -open Microsoft.SqlServer.Server - open ProviderImplementation.ProvidedTypes open FSharp.Data.SqlClient @@ -27,13 +23,11 @@ type SqlProgrammabilityProvider(config : TypeProviderConfig) as this = let nameSpace = this.GetType().Namespace let providerType = ProvidedTypeDefinition(assembly, nameSpace, "SqlProgrammabilityProvider", Some typeof, hideObjectMethods = true) - let cache = new MemoryCache(name = this.GetType().Name) - let methodsCache = new MemoryCache(name = this.GetType().Name) + let cache = new Cache() + let methodsCache = new Cache() do this.Disposing.Add <| fun _ -> - cache.Dispose() - methodsCache.Dispose() clearDataTypesMap() do //this.RegisterRuntimeAssemblyLocationAsProbingFolder( config) @@ -559,4 +553,3 @@ type SqlProgrammabilityProvider(config : TypeProviderConfig) as this = methodsCache.GetOrAdd(methodName, getMethodImpl) )) rootType.AddMember m - diff --git a/src/SqlClient/SqlCommandProvider.fs b/src/SqlClient/SqlCommandProvider.fs index 55a717a0..febb502a 100644 --- a/src/SqlClient/SqlCommandProvider.fs +++ b/src/SqlClient/SqlCommandProvider.fs @@ -1,16 +1,10 @@ namespace FSharp.Data open System -open System.Data open System.IO open System.Data.SqlClient open System.Reflection -open System.Collections.Generic open System.Runtime.CompilerServices -open System.Configuration -open System.Runtime.Caching - -open Microsoft.SqlServer.Server open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Quotations @@ -38,12 +32,11 @@ type SqlCommandProvider(config : TypeProviderConfig) as this = let assembly = Assembly.LoadFrom( config.RuntimeAssembly) let providerType = ProvidedTypeDefinition(assembly, nameSpace, "SqlCommandProvider", Some typeof, hideObjectMethods = true) - let cache = new MemoryCache(name = this.GetType().Name) + let cache = new Cache() do this.Disposing.Add <| fun _ -> try - cache.Dispose() clearDataTypesMap() with _ -> () diff --git a/src/SqlClient/SqlEnumProvider.fs b/src/SqlClient/SqlEnumProvider.fs index c1211581..28d8b769 100644 --- a/src/SqlClient/SqlEnumProvider.fs +++ b/src/SqlClient/SqlEnumProvider.fs @@ -5,7 +5,6 @@ open System.Collections.Generic open System.Data open System.Data.Common open System -open System.Runtime.Caching open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Quotations @@ -31,7 +30,7 @@ type SqlEnumProvider(config : TypeProviderConfig) as this = // let tempAssembly = ProvidedAssembly() // do tempAssembly.AddTypes [providerType] - let cache = new MemoryCache(name = this.GetType().Name) + let cache = new Cache() static let allowedTypesForEnum = HashSet [| @@ -43,9 +42,6 @@ type SqlEnumProvider(config : TypeProviderConfig) as this = xs.UnionWith( allowedTypesForEnum) xs - do - this.Disposing.Add <| fun _ -> cache.Dispose() - do providerType.DefineStaticParameters( parameters = [ From 1421c08b89a5b339b8e6c3b79f25e801d30e61bb Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Wed, 17 Oct 2018 22:15:05 -0400 Subject: [PATCH 03/15] Split TP into separate design time and runtime assemblies --- SqlClient.sln | 15 +- Tests.sln | 19 +- build.fsx | 4 +- nuget/SqlClient.nuspec | 5 + paket.dependencies | 2 +- src/SqlClient.DesignTime/AssemblyInfo.fs | 20 ++ .../DesignTime.fs | 70 +----- .../DesignTimeConnectionString.fs | 72 ++++++ .../ProvidedTypesCache.fs | 0 .../QuotationsFactory.fs | 7 +- .../Scripts/ReverseLineOrderForNotex.fsx | 0 .../Scripts/Scratchpad.fsx | 0 .../Scripts/XE.fsx | 0 .../SingleFileChangeMonitor.fs | 0 .../SingleRootTypeProvider.fs | 4 +- .../SqlClient.DesignTime.fsproj | 54 +++++ .../SqlClientExtensions.fs | 160 +------------ .../SqlClientProvider.fs | 5 +- .../SqlCommandProvider.fs | 11 +- .../SqlEnumProvider.fs | 7 +- .../SqlFileProvider.fs | 0 src/SqlClient.DesignTime/paket.references | 6 + .../WebApi.Controllers.fsproj | 27 +-- src/SqlClient.Samples/WebApi/web.config | 15 -- .../WpfDataBinding/App.config | 15 -- src/SqlClient.Tests/ConfigurationTest.fs | 33 --- src/SqlClient.Tests/SpatialTypesTests.fs | 1 + .../DesignTimeConnectionStringTests.fs | 31 +++ .../SqlClient.DesignTime.Tests.fsproj | 26 +++ .../SqlClient.DesignTime.Tests/app.config | 68 ++++++ .../paket.references | 6 + .../SqlClient.Tests.NET40/Program.fs | 4 +- .../SqlClient.Tests.NET40.fsproj | 3 +- .../Uncomment.App.config | 4 +- .../SqlClient.Tests.NET40/paket.references | 2 +- src/SqlClient.Tests/TransactionTests.fs | 4 - src/SqlClient.Tests/TypeProviderTest.fs | 4 - src/SqlClient.Tests/app.config | 10 +- src/SqlClient/Configuration.fs | 85 ------- src/SqlClient/DataTable.fs | 1 - src/SqlClient/Extensions.fs | 63 ++++++ src/SqlClient/ISqlCommand.fs | 16 +- src/SqlClient/Runtime.fs | 7 + src/SqlClient/Shared.fs | 210 ++++++++++++++++++ src/SqlClient/SqlClient.fsproj | 36 +-- src/SqlClient/paket.references | 9 +- 46 files changed, 642 insertions(+), 499 deletions(-) create mode 100644 src/SqlClient.DesignTime/AssemblyInfo.fs rename src/{SqlClient => SqlClient.DesignTime}/DesignTime.fs (90%) create mode 100644 src/SqlClient.DesignTime/DesignTimeConnectionString.fs rename src/{SqlClient => SqlClient.DesignTime}/ProvidedTypesCache.fs (100%) rename src/{SqlClient => SqlClient.DesignTime}/QuotationsFactory.fs (94%) rename src/{SqlClient => SqlClient.DesignTime}/Scripts/ReverseLineOrderForNotex.fsx (100%) rename src/{SqlClient => SqlClient.DesignTime}/Scripts/Scratchpad.fsx (100%) rename src/{SqlClient => SqlClient.DesignTime}/Scripts/XE.fsx (100%) rename src/{SqlClient => SqlClient.DesignTime}/SingleFileChangeMonitor.fs (100%) rename src/{SqlClient => SqlClient.DesignTime}/SingleRootTypeProvider.fs (86%) create mode 100644 src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj rename src/{SqlClient => SqlClient.DesignTime}/SqlClientExtensions.fs (79%) rename src/{SqlClient => SqlClient.DesignTime}/SqlClientProvider.fs (99%) rename src/{SqlClient => SqlClient.DesignTime}/SqlCommandProvider.fs (97%) rename src/{SqlClient => SqlClient.DesignTime}/SqlEnumProvider.fs (98%) rename src/{SqlClient => SqlClient.DesignTime}/SqlFileProvider.fs (100%) create mode 100644 src/SqlClient.DesignTime/paket.references create mode 100644 src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs create mode 100644 src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj create mode 100644 src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config create mode 100644 src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references create mode 100644 src/SqlClient/Extensions.fs create mode 100644 src/SqlClient/Runtime.fs create mode 100644 src/SqlClient/Shared.fs diff --git a/SqlClient.sln b/SqlClient.sln index 5f3d28d6..50995b49 100644 --- a/SqlClient.sln +++ b/SqlClient.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2041 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{FD7933BD-2A90-49EB-A4B2-95F9D3076BBD}" ProjectSection(SolutionItems) = preProject @@ -51,7 +51,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "templates", "templates", "{ docs\tools\templates\template.cshtml = docs\tools\templates\template.cshtml EndProjectSection EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient", "src\SqlClient\SqlClient.fsproj", "{8974CE2E-79B4-4887-859A-B853C2624138}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.DesignTime", "src\SqlClient.DesignTime\SqlClient.DesignTime.fsproj", "{8974CE2E-79B4-4887-859A-B853C2624138}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient", "src\SqlClient\SqlClient.fsproj", "{30BA2514-534A-42EA-A0E7-46DF9FDCA954}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -63,6 +65,10 @@ Global {8974CE2E-79B4-4887-859A-B853C2624138}.Debug|Any CPU.Build.0 = Debug|Any CPU {8974CE2E-79B4-4887-859A-B853C2624138}.Release|Any CPU.ActiveCfg = Release|Any CPU {8974CE2E-79B4-4887-859A-B853C2624138}.Release|Any CPU.Build.0 = Release|Any CPU + {30BA2514-534A-42EA-A0E7-46DF9FDCA954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30BA2514-534A-42EA-A0E7-46DF9FDCA954}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30BA2514-534A-42EA-A0E7-46DF9FDCA954}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30BA2514-534A-42EA-A0E7-46DF9FDCA954}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -72,4 +78,7 @@ Global {573DBBFB-0F97-4327-8614-6A4151CD70BF} = {61AC061E-5824-41B7-8E09-8D3A73D564E5} {CB79269B-025B-4D6A-AF84-0AD821F6A602} = {573DBBFB-0F97-4327-8614-6A4151CD70BF} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {82096CC6-31F2-47A5-8D46-E41C63B4DB58} + EndGlobalSection EndGlobal diff --git a/Tests.sln b/Tests.sln index ee56a1f6..8d138ddd 100644 --- a/Tests.sln +++ b/Tests.sln @@ -1,18 +1,20 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2041 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{E35ED000-5A6C-49E1-82CF-55CB8C16C2AB}" ProjectSection(SolutionItems) = preProject paket.dependencies = paket.dependencies EndProjectSection EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient.Tests", "src\SqlClient.Tests\SqlClient.Tests.fsproj", "{624C31FF-2003-4334-B02E-AD5A79FE9ED8}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests", "src\SqlClient.Tests\SqlClient.Tests.fsproj", "{624C31FF-2003-4334-B02E-AD5A79FE9ED8}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient.Tests.NET40", "src\SqlClient.Tests\SqlClient.Tests.NET40\SqlClient.Tests.NET40.fsproj", "{DE2EC181-0452-415D-82C3-1D43168D4FF1}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests.NET40", "src\SqlClient.Tests\SqlClient.Tests.NET40\SqlClient.Tests.NET40.fsproj", "{DE2EC181-0452-415D-82C3-1D43168D4FF1}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Lib", "src\SqlClient.Tests\Lib\Lib.fsproj", "{17EE08F0-CE4C-4C17-A376-157249C9ABC2}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Lib", "src\SqlClient.Tests\Lib\Lib.fsproj", "{17EE08F0-CE4C-4C17-A376-157249C9ABC2}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient.DesignTime.Tests", "src\SqlClient.Tests\SqlClient.DesignTime.Tests\SqlClient.DesignTime.Tests.fsproj", "{7B283341-7AE6-4D02-8BFE-F94C80617F90}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -32,8 +34,15 @@ Global {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Debug|Any CPU.Build.0 = Debug|Any CPU {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Release|Any CPU.Build.0 = Release|Any CPU + {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BB177D8C-41D5-430D-94E8-485567A72F92} + EndGlobalSection EndGlobal diff --git a/build.fsx b/build.fsx index 83c16637..cbe8ee20 100644 --- a/build.fsx +++ b/build.fsx @@ -216,8 +216,8 @@ Target.create "All" Target.DoNothing open Fake.Core.TargetOperators // for ==> -"Clean" - ==> "AssemblyInfo" +//"Clean" +"AssemblyInfo" ==> "Build" ==> "DeployTestDB" ==> "BuildTests" diff --git a/nuget/SqlClient.nuspec b/nuget/SqlClient.nuspec index 5c1ae3a6..daa31b9c 100644 --- a/nuget/SqlClient.nuspec +++ b/nuget/SqlClient.nuspec @@ -25,8 +25,13 @@ + + + + + \ No newline at end of file diff --git a/paket.dependencies b/paket.dependencies index 24ea511a..084f1c79 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -32,7 +32,7 @@ group Test redirects: force nuget FSharp.Core = 4.1.2 - nuget FSharp.Configuration + nuget FSharp.Configuration = 1.4.0 nuget Newtonsoft.Json nuget xunit = 1.9.2 nuget xunit.runner.visualstudio = 2.1.0 diff --git a/src/SqlClient.DesignTime/AssemblyInfo.fs b/src/SqlClient.DesignTime/AssemblyInfo.fs new file mode 100644 index 00000000..910851af --- /dev/null +++ b/src/SqlClient.DesignTime/AssemblyInfo.fs @@ -0,0 +1,20 @@ +// Auto-Generated by FAKE; do not edit +namespace System +open System.Reflection +open System.Runtime.CompilerServices + +[] +[] +[] +[] +[] +[] +do () + +module internal AssemblyVersionInformation = + let [] AssemblyTitle = "SqlClient" + let [] AssemblyProduct = "FSharp.Data.SqlClient" + let [] AssemblyDescription = "SqlClient F# type providers" + let [] AssemblyVersion = "1.8.6" + let [] AssemblyFileVersion = "1.8.6" + let [] InternalsVisibleTo = "SqlClient.Tests" diff --git a/src/SqlClient/DesignTime.fs b/src/SqlClient.DesignTime/DesignTime.fs similarity index 90% rename from src/SqlClient/DesignTime.fs rename to src/SqlClient.DesignTime/DesignTime.fs index e46968d2..91216354 100644 --- a/src/SqlClient/DesignTime.fs +++ b/src/SqlClient.DesignTime/DesignTime.fs @@ -12,28 +12,6 @@ open ProviderImplementation.ProvidedTypes open FSharp.Data open System.Text.RegularExpressions -module RuntimeInternals = - let setupTableFromSerializedColumns (serializedSchema: string) (table: System.Data.DataTable) = - let primaryKey = ResizeArray() - for line in serializedSchema.Split('\n') do - let xs = line.Split('\t') - let col = new DataColumn() - col.ColumnName <- xs.[0] - col.DataType <- Type.GetType( xs.[1], throwOnError = true) - col.AllowDBNull <- Boolean.Parse xs.[2] - if col.DataType = typeof - then - col.MaxLength <- int xs.[3] - col.ReadOnly <- Boolean.Parse xs.[4] - col.AutoIncrement <- Boolean.Parse xs.[5] - if Boolean.Parse xs.[6] - then - primaryKey.Add col - table.Columns.Add col - - table.PrimaryKey <- Array.ofSeq primaryKey - - type internal RowType = { Provided: Type ErasedTo: Type @@ -76,47 +54,6 @@ module Prefixes = let tempTable = "##SQLCOMMANDPROVIDER_" let tableVar = "@SQLCOMMANDPROVIDER_" -type TempTableLoader(fieldCount, items: obj seq) = - let enumerator = items.GetEnumerator() - - interface IDataReader with - member this.FieldCount: int = fieldCount - member this.Read(): bool = enumerator.MoveNext() - member this.GetValue(i: int): obj = - let row : obj[] = unbox enumerator.Current - row.[i] - member this.Dispose(): unit = () - - member __.Close(): unit = invalidOp "NotImplementedException" - member __.Depth: int = invalidOp "NotImplementedException" - member __.GetBoolean(_: int): bool = invalidOp "NotImplementedException" - member __.GetByte(_ : int): byte = invalidOp "NotImplementedException" - member __.GetBytes(_ : int, _ : int64, _ : byte [], _ : int, _ : int): int64 = invalidOp "NotImplementedException" - member __.GetChar(_ : int): char = invalidOp "NotImplementedException" - member __.GetChars(_ : int, _ : int64, _ : char [], _ : int, _ : int): int64 = invalidOp "NotImplementedException" - member __.GetData(_ : int): IDataReader = invalidOp "NotImplementedException" - member __.GetDataTypeName(_ : int): string = invalidOp "NotImplementedException" - member __.GetDateTime(_ : int): System.DateTime = invalidOp "NotImplementedException" - member __.GetDecimal(_ : int): decimal = invalidOp "NotImplementedException" - member __.GetDouble(_ : int): float = invalidOp "NotImplementedException" - member __.GetFieldType(_ : int): System.Type = invalidOp "NotImplementedException" - member __.GetFloat(_ : int): float32 = invalidOp "NotImplementedException" - member __.GetGuid(_ : int): System.Guid = invalidOp "NotImplementedException" - member __.GetInt16(_ : int): int16 = invalidOp "NotImplementedException" - member __.GetInt32(_ : int): int = invalidOp "NotImplementedException" - member __.GetInt64(_ : int): int64 = invalidOp "NotImplementedException" - member __.GetName(_ : int): string = invalidOp "NotImplementedException" - member __.GetOrdinal(_ : string): int = invalidOp "NotImplementedException" - member __.GetSchemaTable(): DataTable = invalidOp "NotImplementedException" - member __.GetString(_ : int): string = invalidOp "NotImplementedException" - member __.GetValues(_ : obj []): int = invalidOp "NotImplementedException" - member __.IsClosed: bool = invalidOp "NotImplementedException" - member __.IsDBNull(_ : int): bool = invalidOp "NotImplementedException" - member __.Item with get (_ : int): obj = invalidOp "NotImplementedException" - member __.Item with get (_ : string): obj = invalidOp "NotImplementedException" - member __.NextResult(): bool = invalidOp "NotImplementedException" - member __.RecordsAffected: int = invalidOp "NotImplementedException" - type DesignTime private() = static member internal AddGeneratedMethod (sqlParameters: Parameter list, hasOutputParameters, executeArgs: ProvidedParameter list, erasedType, providedOutputType, name) = @@ -163,7 +100,7 @@ type DesignTime private() = if sqlParam.Direction.HasFlag( ParameterDirection.Output) then let mi = - typeof + typeof .GetMethod("SetRef") .MakeGenericMethod( sqlParam.TypeInfo.ClrType) Expr.Call(mi, [ argExpr; Expr.Var arr; Expr.Value index ]) |> Some @@ -199,9 +136,6 @@ type DesignTime private() = m - static member SetRef<'t>(r : byref<'t>, arr: (string * obj)[], i) = - r <- arr.[i] |> snd |> unbox - static member internal GetRecordType(columns: Column list, ?unitsOfMeasurePerSchema) = columns @@ -432,7 +366,7 @@ type DesignTime private() = providedType, erasedToTupleType, mapping let nullsToOptions = QuotationsFactory.MapArrayNullableItems(outputColumns, "MapArrayObjItemToOption") - let combineWithNullsToOptions = typeof.GetMethod("GetMapperWithNullsToOptions") + let combineWithNullsToOptions = typeof.GetMethod("GetMapperWithNullsToOptions") { Single = diff --git a/src/SqlClient.DesignTime/DesignTimeConnectionString.fs b/src/SqlClient.DesignTime/DesignTimeConnectionString.fs new file mode 100644 index 00000000..45ab18df --- /dev/null +++ b/src/SqlClient.DesignTime/DesignTimeConnectionString.fs @@ -0,0 +1,72 @@ +namespace FSharp.Data.SqlClient + +open System.Configuration +open System.IO +open System +open System.Collections.Generic +open System.Diagnostics + +[] +type internal DesignTimeConnectionString = + | Literal of string + | NameInConfig of name: string * value: string * provider: string + + static member Parse(s: string, resolutionFolder, fileName) = + match s.Trim().Split([|'='|], 2, StringSplitOptions.RemoveEmptyEntries) with + | [| "" |] -> invalidArg "ConnectionStringOrName" "Value is empty!" + | [| prefix; tail |] when prefix.Trim().ToLower() = "name" -> + let name = tail.Trim() + let value, provider = DesignTimeConnectionString.ReadFromConfig( name, resolutionFolder, fileName) + NameInConfig( name, value, provider) + | _ -> + Literal s + + static member ReadFromConfig(name, resolutionFolder, fileName) = + let configFilename = + if fileName <> "" + then + let path = Path.Combine(resolutionFolder, fileName) + if not <| File.Exists path + then raise <| FileNotFoundException( sprintf "Could not find config file '%s'." path) + else path + else + let appConfig = Path.Combine(resolutionFolder, "app.config") + let webConfig = Path.Combine(resolutionFolder, "web.config") + + if File.Exists appConfig then appConfig + elif File.Exists webConfig then webConfig + else failwithf "Cannot find either app.config or web.config." + + let map = ExeConfigurationFileMap() + map.ExeConfigFilename <- configFilename + let configSection = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).ConnectionStrings.ConnectionStrings + match configSection, lazy configSection.[name] with + | null, _ | _, Lazy null -> raise <| KeyNotFoundException(message = sprintf "Cannot find name %s in section of %s file." name configFilename) + | _, Lazy x -> + let providerName = if String.IsNullOrEmpty x.ProviderName then "System.Data.SqlClient" else x.ProviderName + x.ConnectionString, providerName + + member this.Value = + match this with + | Literal value -> value + | NameInConfig(_, value, _) -> value + + member this.RunTimeValueExpr isHostedExecution = + match this with + | Literal value -> <@@ value @@> + | NameInConfig(name, value, _) -> + <@@ + let hostProcess = Process.GetCurrentProcess().ProcessName.ToUpper() + if isHostedExecution + || (Environment.Is64BitProcess && hostProcess = "FSIANYCPU") + || (not Environment.Is64BitProcess && hostProcess = "FSI") + then + value + else + let section = ConfigurationManager.ConnectionStrings.[name] + if section = null + then raise <| KeyNotFoundException(message = sprintf "Cannot find name %s in section of config file." name) + else section.ConnectionString + @@> + + member this.IsDefinedByLiteral = match this with | Literal _ -> true | _ -> false diff --git a/src/SqlClient/ProvidedTypesCache.fs b/src/SqlClient.DesignTime/ProvidedTypesCache.fs similarity index 100% rename from src/SqlClient/ProvidedTypesCache.fs rename to src/SqlClient.DesignTime/ProvidedTypesCache.fs diff --git a/src/SqlClient/QuotationsFactory.fs b/src/SqlClient.DesignTime/QuotationsFactory.fs similarity index 94% rename from src/SqlClient/QuotationsFactory.fs rename to src/SqlClient.DesignTime/QuotationsFactory.fs index 5eb2ba7d..d31f2d68 100644 --- a/src/SqlClient/QuotationsFactory.fs +++ b/src/SqlClient.DesignTime/QuotationsFactory.fs @@ -50,7 +50,7 @@ type QuotationsFactory private() = x @@> - static member internal OptionToObj<'T> value = <@@ match %%value with Some (x : 'T) -> box x | None -> Extensions.DbNull @@> + static member internal OptionToObj<'T> value = <@@ match %%value with Some (x : 'T) -> box x | None -> DbNull @@> static member internal MapArrayOptionItemToObj<'T>(arr, index) = <@ @@ -103,11 +103,6 @@ type QuotationsFactory private() = (%%exprArgs.[0] : DataRow).[name] <- match (%%exprArgs.[1] : option<'T>) with None -> DbNull | Some value -> box value @> - static member GetMapperWithNullsToOptions(nullsToOptions, mapper: obj[] -> obj) = - fun values -> - nullsToOptions values - mapper values - static member private GetNonNullableValueFromDataRow<'T>(exprArgs : Expr list, name: string) = <@ (%%exprArgs.[0] : DataRow).[name] @> diff --git a/src/SqlClient/Scripts/ReverseLineOrderForNotex.fsx b/src/SqlClient.DesignTime/Scripts/ReverseLineOrderForNotex.fsx similarity index 100% rename from src/SqlClient/Scripts/ReverseLineOrderForNotex.fsx rename to src/SqlClient.DesignTime/Scripts/ReverseLineOrderForNotex.fsx diff --git a/src/SqlClient/Scripts/Scratchpad.fsx b/src/SqlClient.DesignTime/Scripts/Scratchpad.fsx similarity index 100% rename from src/SqlClient/Scripts/Scratchpad.fsx rename to src/SqlClient.DesignTime/Scripts/Scratchpad.fsx diff --git a/src/SqlClient/Scripts/XE.fsx b/src/SqlClient.DesignTime/Scripts/XE.fsx similarity index 100% rename from src/SqlClient/Scripts/XE.fsx rename to src/SqlClient.DesignTime/Scripts/XE.fsx diff --git a/src/SqlClient/SingleFileChangeMonitor.fs b/src/SqlClient.DesignTime/SingleFileChangeMonitor.fs similarity index 100% rename from src/SqlClient/SingleFileChangeMonitor.fs rename to src/SqlClient.DesignTime/SingleFileChangeMonitor.fs diff --git a/src/SqlClient/SingleRootTypeProvider.fs b/src/SqlClient.DesignTime/SingleRootTypeProvider.fs similarity index 86% rename from src/SqlClient/SingleRootTypeProvider.fs rename to src/SqlClient.DesignTime/SingleRootTypeProvider.fs index d784d421..a17d98e0 100644 --- a/src/SqlClient/SingleRootTypeProvider.fs +++ b/src/SqlClient.DesignTime/SingleRootTypeProvider.fs @@ -8,13 +8,13 @@ open System [] [] type SingleRootTypeProvider(config: TypeProviderConfig, providerName, parameters, ?isErased) as this = - inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) + inherit TypeProviderForNamespaces (config, assemblyReplacementMap=[("FSharp.Data.SqlClient.DesignTime", "FSharp.Data.SqlClient")], addDefaultProbingLocation=true) let cache = new Cache() do let isErased = defaultArg isErased true let nameSpace = this.GetType().Namespace - let assembly = Assembly.LoadFrom( config.RuntimeAssembly) + let assembly = Assembly.GetExecutingAssembly() let providerType = ProvidedTypeDefinition(assembly, nameSpace, providerName, Some typeof, hideObjectMethods = true, isErased = isErased) diff --git a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj new file mode 100644 index 00000000..6d443af9 --- /dev/null +++ b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj @@ -0,0 +1,54 @@ + + + + net40 + FSharp.Data.SqlClient.DesignTime + false + true + ..\..\bin + 101 + + + + + + + + + + + + + + True + ProvidedTypes.fsi + + + True + ProvidedTypes.fs + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SqlClient/SqlClientExtensions.fs b/src/SqlClient.DesignTime/SqlClientExtensions.fs similarity index 79% rename from src/SqlClient/SqlClientExtensions.fs rename to src/SqlClient.DesignTime/SqlClientExtensions.fs index 60b76d1f..9d37cfc0 100644 --- a/src/SqlClient/SqlClientExtensions.fs +++ b/src/SqlClient.DesignTime/SqlClientExtensions.fs @@ -2,156 +2,12 @@ module FSharp.Data.SqlClient.Extensions open System -open System.Text open System.Data open System.Collections.Generic open System.IO open System.Threading.Tasks open System.Data.SqlClient -open System.Reflection - -type SqlCommand with - member this.AsyncExecuteReader behavior = - Async.FromBeginEnd((fun(callback, state) -> this.BeginExecuteReader(callback, state, behavior)), this.EndExecuteReader) - - member this.AsyncExecuteNonQuery() = - Async.FromBeginEnd(this.BeginExecuteNonQuery, this.EndExecuteNonQuery) - - static member internal DefaultTimeout = (new SqlCommand()).CommandTimeout - - member internal this.ExecuteQuery mapper = - seq { - use cursor = this.ExecuteReader() - while cursor.Read() do - yield mapper cursor - } - -type SqlDataReader with - member internal this.MapRowValues<'TItem>( rowMapping) = - seq { - use _ = this - let values = Array.zeroCreate this.FieldCount - while this.Read() do - this.GetValues(values) |> ignore - yield values |> rowMapping |> unbox<'TItem> - } - -type SqlDataReader with - member internal this.TryGetValue(name: string) = - let value = this.[name] - if Convert.IsDBNull value then None else Some(unbox<'a> value) - member internal this.GetValueOrDefault<'a>(name: string, defaultValue) = - let value = this.[name] - if Convert.IsDBNull value then defaultValue else unbox<'a> value - -let DbNull = box DBNull.Value - -type Column = { - Name: string - TypeInfo: TypeInfo - Nullable: bool - MaxLength: int - ReadOnly: bool - Identity: bool - PartOfUniqueKey: bool - DefaultConstraint: string - Description: string -} with - - member this.ErasedToType = - if this.Nullable - then typedefof<_ option>.MakeGenericType this.TypeInfo.ClrType - else this.TypeInfo.ClrType - - member this.GetProvidedType(?unitsOfMeasurePerSchema: Dictionary) = - let typeConsideringUOM: Type = - if this.TypeInfo.IsUnitOfMeasure && unitsOfMeasurePerSchema.IsSome - then - assert(unitsOfMeasurePerSchema.IsSome) - let uomType = unitsOfMeasurePerSchema.Value.[this.TypeInfo.Schema] |> List.find (fun x -> x.Name = this.TypeInfo.UnitOfMeasureName) - ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.AnnotateType(this.TypeInfo.ClrType, [ uomType ]) - else - this.TypeInfo.ClrType - - if this.Nullable - then - //ProviderImplementation.ProvidedTypes.ProvidedTypeBuilder.MakeGenericType(typedefof<_ option>, [ typeConsideringUOM ]) - typedefof<_ option>.MakeGenericType typeConsideringUOM - else - typeConsideringUOM - - member this.HasDefaultConstraint = this.DefaultConstraint <> "" - member this.NullableParameter = this.Nullable || this.HasDefaultConstraint - - static member Parse(cursor: SqlDataReader, typeLookup: int * int option -> TypeInfo, ?defaultValue, ?description) = { - Name = unbox cursor.["name"] - TypeInfo = - let system_type_id = unbox cursor.["system_type_id"] |> int - let user_type_id = cursor.TryGetValue "user_type_id" - typeLookup(system_type_id, user_type_id) - Nullable = unbox cursor.["is_nullable"] - MaxLength = cursor.["max_length"] |> unbox |> int - ReadOnly = not( cursor.GetValueOrDefault("is_updateable", false)) - Identity = cursor.GetValueOrDefault( "is_identity_column", false) - PartOfUniqueKey = unbox cursor.["is_part_of_unique_key"] - DefaultConstraint = defaultArg defaultValue "" - Description = defaultArg description "" - } - - override this.ToString() = - sprintf "%s\t%s\t%b\t%i\t%b\t%b\t%b\t%s\t%s" - this.Name - this.TypeInfo.ClrTypeFullName - this.Nullable - this.MaxLength - this.ReadOnly - this.Identity - this.PartOfUniqueKey - this.DefaultConstraint - this.Description - -and TypeInfo = { - TypeName: string - Schema: string - SqlEngineTypeId: int - UserTypeId: int - SqlDbType: SqlDbType - IsFixedLength: bool - ClrTypeFullName: string - UdttName: string - TableTypeColumns: Column[] Lazy -} with - member this.ClrType: Type = Type.GetType( this.ClrTypeFullName, throwOnError = true) - member this.TableType = this.SqlDbType = SqlDbType.Structured - member this.IsValueType = not this.TableType && this.ClrType.IsValueType - member this.IsUnitOfMeasure = this.TypeName.StartsWith("<") && this.TypeName.EndsWith(">") - member this.UnitOfMeasureName = this.TypeName.TrimStart('<').TrimEnd('>') - -type Parameter = { - Name: string - TypeInfo: TypeInfo - Direction: ParameterDirection - MaxLength: int - Precision: byte - Scale : byte - DefaultValue: obj option - Optional: bool - Description: string -} with - - member this.Size = - match this.TypeInfo.SqlDbType with - | SqlDbType.NChar | SqlDbType.NText | SqlDbType.NVarChar -> this.MaxLength / 2 - | _ -> this.MaxLength - - member this.GetProvidedType(?unitsOfMeasurePerSchema: Dictionary) = - if this.TypeInfo.IsUnitOfMeasure && unitsOfMeasurePerSchema.IsSome - then - assert(unitsOfMeasurePerSchema.IsSome) - let uomType = unitsOfMeasurePerSchema.Value.[this.TypeInfo.Schema] |> List.find (fun x -> x.Name = this.TypeInfo.UnitOfMeasureName) - ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.AnnotateType(this.TypeInfo.ClrType, [ uomType ]) - else - this.TypeInfo.ClrType +open FSharp.Data let private dataTypeMappings = Dictionary() @@ -287,25 +143,13 @@ type SqlConnection with //address an issue when regular Dispose on SqlConnection needed for async computation //wipes out all properties like ConnectionString in addition to closing connection to db - member this.UseLocally(?privateConnection) = - if this.State = ConnectionState.Closed - && defaultArg privateConnection true - then - this.Open() - { new IDisposable with member __.Dispose() = this.Close() } - else { new IDisposable with member __.Dispose() = () } - + member internal this.CheckVersion() = assert (this.State = ConnectionState.Open) let majorVersion = this.ServerVersion.Split('.').[0] if int majorVersion < 11 then failwithf "Minimal supported major version is 11 (SQL Server 2012 and higher or Azure SQL Database). Currently used: %s" this.ServerVersion - member this.IsSqlAzure = - assert (this.State = ConnectionState.Open) - use cmd = new SqlCommand("SELECT SERVERPROPERTY('edition')", this) - cmd.ExecuteScalar().Equals("SQL Azure") - member internal this.GetUserSchemas() = use __ = this.UseLocally() use cmd = new SqlCommand("SELECT name FROM sys.schemas WHERE principal_id = 1", this) diff --git a/src/SqlClient/SqlClientProvider.fs b/src/SqlClient.DesignTime/SqlClientProvider.fs similarity index 99% rename from src/SqlClient/SqlClientProvider.fs rename to src/SqlClient.DesignTime/SqlClientProvider.fs index 3c883e72..4c18a3e8 100644 --- a/src/SqlClient/SqlClientProvider.fs +++ b/src/SqlClient.DesignTime/SqlClientProvider.fs @@ -17,9 +17,9 @@ open FSharp.Data.SqlClient [] [] type SqlProgrammabilityProvider(config : TypeProviderConfig) as this = - inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) + inherit TypeProviderForNamespaces (config, assemblyReplacementMap=[("FSharp.Data.SqlClient.DesignTime", "FSharp.Data.SqlClient")], addDefaultProbingLocation=true) - let assembly = Assembly.LoadFrom( config.RuntimeAssembly) + let assembly = Assembly.GetExecutingAssembly() let nameSpace = this.GetType().Namespace let providerType = ProvidedTypeDefinition(assembly, nameSpace, "SqlProgrammabilityProvider", Some typeof, hideObjectMethods = true) @@ -159,7 +159,6 @@ type SqlProgrammabilityProvider(config : TypeProviderConfig) as this = let isSqlAzure = conn.IsSqlAzure let routines = conn.GetRoutines( schema, isSqlAzure) for routine in routines do - let cmdProvidedType = ProvidedTypeDefinition(snd routine.TwoPartName, Some typeof<``ISqlCommand Implementation``>, hideObjectMethods = true) do diff --git a/src/SqlClient/SqlCommandProvider.fs b/src/SqlClient.DesignTime/SqlCommandProvider.fs similarity index 97% rename from src/SqlClient/SqlCommandProvider.fs rename to src/SqlClient.DesignTime/SqlCommandProvider.fs index febb502a..cdc4229a 100644 --- a/src/SqlClient/SqlCommandProvider.fs +++ b/src/SqlClient.DesignTime/SqlCommandProvider.fs @@ -5,7 +5,6 @@ open System.IO open System.Data.SqlClient open System.Reflection open System.Runtime.CompilerServices - open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Quotations @@ -14,9 +13,7 @@ open FSharp.Data.SqlClient open ProviderImplementation.ProvidedTypes [] -#if DEBUG -[] -#endif +[] do() module X = @@ -26,10 +23,10 @@ module X = [] [] type SqlCommandProvider(config : TypeProviderConfig) as this = - inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) - + inherit TypeProviderForNamespaces (config, assemblyReplacementMap=[("FSharp.Data.SqlClient.DesignTime", "FSharp.Data.SqlClient")], addDefaultProbingLocation=true) + let nameSpace = this.GetType().Namespace - let assembly = Assembly.LoadFrom( config.RuntimeAssembly) + let assembly = Assembly.GetExecutingAssembly() let providerType = ProvidedTypeDefinition(assembly, nameSpace, "SqlCommandProvider", Some typeof, hideObjectMethods = true) let cache = new Cache() diff --git a/src/SqlClient/SqlEnumProvider.fs b/src/SqlClient.DesignTime/SqlEnumProvider.fs similarity index 98% rename from src/SqlClient/SqlEnumProvider.fs rename to src/SqlClient.DesignTime/SqlEnumProvider.fs index 28d8b769..7749d44b 100644 --- a/src/SqlClient/SqlEnumProvider.fs +++ b/src/SqlClient.DesignTime/SqlEnumProvider.fs @@ -14,15 +14,10 @@ open ProviderImplementation.ProvidedTypes open FSharp.Data.SqlClient -type SqlEnumKind = - | Default = 0 - | CLI = 1 - | UnitsOfMeasure = 2 - [] [] type SqlEnumProvider(config : TypeProviderConfig) as this = - inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true) + inherit TypeProviderForNamespaces (config, assemblyReplacementMap=[("FSharp.Data.SqlClient.DesignTime", "FSharp.Data.SqlClient")], addDefaultProbingLocation=true) let nameSpace = this.GetType().Namespace let assembly = Assembly.GetExecutingAssembly() diff --git a/src/SqlClient/SqlFileProvider.fs b/src/SqlClient.DesignTime/SqlFileProvider.fs similarity index 100% rename from src/SqlClient/SqlFileProvider.fs rename to src/SqlClient.DesignTime/SqlFileProvider.fs diff --git a/src/SqlClient.DesignTime/paket.references b/src/SqlClient.DesignTime/paket.references new file mode 100644 index 00000000..fb34ddd2 --- /dev/null +++ b/src/SqlClient.DesignTime/paket.references @@ -0,0 +1,6 @@ +FSharp.Core +Microsoft.SqlServer.TransactSql.ScriptDom +Microsoft.SqlServer.Types + +File: ProvidedTypes.fsi . +File: ProvidedTypes.fs . diff --git a/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj b/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj index bb6e2c8a..52c9c59d 100644 --- a/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj +++ b/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj @@ -79,16 +79,7 @@ --> - - - - ..\..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - + ..\..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll @@ -408,6 +399,7 @@ + ..\..\..\packages\samples\FSharp.Data.SqlClient\lib\net40\FSharp.Data.SqlClient.dll @@ -418,7 +410,7 @@ - + ..\..\..\packages\samples\Microsoft.AspNet.WebApi.Client\lib\net45\System.Net.Http.Formatting.dll @@ -429,7 +421,7 @@ - + ..\..\..\packages\samples\Microsoft.AspNet.WebApi.Core\lib\net45\System.Web.Http.dll @@ -440,16 +432,7 @@ - - - - ..\..\..\packages\samples\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - + ..\..\..\packages\samples\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll diff --git a/src/SqlClient.Samples/WebApi/web.config b/src/SqlClient.Samples/WebApi/web.config index 130b4170..4f7ef217 100644 --- a/src/SqlClient.Samples/WebApi/web.config +++ b/src/SqlClient.Samples/WebApi/web.config @@ -24,21 +24,6 @@ - - True - - - - - True - - - - - True - - - True diff --git a/src/SqlClient.Samples/WpfDataBinding/App.config b/src/SqlClient.Samples/WpfDataBinding/App.config index 97970b57..ce1f79db 100644 --- a/src/SqlClient.Samples/WpfDataBinding/App.config +++ b/src/SqlClient.Samples/WpfDataBinding/App.config @@ -23,19 +23,4 @@ - - True - - - - - True - - - - - True - - - \ No newline at end of file diff --git a/src/SqlClient.Tests/ConfigurationTest.fs b/src/SqlClient.Tests/ConfigurationTest.fs index c416e1b6..be3fb469 100644 --- a/src/SqlClient.Tests/ConfigurationTest.fs +++ b/src/SqlClient.Tests/ConfigurationTest.fs @@ -1,12 +1,6 @@ module FSharp.Data.SqlClient.ConfigurationTests -#if DEBUG -#nowarn "101" -#endif - open Xunit -open System.Configuration -open System.IO open FSharp.Data let adventureWorks = FSharp.Configuration.AppSettings<"app.config">.ConnectionStrings.AdventureWorks @@ -26,30 +20,3 @@ let SqlFiles() = use cmd1 = new SqlCommandProvider() use cmd2 = new SqlCommandProvider() Assert.Equal<_ seq>(cmd1.Execute() |> Seq.toArray, cmd2.Execute() |> Seq.toArray) - -#if DEBUG - -[] -let ``Wrong config file name`` () = - Assert.Throws( - fun() -> - DesignTimeConnectionString.Parse("name=AdventureWorks", resolutionFolder = "", fileName = "non_existent") |> box - ) |> ignore - -[] -let ``From config file`` () = - let x = DesignTimeConnectionString.Parse("name=AdventureWorks", __SOURCE_DIRECTORY__, "app.config") - match x with - | NameInConfig(name, value, _) -> - Assert.Equal("AdventureWorks", name) - Assert.Equal(adventureWorks, value) - | _ -> failwith "Unexpected" - -[] -let RuntimeConfig() = - let x = DesignTimeConnectionString.Parse("name=AdventureWorks", __SOURCE_DIRECTORY__, "app.config") - let actual = Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation( x.RunTimeValueExpr(isHostedExecution = false)) |> unbox - Assert.Equal( adventureWorks, actual) - -#endif - diff --git a/src/SqlClient.Tests/SpatialTypesTests.fs b/src/SqlClient.Tests/SpatialTypesTests.fs index 38260a5e..c26af29c 100644 --- a/src/SqlClient.Tests/SpatialTypesTests.fs +++ b/src/SqlClient.Tests/SpatialTypesTests.fs @@ -8,6 +8,7 @@ open System.Data.SqlTypes let connectionString = ConnectionStrings.AdventureWorksNamed type GetEmployeeByLevel = SqlCommandProvider<"SELECT OrganizationNode FROM HumanResources.Employee WHERE OrganizationNode = @OrganizationNode", connectionString, SingleRow = true> + [] let SqlHierarchyIdParam() = let getEmployeeByLevel = new GetEmployeeByLevel() diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs new file mode 100644 index 00000000..eaaab4c8 --- /dev/null +++ b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs @@ -0,0 +1,31 @@ +module DesignTimeConnectionStringTests + +open Xunit +open System.IO +open System.Configuration +open FSharp.Data.Configuration +open FSharp.Data.SqlClient + +let adventureWorks = FSharp.Configuration.AppSettings<"app.config">.ConnectionStrings.AdventureWorks + +[] +let ``Wrong config file name`` () = + Assert.Throws( + fun() -> + DesignTimeConnectionString.Parse("name=AdventureWorks", resolutionFolder = "", fileName = "non_existent") |> box + ) |> ignore + +[] +let ``From config file`` () = + let x = DesignTimeConnectionString.Parse("name=AdventureWorks", __SOURCE_DIRECTORY__, "app.config") + match x with + | NameInConfig(name, value, _) -> + Assert.Equal("AdventureWorks", name) + Assert.Equal(adventureWorks, value) + | _ -> failwith "Unexpected" + +[] +let RuntimeConfig() = + let x = DesignTimeConnectionString.Parse("name=AdventureWorks", __SOURCE_DIRECTORY__, "app.config") + let actual = Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation( x.RunTimeValueExpr(isHostedExecution = false)) |> unbox + Assert.Equal( adventureWorks, actual) diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj new file mode 100644 index 00000000..a09bed1a --- /dev/null +++ b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj @@ -0,0 +1,26 @@ + + + + net451 + SqlClient.DesignTime.Tests + false + true + 101 + + + + + + + + + ..\..\..\bin\net40\FSharp.Data.SqlClient.DesignTime.dll + + + + + + + + + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config new file mode 100644 index 00000000..678ee047 --- /dev/null +++ b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config @@ -0,0 +1,68 @@ + + + +
+ + + + + + True + + + + + True + + + + + True + + + + + True + + + + + True + + + + + True + + + + + True + + + + + True + + + + + True + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references new file mode 100644 index 00000000..5879d670 --- /dev/null +++ b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references @@ -0,0 +1,6 @@ +FSharp.Core + +group Test + xunit + xunit.runner.visualstudio + FSharp.Configuration diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs b/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs index d4c7eef3..6e2a4c0e 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs +++ b/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs @@ -1,6 +1,6 @@ - + open FSharp.Data let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True") -get42.Execute() |> Seq.toArray |> printfn "%A" +get42.Execute() |> Seq.toArray |> printfn "%A" diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj b/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj index 1fbfc94a..35712b20 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj +++ b/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj @@ -1,8 +1,9 @@ - + Exe net40 + net451 SqlClient.Tests.NET40 false true diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/Uncomment.App.config b/src/SqlClient.Tests/SqlClient.Tests.NET40/Uncomment.App.config index 64324f5a..89c477f1 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/Uncomment.App.config +++ b/src/SqlClient.Tests/SqlClient.Tests.NET40/Uncomment.App.config @@ -1,4 +1,4 @@ - + @@ -12,4 +12,4 @@ - + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references b/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references index 640cf914..6f627f42 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references +++ b/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references @@ -1 +1 @@ -FSharp.Core \ No newline at end of file +FSharp.Core diff --git a/src/SqlClient.Tests/TransactionTests.fs b/src/SqlClient.Tests/TransactionTests.fs index 18aa7157..12eaad4e 100644 --- a/src/SqlClient.Tests/TransactionTests.fs +++ b/src/SqlClient.Tests/TransactionTests.fs @@ -1,9 +1,5 @@ module FSharp.Data.TransactionTests -#if DEBUG -#nowarn "101" -#endif - open System open System.Data open System.Transactions diff --git a/src/SqlClient.Tests/TypeProviderTest.fs b/src/SqlClient.Tests/TypeProviderTest.fs index 0a274000..34be83bc 100644 --- a/src/SqlClient.Tests/TypeProviderTest.fs +++ b/src/SqlClient.Tests/TypeProviderTest.fs @@ -1,9 +1,5 @@ module FSharp.Data.TypeProviderTest -#if DEBUG -#nowarn "101" -#endif - open System open System.Data open System.Data.SqlClient diff --git a/src/SqlClient.Tests/app.config b/src/SqlClient.Tests/app.config index 89c373c5..5b68fa48 100644 --- a/src/SqlClient.Tests/app.config +++ b/src/SqlClient.Tests/app.config @@ -6,11 +6,6 @@ - - True - - - True @@ -36,6 +31,11 @@ + + True + + + True diff --git a/src/SqlClient/Configuration.fs b/src/SqlClient/Configuration.fs index afb821b2..236a2ee0 100644 --- a/src/SqlClient/Configuration.fs +++ b/src/SqlClient/Configuration.fs @@ -1,90 +1,5 @@ -namespace FSharp.Data - -///Enum describing output type -type ResultType = -///Sequence of custom records with properties matching column names and types - | Records = 0 -///Sequence of tuples matching column types with the same order - | Tuples = 1 -///Typed DataTable - | DataTable = 2 -///raw DataReader - | DataReader = 3 - namespace FSharp.Data.SqlClient -open System.Configuration -open System.IO -open System -open System.Threading.Tasks -open System.Collections.Generic -open System.Diagnostics - -[] -type internal DesignTimeConnectionString = - | Literal of string - | NameInConfig of name: string * value: string * provider: string - - static member Parse(s: string, resolutionFolder, fileName) = - match s.Trim().Split([|'='|], 2, StringSplitOptions.RemoveEmptyEntries) with - | [| "" |] -> invalidArg "ConnectionStringOrName" "Value is empty!" - | [| prefix; tail |] when prefix.Trim().ToLower() = "name" -> - let name = tail.Trim() - let value, provider = DesignTimeConnectionString.ReadFromConfig( name, resolutionFolder, fileName) - NameInConfig( name, value, provider) - | _ -> - Literal s - - static member ReadFromConfig(name, resolutionFolder, fileName) = - let configFilename = - if fileName <> "" - then - let path = Path.Combine(resolutionFolder, fileName) - if not <| File.Exists path - then raise <| FileNotFoundException( sprintf "Could not find config file '%s'." path) - else path - else - let appConfig = Path.Combine(resolutionFolder, "app.config") - let webConfig = Path.Combine(resolutionFolder, "web.config") - - if File.Exists appConfig then appConfig - elif File.Exists webConfig then webConfig - else failwithf "Cannot find either app.config or web.config." - - let map = ExeConfigurationFileMap() - map.ExeConfigFilename <- configFilename - let configSection = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).ConnectionStrings.ConnectionStrings - match configSection, lazy configSection.[name] with - | null, _ | _, Lazy null -> raise <| KeyNotFoundException(message = sprintf "Cannot find name %s in section of %s file." name configFilename) - | _, Lazy x -> - let providerName = if String.IsNullOrEmpty x.ProviderName then "System.Data.SqlClient" else x.ProviderName - x.ConnectionString, providerName - - member this.Value = - match this with - | Literal value -> value - | NameInConfig(_, value, _) -> value - - member this.RunTimeValueExpr isHostedExecution = - match this with - | Literal value -> <@@ value @@> - | NameInConfig(name, value, _) -> - <@@ - let hostProcess = Process.GetCurrentProcess().ProcessName.ToUpper() - if isHostedExecution - || (Environment.Is64BitProcess && hostProcess = "FSIANYCPU") - || (not Environment.Is64BitProcess && hostProcess = "FSI") - then - value - else - let section = ConfigurationManager.ConnectionStrings.[name] - if section = null - then raise <| KeyNotFoundException(message = sprintf "Cannot find name %s in section of config file." name) - else section.ConnectionString - @@> - - member this.IsDefinedByLiteral = match this with | Literal _ -> true | _ -> false - //this is mess. Clean up later. type Configuration = { ResultsetRuntimeVerification: bool diff --git a/src/SqlClient/DataTable.fs b/src/SqlClient/DataTable.fs index 646bed4a..d3540a74 100644 --- a/src/SqlClient/DataTable.fs +++ b/src/SqlClient/DataTable.fs @@ -4,7 +4,6 @@ open System open System.Data open System.Data.SqlClient open System.Collections.Generic -open FSharp.Data.SqlClient [] [] diff --git a/src/SqlClient/Extensions.fs b/src/SqlClient/Extensions.fs new file mode 100644 index 00000000..971ce706 --- /dev/null +++ b/src/SqlClient/Extensions.fs @@ -0,0 +1,63 @@ +namespace FSharp.Data + +open System +open System.Data +open System.Data.SqlClient + +[] +module Extensions = + + type SqlDataReader with + member internal this.MapRowValues<'TItem>( rowMapping) = + seq { + use _ = this + let values = Array.zeroCreate this.FieldCount + while this.Read() do + this.GetValues(values) |> ignore + yield values |> rowMapping |> unbox<'TItem> + } + + type SqlDataReader with + member internal this.TryGetValue(name: string) = + let value = this.[name] + if Convert.IsDBNull value then None else Some(unbox<'a> value) + member internal this.GetValueOrDefault<'a>(name: string, defaultValue) = + let value = this.[name] + if Convert.IsDBNull value then defaultValue else unbox<'a> value + + type SqlCommand with + member this.AsyncExecuteReader (behavior:CommandBehavior) = + Async.FromBeginEnd((fun(callback, state) -> this.BeginExecuteReader(callback, state, behavior)), this.EndExecuteReader) + // Async.AwaitTask(this.ExecuteReaderAsync(behavior)) + // can change back when we move to netstandard? - or possibly an #if here? + + member this.AsyncExecuteNonQuery() = + Async.FromBeginEnd(this.BeginExecuteNonQuery, this.EndExecuteNonQuery) + //Async.AwaitTask(this.ExecuteNonQueryAsync()) + // see above + + static member internal DefaultTimeout = (new SqlCommand()).CommandTimeout + + member internal this.ExecuteQuery mapper = + seq { + use cursor = this.ExecuteReader() + while cursor.Read() do + yield mapper cursor + } + + type SqlConnection with + + //address an issue when regular Dispose on SqlConnection needed for async computation + //wipes out all properties like ConnectionString in addition to closing connection to db + member this.UseLocally(?privateConnection) = + if this.State = ConnectionState.Closed + && defaultArg privateConnection true + then + this.Open() + { new IDisposable with member __.Dispose() = this.Close() } + else { new IDisposable with member __.Dispose() = () } + + member this.IsSqlAzure = + assert (this.State = ConnectionState.Open) + use cmd = new SqlCommand("SELECT SERVERPROPERTY('edition')", this) + cmd.ExecuteScalar().Equals("SQL Azure") diff --git a/src/SqlClient/ISqlCommand.fs b/src/SqlClient/ISqlCommand.fs index 357f7141..475bc750 100644 --- a/src/SqlClient/ISqlCommand.fs +++ b/src/SqlClient/ISqlCommand.fs @@ -4,12 +4,11 @@ open System open System.Data open System.Data.SqlClient open System.Reflection -open System.Configuration -open System.Collections.Specialized open FSharp.Data.SqlClient open System.Linq + [] type ISqlCommand = @@ -30,13 +29,6 @@ module Seq = | [| x |] -> Some x | _ -> invalidArg "source" "The input sequence contains more than one element." -[] -[] -type ResultRank = - | Sequence = 0 - | SingleRow = 1 - | ScalarValue = 2 - [] type RowMapping = obj[] -> obj @@ -57,7 +49,6 @@ type internal Connection = Choice [] type ``ISqlCommand Implementation``(cfg: DesignTimeConfig, connection: Connection, commandTimeout) = - let cmd = new SqlCommand(cfg.SqlStatement, CommandTimeout = commandTimeout) let manageConnection = match connection with @@ -205,7 +196,7 @@ type ``ISqlCommand Implementation``(cfg: DesignTimeConfig, connection: Connectio elif p.Direction.HasFlag(ParameterDirection.Output) && value :? Array then p.Size <- (value :?> Array).Length -//Execute/AsyncExecute versions + //Execute/AsyncExecute versions static member internal VerifyResultsetColumns(cursor: SqlDataReader, expected) = if Configuration.Current.ResultsetRuntimeVerification @@ -333,6 +324,3 @@ type ``ISqlCommand Implementation``(cfg: DesignTimeConfig, connection: Connectio use _ = cmd.Connection.UseLocally(manageConnection ) return! cmd.AsyncExecuteNonQuery() } - - - diff --git a/src/SqlClient/Runtime.fs b/src/SqlClient/Runtime.fs new file mode 100644 index 00000000..622df2df --- /dev/null +++ b/src/SqlClient/Runtime.fs @@ -0,0 +1,7 @@ +namespace FSharp.Data + +#if !IS_DESIGNTIME +// Put the TypeProviderAssemblyAttribute in the runtime DLL, pointing to the design-time DLL +[] +do () +#endif \ No newline at end of file diff --git a/src/SqlClient/Shared.fs b/src/SqlClient/Shared.fs new file mode 100644 index 00000000..bfa92845 --- /dev/null +++ b/src/SqlClient/Shared.fs @@ -0,0 +1,210 @@ +namespace FSharp.Data + +open System +open System.Data +open System.Collections.Generic +open System.Data.SqlClient + +///Enum describing output type +type ResultType = +///Sequence of custom records with properties matching column names and types + | Records = 0 +///Sequence of tuples matching column types with the same order + | Tuples = 1 +///Typed DataTable + | DataTable = 2 +///raw DataReader + | DataReader = 3 + +type SqlEnumKind = +| Default = 0 +| CLI = 1 +| UnitsOfMeasure = 2 + +[] +[] +type ResultRank = + | Sequence = 0 + | SingleRow = 1 + | ScalarValue = 2 + +type Mapper private() = + static member GetMapperWithNullsToOptions(nullsToOptions, mapper: obj[] -> obj) = + fun values -> + nullsToOptions values + mapper values + + static member SetRef<'t>(r : byref<'t>, arr: (string * obj)[], i) = + r <- arr.[i] |> snd |> unbox + +type Column = { + Name: string + TypeInfo: TypeInfo + Nullable: bool + MaxLength: int + ReadOnly: bool + Identity: bool + PartOfUniqueKey: bool + DefaultConstraint: string + Description: string +} with + member this.ErasedToType = + if this.Nullable + then typedefof<_ option>.MakeGenericType this.TypeInfo.ClrType + else this.TypeInfo.ClrType + + member this.GetProvidedType(?unitsOfMeasurePerSchema: Dictionary) = + let typeConsideringUOM: Type = + if this.TypeInfo.IsUnitOfMeasure && unitsOfMeasurePerSchema.IsSome + then + assert(unitsOfMeasurePerSchema.IsSome) + let uomType = unitsOfMeasurePerSchema.Value.[this.TypeInfo.Schema] |> List.find (fun x -> x.Name = this.TypeInfo.UnitOfMeasureName) + ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.AnnotateType(this.TypeInfo.ClrType, [ uomType ]) + else + this.TypeInfo.ClrType + + if this.Nullable + then + //ProviderImplementation.ProvidedTypes.ProvidedTypeBuilder.MakeGenericType(typedefof<_ option>, [ typeConsideringUOM ]) + typedefof<_ option>.MakeGenericType typeConsideringUOM + else + typeConsideringUOM + + member this.HasDefaultConstraint = this.DefaultConstraint <> "" + member this.NullableParameter = this.Nullable || this.HasDefaultConstraint + + static member Parse(cursor: SqlDataReader, typeLookup: int * int option -> TypeInfo, ?defaultValue, ?description) = { + Name = unbox cursor.["name"] + TypeInfo = + let system_type_id = unbox cursor.["system_type_id"] |> int + let user_type_id = cursor.TryGetValue "user_type_id" + typeLookup(system_type_id, user_type_id) + Nullable = unbox cursor.["is_nullable"] + MaxLength = cursor.["max_length"] |> unbox |> int + ReadOnly = not( cursor.GetValueOrDefault("is_updateable", false)) + Identity = cursor.GetValueOrDefault( "is_identity_column", false) + PartOfUniqueKey = unbox cursor.["is_part_of_unique_key"] + DefaultConstraint = defaultArg defaultValue "" + Description = defaultArg description "" + } + + override this.ToString() = + sprintf "%s\t%s\t%b\t%i\t%b\t%b\t%b\t%s\t%s" + this.Name + this.TypeInfo.ClrTypeFullName + this.Nullable + this.MaxLength + this.ReadOnly + this.Identity + this.PartOfUniqueKey + this.DefaultConstraint + this.Description + +and TypeInfo = { + TypeName: string + Schema: string + SqlEngineTypeId: int + UserTypeId: int + SqlDbType: SqlDbType + IsFixedLength: bool + ClrTypeFullName: string + UdttName: string + TableTypeColumns: Column[] Lazy +} with + member this.ClrType: Type = Type.GetType( this.ClrTypeFullName, throwOnError = true) + member this.TableType = this.SqlDbType = SqlDbType.Structured + member this.IsValueType = not this.TableType && this.ClrType.IsValueType + member this.IsUnitOfMeasure = this.TypeName.StartsWith("<") && this.TypeName.EndsWith(">") + member this.UnitOfMeasureName = this.TypeName.TrimStart('<').TrimEnd('>') + +type Parameter = { + Name: string + TypeInfo: TypeInfo + Direction: ParameterDirection + MaxLength: int + Precision: byte + Scale : byte + DefaultValue: obj option + Optional: bool + Description: string +} with + + member this.Size = + match this.TypeInfo.SqlDbType with + | SqlDbType.NChar | SqlDbType.NText | SqlDbType.NVarChar -> this.MaxLength / 2 + | _ -> this.MaxLength + + member this.GetProvidedType(?unitsOfMeasurePerSchema: Dictionary) = + if this.TypeInfo.IsUnitOfMeasure && unitsOfMeasurePerSchema.IsSome + then + assert(unitsOfMeasurePerSchema.IsSome) + let uomType = unitsOfMeasurePerSchema.Value.[this.TypeInfo.Schema] |> List.find (fun x -> x.Name = this.TypeInfo.UnitOfMeasureName) + ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.AnnotateType(this.TypeInfo.ClrType, [ uomType ]) + else + this.TypeInfo.ClrType + +type TempTableLoader(fieldCount, items: obj seq) = + let enumerator = items.GetEnumerator() + + interface IDataReader with + member this.FieldCount: int = fieldCount + member this.Read(): bool = enumerator.MoveNext() + member this.GetValue(i: int): obj = + let row : obj[] = unbox enumerator.Current + row.[i] + member this.Dispose(): unit = () + + member __.Close(): unit = invalidOp "NotImplementedException" + member __.Depth: int = invalidOp "NotImplementedException" + member __.GetBoolean(_: int): bool = invalidOp "NotImplementedException" + member __.GetByte(_ : int): byte = invalidOp "NotImplementedException" + member __.GetBytes(_ : int, _ : int64, _ : byte [], _ : int, _ : int): int64 = invalidOp "NotImplementedException" + member __.GetChar(_ : int): char = invalidOp "NotImplementedException" + member __.GetChars(_ : int, _ : int64, _ : char [], _ : int, _ : int): int64 = invalidOp "NotImplementedException" + member __.GetData(_ : int): IDataReader = invalidOp "NotImplementedException" + member __.GetDataTypeName(_ : int): string = invalidOp "NotImplementedException" + member __.GetDateTime(_ : int): System.DateTime = invalidOp "NotImplementedException" + member __.GetDecimal(_ : int): decimal = invalidOp "NotImplementedException" + member __.GetDouble(_ : int): float = invalidOp "NotImplementedException" + member __.GetFieldType(_ : int): System.Type = invalidOp "NotImplementedException" + member __.GetFloat(_ : int): float32 = invalidOp "NotImplementedException" + member __.GetGuid(_ : int): System.Guid = invalidOp "NotImplementedException" + member __.GetInt16(_ : int): int16 = invalidOp "NotImplementedException" + member __.GetInt32(_ : int): int = invalidOp "NotImplementedException" + member __.GetInt64(_ : int): int64 = invalidOp "NotImplementedException" + member __.GetName(_ : int): string = invalidOp "NotImplementedException" + member __.GetOrdinal(_ : string): int = invalidOp "NotImplementedException" + member __.GetSchemaTable(): DataTable = invalidOp "NotImplementedException" + member __.GetString(_ : int): string = invalidOp "NotImplementedException" + member __.GetValues(_ : obj []): int = invalidOp "NotImplementedException" + member __.IsClosed: bool = invalidOp "NotImplementedException" + member __.IsDBNull(_ : int): bool = invalidOp "NotImplementedException" + member __.Item with get (_ : int): obj = invalidOp "NotImplementedException" + member __.Item with get (_ : string): obj = invalidOp "NotImplementedException" + member __.NextResult(): bool = invalidOp "NotImplementedException" + member __.RecordsAffected: int = invalidOp "NotImplementedException" + +module RuntimeInternals = + let setupTableFromSerializedColumns (serializedSchema: string) (table: System.Data.DataTable) = + let primaryKey = ResizeArray() + for line in serializedSchema.Split('\n') do + let xs = line.Split('\t') + let col = new DataColumn() + col.ColumnName <- xs.[0] + col.DataType <- Type.GetType( xs.[1], throwOnError = true) + col.AllowDBNull <- Boolean.Parse xs.[2] + if col.DataType = typeof + then + col.MaxLength <- int xs.[3] + col.ReadOnly <- Boolean.Parse xs.[4] + col.AutoIncrement <- Boolean.Parse xs.[5] + if Boolean.Parse xs.[6] + then + primaryKey.Add col + table.Columns.Add col + + table.PrimaryKey <- Array.ofSeq primaryKey + +[] +module Shared = + let DbNull = box DBNull.Value diff --git a/src/SqlClient/SqlClient.fsproj b/src/SqlClient/SqlClient.fsproj index 14b93d92..1fa348c4 100644 --- a/src/SqlClient/SqlClient.fsproj +++ b/src/SqlClient/SqlClient.fsproj @@ -1,7 +1,7 @@  - net40 + net40 FSharp.Data.SqlClient false true @@ -16,46 +16,26 @@ ..\..\bin\net40\FSharp.Data.SqlClient.XML - - - - - - - True - ProvidedTypesTesting.fs - True - ProvidedTypes.fsi + paket-files/ProvidedTypes.fsi True - ProvidedTypes.fs + paket-files/ProvidedTypes.fs - + + + - - - + - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/SqlClient/paket.references b/src/SqlClient/paket.references index 55d67ada..5aa5e55d 100644 --- a/src/SqlClient/paket.references +++ b/src/SqlClient/paket.references @@ -1,7 +1,4 @@ -FSharp.Core -Microsoft.SqlServer.TransactSql.ScriptDom -Microsoft.SqlServer.Types +FSharp.Core -File: ProvidedTypes.fsi . -File: ProvidedTypes.fs . -File: ProvidedTypesTesting.fs . \ No newline at end of file +File:ProvidedTypes.fsi +File:ProvidedTypes.fs From 2278c936f18c38cc7c8cd35d067388b566a582c5 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Thu, 25 Oct 2018 22:25:20 -0400 Subject: [PATCH 04/15] Update tests and test projects to target netstandard and net40 TP --- SqlClient.sln | 5 +- TestProjects.sln | 42 ++ Tests.sln | 36 +- fsc.props | 37 + netfx.props | 35 + paket.dependencies | 50 +- paket.lock | 671 +++++++++++++++--- src/SqlClient.DesignTime/AssemblyInfo.fs | 8 +- .../SqlClient.DesignTime.fsproj | 29 +- src/SqlClient.DesignTime/paket.references | 6 - .../WebApi.Controllers/App.config | 33 +- .../WebApi.Controllers.fsproj | 330 +-------- .../WebApi.Controllers/paket.references | 3 +- src/SqlClient.Samples/WebApi/web.config | 20 - .../WpfDataBinding/App.config | 18 +- .../WpfDataBinding/WpfDataBinding.fsproj | 344 +-------- .../WpfDataBinding/paket.references | 5 +- src/SqlClient.TestProjects/Lib/App.config | 6 + .../Lib/Lib.fsproj | 9 +- .../Lib/Library1.fs | 0 .../Lib/Script.fsx | 0 .../Lib/paket.references | 4 + .../SqlClient.Tests.NET40/Program.fs | 7 + .../SqlClient.Tests.NET40.fsproj | 17 +- .../Uncomment.App.config | 0 .../SqlClient.Tests.NET40/paket.references | 4 + .../SqlClient.Tests.NetCoreApp/Program.fs | 23 + .../SqlClient.Tests.NetCoreApp.fsproj | 18 + .../paket.references | 4 + src/SqlClient.Tests/.gitignore | 1 - src/SqlClient.Tests/Lib/paket.references | 1 - src/SqlClient.Tests/SpatialTypesTests.fs | 17 - .../SqlClient.DesignTime.Tests/app.config | 68 -- .../paket.references | 6 - .../SqlClient.Tests.NET40/Program.fs | 6 - .../SqlClient.Tests.NET40/paket.references | 1 - src/SqlClient.Tests/app.config | 78 -- src/SqlClient.Tests/paket.references | 8 - src/SqlClient/Extensions.fs | 16 +- src/SqlClient/SqlClient.fsproj | 21 +- src/SqlClient/paket.references | 4 - .../DesignTimeConnectionStringTests.fs | 3 +- .../SqlClient.DesignTime.Tests.fsproj | 13 +- tests/SqlClient.DesignTime.Tests/app.config | 33 + .../paket.references | 6 + .../App.config | 14 +- .../SpatialTypesTests.fs | 39 + .../SqlClient.SqlServerTypes.Tests.fsproj | 19 + .../paket.references | 8 + .../AdventureWorks2012_Data.zip | Bin {src => tests}/SqlClient.Tests/Assert.fs | 3 + .../SqlClient.Tests/ConfigurationTest.fs | 3 +- .../SqlClient.Tests/ConnectionStrings.fs | 4 +- .../SqlClient.Tests/CreateCommand.fs | 16 - .../SqlClient.Tests/DataTablesTests.fs | 2 +- .../SqlClient.Tests/DynamicRecordTests.fs | 0 .../SqlClient.Tests/FreeVarDoubleDeclTests.fs | 0 .../MySqlFolder/sampleCommand.sql | 0 .../SqlClient.Tests/OptionalParamsTests.fs | 0 .../SqlClient.Tests/ProgrammabilityTests.fs | 9 - .../SqlClient.Tests/ResultTypeTests.fs | 0 .../SqlClient.Tests/Scripts/CreateCommand.fsx | 0 .../SqlClient.Tests/Scripts/SqlCommand.fsx | 0 .../Scripts/SqlProgrammability.fsx | 1 - .../SqlClient.Tests/SpReturnValueTests.fs | 0 .../SqlClient.DesignTime.Tests.dll.html | 57 ++ .../SqlClient.DesignTime.Tests.dll.xml | 1 + .../SqlClient.SqlServerTypes.Tests.dll.html | 81 +++ .../SqlClient.SqlServerTypes.Tests.dll.xml | 9 + .../SqlClient.Tests/SqlClient.Tests.dll.html | 425 +++++++++++ tests/SqlClient.Tests/SqlClient.Tests.dll.xml | 2 + .../SqlClient.Tests/SqlClient.Tests.fsproj | 20 +- .../SqlClient.Tests/SqlEnumTests.fs | 0 .../SqlClient.Tests/SynonymsTests.fs | 2 +- {src => tests}/SqlClient.Tests/TVPTests.fs | 0 .../SqlClient.Tests/TempTableTests.fs | 0 .../SqlClient.Tests/TransactionTests.fs | 3 +- .../SqlClient.Tests/TypeProviderTest.fs | 9 +- .../SqlClient.Tests/UnitsOfMeasure.fs | 0 tests/SqlClient.Tests/app.config | 11 + .../SqlClient.Tests/appWithInclude.config | 0 .../connectionStrings.Azure.config | 2 +- .../SqlClient.Tests/connectionStrings.config | 0 {src => tests}/SqlClient.Tests/extensions.sql | 0 tests/SqlClient.Tests/paket.references | 8 + .../SqlClient.Tests/sampleCommand.sql | 0 86 files changed, 1611 insertions(+), 1183 deletions(-) create mode 100644 TestProjects.sln create mode 100644 fsc.props create mode 100644 netfx.props delete mode 100644 src/SqlClient.DesignTime/paket.references create mode 100644 src/SqlClient.TestProjects/Lib/App.config rename src/{SqlClient.Tests => SqlClient.TestProjects}/Lib/Lib.fsproj (75%) rename src/{SqlClient.Tests => SqlClient.TestProjects}/Lib/Library1.fs (100%) rename src/{SqlClient.Tests => SqlClient.TestProjects}/Lib/Script.fsx (100%) create mode 100644 src/SqlClient.TestProjects/Lib/paket.references create mode 100644 src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs rename src/{SqlClient.Tests => SqlClient.TestProjects}/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj (67%) rename src/{SqlClient.Tests => SqlClient.TestProjects}/SqlClient.Tests.NET40/Uncomment.App.config (100%) create mode 100644 src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references create mode 100644 src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs create mode 100644 src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/SqlClient.Tests.NetCoreApp.fsproj create mode 100644 src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/paket.references delete mode 100644 src/SqlClient.Tests/.gitignore delete mode 100644 src/SqlClient.Tests/Lib/paket.references delete mode 100644 src/SqlClient.Tests/SpatialTypesTests.fs delete mode 100644 src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config delete mode 100644 src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references delete mode 100644 src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs delete mode 100644 src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references delete mode 100644 src/SqlClient.Tests/app.config delete mode 100644 src/SqlClient.Tests/paket.references delete mode 100644 src/SqlClient/paket.references rename {src/SqlClient.Tests => tests}/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs (88%) rename {src/SqlClient.Tests => tests}/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj (59%) create mode 100644 tests/SqlClient.DesignTime.Tests/app.config create mode 100644 tests/SqlClient.DesignTime.Tests/paket.references rename {src/SqlClient.Tests/Lib => tests/SqlClient.SqlServerTypes.Tests}/App.config (52%) create mode 100644 tests/SqlClient.SqlServerTypes.Tests/SpatialTypesTests.fs create mode 100644 tests/SqlClient.SqlServerTypes.Tests/SqlClient.SqlServerTypes.Tests.fsproj create mode 100644 tests/SqlClient.SqlServerTypes.Tests/paket.references rename {src => tests}/SqlClient.Tests/AdventureWorks2012_Data.zip (100%) rename {src => tests}/SqlClient.Tests/Assert.fs (66%) rename {src => tests}/SqlClient.Tests/ConfigurationTest.fs (89%) rename {src => tests}/SqlClient.Tests/ConnectionStrings.fs (85%) rename {src => tests}/SqlClient.Tests/CreateCommand.fs (93%) rename {src => tests}/SqlClient.Tests/DataTablesTests.fs (99%) rename {src => tests}/SqlClient.Tests/DynamicRecordTests.fs (100%) rename {src => tests}/SqlClient.Tests/FreeVarDoubleDeclTests.fs (100%) rename {src => tests}/SqlClient.Tests/MySqlFolder/sampleCommand.sql (100%) rename {src => tests}/SqlClient.Tests/OptionalParamsTests.fs (100%) rename {src => tests}/SqlClient.Tests/ProgrammabilityTests.fs (97%) rename {src => tests}/SqlClient.Tests/ResultTypeTests.fs (100%) rename {src => tests}/SqlClient.Tests/Scripts/CreateCommand.fsx (100%) rename {src => tests}/SqlClient.Tests/Scripts/SqlCommand.fsx (100%) rename {src => tests}/SqlClient.Tests/Scripts/SqlProgrammability.fsx (97%) rename {src => tests}/SqlClient.Tests/SpReturnValueTests.fs (100%) create mode 100644 tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.html create mode 100644 tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.xml create mode 100644 tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.html create mode 100644 tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.xml create mode 100644 tests/SqlClient.Tests/SqlClient.Tests.dll.html create mode 100644 tests/SqlClient.Tests/SqlClient.Tests.dll.xml rename {src => tests}/SqlClient.Tests/SqlClient.Tests.fsproj (76%) rename {src => tests}/SqlClient.Tests/SqlEnumTests.fs (100%) rename {src => tests}/SqlClient.Tests/SynonymsTests.fs (93%) rename {src => tests}/SqlClient.Tests/TVPTests.fs (100%) rename {src => tests}/SqlClient.Tests/TempTableTests.fs (100%) rename {src => tests}/SqlClient.Tests/TransactionTests.fs (96%) rename {src => tests}/SqlClient.Tests/TypeProviderTest.fs (98%) rename {src => tests}/SqlClient.Tests/UnitsOfMeasure.fs (100%) create mode 100644 tests/SqlClient.Tests/app.config rename {src => tests}/SqlClient.Tests/appWithInclude.config (100%) rename {src => tests}/SqlClient.Tests/connectionStrings.Azure.config (94%) rename {src => tests}/SqlClient.Tests/connectionStrings.config (100%) rename {src => tests}/SqlClient.Tests/extensions.sql (100%) create mode 100644 tests/SqlClient.Tests/paket.references rename {src => tests}/SqlClient.Tests/sampleCommand.sql (100%) diff --git a/SqlClient.sln b/SqlClient.sln index 50995b49..b7919feb 100644 --- a/SqlClient.sln +++ b/SqlClient.sln @@ -53,7 +53,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "templates", "templates", "{ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.DesignTime", "src\SqlClient.DesignTime\SqlClient.DesignTime.fsproj", "{8974CE2E-79B4-4887-859A-B853C2624138}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient", "src\SqlClient\SqlClient.fsproj", "{30BA2514-534A-42EA-A0E7-46DF9FDCA954}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient", "src\SqlClient\SqlClient.fsproj", "{30BA2514-534A-42EA-A0E7-46DF9FDCA954}" + ProjectSection(ProjectDependencies) = postProject + {8974CE2E-79B4-4887-859A-B853C2624138} = {8974CE2E-79B4-4887-859A-B853C2624138} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/TestProjects.sln b/TestProjects.sln new file mode 100644 index 00000000..529d45ff --- /dev/null +++ b/TestProjects.sln @@ -0,0 +1,42 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2041 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{E35ED000-5A6C-49E1-82CF-55CB8C16C2AB}" + ProjectSection(SolutionItems) = preProject + paket.dependencies = paket.dependencies + EndProjectSection +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Lib", "src\SqlClient.TestProjects\Lib\Lib.fsproj", "{5DD83156-9416-439F-983A-8ED1A0F1F822}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests.NET40", "src\SqlClient.TestProjects\SqlClient.Tests.NET40\SqlClient.Tests.NET40.fsproj", "{34413B8D-884B-4F4D-B6DC-637FAE859738}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests.NetCoreApp", "src\SqlClient.TestProjects\SqlClient.Tests.NetCoreApp\SqlClient.Tests.NetCoreApp.fsproj", "{251C7367-0556-4831-BE20-CAF29989B833}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5DD83156-9416-439F-983A-8ED1A0F1F822}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5DD83156-9416-439F-983A-8ED1A0F1F822}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DD83156-9416-439F-983A-8ED1A0F1F822}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5DD83156-9416-439F-983A-8ED1A0F1F822}.Release|Any CPU.Build.0 = Release|Any CPU + {34413B8D-884B-4F4D-B6DC-637FAE859738}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34413B8D-884B-4F4D-B6DC-637FAE859738}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34413B8D-884B-4F4D-B6DC-637FAE859738}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34413B8D-884B-4F4D-B6DC-637FAE859738}.Release|Any CPU.Build.0 = Release|Any CPU + {251C7367-0556-4831-BE20-CAF29989B833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {251C7367-0556-4831-BE20-CAF29989B833}.Debug|Any CPU.Build.0 = Debug|Any CPU + {251C7367-0556-4831-BE20-CAF29989B833}.Release|Any CPU.ActiveCfg = Release|Any CPU + {251C7367-0556-4831-BE20-CAF29989B833}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BB177D8C-41D5-430D-94E8-485567A72F92} + EndGlobalSection +EndGlobal diff --git a/Tests.sln b/Tests.sln index 8d138ddd..81407f17 100644 --- a/Tests.sln +++ b/Tests.sln @@ -8,13 +8,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{E35ED0 paket.dependencies = paket.dependencies EndProjectSection EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests", "src\SqlClient.Tests\SqlClient.Tests.fsproj", "{624C31FF-2003-4334-B02E-AD5A79FE9ED8}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests", "tests\SqlClient.Tests\SqlClient.Tests.fsproj", "{36665EFF-56A2-46C2-852D-6D26DF492D79}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.Tests.NET40", "src\SqlClient.Tests\SqlClient.Tests.NET40\SqlClient.Tests.NET40.fsproj", "{DE2EC181-0452-415D-82C3-1D43168D4FF1}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.DesignTime.Tests", "tests\SqlClient.DesignTime.Tests\SqlClient.DesignTime.Tests.fsproj", "{167862B2-5588-4DF8-A7D3-05C1A5A835CA}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Lib", "src\SqlClient.Tests\Lib\Lib.fsproj", "{17EE08F0-CE4C-4C17-A376-157249C9ABC2}" -EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SqlClient.DesignTime.Tests", "src\SqlClient.Tests\SqlClient.DesignTime.Tests\SqlClient.DesignTime.Tests.fsproj", "{7B283341-7AE6-4D02-8BFE-F94C80617F90}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "SqlClient.SqlServerTypes.Tests", "tests\SqlClient.SqlServerTypes.Tests\SqlClient.SqlServerTypes.Tests.fsproj", "{CF3D9433-B20A-4E5A-9401-F6518CBAD34E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -22,22 +20,18 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {624C31FF-2003-4334-B02E-AD5A79FE9ED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {624C31FF-2003-4334-B02E-AD5A79FE9ED8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {624C31FF-2003-4334-B02E-AD5A79FE9ED8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {624C31FF-2003-4334-B02E-AD5A79FE9ED8}.Release|Any CPU.Build.0 = Release|Any CPU - {DE2EC181-0452-415D-82C3-1D43168D4FF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE2EC181-0452-415D-82C3-1D43168D4FF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE2EC181-0452-415D-82C3-1D43168D4FF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE2EC181-0452-415D-82C3-1D43168D4FF1}.Release|Any CPU.Build.0 = Release|Any CPU - {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17EE08F0-CE4C-4C17-A376-157249C9ABC2}.Release|Any CPU.Build.0 = Release|Any CPU - {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B283341-7AE6-4D02-8BFE-F94C80617F90}.Release|Any CPU.Build.0 = Release|Any CPU + {36665EFF-56A2-46C2-852D-6D26DF492D79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36665EFF-56A2-46C2-852D-6D26DF492D79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36665EFF-56A2-46C2-852D-6D26DF492D79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36665EFF-56A2-46C2-852D-6D26DF492D79}.Release|Any CPU.Build.0 = Release|Any CPU + {167862B2-5588-4DF8-A7D3-05C1A5A835CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {167862B2-5588-4DF8-A7D3-05C1A5A835CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {167862B2-5588-4DF8-A7D3-05C1A5A835CA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {167862B2-5588-4DF8-A7D3-05C1A5A835CA}.Release|Any CPU.Build.0 = Release|Any CPU + {CF3D9433-B20A-4E5A-9401-F6518CBAD34E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF3D9433-B20A-4E5A-9401-F6518CBAD34E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF3D9433-B20A-4E5A-9401-F6518CBAD34E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF3D9433-B20A-4E5A-9401-F6518CBAD34E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/fsc.props b/fsc.props new file mode 100644 index 00000000..1dbd2b8f --- /dev/null +++ b/fsc.props @@ -0,0 +1,37 @@ + + + + + true + true + true + + + C:\Program Files (x86)\Microsoft SDKs\F#\4.1\Framework\v4.0 + fsc.exe + + + C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\FSharp + fsc.exe + + + C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\FSharp + fsc.exe + + + C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\FSharp + fsc.exe + + + C:\Program Files (x86)\Microsoft SDKs\F#\10.1\Framework\v4.0 + fsc.exe + + + /Library/Frameworks/Mono.framework/Versions/Current/Commands + fsharpc + + + /usr/bin + fsharpc + + \ No newline at end of file diff --git a/netfx.props b/netfx.props new file mode 100644 index 00000000..4ec34f86 --- /dev/null +++ b/netfx.props @@ -0,0 +1,35 @@ + + + + + + + true + + + /Library/Frameworks/Mono.framework/Versions/Current/lib/mono + /usr/lib/mono + /usr/local/lib/mono + + + $(BaseFrameworkPathOverrideForMono)/4.5-api + $(BaseFrameworkPathOverrideForMono)/4.5.1-api + $(BaseFrameworkPathOverrideForMono)/4.5.2-api + $(BaseFrameworkPathOverrideForMono)/4.6-api + $(BaseFrameworkPathOverrideForMono)/4.6.1-api + $(BaseFrameworkPathOverrideForMono)/4.6.2-api + $(BaseFrameworkPathOverrideForMono)/4.7-api + $(BaseFrameworkPathOverrideForMono)/4.7.1-api + true + + + $(FrameworkPathOverride)/Facades;$(AssemblySearchPaths) + + + + + + + + + \ No newline at end of file diff --git a/paket.dependencies b/paket.dependencies index 084f1c79..24219cc6 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -1,24 +1,17 @@ source https://www.nuget.org/api/v2/ -framework: >= net40 -redirects: force generate_load_scripts: on -nuget FSharp.Core = 4.1.2 -nuget Microsoft.SqlServer.TransactSql.ScriptDom -nuget Microsoft.SqlServer.Types ~> 12 - -github fsprojects/FSharp.TypeProviders.SDK:7d57cd409d7299592822713195924e42b2b7acde src/ProvidedTypes.fs -github fsprojects/FSharp.TypeProviders.SDK:7d57cd409d7299592822713195924e42b2b7acde src/ProvidedTypes.fsi -github fsprojects/FSharp.TypeProviders.SDK:7d57cd409d7299592822713195924e42b2b7acde src/ProvidedTypesTesting.fs +github fsprojects/FSharp.TypeProviders.SDK:28a24a69ada68ebd1ad25226634f4608e4875493 src/ProvidedTypes.fs +github fsprojects/FSharp.TypeProviders.SDK:28a24a69ada68ebd1ad25226634f4608e4875493 src/ProvidedTypes.fsi +github fsprojects/FSharp.TypeProviders.SDK:28a24a69ada68ebd1ad25226634f4608e4875493 src/ProvidedTypesTesting.fs group Build source https://www.nuget.org/api/v2/ - framework: >= net40 - redirects: force + framework: >= net451 generate_load_scripts: on - nuget FAKE = 5.0.0-rc014.167 - nuget Fake.Lib = 5.0.0-rc014.167 + nuget FAKE = 5.8.4 + nuget Fake.Lib = 5.8.4 nuget FSharp.Formatting = 2.4.1 nuget FSharp.Compiler.Service = 0.0.36 @@ -28,24 +21,39 @@ group Build group Test source https://www.nuget.org/api/v2/ - framework: >= net40 - redirects: force + framework: net461, netcoreapp2.0 - nuget FSharp.Core = 4.1.2 - nuget FSharp.Configuration = 1.4.0 + nuget FSharp.Core = 4.5.2 + nuget System.Data.SqlClient + nuget System.Configuration.ConfigurationManager + + nuget Microsoft.SqlServer.Types ~> 12 nuget Newtonsoft.Json - nuget xunit = 1.9.2 - nuget xunit.runner.visualstudio = 2.1.0 + nuget xunit = 2.4.1 + nuget xunit.runner.visualstudio = 2.4.1 + +group TestProjects + source https://www.nuget.org/api/v2/ + framework: >= net40, netcoreapp2.0, netstandard2.0 + + nuget FSharp.Core = 4.3.4 + + nuget Microsoft.SqlServer.TransactSql.ScriptDom + nuget Microsoft.SqlServer.Types ~> 12 + + nuget System.Data.SqlClient + nuget System.Configuration.ConfigurationManager group Samples source https://www.nuget.org/api/v2/ framework: >= net40 - redirects: force + nuget FSharp.Core = 4.5.2 + nuget Microsoft.AspNet.WebApi nuget Microsoft.AspNet.WebApi.Client nuget Microsoft.AspNet.WebApi.Core nuget Microsoft.AspNet.WebApi.WebHost nuget Newtonsoft.Json - nuget FSharp.Data.SqlClient \ No newline at end of file + nuget FSharp.Data.SqlClient diff --git a/paket.lock b/paket.lock index 9cae016f..419f244f 100644 --- a/paket.lock +++ b/paket.lock @@ -1,127 +1,31 @@ GENERATE-LOAD-SCRIPTS: ON -REDIRECTS: FORCE -RESTRICTION: >= net40 -NUGET - remote: https://www.nuget.org/api/v2 - FSharp.Core (4.1.2) - System.Collections (>= 4.0.11) - restriction: && (>= net40) (>= netstandard1.6) - System.Console (>= 4.0) - restriction: && (>= net40) (>= netstandard1.6) - System.Diagnostics.Debug (>= 4.0.11) - restriction: && (>= net40) (>= netstandard1.6) - System.Diagnostics.Tools (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Globalization (>= 4.0.11) - restriction: && (>= net40) (>= netstandard1.6) - System.IO (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Linq (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Linq.Expressions (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Linq.Queryable (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Net.Requests (>= 4.0.11) - restriction: && (>= net40) (>= netstandard1.6) - System.Reflection (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Reflection.Extensions (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Resources.ResourceManager (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Runtime (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Runtime.Extensions (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Runtime.Numerics (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Text.RegularExpressions (>= 4.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading (>= 4.0.11) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Tasks (>= 4.0.11) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Tasks.Parallel (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Thread (>= 4.0) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.ThreadPool (>= 4.0.10) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Timer (>= 4.0.1) - restriction: && (>= net40) (>= netstandard1.6) - System.ValueTuple (>= 4.3) - restriction: && (>= net40) (< netstandard1.6) - Microsoft.NETCore.Platforms (2.0.2) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (< netstandard1.6) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0) (< netstandard1.6)) (&& (>= net40) (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net40) (>= uap10.1)) (&& (>= net40) (>= wp8)) (&& (>= net45) (< netstandard1.3)) (&& (>= net46) (< netstandard1.4)) - Microsoft.SqlServer.TransactSql.ScriptDom (14.0.3811.1) - Microsoft.SqlServer.Types (12.0.5000) - Microsoft.Win32.Primitives (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - NETStandard.Library (2.0.3) - restriction: && (>= net40) (< net461) (>= netstandard1.0) (< netstandard1.6) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.0) (>= portable-net45+win8)) (&& (>= net40) (< netstandard1.0) (< portable-net45+win8) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.0) (>= win8)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net40) (>= uap10.1)) (&& (>= net40) (>= wp8)) (&& (>= net45) (< netstandard1.3)) (&& (>= net46) (< netstandard1.4)) (>= net461) - Microsoft.Win32.Primitives (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.AppContext (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Console (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Globalization.Calendars (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.Compression (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.Compression.ZipFile (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.FileSystem (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Net.Http (>= 4.3.2) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Net.Sockets (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.0) (>= portable-net45+win8)) (&& (>= net40) (< netstandard1.0) (< portable-net45+win8) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.0) (>= win8)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net45) (< netstandard1.3)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6) (< netstandard2.0)) (&& (>= net40) (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.AppContext (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Collections (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Console (4.3.1) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net40) (>= netstandard1.6)) (&& (>= net46) (< netstandard1.4)) - System.Diagnostics.Debug (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Diagnostics.Tools (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Globalization (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Globalization.Calendars (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.IO.Compression (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.Compression.ZipFile (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.FileSystem (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (>= net40) (>= netstandard1.3)) (>= net46) - System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Linq (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Linq.Expressions (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Linq.Queryable (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Net.Http (4.3.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.6)) (&& (>= net40) (< net45) (>= netstandard1.6)) (&& (>= net40) (< portable-net45+win8+wpa81)) (>= net46) - System.Net.Requests (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Net.Sockets (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Reflection (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Reflection.Extensions (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Resources.ResourceManager (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Runtime (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Runtime.Extensions (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net45) (< netstandard1.3)) (&& (>= net46) (< netstandard1.4)) - System.Runtime.Numerics (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.Primitives (>= 4.3) - System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) - System.Security.Cryptography.Algorithms (>= 4.3) - System.Security.Cryptography.Encoding (>= 4.3) - System.Text.RegularExpressions (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Tasks (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Tasks.Parallel (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Thread (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.ThreadPool (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.Threading.Timer (4.3) - restriction: && (>= net40) (>= netstandard1.6) - System.ValueTuple (4.4) - restriction: && (>= net40) (< netstandard1.6) - NETStandard.Library (>= 1.6.1) - restriction: && (>= net40) (< net461) (>= netstandard1.0) (< netstandard2.0) - System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4)) GITHUB remote: fsprojects/FSharp.TypeProviders.SDK - src/ProvidedTypes.fs (7d57cd409d7299592822713195924e42b2b7acde) - src/ProvidedTypes.fsi (7d57cd409d7299592822713195924e42b2b7acde) - src/ProvidedTypesTesting.fs (7d57cd409d7299592822713195924e42b2b7acde) + src/ProvidedTypes.fs (28a24a69ada68ebd1ad25226634f4608e4875493) + src/ProvidedTypes.fsi (28a24a69ada68ebd1ad25226634f4608e4875493) + src/ProvidedTypesTesting.fs (28a24a69ada68ebd1ad25226634f4608e4875493) GROUP Build GENERATE-LOAD-SCRIPTS: ON -REDIRECTS: FORCE -RESTRICTION: >= net40 +RESTRICTION: >= net451 NUGET remote: https://www.nuget.org/api/v2 - FAKE (5.0.0-rc014.167) - FAKE.Lib (5.0.0-rc014.167) + FAKE (5.8.4) + FAKE.Lib (5.8.4) FSharp.Compiler.Service (0.0.36) FSharp.Formatting (2.4.1) FSharp.Compiler.Service (>= 0.0.32) Microsoft.AspNet.Razor (>= 2.0.30506) RazorEngine (>= 3.3) Microsoft.AspNet.Razor (3.2.6) - NuGet.CommandLine (4.6.2) + NuGet.CommandLine (4.7.1) RazorEngine (3.3) Microsoft.AspNet.Razor (>= 2.0.30506) GROUP Samples -REDIRECTS: FORCE RESTRICTION: >= net40 NUGET remote: https://www.nuget.org/api/v2 + FSharp.Core (4.5.2) FSharp.Data.SqlClient (1.8.4) Microsoft.AspNet.WebApi (5.2.6) Microsoft.AspNet.WebApi.WebHost (>= 5.2.6 < 5.3) @@ -134,13 +38,558 @@ NUGET Newtonsoft.Json (11.0.2) GROUP Test -REDIRECTS: FORCE -RESTRICTION: >= net40 +RESTRICTION: || (== net461) (== netcoreapp2.0) NUGET remote: https://www.nuget.org/api/v2 - FSharp.Configuration (1.4) - FSharp.Core (>= 4.0.0.1) - FSharp.Core (4.1.2) + FSharp.Core (4.5.2) + Microsoft.CodeCoverage (15.9) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.AppContext (>= 4.1) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Collections (>= 4.0.11) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.IO (>= 4.1) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.IO.FileSystem (>= 4.0.1) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (>= 4.1) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.1) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime.InteropServices (>= 4.1) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime.InteropServices.RuntimeInformation (>= 4.0) + Microsoft.Extensions.DependencyModel (2.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.DotNet.PlatformAbstractions (>= 2.1) + Newtonsoft.Json (>= 9.0.1) + System.Diagnostics.Debug (>= 4.0.11) - restriction: || (&& (== net461) (< net451)) (== netcoreapp2.0) + System.Dynamic.Runtime (>= 4.0.11) - restriction: || (&& (== net461) (< net451)) (== netcoreapp2.0) + System.Linq (>= 4.1) - restriction: || (&& (== net461) (< net451)) (== netcoreapp2.0) + Microsoft.NET.Test.Sdk (15.9) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.CodeCoverage (>= 15.9) + Microsoft.TestPlatform.TestHost (>= 15.9) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (2.1.1) - restriction: || (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (2.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.SqlServer.Types (12.0.5000) + Microsoft.TestPlatform.ObjectModel (15.9) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + NETStandard.Library (>= 1.6) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.ComponentModel.EventBasedAsync (>= 4.0.11) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.ComponentModel.TypeConverter (>= 4.1) - restriction: || (&& (== net461) (< net451)) (== netcoreapp2.0) + System.Diagnostics.Process (>= 4.1) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Diagnostics.TextWriterTraceListener (>= 4.0) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Diagnostics.TraceSource (>= 4.0) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Reflection.Metadata (>= 1.3) + System.Reflection.TypeExtensions (>= 4.1) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - restriction: || (&& (== net461) (< net451)) (== netcoreapp2.0) + System.Runtime.Loader (>= 4.0) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Runtime.Serialization.Json (>= 4.0.2) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Runtime.Serialization.Primitives (>= 4.1.1) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Threading.Thread (>= 4.0) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + System.Xml.XPath.XmlDocument (>= 4.0.1) - restriction: || (&& (== net461) (< net451) (>= netstandard1.5)) (== netcoreapp2.0) + Microsoft.TestPlatform.TestHost (15.9) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.Extensions.DependencyModel (>= 1.0.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.TestPlatform.ObjectModel (>= 15.9) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (&& (== net461) (>= uap10.0)) (== netcoreapp2.0) + Newtonsoft.Json (>= 9.0.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (&& (== net461) (>= uap10.0)) (== netcoreapp2.0) + Microsoft.Win32.Primitives (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + Microsoft.Win32.Registry (4.5) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Memory (>= 4.5) - restriction: || (&& (== net461) (< net46) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (&& (== net461) (>= uap10.1)) (== netcoreapp2.0) + System.Security.AccessControl (>= 4.5) + System.Security.Principal.Windows (>= 4.5) + NETStandard.Library (2.0.3) - restriction: || (&& (== net461) (< net452)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) Newtonsoft.Json (11.0.2) - xunit (1.9.2) - xunit.runner.visualstudio (2.1) + runtime.native.System (4.3.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + runtime.native.System.Data.SqlClient.sni (4.5) - restriction: || (&& (== net461) (< net451)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + runtime.win-arm64.runtime.native.System.Data.SqlClient.sni (>= 4.4) + runtime.win-x64.runtime.native.System.Data.SqlClient.sni (>= 4.4) + runtime.win-x86.runtime.native.System.Data.SqlClient.sni (>= 4.4) + runtime.win-arm64.runtime.native.System.Data.SqlClient.sni (4.4) - restriction: || (&& (== net461) (< net451)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + runtime.win-x64.runtime.native.System.Data.SqlClient.sni (4.4) - restriction: || (&& (== net461) (< net451)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + runtime.win-x86.runtime.native.System.Data.SqlClient.sni (4.4) - restriction: || (&& (== net461) (< net451)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.AppContext (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Collections (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Collections.Concurrent (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Collections.Immutable (1.5) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections.NonGeneric (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Collections.Specialized (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections.NonGeneric (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.ComponentModel (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.ComponentModel.EventBasedAsync (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.ComponentModel.Primitives (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.ComponentModel (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.ComponentModel.TypeConverter (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Collections.NonGeneric (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.5)) (&& (== net461) (>= net462)) (== netcoreapp2.0) + System.Collections.Specialized (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.5)) (== netcoreapp2.0) + System.ComponentModel (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.ComponentModel.Primitives (>= 4.3) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.5)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.5)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Configuration.ConfigurationManager (4.5) + System.Security.Cryptography.ProtectedData (>= 4.5) - restriction: == netcoreapp2.0 + System.Security.Permissions (>= 4.5) + System.Data.SqlClient (4.5.1) + Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + runtime.native.System.Data.SqlClient.sni (>= 4.4) - restriction: || (&& (== net461) (< net451)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Diagnostics.DiagnosticSource (>= 4.5) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (&& (== net461) (>= uap10.1)) (== netcoreapp2.0) + System.Memory (>= 4.5.1) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (&& (== net461) (>= uap10.1)) (== netcoreapp2.0) + System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Text.Encoding.CodePages (>= 4.5) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Diagnostics.Debug (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.DiagnosticSource (4.5.1) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (&& (== net461) (>= uap10.1)) (== netcoreapp2.0) + System.Diagnostics.Process (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + Microsoft.Win32.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + Microsoft.Win32.Registry (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading.Thread (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading.ThreadPool (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.TextWriterTraceListener (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Diagnostics.TraceSource (>= 4.3) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.Tools (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.TraceSource (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.Tracing (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Dynamic.Runtime (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.ObjectModel (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization.Extensions (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO.FileSystem (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO.FileSystem.Primitives (>= 4.3) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Linq (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Linq.Expressions (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.ObjectModel (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45) (>= netstandard1.6)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Memory (4.5.1) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (&& (== net461) (>= uap10.1)) (== netcoreapp2.0) + System.Runtime.CompilerServices.Unsafe (>= 4.5) + System.ObjectModel (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Private.DataContractSerialization (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (>= 4.3) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Runtime.Serialization.Primitives (>= 4.3) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Xml.XmlDocument (>= 4.3) + System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== net461) (< net46)) (&& (== net461) (< netstandard1.3)) (== netcoreapp2.0) + System.Reflection (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Emit (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Emit.Lightweight (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection.Extensions (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Metadata (1.6) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections.Immutable (>= 1.5) + System.Reflection.Primitives (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (4.5.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Resources.ResourceManager (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (== net461) (>= monoandroid) (>= netstandard2.0)) (&& (== net461) (>= monotouch) (>= netstandard2.0)) (&& (== net461) (< net45) (>= netstandard2.0)) (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (&& (== net461) (< netstandard1.1) (>= netstandard2.0)) (&& (== net461) (>= netstandard2.0) (>= wpa81)) (&& (== net461) (>= netstandard2.0) (>= xamarinmac)) (&& (== net461) (>= netstandard2.0) (>= xamarintvos)) (&& (== net461) (>= netstandard2.0) (>= xamarinwatchos)) (&& (== net461) (>= uap10.1)) (&& (== net461) (>= xamarinios)) (== netcoreapp2.0) + System.Runtime.Extensions (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Handles (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.InteropServices (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= net462)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wpa81)) (== netcoreapp2.0) + System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< netstandard1.1)) (== netcoreapp2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< netstandard1.1)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< netstandard1.1)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< netstandard1.1)) (== netcoreapp2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net461) (< net45)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< netstandard1.1)) (== netcoreapp2.0) + System.Runtime.Loader (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (>= netstandard1.5)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (>= netstandard1.5)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (>= netstandard1.5)) (== netcoreapp2.0) + System.Runtime.Serialization.Json (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Private.DataContractSerialization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Serialization.Primitives (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Security.AccessControl (4.5) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Security.Principal.Windows (>= 4.5) + System.Security.Cryptography.ProtectedData (4.5) - restriction: == netcoreapp2.0 + System.Memory (>= 4.5) - restriction: || (&& (== net461) (< net46) (>= netstandard2.0)) (== netcoreapp2.0) + System.Security.Permissions (4.5) + System.Security.AccessControl (>= 4.5) + System.Security.Principal.Windows (4.5.1) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Text.Encoding (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.Encoding.CodePages (4.5) - restriction: || (&& (== net461) (< net451) (>= netstandard2.0)) (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net461) (>= netcoreapp2.0)) (== netcoreapp2.0) + System.Runtime.CompilerServices.Unsafe (>= 4.5) + System.Text.Encoding.Extensions (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.RegularExpressions (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (>= netcoreapp1.1)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks.Extensions (4.5.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime.CompilerServices.Unsafe (>= 4.5) + System.Threading.Thread (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading.ThreadPool (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Xml.XDocument (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Xml.XmlDocument (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.XmlSerializer (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net461) (< net45)) (&& (== net461) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.0) + System.Xml.XPath (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.XPath.XmlDocument (4.3) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.IO (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net461) (< net46)) (== netcoreapp2.0) + System.Xml.XmlDocument (>= 4.3) + System.Xml.XPath (>= 4.3) + xunit (2.4.1) + xunit.analyzers (>= 0.10) + xunit.assert (2.4.1) + xunit.core (2.4.1) + xunit.abstractions (2.0.3) + xunit.analyzers (0.10) + xunit.assert (2.4.1) + NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net461) (< net452)) (== netcoreapp2.0) + xunit.core (2.4.1) + xunit.extensibility.core (2.4.1) + xunit.extensibility.execution (2.4.1) + xunit.extensibility.core (2.4.1) + NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net461) (< net452)) (== netcoreapp2.0) + xunit.abstractions (>= 2.0.3) + xunit.extensibility.execution (2.4.1) + NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net461) (< net452)) (== netcoreapp2.0) + xunit.extensibility.core (2.4.1) + xunit.runner.visualstudio (2.4.1) + Microsoft.NET.Test.Sdk (>= 15.0) - restriction: || (&& (== net461) (>= netcoreapp1.0)) (== netcoreapp2.0) + +GROUP TestProjects +RESTRICTION: || (== netcoreapp2.0) (== netstandard2.0) (>= net40) +NUGET + remote: https://www.nuget.org/api/v2 + FSharp.Core (4.3.4) + Microsoft.NETCore.Platforms (2.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) (&& (>= net40) (>= netcoreapp2.0)) + Microsoft.SqlServer.TransactSql.ScriptDom (14.0.3811.1) + Microsoft.SqlServer.Types (12.0.5000) + Microsoft.Win32.Registry (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monoandroid) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= net40)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) + System.Memory (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) + System.Security.AccessControl (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (>= net461) + System.Security.Principal.Windows (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (>= net461) + runtime.native.System.Data.SqlClient.sni (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + runtime.win-arm64.runtime.native.System.Data.SqlClient.sni (>= 4.4) + runtime.win-x64.runtime.native.System.Data.SqlClient.sni (>= 4.4) + runtime.win-x86.runtime.native.System.Data.SqlClient.sni (>= 4.4) + runtime.win-arm64.runtime.native.System.Data.SqlClient.sni (4.4) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + runtime.win-x64.runtime.native.System.Data.SqlClient.sni (4.4) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + runtime.win-x86.runtime.native.System.Data.SqlClient.sni (4.4) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Buffers (4.5) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) + System.Configuration.ConfigurationManager (4.5) + System.Security.Cryptography.ProtectedData (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net461) (>= netstandard2.0)) + System.Security.Permissions (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (>= netstandard2.0)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (>= net461) + System.Data.Common (4.3) - restriction: || (&& (== netcoreapp2.0) (< netstandard1.2)) (&& (== netcoreapp2.0) (< netstandard1.3)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netstandard2.0) (< netstandard1.2)) (&& (== netstandard2.0) (< netstandard1.3)) (&& (>= net40) (< net451) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< netstandard1.2) (>= portable-net451+win81+wpa81)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard2.0) (>= win81)) (&& (>= net451) (< netstandard1.3)) (&& (>= net46) (< net461) (< netstandard2.0)) + System.Data.SqlClient (4.5.1) + Microsoft.Win32.Registry (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + runtime.native.System.Data.SqlClient.sni (>= 4.4) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) + System.Data.Common (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netstandard1.2)) (&& (== netcoreapp2.0) (< netstandard1.3)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netstandard2.0) (< netstandard1.2)) (&& (== netstandard2.0) (< netstandard1.3)) (&& (>= net40) (< net451) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< netstandard1.2) (>= portable-net451+win81+wpa81)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard2.0) (>= win81)) (&& (>= net451) (< netstandard1.3)) (&& (>= net46) (< net461) (< netstandard2.0)) + System.Diagnostics.DiagnosticSource (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) + System.Memory (>= 4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) + System.Security.Principal.Windows (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Text.Encoding.CodePages (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Diagnostics.DiagnosticSource (4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) + System.Memory (4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) + System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= net40)) (&& (== netcoreapp2.0) (< netstandard1.1)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (< netstandard1.1) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.1) (>= win8)) (&& (>= net40) (< netstandard2.0) (>= wpa81)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (&& (>= net45) (< netstandard2.0)) (>= net461) + System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (== netstandard2.0) (&& (>= net40) (< net45) (>= netstandard2.0)) (>= net461) + System.Runtime.CompilerServices.Unsafe (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (< netstandard1.1) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.1) (>= win8)) (&& (>= net40) (< netstandard2.0) (>= wpa81)) (&& (>= net40) (>= uap10.1)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (&& (>= net45) (< netstandard2.0)) (>= net461) + System.Numerics.Vectors (4.5) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (&& (== netcoreapp2.0) (>= net461)) (== netstandard2.0) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= netstandard2.0) (>= uap10.1)) (&& (< net451) (>= net461) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= net461) (>= uap10.1)) + System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monotouch) (>= net40) (>= netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (< netstandard1.1) (>= netstandard2.0)) (&& (>= net40) (>= netstandard2.0) (>= xamarinmac)) (&& (>= net40) (>= netstandard2.0) (>= xamarintvos)) (&& (>= net40) (>= netstandard2.0) (>= xamarinwatchos)) (&& (>= net40) (>= uap10.1)) (&& (>= net40) (>= xamarinios)) (&& (>= net45) (>= netcoreapp2.0) (< netstandard2.0)) (&& (>= net45) (>= uap10.1)) (&& (< net451) (>= net461) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= net461) (>= uap10.1)) + System.Security.AccessControl (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= netstandard2.0)) (&& (>= net40) (>= xamarinios)) (>= net461) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Security.Principal.Windows (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (>= net461) + System.Security.Cryptography.ProtectedData (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net461) (>= netstandard2.0)) + System.Memory (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net46) (>= netstandard2.0)) + System.Security.Permissions (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (>= netstandard2.0)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (>= net461) + System.Security.AccessControl (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (>= netstandard2.0)) (>= net461) + System.Security.Principal.Windows (4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Text.Encoding.CodePages (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) (&& (>= net40) (>= netcoreapp2.0)) + System.Runtime.CompilerServices.Unsafe (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (>= net461) diff --git a/src/SqlClient.DesignTime/AssemblyInfo.fs b/src/SqlClient.DesignTime/AssemblyInfo.fs index 910851af..f5e77688 100644 --- a/src/SqlClient.DesignTime/AssemblyInfo.fs +++ b/src/SqlClient.DesignTime/AssemblyInfo.fs @@ -3,8 +3,8 @@ namespace System open System.Reflection open System.Runtime.CompilerServices -[] -[] +[] +[] [] [] [] @@ -12,8 +12,8 @@ open System.Runtime.CompilerServices do () module internal AssemblyVersionInformation = - let [] AssemblyTitle = "SqlClient" - let [] AssemblyProduct = "FSharp.Data.SqlClient" + let [] AssemblyTitle = "SqlClient.DesignTime" + let [] AssemblyProduct = "FSharp.Data.SqlClient.DesignTime" let [] AssemblyDescription = "SqlClient F# type providers" let [] AssemblyVersion = "1.8.6" let [] AssemblyFileVersion = "1.8.6" diff --git a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj index 6d443af9..f48fb047 100644 --- a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj +++ b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj @@ -1,41 +1,52 @@  + - net40 + net40;net461 FSharp.Data.SqlClient.DesignTime false true - ..\..\bin + ..\..\bin\typeproviders\fsharp41 101 + true + true + + + + + + + + + + + + - - - True ProvidedTypes.fsi - True ProvidedTypes.fs - + - + @@ -48,7 +59,5 @@ - - \ No newline at end of file diff --git a/src/SqlClient.DesignTime/paket.references b/src/SqlClient.DesignTime/paket.references deleted file mode 100644 index fb34ddd2..00000000 --- a/src/SqlClient.DesignTime/paket.references +++ /dev/null @@ -1,6 +0,0 @@ -FSharp.Core -Microsoft.SqlServer.TransactSql.ScriptDom -Microsoft.SqlServer.Types - -File: ProvidedTypes.fsi . -File: ProvidedTypes.fs . diff --git a/src/SqlClient.Samples/WebApi.Controllers/App.config b/src/SqlClient.Samples/WebApi.Controllers/App.config index 990a4c04..d3e16551 100644 --- a/src/SqlClient.Samples/WebApi.Controllers/App.config +++ b/src/SqlClient.Samples/WebApi.Controllers/App.config @@ -8,35 +8,4 @@ - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj b/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj index 52c9c59d..10321c87 100644 --- a/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj +++ b/src/SqlClient.Samples/WebApi.Controllers/WebApi.Controllers.fsproj @@ -9,7 +9,7 @@ Library WebApi.Controllers WebApi.Controllers - v4.5.2 + v4.6.1 4.4.0.0 WebApi.Controllers ..\..\..\ @@ -79,318 +79,10 @@ --> - + - ..\..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll - True - True - - - - - - - - - ..\..\..\packages\Microsoft.Win32.Primitives\lib\net46\Microsoft.Win32.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.AppContext\lib\net46\System.AppContext.dll - True - True - - - - - - - - - ..\..\..\packages\System.Console\lib\net46\System.Console.dll - True - True - - - - - - - - - ..\..\..\packages\System.Globalization.Calendars\lib\net46\System.Globalization.Calendars.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO\lib\net462\System.IO.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.Compression\lib\net46\System.IO.Compression.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.IO.Compression.ZipFile\lib\net46\System.IO.Compression.ZipFile.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq\lib\net463\System.Linq.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Net.Sockets\lib\net46\System.Net.Sockets.dll - True - True - - - - - - - - - ..\..\..\packages\System.Reflection\lib\net462\System.Reflection.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.Runtime\lib\net462\System.Runtime.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.InteropServices.RuntimeInformation\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.X509Certificates\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - True - - - - - - - - - ..\..\..\packages\System.Text.RegularExpressions\lib\net463\System.Text.RegularExpressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.Thread\lib\net46\System.Threading.Thread.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.ThreadPool\lib\net46\System.Threading.ThreadPool.dll - True - True - - - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net461\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net47\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True - True - - - - - - - - - ..\..\..\packages\System.Xml.ReaderWriter\lib\net46\System.Xml.ReaderWriter.dll + ..\..\..\packages\samples\FSharp.Core\lib\net45\FSharp.Core.dll True True @@ -399,7 +91,6 @@ - ..\..\..\packages\samples\FSharp.Data.SqlClient\lib\net40\FSharp.Data.SqlClient.dll @@ -410,7 +101,7 @@ - + ..\..\..\packages\samples\Microsoft.AspNet.WebApi.Client\lib\net45\System.Net.Http.Formatting.dll @@ -421,7 +112,7 @@ - + ..\..\..\packages\samples\Microsoft.AspNet.WebApi.Core\lib\net45\System.Web.Http.dll @@ -432,7 +123,16 @@ - + + + + ..\..\..\packages\samples\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll + True + True + + + + ..\..\..\packages\samples\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll diff --git a/src/SqlClient.Samples/WebApi.Controllers/paket.references b/src/SqlClient.Samples/WebApi.Controllers/paket.references index 4b4535cd..2617315c 100644 --- a/src/SqlClient.Samples/WebApi.Controllers/paket.references +++ b/src/SqlClient.Samples/WebApi.Controllers/paket.references @@ -1,6 +1,5 @@ -FSharp.Core - group Samples + FSharp.Core FSharp.Data.SqlClient Microsoft.AspNet.WebApi.Client Microsoft.AspNet.WebApi.Core diff --git a/src/SqlClient.Samples/WebApi/web.config b/src/SqlClient.Samples/WebApi/web.config index 4f7ef217..726ce1b3 100644 --- a/src/SqlClient.Samples/WebApi/web.config +++ b/src/SqlClient.Samples/WebApi/web.config @@ -24,26 +24,6 @@ - - True - - - - - True - - - - - True - - - - - True - - - diff --git a/src/SqlClient.Samples/WpfDataBinding/App.config b/src/SqlClient.Samples/WpfDataBinding/App.config index ce1f79db..f80bd4af 100644 --- a/src/SqlClient.Samples/WpfDataBinding/App.config +++ b/src/SqlClient.Samples/WpfDataBinding/App.config @@ -7,20 +7,4 @@ - - - True - - - - - True - - - - - True - - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/SqlClient.Samples/WpfDataBinding/WpfDataBinding.fsproj b/src/SqlClient.Samples/WpfDataBinding/WpfDataBinding.fsproj index c0e68ee9..22f7e54d 100644 --- a/src/SqlClient.Samples/WpfDataBinding/WpfDataBinding.fsproj +++ b/src/SqlClient.Samples/WpfDataBinding/WpfDataBinding.fsproj @@ -9,7 +9,7 @@ WinExe DataBinding DataBinding - v4.5.2 + v4.6.1 WpfDataBinding @@ -97,350 +97,10 @@ --> - - - - ..\..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - ..\..\..\packages\FSharp.Core\lib\net45\FSharp.Core.dll - True - True - - - - - - - - - ..\..\..\packages\Microsoft.Win32.Primitives\lib\net46\Microsoft.Win32.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.AppContext\lib\net46\System.AppContext.dll - True - True - - - - - - - - - True - - - - - - - - - ..\..\..\packages\System.Console\lib\net46\System.Console.dll - True - True - - - - - - - - - ..\..\..\packages\System.Globalization.Calendars\lib\net46\System.Globalization.Calendars.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO\lib\net462\System.IO.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.Compression\lib\net46\System.IO.Compression.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.IO.Compression.ZipFile\lib\net46\System.IO.Compression.ZipFile.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll - True - True - - - - - - - - - ..\..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq\lib\net463\System.Linq.dll - True - True - - - - - - - - - ..\..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.Net.Http\lib\net46\System.Net.Http.dll - True - True - - - - - - - - - ..\..\..\packages\System.Net.Sockets\lib\net46\System.Net.Sockets.dll - True - True - - - - - - - - - ..\..\..\packages\System.Reflection\lib\net462\System.Reflection.dll - True - True - - - - - - - - - True - - - ..\..\..\packages\System.Runtime\lib\net462\System.Runtime.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Runtime.InteropServices.RuntimeInformation\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - - - - - - - ..\..\..\packages\System.Security.Cryptography.X509Certificates\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - True - - - - - - - - - ..\..\..\packages\System.Text.RegularExpressions\lib\net463\System.Text.RegularExpressions.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.Thread\lib\net46\System.Threading.Thread.dll - True - True - - - - - - - - - ..\..\..\packages\System.Threading.ThreadPool\lib\net46\System.Threading.ThreadPool.dll - True - True - - - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net461\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\net47\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - ..\..\..\packages\System.ValueTuple\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True - True - - - - - - - - - ..\..\..\packages\System.Xml.ReaderWriter\lib\net46\System.Xml.ReaderWriter.dll + ..\..\..\packages\samples\FSharp.Core\lib\net45\FSharp.Core.dll True True diff --git a/src/SqlClient.Samples/WpfDataBinding/paket.references b/src/SqlClient.Samples/WpfDataBinding/paket.references index 66efb0df..76c560cd 100644 --- a/src/SqlClient.Samples/WpfDataBinding/paket.references +++ b/src/SqlClient.Samples/WpfDataBinding/paket.references @@ -1,4 +1,3 @@ -FSharp.Core - -group Samples +group Samples + FSharp.Core FSharp.Data.SqlClient diff --git a/src/SqlClient.TestProjects/Lib/App.config b/src/SqlClient.TestProjects/Lib/App.config new file mode 100644 index 00000000..49d87418 --- /dev/null +++ b/src/SqlClient.TestProjects/Lib/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/SqlClient.Tests/Lib/Lib.fsproj b/src/SqlClient.TestProjects/Lib/Lib.fsproj similarity index 75% rename from src/SqlClient.Tests/Lib/Lib.fsproj rename to src/SqlClient.TestProjects/Lib/Lib.fsproj index 95ca58ad..e166dae7 100644 --- a/src/SqlClient.Tests/Lib/Lib.fsproj +++ b/src/SqlClient.TestProjects/Lib/Lib.fsproj @@ -1,7 +1,9 @@  + + - net452 + net461;netcoreapp2.0 Lib false true @@ -17,11 +19,8 @@ - ..\..\..\bin\net40\FSharp.Data.SqlClient.dll + ..\..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll - - - \ No newline at end of file diff --git a/src/SqlClient.Tests/Lib/Library1.fs b/src/SqlClient.TestProjects/Lib/Library1.fs similarity index 100% rename from src/SqlClient.Tests/Lib/Library1.fs rename to src/SqlClient.TestProjects/Lib/Library1.fs diff --git a/src/SqlClient.Tests/Lib/Script.fsx b/src/SqlClient.TestProjects/Lib/Script.fsx similarity index 100% rename from src/SqlClient.Tests/Lib/Script.fsx rename to src/SqlClient.TestProjects/Lib/Script.fsx diff --git a/src/SqlClient.TestProjects/Lib/paket.references b/src/SqlClient.TestProjects/Lib/paket.references new file mode 100644 index 00000000..fcc18951 --- /dev/null +++ b/src/SqlClient.TestProjects/Lib/paket.references @@ -0,0 +1,4 @@ +group TestProjects + FSharp.Core + System.Data.SqlClient + System.Configuration.ConfigurationManager diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs new file mode 100644 index 00000000..d0b10006 --- /dev/null +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs @@ -0,0 +1,7 @@ +open FSharp.Data + +[] +let main _ = + let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True") + get42.Execute() |> Seq.toArray |> printfn "%A" + 0 diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj similarity index 67% rename from src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj rename to src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj index 35712b20..c1b423bc 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj @@ -1,9 +1,10 @@ - + + + Exe - net40 - net451 + net461 SqlClient.Tests.NET40 false true @@ -16,13 +17,17 @@ - + - ..\..\..\bin\net40\FSharp.Data.SqlClient.dll + ..\..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll + + - + + ..\..\..\bin\net40\FSharp.Data.SqlClient.dll + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/Uncomment.App.config b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Uncomment.App.config similarity index 100% rename from src/SqlClient.Tests/SqlClient.Tests.NET40/Uncomment.App.config rename to src/SqlClient.TestProjects/SqlClient.Tests.NET40/Uncomment.App.config diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references new file mode 100644 index 00000000..fcc18951 --- /dev/null +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references @@ -0,0 +1,4 @@ +group TestProjects + FSharp.Core + System.Data.SqlClient + System.Configuration.ConfigurationManager diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs new file mode 100644 index 00000000..31d398c0 --- /dev/null +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs @@ -0,0 +1,23 @@ +open FSharp.Data + +[] +let cnx = "Data Source=.;Initial Catalog=AdventureWorks2012;Integrated Security=True" + +type SingleColumnSelect = SqlEnumProvider<"SELECT Name FROM Purchasing.ShipMethod", cnx> +type TinyIntEnum = SqlEnumProvider<"SELECT * FROM (VALUES(('One'), CAST(1 AS tinyint)), ('Two', CAST(2 AS tinyint))) AS T(Tag, Value)", cnx, Kind = SqlEnumKind.CLI> +type CurrencyCodeUOM = + SqlEnumProvider<" + SELECT CurrencyCode + FROM Sales.Currency + WHERE CurrencyCode IN ('USD', 'EUR', 'GBP') + ", cnx, Kind = SqlEnumKind.UnitsOfMeasure> + +[] +let main _ = + let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True") + get42.Execute() |> Seq.toArray |> printfn "SqlCommandTest: %A" + + printfn "SqlEnum default test: %A" SingleColumnSelect.``CARGO TRANSPORT 5`` + printfn "SqlEnum CLI enum test: %A" TinyIntEnum.One + printfn "SqlEnum UOM test: %A" 1m + 0 \ No newline at end of file diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/SqlClient.Tests.NetCoreApp.fsproj b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/SqlClient.Tests.NetCoreApp.fsproj new file mode 100644 index 00000000..8f904bd6 --- /dev/null +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/SqlClient.Tests.NetCoreApp.fsproj @@ -0,0 +1,18 @@ + + + + + Exe + netcoreapp2.0 + true + + + + ..\..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll + + + + + + + \ No newline at end of file diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/paket.references b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/paket.references new file mode 100644 index 00000000..eeaf7709 --- /dev/null +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/paket.references @@ -0,0 +1,4 @@ +group TestProjects + FSharp.Core + System.Data.SqlClient + System.Configuration.ConfigurationManager \ No newline at end of file diff --git a/src/SqlClient.Tests/.gitignore b/src/SqlClient.Tests/.gitignore deleted file mode 100644 index b0447550..00000000 --- a/src/SqlClient.Tests/.gitignore +++ /dev/null @@ -1 +0,0 @@ -connectionStrings.Azure.config diff --git a/src/SqlClient.Tests/Lib/paket.references b/src/SqlClient.Tests/Lib/paket.references deleted file mode 100644 index 640cf914..00000000 --- a/src/SqlClient.Tests/Lib/paket.references +++ /dev/null @@ -1 +0,0 @@ -FSharp.Core \ No newline at end of file diff --git a/src/SqlClient.Tests/SpatialTypesTests.fs b/src/SqlClient.Tests/SpatialTypesTests.fs deleted file mode 100644 index c26af29c..00000000 --- a/src/SqlClient.Tests/SpatialTypesTests.fs +++ /dev/null @@ -1,17 +0,0 @@ -module FSharp.Data.SpatialTypesTests - -open Xunit -open Microsoft.SqlServer.Types -open System.Data.SqlTypes - -[] -let connectionString = ConnectionStrings.AdventureWorksNamed - -type GetEmployeeByLevel = SqlCommandProvider<"SELECT OrganizationNode FROM HumanResources.Employee WHERE OrganizationNode = @OrganizationNode", connectionString, SingleRow = true> - -[] -let SqlHierarchyIdParam() = - let getEmployeeByLevel = new GetEmployeeByLevel() - let p = SqlHierarchyId.Parse(SqlString("/1/1/")) - let result = getEmployeeByLevel.Execute(p) - Assert.Equal(Some(Some p), result) diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config deleted file mode 100644 index 678ee047..00000000 --- a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/app.config +++ /dev/null @@ -1,68 +0,0 @@ - - - -
- - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references b/src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references deleted file mode 100644 index 5879d670..00000000 --- a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/paket.references +++ /dev/null @@ -1,6 +0,0 @@ -FSharp.Core - -group Test - xunit - xunit.runner.visualstudio - FSharp.Configuration diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs b/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs deleted file mode 100644 index 6e2a4c0e..00000000 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/Program.fs +++ /dev/null @@ -1,6 +0,0 @@ - -open FSharp.Data - -let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True") -get42.Execute() |> Seq.toArray |> printfn "%A" - diff --git a/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references b/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references deleted file mode 100644 index 6f627f42..00000000 --- a/src/SqlClient.Tests/SqlClient.Tests.NET40/paket.references +++ /dev/null @@ -1 +0,0 @@ -FSharp.Core diff --git a/src/SqlClient.Tests/app.config b/src/SqlClient.Tests/app.config deleted file mode 100644 index 5b68fa48..00000000 --- a/src/SqlClient.Tests/app.config +++ /dev/null @@ -1,78 +0,0 @@ - - - -
- - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/SqlClient.Tests/paket.references b/src/SqlClient.Tests/paket.references deleted file mode 100644 index 63e39467..00000000 --- a/src/SqlClient.Tests/paket.references +++ /dev/null @@ -1,8 +0,0 @@ -FSharp.Core -Microsoft.SqlServer.Types - -group Test - FSharp.Configuration - Newtonsoft.Json - xunit - xunit.runner.visualstudio diff --git a/src/SqlClient/Extensions.fs b/src/SqlClient/Extensions.fs index 971ce706..6dee6550 100644 --- a/src/SqlClient/Extensions.fs +++ b/src/SqlClient/Extensions.fs @@ -27,14 +27,18 @@ module Extensions = type SqlCommand with member this.AsyncExecuteReader (behavior:CommandBehavior) = - Async.FromBeginEnd((fun(callback, state) -> this.BeginExecuteReader(callback, state, behavior)), this.EndExecuteReader) - // Async.AwaitTask(this.ExecuteReaderAsync(behavior)) - // can change back when we move to netstandard? - or possibly an #if here? + #if NET40 + Async.FromBeginEnd((fun(callback, state) -> this.BeginExecuteReader(callback, state, behavior)), this.EndExecuteReader) + #else + Async.AwaitTask(this.ExecuteReaderAsync(behavior)) + #endif member this.AsyncExecuteNonQuery() = - Async.FromBeginEnd(this.BeginExecuteNonQuery, this.EndExecuteNonQuery) - //Async.AwaitTask(this.ExecuteNonQueryAsync()) - // see above + #if NET40 + Async.FromBeginEnd(this.BeginExecuteNonQuery, this.EndExecuteNonQuery) + #else + Async.AwaitTask(this.ExecuteNonQueryAsync()) + #endif static member internal DefaultTimeout = (new SqlCommand()).CommandTimeout diff --git a/src/SqlClient/SqlClient.fsproj b/src/SqlClient/SqlClient.fsproj index 1fa348c4..cc856142 100644 --- a/src/SqlClient/SqlClient.fsproj +++ b/src/SqlClient/SqlClient.fsproj @@ -1,12 +1,14 @@  - net40 + net40;netstandard2.0 FSharp.Data.SqlClient false true ..\..\bin 101 + true + true true @@ -16,19 +18,23 @@ ..\..\bin\net40\FSharp.Data.SqlClient.XML + + + + + + + - True paket-files/ProvidedTypes.fsi - True paket-files/ProvidedTypes.fs - @@ -37,5 +43,10 @@ - + + + + + + \ No newline at end of file diff --git a/src/SqlClient/paket.references b/src/SqlClient/paket.references deleted file mode 100644 index 5aa5e55d..00000000 --- a/src/SqlClient/paket.references +++ /dev/null @@ -1,4 +0,0 @@ -FSharp.Core - -File:ProvidedTypes.fsi -File:ProvidedTypes.fs diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs b/tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs similarity index 88% rename from src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs rename to tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs index eaaab4c8..d26ecda1 100644 --- a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs +++ b/tests/SqlClient.DesignTime.Tests/DesignTimeConnectionStringTests.fs @@ -3,10 +3,9 @@ open Xunit open System.IO open System.Configuration -open FSharp.Data.Configuration open FSharp.Data.SqlClient -let adventureWorks = FSharp.Configuration.AppSettings<"app.config">.ConnectionStrings.AdventureWorks +let adventureWorks = ConfigurationManager.ConnectionStrings.["AdventureWorks"].ConnectionString [] let ``Wrong config file name`` () = diff --git a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj b/tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj similarity index 59% rename from src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj rename to tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj index a09bed1a..60381fde 100644 --- a/src/SqlClient.Tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj +++ b/tests/SqlClient.DesignTime.Tests/SqlClient.DesignTime.Tests.fsproj @@ -1,7 +1,9 @@  + + - net451 + net461 SqlClient.DesignTime.Tests false true @@ -14,13 +16,8 @@ - ..\..\..\bin\net40\FSharp.Data.SqlClient.DesignTime.dll + ..\..\bin\typeproviders\fsharp41\net461\FSharp.Data.SqlClient.DesignTime.dll - - - - - - + \ No newline at end of file diff --git a/tests/SqlClient.DesignTime.Tests/app.config b/tests/SqlClient.DesignTime.Tests/app.config new file mode 100644 index 00000000..deb6c2c0 --- /dev/null +++ b/tests/SqlClient.DesignTime.Tests/app.config @@ -0,0 +1,33 @@ + + + +
+ + + + + + True + + + + + True + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/SqlClient.DesignTime.Tests/paket.references b/tests/SqlClient.DesignTime.Tests/paket.references new file mode 100644 index 00000000..4a30f472 --- /dev/null +++ b/tests/SqlClient.DesignTime.Tests/paket.references @@ -0,0 +1,6 @@ +group Test + FSharp.Core + System.Data.SqlClient + System.Configuration.ConfigurationManager + xunit + xunit.runner.visualstudio diff --git a/src/SqlClient.Tests/Lib/App.config b/tests/SqlClient.SqlServerTypes.Tests/App.config similarity index 52% rename from src/SqlClient.Tests/Lib/App.config rename to tests/SqlClient.SqlServerTypes.Tests/App.config index 2f81641a..ffc7ce43 100644 --- a/src/SqlClient.Tests/Lib/App.config +++ b/tests/SqlClient.SqlServerTypes.Tests/App.config @@ -3,20 +3,16 @@ + True - - + + True - - - - - True - - + + diff --git a/tests/SqlClient.SqlServerTypes.Tests/SpatialTypesTests.fs b/tests/SqlClient.SqlServerTypes.Tests/SpatialTypesTests.fs new file mode 100644 index 00000000..d9270a62 --- /dev/null +++ b/tests/SqlClient.SqlServerTypes.Tests/SpatialTypesTests.fs @@ -0,0 +1,39 @@ +module FSharp.Data.SpatialTypesTests + +open Xunit +open Microsoft.SqlServer.Types +open System.Data.SqlTypes + +[] +let connectionString = @"name=AdventureWorks" + +type GetEmployeeByLevel = SqlCommandProvider<"SELECT OrganizationNode FROM HumanResources.Employee WHERE OrganizationNode = @OrganizationNode", connectionString, SingleRow = true> + +[] +let SqlHierarchyIdParam() = + let getEmployeeByLevel = new GetEmployeeByLevel() + let p = SqlHierarchyId.Parse(SqlString("/1/1/")) + let result = getEmployeeByLevel.Execute(p) + Assert.Equal(Some(Some p), result) + +type AdventureWorks = SqlProgrammabilityProvider +type Address_GetAddressBySpatialLocation = AdventureWorks.Person.Address_GetAddressBySpatialLocation + +[] +let ``GEOMETRY and GEOGRAPHY sp params``() = + use cmd = new Address_GetAddressBySpatialLocation() + cmd.AsyncExecute(SqlGeography.Null) |> ignore + + +[] +let spatialTypes() = + use cmd = + AdventureWorks.CreateCommand<" + SELECT OrganizationNode + FROM HumanResources.Employee + WHERE OrganizationNode = @OrganizationNode + ", SingleRow = true>() + + let p = SqlHierarchyId.Parse(SqlString("/1/1/")) + let result = cmd.Execute( p) + Assert.Equal(Some(Some p), result) diff --git a/tests/SqlClient.SqlServerTypes.Tests/SqlClient.SqlServerTypes.Tests.fsproj b/tests/SqlClient.SqlServerTypes.Tests/SqlClient.SqlServerTypes.Tests.fsproj new file mode 100644 index 00000000..6ab3f5bf --- /dev/null +++ b/tests/SqlClient.SqlServerTypes.Tests/SqlClient.SqlServerTypes.Tests.fsproj @@ -0,0 +1,19 @@ + + + + + + net461 + true + + + + + + + + ..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll + + + + \ No newline at end of file diff --git a/tests/SqlClient.SqlServerTypes.Tests/paket.references b/tests/SqlClient.SqlServerTypes.Tests/paket.references new file mode 100644 index 00000000..efe1a3f2 --- /dev/null +++ b/tests/SqlClient.SqlServerTypes.Tests/paket.references @@ -0,0 +1,8 @@ +group Test + FSharp.Core + System.Data.SqlClient + System.Configuration.ConfigurationManager + Microsoft.SqlServer.Types redirects: force + Newtonsoft.Json + xunit + xunit.runner.visualstudio diff --git a/src/SqlClient.Tests/AdventureWorks2012_Data.zip b/tests/SqlClient.Tests/AdventureWorks2012_Data.zip similarity index 100% rename from src/SqlClient.Tests/AdventureWorks2012_Data.zip rename to tests/SqlClient.Tests/AdventureWorks2012_Data.zip diff --git a/src/SqlClient.Tests/Assert.fs b/tests/SqlClient.Tests/Assert.fs similarity index 66% rename from src/SqlClient.Tests/Assert.fs rename to tests/SqlClient.Tests/Assert.fs index 57449c11..34263233 100644 --- a/src/SqlClient.Tests/Assert.fs +++ b/tests/SqlClient.Tests/Assert.fs @@ -3,6 +3,9 @@ module AssertExtensions open Xunit +[] +do() + type Assert with static member IsNone (value: _ option) = Assert.True value.IsNone diff --git a/src/SqlClient.Tests/ConfigurationTest.fs b/tests/SqlClient.Tests/ConfigurationTest.fs similarity index 89% rename from src/SqlClient.Tests/ConfigurationTest.fs rename to tests/SqlClient.Tests/ConfigurationTest.fs index be3fb469..c9618390 100644 --- a/src/SqlClient.Tests/ConfigurationTest.fs +++ b/tests/SqlClient.Tests/ConfigurationTest.fs @@ -2,8 +2,9 @@ open Xunit open FSharp.Data +open System.Configuration -let adventureWorks = FSharp.Configuration.AppSettings<"app.config">.ConnectionStrings.AdventureWorks +let adventureWorks = ConfigurationManager.ConnectionStrings.["AdventureWorks"].ConnectionString type Get42 = SqlCommandProvider<"SELECT 42", ConnectionStrings.AdventureWorksNamed, ConfigFile = "appWithInclude.config"> diff --git a/src/SqlClient.Tests/ConnectionStrings.fs b/tests/SqlClient.Tests/ConnectionStrings.fs similarity index 85% rename from src/SqlClient.Tests/ConnectionStrings.fs rename to tests/SqlClient.Tests/ConnectionStrings.fs index 21222393..ff336be5 100644 --- a/src/SqlClient.Tests/ConnectionStrings.fs +++ b/tests/SqlClient.Tests/ConnectionStrings.fs @@ -18,5 +18,5 @@ let LocalHost = @"Data Source=" + server + ";Integrated Security=True" [] let AdventureWorksAzureRedGate = @"Data Source=mhknbn2kdz.database.windows.net;Initial Catalog=AdventureWorks2012;User ID=sqlfamily;Pwd=sqlf@m1ly" -open FSharp.Configuration -let AdventureWorks = AppSettings<"app.config">.ConnectionStrings.AdventureWorks +open System.Configuration +let AdventureWorks = ConfigurationManager.ConnectionStrings.["AdventureWorks"].ConnectionString diff --git a/src/SqlClient.Tests/CreateCommand.fs b/tests/SqlClient.Tests/CreateCommand.fs similarity index 93% rename from src/SqlClient.Tests/CreateCommand.fs rename to tests/SqlClient.Tests/CreateCommand.fs index 3d27a595..54a9b9e9 100644 --- a/src/SqlClient.Tests/CreateCommand.fs +++ b/tests/SqlClient.Tests/CreateCommand.fs @@ -41,22 +41,6 @@ let udttAndTuplesOutput() = ] Assert.Equal(Some(1, Some "monkey"), cmd.Execute(x = p)) -open Microsoft.SqlServer.Types -open System.Data.SqlTypes - -[] -let spatialTypes() = - use cmd = - DB.CreateCommand<" - SELECT OrganizationNode - FROM HumanResources.Employee - WHERE OrganizationNode = @OrganizationNode - ", SingleRow = true>() - - let p = SqlHierarchyId.Parse(SqlString("/1/1/")) - let result = cmd.Execute( p) - Assert.Equal(Some(Some p), result) - [] let optionalParams() = use cmd = DB.CreateCommand<"SELECT CAST(@x AS INT) + ISNULL(CAST(@y AS INT), 1)", SingleRow = true, AllParametersOptional = true>() diff --git a/src/SqlClient.Tests/DataTablesTests.fs b/tests/SqlClient.Tests/DataTablesTests.fs similarity index 99% rename from src/SqlClient.Tests/DataTablesTests.fs rename to tests/SqlClient.Tests/DataTablesTests.fs index 6e68928f..8b163543 100644 --- a/src/SqlClient.Tests/DataTablesTests.fs +++ b/tests/SqlClient.Tests/DataTablesTests.fs @@ -25,7 +25,7 @@ type DataTablesTests() = use cmd = new SqlCommandProvider<"DBCC CHECKIDENT ('HumanResources.Shift', RESEED, 4)", ConnectionStrings.AdventureWorksNamed>() cmd.Execute() |> ignore - let adventureWorks = FSharp.Configuration.AppSettings<"app.config">.ConnectionStrings.AdventureWorks + let adventureWorks = ConfigurationManager.ConnectionStrings.["AdventureWorks"].ConnectionString [] member __.NewRowAndBulkCopy() = diff --git a/src/SqlClient.Tests/DynamicRecordTests.fs b/tests/SqlClient.Tests/DynamicRecordTests.fs similarity index 100% rename from src/SqlClient.Tests/DynamicRecordTests.fs rename to tests/SqlClient.Tests/DynamicRecordTests.fs diff --git a/src/SqlClient.Tests/FreeVarDoubleDeclTests.fs b/tests/SqlClient.Tests/FreeVarDoubleDeclTests.fs similarity index 100% rename from src/SqlClient.Tests/FreeVarDoubleDeclTests.fs rename to tests/SqlClient.Tests/FreeVarDoubleDeclTests.fs diff --git a/src/SqlClient.Tests/MySqlFolder/sampleCommand.sql b/tests/SqlClient.Tests/MySqlFolder/sampleCommand.sql similarity index 100% rename from src/SqlClient.Tests/MySqlFolder/sampleCommand.sql rename to tests/SqlClient.Tests/MySqlFolder/sampleCommand.sql diff --git a/src/SqlClient.Tests/OptionalParamsTests.fs b/tests/SqlClient.Tests/OptionalParamsTests.fs similarity index 100% rename from src/SqlClient.Tests/OptionalParamsTests.fs rename to tests/SqlClient.Tests/OptionalParamsTests.fs diff --git a/src/SqlClient.Tests/ProgrammabilityTests.fs b/tests/SqlClient.Tests/ProgrammabilityTests.fs similarity index 97% rename from src/SqlClient.Tests/ProgrammabilityTests.fs rename to tests/SqlClient.Tests/ProgrammabilityTests.fs index d7effa86..2f180b41 100644 --- a/src/SqlClient.Tests/ProgrammabilityTests.fs +++ b/tests/SqlClient.Tests/ProgrammabilityTests.fs @@ -3,7 +3,6 @@ open System open System.Data.SqlClient open Xunit -open FSharp.Data.SqlClient type AdventureWorks = SqlProgrammabilityProvider @@ -57,14 +56,6 @@ let ``no bad error message when db is changed before table update ``() = table.AddRow("Northwest2", "US", "North America") Assert.Throws(fun _ -> table.Update(conn, tran) |> ignore) |> ignore - -type Address_GetAddressBySpatialLocation = AdventureWorks.Person.Address_GetAddressBySpatialLocation -open Microsoft.SqlServer.Types - -[] -let ``GEOMETRY and GEOGRAPHY sp params``() = - use cmd = new Address_GetAddressBySpatialLocation() - cmd.AsyncExecute(SqlGeography.Null) |> ignore [] let routineCommandTypeTag() = diff --git a/src/SqlClient.Tests/ResultTypeTests.fs b/tests/SqlClient.Tests/ResultTypeTests.fs similarity index 100% rename from src/SqlClient.Tests/ResultTypeTests.fs rename to tests/SqlClient.Tests/ResultTypeTests.fs diff --git a/src/SqlClient.Tests/Scripts/CreateCommand.fsx b/tests/SqlClient.Tests/Scripts/CreateCommand.fsx similarity index 100% rename from src/SqlClient.Tests/Scripts/CreateCommand.fsx rename to tests/SqlClient.Tests/Scripts/CreateCommand.fsx diff --git a/src/SqlClient.Tests/Scripts/SqlCommand.fsx b/tests/SqlClient.Tests/Scripts/SqlCommand.fsx similarity index 100% rename from src/SqlClient.Tests/Scripts/SqlCommand.fsx rename to tests/SqlClient.Tests/Scripts/SqlCommand.fsx diff --git a/src/SqlClient.Tests/Scripts/SqlProgrammability.fsx b/tests/SqlClient.Tests/Scripts/SqlProgrammability.fsx similarity index 97% rename from src/SqlClient.Tests/Scripts/SqlProgrammability.fsx rename to tests/SqlClient.Tests/Scripts/SqlProgrammability.fsx index f71c89bb..53138aec 100644 --- a/src/SqlClient.Tests/Scripts/SqlProgrammability.fsx +++ b/tests/SqlClient.Tests/Scripts/SqlProgrammability.fsx @@ -1,7 +1,6 @@ #I @"..\..\..\packages" #r "../../../bin/Fsharp.Data.SqlClient.dll" #r "Microsoft.SqlServer.Types.dll" -#r @"FSharp.Configuration.0.5.3\lib\net40\FSharp.Configuration.dll" //#load "ConnectionStrings.fs" open System open System.Data diff --git a/src/SqlClient.Tests/SpReturnValueTests.fs b/tests/SqlClient.Tests/SpReturnValueTests.fs similarity index 100% rename from src/SqlClient.Tests/SpReturnValueTests.fs rename to tests/SqlClient.Tests/SpReturnValueTests.fs diff --git a/tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.html b/tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.html new file mode 100644 index 00000000..44980055 --- /dev/null +++ b/tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.html @@ -0,0 +1,57 @@ + + + + + xUnit.net Test Results - + + +

Assemblies Run

+
c:\code\FSharp.Data.SqlClient\src\SqlClient.Tests\SqlClient.DesignTime.Tests\bin\Release\net461\SqlClient.DesignTime.Tests.dll
+

Summary

+
+ Tests run: 3   + Failures: 0, + Skipped: 0, + Run time: 0.439s

All tests

+
Click test class name to expand/collapse test details
+

0.439s +  DesignTimeConnectionStringTests +  (3 tests)

+ + + \ No newline at end of file diff --git a/tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.xml b/tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.xml new file mode 100644 index 00000000..9ba41699 --- /dev/null +++ b/tests/SqlClient.Tests/SqlClient.DesignTime.Tests.dll.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.html b/tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.html new file mode 100644 index 00000000..2f3eff91 --- /dev/null +++ b/tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.html @@ -0,0 +1,81 @@ + + + + + xUnit.net Test Results - + + +

Assemblies Run

+
c:\code\FSharp.Data.SqlClient\src\SqlClient.Tests\SqlClient.SqlServerTypes.Tests\bin\Release\net461\SqlClient.SqlServerTypes.Tests.dll
+

Summary

+
+ Tests run: 3   + Failures: 2, + Skipped: 0, + Run time: 0.25s

Failed tests

+
0.007s +  FSharp.Data.SpatialTypesTests.spatialTypes : System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
+   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
+   at System.Type.GetType(String typeName, Boolean throwOnError)
+   at FSharp.Data.ISqlCommand Implementation..ctor(DesignTimeConfig cfg, FSharpChoice`3 connection, Int32 commandTimeout)
+   at FSharp.Data.SpatialTypesTests.spatialTypes()
+
+
0.225s +  FSharp.Data.SpatialTypesTests.SqlHierarchyIdParam : System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
+   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
+   at System.Type.GetType(String typeName, Boolean throwOnError)
+   at FSharp.Data.ISqlCommand Implementation..ctor(DesignTimeConfig cfg, FSharpChoice`3 connection, Int32 commandTimeout)
+   at FSharp.Data.SpatialTypesTests.SqlHierarchyIdParam()
+

All tests

+
Click test class name to expand/collapse test details
+

0.250s +  FSharp.Data.SpatialTypesTests +  (3 tests)

+
+
0.018s +  FSharp.Data.SpatialTypesTests.GEOMETRY and GEOGRAPHY sp params
+
0.007s +  FSharp.Data.SpatialTypesTests.spatialTypes : System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
+   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
+   at System.Type.GetType(String typeName, Boolean throwOnError)
+   at FSharp.Data.ISqlCommand Implementation..ctor(DesignTimeConfig cfg, FSharpChoice`3 connection, Int32 commandTimeout)
+   at FSharp.Data.SpatialTypesTests.spatialTypes()
+
+
0.225s +  FSharp.Data.SpatialTypesTests.SqlHierarchyIdParam : System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
+   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
+   at System.Type.GetType(String typeName, Boolean throwOnError)
+   at FSharp.Data.ISqlCommand Implementation..ctor(DesignTimeConfig cfg, FSharpChoice`3 connection, Int32 commandTimeout)
+   at FSharp.Data.SpatialTypesTests.SqlHierarchyIdParam()
+
+
+ + \ No newline at end of file diff --git a/tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.xml b/tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.xml new file mode 100644 index 00000000..447cd6c8 --- /dev/null +++ b/tests/SqlClient.Tests/SqlClient.SqlServerTypes.Tests.dll.xml @@ -0,0 +1,9 @@ +System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) + at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) + at System.Type.GetType(String typeName, Boolean throwOnError) + at FSharp.Data.ISqlCommand Implementation..ctor(DesignTimeConfig cfg, FSharpChoice`3 connection, Int32 commandTimeout) + at FSharp.Data.SpatialTypesTests.SqlHierarchyIdParam()System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) + at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) + at System.Type.GetType(String typeName, Boolean throwOnError) + at FSharp.Data.ISqlCommand Implementation..ctor(DesignTimeConfig cfg, FSharpChoice`3 connection, Int32 commandTimeout) + at FSharp.Data.SpatialTypesTests.spatialTypes() \ No newline at end of file diff --git a/tests/SqlClient.Tests/SqlClient.Tests.dll.html b/tests/SqlClient.Tests/SqlClient.Tests.dll.html new file mode 100644 index 00000000..5904b774 --- /dev/null +++ b/tests/SqlClient.Tests/SqlClient.Tests.dll.html @@ -0,0 +1,425 @@ + + + + + xUnit.net Test Results - + + +

Assemblies Run

+
c:\code\FSharp.Data.SqlClient\src\SqlClient.Tests\bin\Release\net461\SqlClient.Tests.dll
+

Summary

+
+ Tests run: 144   + Failures: 0, + Skipped: 4, + Run time: 2.944s

Skipped tests

+
Skipped +  FSharp.Data.TVPTests.InputIsEnumeratedExactlyOnce : Flucky
+
Skipped +  FSharp.Data.TVPTests.UsingTVPInQuery : Fails at runtime :(
+
Skipped +  FSharp.Data.TypeProviderTest.CommandTimeout : Don't execute for usual runs. Too slow.
+
Skipped +  FSharp.Data.TypeProviderTest.ConcurrentReaders : Thread safe execution is not supported yet

All tests

+
Click test class name to expand/collapse test details
+

0.267s +  FSharp.Data.CreateCommandTest +  (13 tests)

+ +

1.187s +  FSharp.Data.DataTablesTests +  (24 tests)

+ +

0.374s +  FSharp.Data.DynamicRecordTests +  (11 tests)

+ +

0.038s +  FSharp.Data.EnumTests +  (9 tests)

+ +

0.020s +  FSharp.Data.OptionalParamsTests +  (4 tests)

+ +

0.343s +  FSharp.Data.ProgrammabilityTest +  (18 tests)

+ +

0.006s +  FSharp.Data.ResultTypeTests +  (1 test)

+ +

0.034s +  FSharp.Data.SpReturnValueTests +  (4 tests)

+ +

0.008s +  FSharp.Data.SqlClient.ConfigurationTests +  (1 test)

+ +

0.127s +  FSharp.Data.SynonymsTests +  (3 tests)

+ +

0.049s +  FSharp.Data.TempTableTests +  (3 tests)

+ +

0.028s +  FSharp.Data.The undeclared parameter 'X' is used more than once in the batch being analyzed +  (4 tests)

+ +

0.124s +  FSharp.Data.TransactionTests +  (12 tests)

+ +

0.069s +  FSharp.Data.TVPTests +  (12 tests)

+ +

0.177s +  FSharp.Data.TypeProviderTest +  (20 tests)

+ +

0.093s +  FSharp.Data.UnitsOfMeasure +  (5 tests)

+ + + \ No newline at end of file diff --git a/tests/SqlClient.Tests/SqlClient.Tests.dll.xml b/tests/SqlClient.Tests/SqlClient.Tests.dll.xml new file mode 100644 index 00000000..82fcfe65 --- /dev/null +++ b/tests/SqlClient.Tests/SqlClient.Tests.dll.xml @@ -0,0 +1,2 @@ +FluckyData Source=.;Initial Catalog=AdventureWorks2012;Integrated Security=True +Fails at runtime :(Thread safe execution is not supported yetDon't execute for usual runs. Too slow. \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlClient.Tests.fsproj b/tests/SqlClient.Tests/SqlClient.Tests.fsproj similarity index 76% rename from src/SqlClient.Tests/SqlClient.Tests.fsproj rename to tests/SqlClient.Tests/SqlClient.Tests.fsproj index 9b4f299e..5143b0f7 100644 --- a/src/SqlClient.Tests/SqlClient.Tests.fsproj +++ b/tests/SqlClient.Tests/SqlClient.Tests.fsproj @@ -1,20 +1,17 @@  + + - net451 + net461;netcoreapp2.0 SqlClient.Tests false true - ..\..\bin\ 101 - DEBUG;TRACE true - - ..\..\bin\net451\SqlClient.Tests.XML - @@ -22,7 +19,6 @@ - @@ -51,13 +47,11 @@ - ..\..\bin\net40\FSharp.Data.SqlClient.dll + ..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll - - - - - + + + \ No newline at end of file diff --git a/src/SqlClient.Tests/SqlEnumTests.fs b/tests/SqlClient.Tests/SqlEnumTests.fs similarity index 100% rename from src/SqlClient.Tests/SqlEnumTests.fs rename to tests/SqlClient.Tests/SqlEnumTests.fs diff --git a/src/SqlClient.Tests/SynonymsTests.fs b/tests/SqlClient.Tests/SynonymsTests.fs similarity index 93% rename from src/SqlClient.Tests/SynonymsTests.fs rename to tests/SqlClient.Tests/SynonymsTests.fs index fe22c2b9..c1fefa1b 100644 --- a/src/SqlClient.Tests/SynonymsTests.fs +++ b/tests/SqlClient.Tests/SynonymsTests.fs @@ -39,7 +39,7 @@ let SPSynonym() = [] let TableSynonym() = - let adventureWorks = FSharp.Configuration.AppSettings<"app.config">.ConnectionStrings.AdventureWorks + let adventureWorks = System.Configuration.ConfigurationManager.ConnectionStrings.["AdventureWorks"].ConnectionString use conn = new SqlConnection(connectionString = adventureWorks) conn.Open() use tran = conn.BeginTransaction() diff --git a/src/SqlClient.Tests/TVPTests.fs b/tests/SqlClient.Tests/TVPTests.fs similarity index 100% rename from src/SqlClient.Tests/TVPTests.fs rename to tests/SqlClient.Tests/TVPTests.fs diff --git a/src/SqlClient.Tests/TempTableTests.fs b/tests/SqlClient.Tests/TempTableTests.fs similarity index 100% rename from src/SqlClient.Tests/TempTableTests.fs rename to tests/SqlClient.Tests/TempTableTests.fs diff --git a/src/SqlClient.Tests/TransactionTests.fs b/tests/SqlClient.Tests/TransactionTests.fs similarity index 96% rename from src/SqlClient.Tests/TransactionTests.fs rename to tests/SqlClient.Tests/TransactionTests.fs index 12eaad4e..7d31a560 100644 --- a/src/SqlClient.Tests/TransactionTests.fs +++ b/tests/SqlClient.Tests/TransactionTests.fs @@ -119,7 +119,8 @@ let doNotOpenConnectionOnObjectForNonQuery() = let doNotOpenConnectionOnObjectForAsyncNonQuery() = use conn = new SqlConnection(ConnectionStrings.AdventureWorks) use cmd = new NonQuery(conn) - Assert.Throws(fun() -> cmd.AsyncExecute() |> Async.RunSynchronously |> ignore) + // should unwrap the aggregateexception here; not taking that on right now + Assert.Throws(fun() -> cmd.AsyncExecute() |> Async.RunSynchronously |> ignore) [] let prematurelyOpenConnection() = diff --git a/src/SqlClient.Tests/TypeProviderTest.fs b/tests/SqlClient.Tests/TypeProviderTest.fs similarity index 98% rename from src/SqlClient.Tests/TypeProviderTest.fs rename to tests/SqlClient.Tests/TypeProviderTest.fs index 34be83bc..8e0a36de 100644 --- a/src/SqlClient.Tests/TypeProviderTest.fs +++ b/tests/SqlClient.Tests/TypeProviderTest.fs @@ -308,8 +308,15 @@ let ResultsetRuntimeVerificationDiffColumnTypes() = Configuration.Current <- { ResultsetRuntimeVerification = false} let err = Assert.Throws(fun() -> cmd.Execute() |> Seq.toArray |> ignore) + + #if NET461 + let expectedErrorMsg = "Specified cast is not valid." + #else + let expectedErrorMsg = "Unable to cast object of type 'System.DateTime' to type 'System.Int32'." + #endif + Assert.Equal( - "Specified cast is not valid.", + expectedErrorMsg, err.Message ) diff --git a/src/SqlClient.Tests/UnitsOfMeasure.fs b/tests/SqlClient.Tests/UnitsOfMeasure.fs similarity index 100% rename from src/SqlClient.Tests/UnitsOfMeasure.fs rename to tests/SqlClient.Tests/UnitsOfMeasure.fs diff --git a/tests/SqlClient.Tests/app.config b/tests/SqlClient.Tests/app.config new file mode 100644 index 00000000..1b96523f --- /dev/null +++ b/tests/SqlClient.Tests/app.config @@ -0,0 +1,11 @@ + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/SqlClient.Tests/appWithInclude.config b/tests/SqlClient.Tests/appWithInclude.config similarity index 100% rename from src/SqlClient.Tests/appWithInclude.config rename to tests/SqlClient.Tests/appWithInclude.config diff --git a/src/SqlClient.Tests/connectionStrings.Azure.config b/tests/SqlClient.Tests/connectionStrings.Azure.config similarity index 94% rename from src/SqlClient.Tests/connectionStrings.Azure.config rename to tests/SqlClient.Tests/connectionStrings.Azure.config index bf7df50c..c71ad26b 100644 --- a/src/SqlClient.Tests/connectionStrings.Azure.config +++ b/tests/SqlClient.Tests/connectionStrings.Azure.config @@ -2,4 +2,4 @@ - + \ No newline at end of file diff --git a/src/SqlClient.Tests/connectionStrings.config b/tests/SqlClient.Tests/connectionStrings.config similarity index 100% rename from src/SqlClient.Tests/connectionStrings.config rename to tests/SqlClient.Tests/connectionStrings.config diff --git a/src/SqlClient.Tests/extensions.sql b/tests/SqlClient.Tests/extensions.sql similarity index 100% rename from src/SqlClient.Tests/extensions.sql rename to tests/SqlClient.Tests/extensions.sql diff --git a/tests/SqlClient.Tests/paket.references b/tests/SqlClient.Tests/paket.references new file mode 100644 index 00000000..d7f63edd --- /dev/null +++ b/tests/SqlClient.Tests/paket.references @@ -0,0 +1,8 @@ +group Test + FSharp.Core + System.Data.SqlClient + System.Configuration.ConfigurationManager + + Newtonsoft.Json + xunit + xunit.runner.visualstudio \ No newline at end of file diff --git a/src/SqlClient.Tests/sampleCommand.sql b/tests/SqlClient.Tests/sampleCommand.sql similarity index 100% rename from src/SqlClient.Tests/sampleCommand.sql rename to tests/SqlClient.Tests/sampleCommand.sql From 9e1500d94dd6b186dfc8fefd909c3577a417179d Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Tue, 6 Nov 2018 14:34:09 -0500 Subject: [PATCH 05/15] Update packed assemblies in nuspec to reflect new framework targets --- nuget/SqlClient.nuspec | 25 ++++++++++--------- .../SqlClient.DesignTime.fsproj | 25 ++++++++++++++++++- src/SqlClient/SqlClient.fsproj | 10 ++++---- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/nuget/SqlClient.nuspec b/nuget/SqlClient.nuspec index daa31b9c..6226fd0c 100644 --- a/nuget/SqlClient.nuspec +++ b/nuget/SqlClient.nuspec @@ -15,23 +15,24 @@ Copyright 2015 @tags@ - - + + + + + + + + + + + + - - - - - - - - - - + \ No newline at end of file diff --git a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj index f48fb047..f71c6868 100644 --- a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj +++ b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj @@ -6,7 +6,6 @@ FSharp.Data.SqlClient.DesignTime false true - ..\..\bin\typeproviders\fsharp41 101 true true @@ -60,4 +59,28 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SqlClient/SqlClient.fsproj b/src/SqlClient/SqlClient.fsproj index cc856142..0838bd6c 100644 --- a/src/SqlClient/SqlClient.fsproj +++ b/src/SqlClient/SqlClient.fsproj @@ -1,11 +1,11 @@  + net40;netstandard2.0 FSharp.Data.SqlClient false true - ..\..\bin 101 true true @@ -43,10 +43,10 @@ - + - - - + + + \ No newline at end of file From 6a2a4f42858490bafad241c9e9ed7dbfbb5c297e Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Tue, 6 Nov 2018 14:34:21 -0500 Subject: [PATCH 06/15] Use dotnet SDK, etc in build script --- build.fsx | 80 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/build.fsx b/build.fsx index cbe8ee20..2c1ca5d5 100644 --- a/build.fsx +++ b/build.fsx @@ -1,3 +1,4 @@ +open Fake.DotNet // -------------------------------------------------------------------------------------- // FAKE build script // -------------------------------------------------------------------------------------- @@ -25,6 +26,7 @@ let files includes = // Information about the project to be used at NuGet and in AssemblyInfo files let project = "FSharp.Data.SqlClient" +let designTimeProject = "FSharp.Data.SqlClient.DesignTime" let authors = ["Dmitry Morozov, Dmitry Sevastianov"] let summary = "SqlClient F# type providers" let description = "SqlCommandProvider provides statically typed access to input parameters and result set of T-SQL command in idiomatic F# way.\nSqlProgrammabilityProvider exposes Stored Procedures, User-Defined Types and User-Defined Functions in F# code." @@ -40,7 +42,9 @@ let release = let version = release.AssemblyVersion let releaseNotes = release.Notes |> String.concat "\n" -let testDir = "bin/net451" + +let install = lazy DotNet.install DotNet.Versions.Release_2_1_402 +let inline dnDefault arg = DotNet.Options.lift install.Value arg // -------------------------------------------------------------------------------------- // Generate assembly info files with the right version & up-to-date information @@ -55,24 +59,44 @@ Target.create "AssemblyInfo" (fun _ -> AssemblyInfo.Version version AssemblyInfo.FileVersion version AssemblyInfo.InternalsVisibleTo "SqlClient.Tests" ] ) + + [ "src/SqlClient.DesignTime/AssemblyInfo.fs", "SqlClient.DesignTime", designTimeProject, summary ] + |> Seq.iter (fun (fileName, title, project, summary) -> + AssemblyInfoFile.createFSharp fileName + [ AssemblyInfo.Title title + AssemblyInfo.Product project + AssemblyInfo.Description summary + AssemblyInfo.Version version + AssemblyInfo.FileVersion version + AssemblyInfo.InternalsVisibleTo "SqlClient.Tests" ] ) ) +let slnPath = "SqlClient.sln" +let testProjectsSlnPath = "TestProjects.sln" +let testSlnPath = "Tests.sln" +let testProjectPath = "tests/SqlClient.Tests/SqlClient.Tests.fsproj" + Target.create "Clean" (fun _ -> Shell.cleanDirs ["bin"; "temp"] + DotNet.exec dnDefault "clean" slnPath |> ignore + DotNet.exec dnDefault "clean" testProjectsSlnPath |> ignore + DotNet.exec dnDefault "clean" testSlnPath |> ignore ) Target.create "CleanDocs" (fun _ -> Shell.cleanDirs ["docs/output"] ) -// -------------------------------------------------------------------------------------- -// Build library (builds Visual Studio solution, which builds multiple versions -// of the runtime library & desktop + Silverlight version of design time library) - Target.create "Build" (fun _ -> - files (["SqlClient.sln"]) - |> MSBuild.runRelease id "" "Restore;Rebuild" - |> ignore + DotNet.build + (fun args -> + { + args with + Configuration = DotNet.Release + //Common = { args.Common with Verbosity = Some DotNet.Verbosity.Detailed } + } |> dnDefault) + slnPath + ) #r "System.Data" @@ -86,7 +110,7 @@ open System.Configuration open System.IO.Compression Target.create "DeployTestDB" (fun _ -> - let testsSourceRoot = Path.GetFullPath(@"src\SqlClient.Tests") + let testsSourceRoot = Path.GetFullPath(@"tests\SqlClient.Tests") let map = ExeConfigurationFileMap() map.ExeConfigFilename <- testsSourceRoot @@ "app.config" let connStr = @@ -140,23 +164,24 @@ Target.create "DeployTestDB" (fun _ -> cmd.ExecuteNonQuery() |> ignore ) -Target.create "BuildTests" (fun _ -> - files ["Tests.sln"] - |> MSBuild.runRelease id "" "Restore;Rebuild" - |> ignore +Target.create "BuildTestProjects" (fun _ -> + DotNet.build + (fun args -> { args with Configuration = DotNet.Release } |> dnDefault) + testProjectsSlnPath ) // -------------------------------------------------------------------------------------- // Run the unit tests -Target.create "RunTests" (fun _ -> - !! (testDir + "/*.Tests.dll") - |> Fake.XUnitHelper.xUnit (fun p -> - {p with - ShadowCopy = false - HtmlOutput = true - XmlOutput = true - WorkingDir = testDir - }) +Target.create "RunTests" (fun _ -> + // if we don't compile the targets sequentially, we get an error with the generated types: + // System.IO.IOException: The process cannot access the file 'C:\Users\foo\AppData\Local\Temp\tmpF38.dll' because it is being used by another process. + try + DotNet.test (fun args -> { args with Framework = Some "net461"; Common = args.Common |> dnDefault }) testSlnPath + DotNet.test (fun args -> { args with Framework = Some "netcoreapp2.0"; Common = args.Common |> dnDefault }) testProjectPath + with + | ex -> + Trace.log (sprintf "Test exception: %A" ex) + raise ex ) // -------------------------------------------------------------------------------------- @@ -216,11 +241,11 @@ Target.create "All" Target.DoNothing open Fake.Core.TargetOperators // for ==> -//"Clean" -"AssemblyInfo" - ==> "Build" - ==> "DeployTestDB" - ==> "BuildTests" +"Clean" + ==> "AssemblyInfo" + ==> "Build" + ==> "DeployTestDB" + ==> "BuildTestProjects" ==> "RunTests" ==> "All" @@ -234,4 +259,3 @@ open Fake.Core.TargetOperators // for ==> ==> "ReleaseDocs" Target.runOrDefault "All" - From 0ec320df1020d0ad10c35ac62e926d5bab3c4fd6 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sat, 10 Nov 2018 14:01:22 -0500 Subject: [PATCH 07/15] Update CI config for dotnet SDK builds --- .travis.yml | 8 ++++++++ appveyor.yml | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fb13153f..8999972c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,5 +3,13 @@ language: csharp mono: - latest +addons: + apt: + packages: + - libunwind8 + script: - ./build.sh Build + +install: + - export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/ diff --git a/appveyor.yml b/appveyor.yml index 66f8c691..127981a3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,6 @@ init: - git config --global core.autocrlf input +image: Visual Studio 2017 build_script: - cmd: build.cmd GenerateDocs test: off @@ -8,4 +9,4 @@ artifacts: - path: bin name: bin services: - - mssql2012sp1 + - mssql2014 From bcbc4b15fa94d92750b8151c552a72c381edbbe4 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sat, 10 Nov 2018 16:03:15 -0500 Subject: [PATCH 08/15] Use hosted db for test projects --- .travis.yml | 2 +- build.fsx | 4 ++-- src/SqlClient.TestProjects/Lib/App.config | 2 +- .../SqlClient.Tests.NET40/Program.fs | 5 ++++- .../SqlClient.Tests.NetCoreApp/Program.fs | 10 +++++----- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8999972c..c96170cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ addons: - libunwind8 script: - - ./build.sh Build + - ./build.sh BuildTestProjects install: - export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/ diff --git a/build.fsx b/build.fsx index 2c1ca5d5..b435bb8e 100644 --- a/build.fsx +++ b/build.fsx @@ -243,9 +243,9 @@ open Fake.Core.TargetOperators // for ==> "Clean" ==> "AssemblyInfo" - ==> "Build" - ==> "DeployTestDB" + ==> "Build" ==> "BuildTestProjects" + ==> "DeployTestDB" ==> "RunTests" ==> "All" diff --git a/src/SqlClient.TestProjects/Lib/App.config b/src/SqlClient.TestProjects/Lib/App.config index 49d87418..6e3252f4 100644 --- a/src/SqlClient.TestProjects/Lib/App.config +++ b/src/SqlClient.TestProjects/Lib/App.config @@ -1,6 +1,6 @@  - + diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs index d0b10006..d6605706 100644 --- a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/Program.fs @@ -1,7 +1,10 @@ open FSharp.Data +[] +let connectionString = "Data Source=mhknbn2kdz.database.windows.net;Initial Catalog=AdventureWorks2012;Integrated Security=False;User ID=sqlfamily;Password=sqlf@m1ly" + [] let main _ = - let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True") + let get42 = new SqlCommandProvider<"SELECT 42", connectionString>(connectionString) get42.Execute() |> Seq.toArray |> printfn "%A" 0 diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs index 31d398c0..02bae28d 100644 --- a/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NetCoreApp/Program.fs @@ -1,20 +1,20 @@ open FSharp.Data [] -let cnx = "Data Source=.;Initial Catalog=AdventureWorks2012;Integrated Security=True" +let Cnx = "Data Source=mhknbn2kdz.database.windows.net;Initial Catalog=AdventureWorks2012;Integrated Security=False;User ID=sqlfamily;Password=sqlf@m1ly" -type SingleColumnSelect = SqlEnumProvider<"SELECT Name FROM Purchasing.ShipMethod", cnx> -type TinyIntEnum = SqlEnumProvider<"SELECT * FROM (VALUES(('One'), CAST(1 AS tinyint)), ('Two', CAST(2 AS tinyint))) AS T(Tag, Value)", cnx, Kind = SqlEnumKind.CLI> +type SingleColumnSelect = SqlEnumProvider<"SELECT Name FROM Purchasing.ShipMethod", Cnx> +type TinyIntEnum = SqlEnumProvider<"SELECT * FROM (VALUES(('One'), CAST(1 AS tinyint)), ('Two', CAST(2 AS tinyint))) AS T(Tag, Value)", Cnx, Kind = SqlEnumKind.CLI> type CurrencyCodeUOM = SqlEnumProvider<" SELECT CurrencyCode FROM Sales.Currency WHERE CurrencyCode IN ('USD', 'EUR', 'GBP') - ", cnx, Kind = SqlEnumKind.UnitsOfMeasure> + ", Cnx, Kind = SqlEnumKind.UnitsOfMeasure> [] let main _ = - let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True") + let get42 = new SqlCommandProvider<"SELECT 42", Cnx>(Cnx) get42.Execute() |> Seq.toArray |> printfn "SqlCommandTest: %A" printfn "SqlEnum default test: %A" SingleColumnSelect.``CARGO TRANSPORT 5`` From b4001245e5da5a8ab11f2f6130e2c7593a5de659 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sun, 11 Nov 2018 22:20:00 -0500 Subject: [PATCH 09/15] update build script --- build.fsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/build.fsx b/build.fsx index b435bb8e..50598c90 100644 --- a/build.fsx +++ b/build.fsx @@ -166,7 +166,12 @@ Target.create "DeployTestDB" (fun _ -> Target.create "BuildTestProjects" (fun _ -> DotNet.build - (fun args -> { args with Configuration = DotNet.Release } |> dnDefault) + (fun args -> + { + args with + Configuration = DotNet.Release + //Common = { args.Common with Verbosity = Some DotNet.Verbosity.Detailed } + } |> dnDefault) testProjectsSlnPath ) From 573330591ba6033e581f38747c9abe9bc9b2a21a Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sun, 11 Nov 2018 22:20:57 -0500 Subject: [PATCH 10/15] Remove debugging stuff from design time project - move to nuspec commit --- src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj index f71c6868..66e73430 100644 --- a/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj +++ b/src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj @@ -59,21 +59,11 @@ - - - - - - - - + From 193e0d94a1126c86e519df684ac20a15d87bb6ff Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sun, 11 Nov 2018 22:29:11 -0500 Subject: [PATCH 11/15] Cleanup net40 test project, references --- paket.dependencies | 9 ++++++--- paket.lock | 16 ++++++++++------ .../SqlClient.Tests.NET40.fsproj | 9 ++------- .../SqlClient.Tests.NET40/paket.references | 4 +--- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/paket.dependencies b/paket.dependencies index 24219cc6..2e0cd8fa 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -32,15 +32,18 @@ group Test nuget xunit = 2.4.1 nuget xunit.runner.visualstudio = 2.4.1 +group Net40 + source https://www.nuget.org/api/v2/ + framework: net40 + + nuget FSharp.Core = 4.1.18 + group TestProjects source https://www.nuget.org/api/v2/ framework: >= net40, netcoreapp2.0, netstandard2.0 nuget FSharp.Core = 4.3.4 - nuget Microsoft.SqlServer.TransactSql.ScriptDom - nuget Microsoft.SqlServer.Types ~> 12 - nuget System.Data.SqlClient nuget System.Configuration.ConfigurationManager diff --git a/paket.lock b/paket.lock index 419f244f..aecb36d2 100644 --- a/paket.lock +++ b/paket.lock @@ -21,6 +21,12 @@ NUGET RazorEngine (3.3) Microsoft.AspNet.Razor (>= 2.0.30506) +GROUP Net40 +RESTRICTION: == net40 +NUGET + remote: https://www.nuget.org/api/v2 + FSharp.Core (4.1.18) + GROUP Samples RESTRICTION: >= net40 NUGET @@ -546,10 +552,8 @@ NUGET remote: https://www.nuget.org/api/v2 FSharp.Core (4.3.4) Microsoft.NETCore.Platforms (2.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) (&& (>= net40) (>= netcoreapp2.0)) - Microsoft.SqlServer.TransactSql.ScriptDom (14.0.3811.1) - Microsoft.SqlServer.Types (12.0.5000) Microsoft.Win32.Registry (4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) - System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monoandroid) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= net40)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) + System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monoandroid) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) System.Memory (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) System.Security.AccessControl (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (>= net461) System.Security.Principal.Windows (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net46) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (>= net461) @@ -568,7 +572,7 @@ NUGET System.Data.SqlClient (4.5.1) Microsoft.Win32.Registry (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) runtime.native.System.Data.SqlClient.sni (>= 4.4) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) - System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) + System.Buffers (>= 4.4) - restriction: || (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) System.Data.Common (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netstandard1.2)) (&& (== netcoreapp2.0) (< netstandard1.3)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netstandard2.0) (< netstandard1.2)) (&& (== netstandard2.0) (< netstandard1.3)) (&& (>= net40) (< net451) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net451) (>= netstandard1.3) (< netstandard2.0)) (&& (>= net40) (< netstandard1.2) (>= portable-net451+win81+wpa81)) (&& (>= net40) (< netstandard1.3) (>= wpa81)) (&& (>= net40) (< netstandard2.0) (>= win81)) (&& (>= net451) (< netstandard1.3)) (&& (>= net46) (< net461) (< netstandard2.0)) System.Diagnostics.DiagnosticSource (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) System.Memory (>= 4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) @@ -576,8 +580,8 @@ NUGET System.Text.Encoding.CodePages (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) System.Diagnostics.DiagnosticSource (4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) System.Memory (4.5.1) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= net40) (< net451) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= uap10.1)) - System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= net40)) (&& (== netcoreapp2.0) (< netstandard1.1)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (< netstandard1.1) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.1) (>= win8)) (&& (>= net40) (< netstandard2.0) (>= wpa81)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (&& (>= net45) (< netstandard2.0)) (>= net461) - System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (== netstandard2.0) (&& (>= net40) (< net45) (>= netstandard2.0)) (>= net461) + System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (< netstandard1.1)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (< netstandard1.1) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.1) (>= win8)) (&& (>= net40) (< netstandard2.0) (>= wpa81)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (&& (>= net45) (< netstandard2.0)) (>= net461) + System.Numerics.Vectors (>= 4.4) - restriction: || (== netstandard2.0) (&& (>= net40) (< net45) (>= netstandard2.0)) (>= net461) System.Runtime.CompilerServices.Unsafe (>= 4.5) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monoandroid) (>= net40) (< netstandard2.0)) (&& (>= monotouch) (>= net40)) (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (< netstandard1.1) (>= portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.1) (>= win8)) (&& (>= net40) (< netstandard2.0) (>= wpa81)) (&& (>= net40) (>= uap10.1)) (&& (>= net40) (>= xamarinios)) (&& (>= net40) (>= xamarinmac)) (&& (>= net40) (>= xamarintvos)) (&& (>= net40) (>= xamarinwatchos)) (&& (>= net45) (< netstandard2.0)) (>= net461) System.Numerics.Vectors (4.5) - restriction: || (&& (== netcoreapp2.0) (>= net40)) (&& (== netcoreapp2.0) (>= net461)) (== netstandard2.0) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (>= netstandard2.0) (>= uap10.1)) (&& (< net451) (>= net461) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= net461) (>= uap10.1)) System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (== netcoreapp2.0) (== netstandard2.0) (&& (>= monotouch) (>= net40) (>= netstandard2.0)) (&& (>= net40) (< net45) (>= netstandard2.0)) (&& (>= net40) (>= netcoreapp2.0)) (&& (>= net40) (< netstandard1.1) (>= netstandard2.0)) (&& (>= net40) (>= netstandard2.0) (>= xamarinmac)) (&& (>= net40) (>= netstandard2.0) (>= xamarintvos)) (&& (>= net40) (>= netstandard2.0) (>= xamarinwatchos)) (&& (>= net40) (>= uap10.1)) (&& (>= net40) (>= xamarinios)) (&& (>= net45) (>= netcoreapp2.0) (< netstandard2.0)) (&& (>= net45) (>= uap10.1)) (&& (< net451) (>= net461) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= net461) (>= uap10.1)) diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj index c1b423bc..2b41d893 100644 --- a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj @@ -4,7 +4,7 @@ Exe - net461 + net40 SqlClient.Tests.NET40 false true @@ -17,12 +17,7 @@ - - - ..\..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll - - - + diff --git a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references index fcc18951..6db7650b 100644 --- a/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references +++ b/src/SqlClient.TestProjects/SqlClient.Tests.NET40/paket.references @@ -1,4 +1,2 @@ -group TestProjects +group Net40 FSharp.Core - System.Data.SqlClient - System.Configuration.ConfigurationManager From 351cca635b59be4875cae7fe052299c388ed49ca Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sun, 11 Nov 2018 22:31:33 -0500 Subject: [PATCH 12/15] Issues building net461 w/netstandard references on Mono; use net471 instead --- src/SqlClient.TestProjects/Lib/Lib.fsproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SqlClient.TestProjects/Lib/Lib.fsproj b/src/SqlClient.TestProjects/Lib/Lib.fsproj index e166dae7..7130fc04 100644 --- a/src/SqlClient.TestProjects/Lib/Lib.fsproj +++ b/src/SqlClient.TestProjects/Lib/Lib.fsproj @@ -3,7 +3,7 @@ - net461;netcoreapp2.0 + net471;netcoreapp2.0 Lib false true @@ -18,6 +18,7 @@ + ..\..\..\bin\netstandard2.0\FSharp.Data.SqlClient.dll From 31564e31713b8d209afb9ad501ccf649d7102ad0 Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sun, 11 Nov 2018 22:34:33 -0500 Subject: [PATCH 13/15] App.config/Web.config file names case sensitive on linux --- src/SqlClient.DesignTime/DesignTimeConnectionString.fs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/SqlClient.DesignTime/DesignTimeConnectionString.fs b/src/SqlClient.DesignTime/DesignTimeConnectionString.fs index 45ab18df..fd694058 100644 --- a/src/SqlClient.DesignTime/DesignTimeConnectionString.fs +++ b/src/SqlClient.DesignTime/DesignTimeConnectionString.fs @@ -30,12 +30,13 @@ type internal DesignTimeConnectionString = then raise <| FileNotFoundException( sprintf "Could not find config file '%s'." path) else path else - let appConfig = Path.Combine(resolutionFolder, "app.config") - let webConfig = Path.Combine(resolutionFolder, "web.config") + // note: these filenames are case sensitive on linux + let appConfig = Path.Combine(resolutionFolder, "App.config") + let webConfig = Path.Combine(resolutionFolder, "Web.config") if File.Exists appConfig then appConfig elif File.Exists webConfig then webConfig - else failwithf "Cannot find either app.config or web.config." + else failwithf "Cannot find either App.config or Web.config." let map = ExeConfigurationFileMap() map.ExeConfigFilename <- configFilename From 2d2f1fa21bd4ac450af9fa277e385d86170fda3f Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Sun, 11 Nov 2018 21:42:11 -0500 Subject: [PATCH 14/15] Remove Mono check for sql types to avoid netcore on linux issues --- src/SqlClient.DesignTime/SqlClientExtensions.fs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/SqlClient.DesignTime/SqlClientExtensions.fs b/src/SqlClient.DesignTime/SqlClientExtensions.fs index 9d37cfc0..c0192855 100644 --- a/src/SqlClient.DesignTime/SqlClientExtensions.fs +++ b/src/SqlClient.DesignTime/SqlClientExtensions.fs @@ -441,9 +441,7 @@ type SqlConnection with if not <| dataTypeMappings.ContainsKey this.ConnectionString then assert (this.State = ConnectionState.Open) - - let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with _ -> false - + let sqlEngineTypes = [| use cmd = new SqlCommand(" SELECT t.name, t.system_type_id, t.user_type_id, t.is_table_type, s.name as schema_name, t.is_user_defined @@ -452,10 +450,8 @@ type SqlConnection with ", this) use reader = cmd.ExecuteReader() while reader.Read() do - // #105 - disable assembly types when running on mono, because GetSchema() doesn't return these types on mono. let systemTypeId = unbox reader.["system_type_id"] - if not runningOnMono || systemTypeId <> 240uy then - yield + yield string reader.["name"], int systemTypeId, unbox reader.["user_type_id"], From 4b2c61e325c6758db14922e3375e887ffb46ad6c Mon Sep 17 00:00:00 2001 From: Sam Hanes Date: Tue, 13 Nov 2018 12:18:58 -0500 Subject: [PATCH 15/15] Update release notes --- RELEASE_NOTES.md | 3 +++ src/SqlClient.DesignTime/AssemblyInfo.fs | 8 ++++---- src/SqlClient/AssemblyInfo.fs | 8 ++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ccc45aca..16716fd3 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,6 @@ +#### 2.0.1-alpha November 11, 2018 + * Add netstandard2.0 target + #### 1.8.6 - June 2, 2018 * Issue #303 Enable typed data table constructor to initialize an empty datatable with the expected columns diff --git a/src/SqlClient.DesignTime/AssemblyInfo.fs b/src/SqlClient.DesignTime/AssemblyInfo.fs index f5e77688..8e6e527e 100644 --- a/src/SqlClient.DesignTime/AssemblyInfo.fs +++ b/src/SqlClient.DesignTime/AssemblyInfo.fs @@ -6,8 +6,8 @@ open System.Runtime.CompilerServices [] [] [] -[] -[] +[] +[] [] do () @@ -15,6 +15,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "SqlClient.DesignTime" let [] AssemblyProduct = "FSharp.Data.SqlClient.DesignTime" let [] AssemblyDescription = "SqlClient F# type providers" - let [] AssemblyVersion = "1.8.6" - let [] AssemblyFileVersion = "1.8.6" + let [] AssemblyVersion = "2.0.1" + let [] AssemblyFileVersion = "2.0.1" let [] InternalsVisibleTo = "SqlClient.Tests" diff --git a/src/SqlClient/AssemblyInfo.fs b/src/SqlClient/AssemblyInfo.fs index 910851af..9415cc46 100644 --- a/src/SqlClient/AssemblyInfo.fs +++ b/src/SqlClient/AssemblyInfo.fs @@ -6,8 +6,8 @@ open System.Runtime.CompilerServices [] [] [] -[] -[] +[] +[] [] do () @@ -15,6 +15,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "SqlClient" let [] AssemblyProduct = "FSharp.Data.SqlClient" let [] AssemblyDescription = "SqlClient F# type providers" - let [] AssemblyVersion = "1.8.6" - let [] AssemblyFileVersion = "1.8.6" + let [] AssemblyVersion = "2.0.1" + let [] AssemblyFileVersion = "2.0.1" let [] InternalsVisibleTo = "SqlClient.Tests"