Need clarification regarding Microsoft.FSharp.Data.TypeProviders

We have a project build with F# 3.1 using Microsoft.FSharp.Data.TypeProviders. Now we are trying to build this project with VS2015 and we have the problems with this part of F#. For example, when I am trying to install it using Nuget it requires F# 3.1. I use this guide and it looks outdated.

So I will be thankful for answers on my questions:

  1. What part of F# language Microsoft.FSharp.Data.TypeProviders belongs to? It is F# core library or it is one of external libraries? Who is responsible for this library? Where can I find the bug tracker for this part of F# ecosystem?

  2. Is there anybody who trying to use this tutorial to build F# application in VS2015? Do you have a problems like me? Or all is working fine?

  3. What is the current state of Microsoft.FSharp.TypeProviders? Is it outdated and all what I need is to wait some time when the library will be adopted to F# 4.0 and VS2015. Or do I need to switch to other DB-access library?

Here is full description to reproduce error:

  • New Project - F# - Console Application (net 4.6)
  • NuGet - Install Data.TypeProviders. packages.config:

    <?xml version="1.0" encoding="utf-8"?>
      <packages>
       <package id="FSharp.Core.3" version="0.0.2" targetFramework="net46" />
       <package id="FSharp.Data.TypeProviders" version="0.0.1" targetFramework="net46" />
      </packages>
    
  • To program.fs add the lines:

    module Test
       open Microsoft.FSharp.Data.TypeProviders
       type internal DB = SqlDataConnection<"Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=SSPI;">
    

Here is an error message:

The .NET SDK 4.0 or 4.5 tools can not be found

Some more historical background:

1.What part of F# language Microsoft.FSharp.Data.TypeProviders belongs to? It is F# core library or it is one of external libraries? Who is responsible for this library? Where can I find the bug tracker for this part of F# ecosystem?

It's not part of the core runtime, i.e. you can be a happy and productive F# dev without ever interacting with it. It was created by Microsoft and shipped with F# 3.0/VS 2012 as a set of in-the-box type providers for common Msft data stacks. Type providers as a language feature were added in the same release, so this library was a bit of a showcase of what could be done. FS.D.TP is not actively maintained at the moment. Original version 4.3.0.0 is still shipped in the box with VS 2013 and VS 2015, but no changes have been made since the VS 2012 release. Source is available here and you are welcome to file bugs in that repo, too.

In principle the library be taken over as a community project and maintained/updated from there as a nuget package. Nothing is really preventing this. However having the library in the box with Msft signature and support is very important to a lot of enterprise customers still. So it persists in this sort of limbo state where it's in the box but not updated.

3.What is the current state of Microsoft.FSharp.TypeProviders? Is it outdated and all what I need is to wait some time when the library will be adopted to F# 4.0 and VS2015. Or do I need to switch to other DB-access library?

Some of this is answered above. The library should still be perfectly functional with F# 3.1 or F# 4.0, provided you have all of the required dependencies. In particular, you need the .NET 4.0 or 4.5 SDK installed (you can get Win8/.NET 4.5 SDK here) because the TPs rely on various executable codegen tools (sqlmetal.exe, svutil.exe) that come along therewith.

FSharp.Data.TypeProviders, F# Type Providers using .NET Framework generators, was FSharp.Data. NOTE​: Use FSharp.Data.TypeProviders instead of Microsoft.FSharp.Data. You might also want to read the library design notes to understand how it works. 0 Need clarification regarding Microsoft.FSharp.Data.TypeProviders Jun 12 '18 0 F# System.OutOfMemoryException with recursive call Jul 13 '17 0 How to automatically insert version number into AssemblyName Jul 15 '17

I just created a new project in VS 2015 targeting F# 4.0 (4.4.0.0) on .NET 4.6, added a reference to FSharp.Data.TypeProviders using NuGet, which lead to the following packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FSharp.Core.3" version="0.0.2" targetFramework="net46" />
  <package id="FSharp.Data.TypeProviders" version="0.0.1" targetFramework="net46" />
</packages>

I then added a new file and entered

module Test
 open Microsoft.FSharp.Data.TypeProviders
 type internal DB = SqlDataConnection<"Data Source=.;Initial Catalog=OBSCURED_CATALOG;Integrated Security=SSPI;">
 let private e1 = DB.GetDataContext().OBSCURED_ENTITY

Then, VS told me to reference System.Data.Linq... everything works just as it should and the tutorial looks up-to-date as well.

Did you already try to set up a new project instead of migrating the old one?

TL;DR (see chat)

Problem is that some registry keys were missing. If your registry doesn't contain

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A]
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\"
"ProductVersion"="8.1.51641"
"ProductName"="Microsoft .NET Framework 4.5.1 SDK"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools]
"ProductVersion"="8.1.51641"
"ComponentName"="Microsoft .NET Framework 4.5.1 SDK"
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\bin\\NETFX 4.5.1 Tools\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x64]
"ProductVersion"="8.1.51641"
"ComponentName"="Microsoft .NET Framework 4.5.1 SDK"
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\bin\\NETFX 4.5.1 Tools\\x64\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x86]
"ProductVersion"="8.1.51641"
"ComponentName"="Microsoft .NET Framework 4.5.1 SDK"
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\bin\\NETFX 4.5.1 Tools\\"

