Skip to content

Commit

Permalink
Merge pull request #338 from smoothdeveloper/try-designtime-netstanda…
Browse files Browse the repository at this point in the history
…rd-support

DesignTime assembly target for netstandard20 tooling (no support for SqlEnumProvider and not yet tested with netstandard only tooling).
  • Loading branch information
smoothdeveloper authored May 27, 2019
2 parents f58b26e + 001a22f commit 52f8932
Show file tree
Hide file tree
Showing 11 changed files with 195 additions and 26 deletions.
16 changes: 16 additions & 0 deletions netfx.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -->
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- F# TP SDK STUFF -->
<PropertyGroup>
<!-- When compiling .NET SDK 2.0 projects targeting .NET 4.x on Mono using 'dotnet build' you -->
<!-- have to teach MSBuild where the Mono copy of the reference asssemblies is -->
Expand All @@ -26,10 +27,25 @@
<AssemblySearchPaths Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">$(FrameworkPathOverride)/Facades;$(AssemblySearchPaths)</AssemblySearchPaths>

</PropertyGroup>

<ItemGroup>
<!-- When using 'dotnet build' to compile against Mono reference assemblies it seems necessary to add some explicit references to some facade DLLs -->
<Reference Include="System.Runtime" Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND $(TargetFramework.StartsWith('net4'))" />
<Reference Include="System.IO" Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND $(TargetFramework.StartsWith('net4'))" />

</ItemGroup>

<!-- F# SQL CLIENT STUFF -->
<PropertyGroup Condition="$(TargetFramework) == 'net461'">
<!--
Microsoft.SqlServer.Types is currently not available for netstandard,
USE_SQL_SERVER_TYPES_ASSEMBLY singles out code depending on it
-->
<DefineConstants>$(DefineConstants);USE_SQL_SERVER_TYPES_ASSEMBLY;USE_SYSTEM_DATA_COMMON_DBPROVIDERFACTORIES</DefineConstants>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.5.1" Condition="'$(TargetFramework)' != 'net40'" />
</ItemGroup>

</Project>
14 changes: 13 additions & 1 deletion paket.dependencies
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,26 @@ group Build

nuget NuGet.CommandLine

group DesignTime
source https://www.nuget.org/api/v2/
framework: >= net461,netstandard20

nuget System.Configuration.ConfigurationManager
nuget System.Data.Common
nuget System.Data.SqlClient
nuget System.Runtime.Caching
nuget FSharp.Core
nuget Microsoft.SqlServer.TransactSql.ScriptDom
nuget Microsoft.SqlServer.Types

group Test
source https://www.nuget.org/api/v2/
framework: net461, netcoreapp2.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 = 2.4.1
Expand Down
123 changes: 119 additions & 4 deletions paket.lock

Large diffs are not rendered by default.

24 changes: 17 additions & 7 deletions src/SqlClient.DesignTime/SqlClient.DesignTime.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,40 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\netfx.props" />
<PropertyGroup>
<TargetFrameworks>net40;net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<AssemblyName>FSharp.Data.SqlClient.DesignTime</AssemblyName>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<NoWarn>101</NoWarn>
<DisableImplicitFSharpCoreReference>true</DisableImplicitFSharpCoreReference>
<DisableImplicitSystemValueTupleReference>true</DisableImplicitSystemValueTupleReference>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FSharp.Core" Version="4.1.18" Condition="'$(TargetFramework)' == 'net40'" />
<PackageReference Include="FSharp.Core" Version="4.3.4" Condition="'$(TargetFramework)' == 'net461'" />
<!--<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" Condition="'$(TargetFramework)' == 'net461'" />
<PackageReference Include="Microsoft.SqlServer.TransactSql.ScriptDom" Version="14.0.3811.1" />
<PackageReference Include="Microsoft.SqlServer.Types" Version="12.0.5000" />
<PackageReference Include="System.Data.SqlClient" Version="4.5.1" Condition="'$(TargetFramework)' == 'net461'" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" Condition="'$(TargetFramework)' == 'net461'" />
<PackageReference Include="System.Data.SqlClient" Version="4.5.1" Condition="'$(TargetFramework)' == 'netstandard'" />
-->
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net40'">
<!--<ItemGroup Condition="$(TargetFramework) == 'net40'">
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
</ItemGroup>
<ItemGroup>
<ItemGroup>
<Reference Include="System.IdentityModel" />
<Reference Include="System.Runtime.Caching" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Xml" />
</ItemGroup>-->
<ItemGroup Condition="$(TargetFramework) == 'net461'">
<Reference Include="System.Data" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.fs" />
Expand Down Expand Up @@ -62,15 +70,17 @@
<Target Name="CopyAssembliesToTPFolder" AfterTargets="Build">
<ItemGroup>
<DesignTimeAssemblies Include="$(OutputPath)\FSharp.Data.SqlClient.DesignTime.*" />
<DesignTimeAssemblies Include="$(OutputPath)\Microsoft.SqlServer.*.dll" />
</ItemGroup>
<DesignTimeAssemblies Include="$(OutputPath)\Microsoft.SqlServer.*.dll" />
</ItemGroup>
<Copy SourceFiles="@(DesignTimeAssemblies)" DestinationFolder="..\..\bin\typeproviders\fsharp41\$(TargetFramework)" />
</Target>
<Target Name="CopyAssembliesToLegacyFolder" AfterTargets="Build" Condition="$(TargetFramework) == 'net40'">
<ItemGroup>
<DesignTimeAssemblies Include="$(OutputPath)\FSharp.Data.SqlClient.DesignTime.*" />
<DesignTimeAssemblies Include="$(OutputPath)\Microsoft.SqlServer.*.dll" />
<DesignTimeAssemblies Include="$(OutputPath)\Microsoft.SqlServer.*.dll" />
</ItemGroup>
<Copy SourceFiles="@(DesignTimeAssemblies)" DestinationFolder="..\..\bin\$(TargetFramework)" />
</Target>

