带有dotnet核心的Windows上的FSharp.Data.SqlClient报告类型'SqlCommand'不可用

时间:2017-12-13 15:04:17

标签: sql-server f#

我正在尝试在Windows上使用FSharp.Data.SqlClient

c:\...> dotnet new console -lang f# -o test5
c:\...> cd test5

现在将<Import Project="fsc.props" />添加到test5.fsproj并从fsc.props添加https://raw.githubusercontent.com/fsprojects/FSharp.TypeProviders.SDK/master/fsc.props。然后

c:\...\test5> dotnet add package FSharp.Data.SqlClient

按如下方式编辑Program.fs

open FSharp.Data
open FSharp.Data.SqlClient

[<Literal>]
let connectionString = 
    @"Data Source=.\SQL14X64;Initial Catalog=test;User=sa;Password=***"

[<EntryPoint>]
let main argv =
    use cmd = new SqlCommandProvider<"
            SELECT 1
            " , connectionString>(connectionString)
    0

尝试编译它:

c:\...\test5> dotnet build

有错误:

 The type 'SqlCommand' is required here and is unavailable.
 You must add a reference to assembly 'System.Data.SqlClient, Version=0.0.0.0, ...

好的,安装System.Data.SqlClient:

c:\...\test5> dotnet add package System.Data.SqlClient

有错误:

The type 'SqlCommand' is required here and is unavailable.
You must add a reference to assembly 'System.Data.SqlClient, Version=4.2.0.1, ...

O键,让安装4.2.0.1:

c:\...\test5> dotnet remove package System.Data.SqlClient 
c:\...\test5> dotnet add package System.Data.SqlClient --version 4.2.0.1
c:\...\test5> dotnet build

有错误:

The type 'SqlCommand' is required here and is unavailable.
You must add a reference to assembly 'System.Data.SqlClient, Version=4.1.0.0, ...

Hm ...替换为4.1.0.0:

c:\...\test5> dotnet remove package System.Data.SqlClient 
c:\...\test5> dotnet add package System.Data.SqlClient --version 4.1.0.0
c:\...\test5> dotnet build

再次出现同样的错误:

The type 'SqlCommand' is required here and is unavailable.
You must add a reference to assembly 'System.Data.SqlClient, Version=4.1.0.0, ...

无法继续使用它。

操作系统:Windows,.NET Core:2.1.2

1 个答案:

答案 0 :(得分:0)

我确定其他人仍会时不时地为此苦苦挣扎,因此,这是我必须要做的,才能使FSharp.Data.SqlClient在Mac上的.NET Core项目中运行(是的,确实很好用!)。

我相信大多数内容也将适用于Windows,只是您不需要Mono。

在编译时,您需要完整的.NET框架,因此,如果您正在运行Linux或Mac,则必须安装Mono。该项目仍然可以编译以清除.NET Core。

您需要在项目文件夹中放置fsc.props(将其与项目文件放置在同一文件夹中)。 Fsc.props包含在编译时使用的工具的路径。在我的fsc.props文件中,相关路径描述如下(我不记得是否必须对其进行编辑才能运行):

<PropertyGroup Condition="'$(IsOSX)' == 'true'  AND Exists('/Library/Frameworks/Mono.framework/Versions/Current/Commands/fsharpc')">
          <FscToolPath>/Library/Frameworks/Mono.framework/Versions/Current/Commands</FscToolPath>
          <FscToolExe>fsharpc</FscToolExe>
</PropertyGroup>

接下来,您需要在.fsproj文件和DisableAutoSetFscCompilerPath中引用fsc.props:

<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="fsc.props" />

    <PropertyGroup>
        <DisableAutoSetFscCompilerPath>true</DisableAutoSetFscCompilerPath>
        <DotNetFscToolPath></DotNetFscToolPath>
        <DotnetFscCompilerPath></DotnetFscCompilerPath>
    </PropertyGroup>

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <Compile Include="mySQLCode.fs" />
        <Compile Include="Program.fs" />
    </ItemGroup>

    <ItemGroup>
      <PackageReference Include="FSharp.Data" Version="3.3.3" />
      <PackageReference Include="FSharp.Data.SqlClient" Version="2.0.6" />
    </ItemGroup>

</Project>

相关的行是第2至8行。

当然,您还必须使用您喜欢的包管理器来获取Fsharp.Data和FSharp.Data.SqlClient,这会将PackageReference行添加到项目中。

快乐编码

罗兰