我正在尝试在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
答案 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行添加到项目中。
快乐编码
罗兰