it might be time to (re)install Windows SDK for Windows 8.

fsprojects/FSharp.Data.TypeProviders: F# Type Providers , F# Type Providers for SqlDataConnection, SqlEntityConnection, ODataService, WsdlService and EdmxFile using .NET Framework generators - fsprojects/FSharp​.Data.TypeProviders. Latest commit 1130532 on Sep 12, 2018 tests · De-​obsolete microsoft, 2 years ago build.fsx · clarify package authors, 2 years ago. Asking for help, clarification, or responding to other answers. Making statements based on opinion; back them up with references or personal experience. Use MathJax to format equations. MathJax reference. To learn more, see our tips on writing great answers.

I had this issue. VS 2015 project upgraded to VS 2017 / .NET 4.7.2 / F# 4.1 (F# Core 4.4.3.0)

Suddenly Microsoft.FSharp.Data only contained namespace "UnitSystems".

"WsdlService" would not compile.


Installed the following Nuget packages:

nuget "FSharp.Data.TypeProviders" and "FSharp.Compiler.Tools" (?)

and everything compiles with latest VS 2017 / .NET 4.7.2 ...

(Note: I also removed references to System.ValueTuple)

F# Data Type Providers in .Net Core (2018), I moved from F# to kotlin and have about 80% of what I want / used from F#. F# has tended to lag far behind C# in Microsoft's ecosystem. Data package has long moved out of preview and many other Type Providers work well on . I picked that article just because it is a very concise explanation, a bit more proper for  paket add FSharp.Data.TypeProviders --version 5.0.0.6. The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Tutorial: Create a Type Provider, FSharp.Data.SqlClient has a set of type providers for compile-time checked embedding Do you have a schema for your information source? need clarification vs to be clarified If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed.

F Sharp (programming language), The substitution of the # is due to technical restrictions. F# (pronounced F sharp) is a general purpose, strongly typed, multi-paradigm programming F# is developed by the F# Software Foundation, Microsoft and open contributors. Functions and expressions that do not return any value have a return type of unit . F# uses  When you ask someone for clarification, you are asking them to say something in a different way or provide more information so that you understand them better. Here is how you can respectfully

F# WsdlService type provider proxy - f# - csharp, I'm not connecting through a proxy, so I have no way of actually testing this, but I TypeProviders.dll" open Microsoft.FSharp.Data.TypeProviders type Terra an explanation of the issue and a solution: Type provider calling another dll in F# I  Sometimes we need clarification when we want to get a better handle on where others are coming from. Asking clarifying questions shows that you’re actively listening and want to understand. The best questions are open-ended. They allow the person to expand on the topic rather than giving a simple yes or no response.

Comments
  • What is "Microsoft.FSharp.Data.TypeLibrary"? EDIT: From the link, I guess you were referring to FSharp.Data.TypeProviders.dll. I'm not sure what the answer is though.
  • Yes. Sorry, it was my mistake - TypeProviders. First of all, it requires F# 3.0. Second, I can not use Dbml from this library in VS2015. So I am just wondering what is recommended way to work with MS SQL in F# 4.0 ?
  • I have seen some reports regarding this issue - looks like VS 2015 does not create some registry key that F# expects. Aside from that, I think it should still work - though this is something that needs to be fixed.
  • Where is the best place to send report about it?
  • Thanks. I can confirm that installing Win8/.NET 4.5 SDK fixes the problem.
  • The installer for the Win8/.NET 4.5 SDK crashes during installation on my Win10/.NET 4.6 machine. The latest Win10 SDK installs but that does not fix the problem for me.
  • @JonHarrop I also had a similiar issue. My home PC worked fine, but this makes sense since it was upgraded from windows 8.1 to windows 10. My work PC i could not get this to work at all, new windows 10 install. I got it to work by launching the SDK setup and telling it to download for another machine. I only downloaded the Windows SDK and .net4.5 SDK (although i am sure it doesn't matter if you download them all) I then just chose to install those 2 SDK's and bam everything is working now.
  • Can you please add type dbml = DbmlFile<"MyDatabase.dbml", ContextTypeName = "MyDataContext"> to your project? (It is from here msdn.microsoft.com/en-us/en-en/library/hh361039.aspx). We want to store connection string in the configuration file. This line give me error: TypeProviders: The .NET SDK 4.0 or 4.5 tools can not be found even on new project. I think you don't need to create dbml file to make this check. Thanks.
  • adding this gives The type provider 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' reported an error: Could not find file '...\MyDatabase.dbml'. F ...\F.fs so at least the type provider is found. Are the type providers enabled in Tools -> Options -> F# Tools -> Type Providers?
  • Yes, all providers are enabled. Moreover I have error even with your code. I have updated my question and described all steps to reproduce error. Can you please share your project (github or something else) ?
  • I have exactly the same error with your project: TypeProviders: The .NET SDK 4.0 or 4.5 tools can not be found. For example for line type dbml = DbmlFile I had error ` Could not find file '...\MyDatabase.dbml', but when I have added this file the error was TypeProviders: The .NET SDK 4.0 or 4.5 tools can not be found`. I have a fresh install of Windows 10 and VS2015 Community Edition. What would you recommend to check?
  • Did you choose to install F# when you installed VS or did you do a default install and follow the instructions when first opening an F# project?