<Import Project="..\..\.paket\Paket.Restore.targets" />
</Project>
3 changes: 2 additions & 1 deletion src/SqlClient.DesignTime/SqlCommandProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ open ProviderImplementation.ProvidedTypes
[<assembly:InternalsVisibleTo("SqlClient.DesignTime.Tests")>]
do()

#if USE_SQL_SERVER_TYPES_ASSEMBLY
module X =
// need to make sure microsoft.sqlserver.types is included as a referenced assembly
let x = Microsoft.SqlServer.Types.SqlHierarchyId()

#endif
[<TypeProvider>]
[<CompilerMessageAttribute("This API supports the FSharp.Data.SqlClient infrastructure and is not intended to be used directly from your code.", 101, IsHidden = true)>]
type SqlCommandProvider(config : TypeProviderConfig) as this =
Expand Down
6 changes: 6 additions & 0 deletions src/SqlClient.DesignTime/SqlEnumProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ type SqlEnumProvider(config : TypeProviderConfig) as this =
| Literal value -> value, provider
| NameInConfig(_, value, provider) -> value, provider

#if !USE_SYSTEM_DATA_COMMON_DBPROVIDERFACTORIES
// not supported on netstandard 20?
raise ("DbProviderFactories not available" |> NotImplementedException)
#else
let adoObjectsFactory = DbProviderFactories.GetFactory( providerName: string)
use conn = adoObjectsFactory.CreateConnection()
conn.ConnectionString <- connStr
Expand Down Expand Up @@ -262,6 +266,8 @@ type SqlEnumProvider(config : TypeProviderConfig) as this =
tempAssembly.AddTypes [ providedEnumType ]
providedEnumType

#endif

//Quotation factories

static member internal GetTryParseImpl<'Value> items =
Expand Down
10 changes: 10 additions & 0 deletions src/SqlClient.DesignTime/paket.references
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
group DesignTime

System.Configuration.ConfigurationManager
System.Data.Common
System.Data.SqlClient
System.Runtime.Caching
Microsoft.SqlServer.TransactSql.ScriptDom
Microsoft.SqlServer.Types


Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
-->
<Import Project="..\..\..\.paket\paket.targets" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2' Or $(TargetFrameworkVersion) == 'v4.8')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\..\packages\samples\FSharp.Core\lib\net45\FSharp.Core.dll</HintPath>
Expand All @@ -90,7 +90,7 @@
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.0.3' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.0.3' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2' Or $(TargetFrameworkVersion) == 'v4.8')">
<ItemGroup>
<Reference Include="FSharp.Data.SqlClient">
<HintPath>..\..\..\packages\samples\FSharp.Data.SqlClient\lib\net40\FSharp.Data.SqlClient.dll</HintPath>
Expand All @@ -101,7 +101,7 @@
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2' Or $(TargetFrameworkVersion) == 'v4.8')">
<ItemGroup>
<Reference Include="System.Net.Http.Formatting">
<HintPath>..\..\..\packages\samples\Microsoft.AspNet.WebApi.Client\lib\net45\System.Net.Http.Formatting.dll</HintPath>
Expand All @@ -112,7 +112,7 @@
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2' Or $(TargetFrameworkVersion) == 'v4.8')">
<ItemGroup>
<Reference Include="System.Web.Http">
<HintPath>..\..\..\packages\samples\Microsoft.AspNet.WebApi.Core\lib\net45\System.Web.Http.dll</HintPath>
Expand All @@ -132,7 +132,7 @@
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7' Or $(TargetFrameworkVersion) == 'v4.7.1' Or $(TargetFrameworkVersion) == 'v4.7.2' Or $(TargetFrameworkVersion) == 'v4.8')">
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\..\packages\samples\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll</HintPath>
Expand Down
Loading

0 comments on commit 52f8932

Please sign in to comment.