需要澄清有关Microsoft.FSharp.Data.TypeProviders的信息

时间:2015-08-02 08:57:19

标签: f#

我们使用Microsoft.FSharp.Data.TypeProviders使用F#3.1进行项目构建。现在我们正在尝试用VS2015构建这个项目,我们遇到了这部分F#的问题。例如,当我尝试使用Nuget安装它时,它需要F#3.1。我使用this guide,它看起来过时了。

所以我会感谢我的问题的答案:

  1. Microsoft.FSharp.Data.TypeProviders属于F#语言的哪一部分?它是F#核心库还是外部库之一?谁负责这个图书馆?我在哪里可以找到这个F#生态系统的bug追踪器?

  2. 是否有人试图在VS2015中使用this tutorial构建F#应用程序?你有像我这样的问题吗?或者一切正常?

  3. Microsoft.FSharp.TypeProviders的当前状态是什么?它是否过时,我需要的是等待一段时间将库采用到F#4.0和VS2015。或者我是否需要切换到其他数据库访问库?

  4. 以下是重现错误的完整说明:

    • 新项目 - F# - 控制台应用程序(网络4.6)
    • NuGet - 安装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>
      
    • program.fs添加以下行:

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

    以下是错误消息:

      

    无法找到.NET SDK 4.0或4.5工具

    enter image description here

3 个答案:

答案 0 :(得分:10)

更多历史背景:

  

1. Microsoft.FSharp.Data.TypeProviders属于F#语言的哪一部分?它是F#核心库还是外部库之一?谁负责这个图书馆?我在哪里可以找到这个F#生态系统的bug追踪器?

它不是核心运行时的一部分,即你可以成为一个快乐而富有成效的F#dev而不与之交互。它由Microsoft创建,随F#3.0 / VS 2012一起提供,作为一组用于常见Msft数据堆栈的内置类型提供程序。作为语言功能的类型提供程序已添加到同一版本中,因此该库有点展示了可以执行的操作。 FS.D.TP目前尚未得到积极维护。原始版本4.3.0.0仍在VS 2013和VS 2015的包装盒中提供,但自VS 2012发布以来未进行任何更改。来源可用here,欢迎您在该回购邮件中提交错误。

原则上,图书馆将作为社区项目接管,并作为nuget包从那里进行维护/更新。没有什么能真正阻止这一点。然而,拥有Msft签名和支持的框中的库对于许多企业客户来说仍然非常重要。所以它仍然存在于这种状态,它在盒子里,但没有更新。

  

3.Microsoft.FSharp.TypeProviders的当前状态是什么?它是否过时,我需要的是等待一段时间将库采用到F#4.0和VS2015。或者我是否需要切换到其他数据库访问库?

上面回答了其中一些问题。如果您具有所有必需的依赖项,则库仍应在F#3.1或F#4.0中完美运行。特别是,您需要安装.NET 4.0或4.5 SDK(您可以获得Win8 / .NET 4.5 SDK here)因为TP依赖于各种可执行的codegen工具(sqlmetal.exe,svutil.exe)与其

答案 1 :(得分:1)

我刚刚在VS 2015中创建了一个针对.NET 4.6上的F#4.0(4.4.0.0)的新项目,使用NuGet添加了对FSharp.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>

然后我添加了一个新文件并输入

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

然后,VS告诉我引用System.Data.Linq ...一切正常,教程也是最新的。

您是否已尝试设置新项目而不是迁移旧项目?

TL; DR (请参阅chat

问题是缺少某些注册表项。如果您的注册表不包含

[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\\"

可能是时候(重新)安装适用于Windows 8的Windows SDK。

答案 2 :(得分:0)

我有这个问题。 VS 2015项目升级到VS 2017 / .NET 4.7.2 / F#4.1(F#Core 4.4.3.0)

突然,Microsoft.FSharp.Data只包含名称空间“UnitSystems”。

“WsdlService”无法编译。

安装了以下Nuget包:

nuget“FSharp.Data.TypeProviders”和“FSharp.Compiler.Tools”(?)

并且所有内容都使用最新的VS 2017 / .NET 4.7.2 ...

进行编译

(注意:我还删除了对System.ValueTuple的引用)