SQLProvider
SQLProvider copied to clipboard
Cannot build SqlServer Tests Project on Windows with .Net Core 2.2
Description
Cannot build SqlProvider Core test project on Windows with .NetCore 2.2. Fails with error message:
FSC: error FS0226: The file extension of 'C:\Program Files\dotnet\sdk\2.2.300\FSharp\fsc.exe' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli.
Repro steps
-
Install Visual studio 2019
-
Open the
SqlProvider.Core.Testsprojecct and comment out any code that is related doing SqlProvider stuff inProgram.fs. -
Update the
SqlProvider.Core.Testsproject to use Visual Studio 2019:
<PropertyGroup Condition="'$(IsWindows)' == 'true'">
<FscToolPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\FSharp</FscToolPath>
<FscToolExe>fsc.exe</FscToolExe>
- Run
\SQLProvider\tests\SqlProvider.Core.Tests\MsSql> dotnet build
Full output:
PS C:\..\SQLProvider\tests\SqlProvider.Core.Tests\MsSql> dotnet build
Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 28.14 ms for C:\..\dev\SQLProvider\tests\SqlProvider.Core.Tests\MsSql\SqlProvider.Core.Tests.fsproj.
FSC : error FS0226: The file extension of 'C:\Program Files\dotnet\sdk\2.2.300\FSharp\fsc.exe' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. [C:\..\SQLProvider\tests\SqlProvider.Core.Tests\MsSql\SqlProvider.Core.Tests.fsproj]
Build FAILED.
FSC : error FS0226: The file extension of 'C:\Program Files\dotnet\sdk\2.2.300\FSharp\fsc.exe' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. [C:\..\SQLProvider\tests\SqlProvider.Core.Tests\MsSql\SqlProvider.Core.Tests.fsproj]
0 Warning(s)
1 Error(s)
Expected behavior
Expect this project to build successfully.
Related information
- Windows 10
- Visual Studio 2019
- .Net Core 2.2.3
Full un-scrubbed build output with -verbosity:n:
build_output.txt
I haven't tried .NET Core 2.2, but works perfectly in my .NET Core 2.1. Sounds like it's trying to compile fsc.exe...
@Thorium Do you have an example project that pulls on this together? I'm currently on the fence about using F# because of this problem. At the moment, I can't get anything with F# + SQL working.
I tried going back to .net core 2.1 like you suggested. I also followed the setup exactly including the step 4 which I didn't notice before:
To roll back to 2.1, I had to run this command to switch my sdk:
dotnet new globaljson --sdk-version 2.1.700
My fsproj file pointing to the F# in the visual studio directory, using latest sqlprovider version:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="SQLProvider" Version="1.1.65">
<ExcludeAssets>compile</ExcludeAssets>
</PackageReference>
<PackageReference Include="System.Data.SqlClient" Version="4.6.1" />
</ItemGroup>
<PropertyGroup>
<FscToolPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\FSharp</FscToolPath>
<FscToolExe>fsc.exe</FscToolExe>
</PropertyGroup>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="xcopy %USERPROFILE%\.nuget\packages\SQLProvider\1.1.65\lib\net451\FSharp.Data.SqlProvider.dll compiletime\ /y" />
</Target>
<ItemGroup>
<Reference Include="FSharp.Data.SqlProvider">
<HintPath>compiletime/FSharp.Data.SqlProvider.dll</HintPath>
</Reference>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy %USERPROFILE%\.nuget\packages\SQLProvider\1.1.65\lib\net451\FSharp.Data.SqlProvider.dll bin\Debug\netcoreapp2.1\ /y" />
</Target>
</Project>
The F# program:
// Learn more about F# at http://fsharp.org
open System
open FSharp.Data.Sql
[<EntryPoint>]
let main argv =
printfn "Hello World from F#!"
0 // return an integer exit code
running dotnet build:
PS C:\...\test_sqlprovider> dotnet build
Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 23.54 ms for C:\...\test_sqlprovider\test_sqlprovider.fsproj.
C:\...\$HOME\.nuget\packages\SQLProvider\1.1.65\lib\net451\FSharp.Data.SqlProvider.dll
1 File(s) copied
FSC : error FS0226: The file extension of 'C:\Program Files\dotnet\sdk\2.1.700\FSharp\fsc.exe' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. [C:\...\test_sqlprovider\test_sqlprovider.fsproj]
Build FAILED.
FSC : error FS0226: The file extension of 'C:\Program Files\dotnet\sdk\2.1.700\FSharp\fsc.exe' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. [C:\...\dev\test_sqlprovider\test_sqlprovider.fsproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:01.54
EDIT:
A coworker was able to reproduce the same error on his windows machine with this basic setup.
Here are some samples: https://github.com/fsprojects/SQLProvider/tree/master/tests/SqlProvider.Core.Tests/ e.g. https://github.com/fsprojects/SQLProvider/tree/master/tests/SqlProvider.Core.Tests/MsSql
yeah sorry, but I'm still having issues building this project. I initially reported the issue because I couldn't build the MsSql example.
This build output shows me cloning the repo, and running the build.cmd, it still fails:
build_out.txt
It fails for an unrelated error to my original post. Sorry: I would really like to use this, but I've hit several roadblocks.
I installed VS2019, and was able to build after a minor fix mentioned here: https://github.com/fsprojects/Paket/issues/2264#issuecomment-506368815 ...which is now in the master.
That's great! How can I start using the new paket changes in my F# project?
Just pull the latest version of SQLProvider and it should work...
What should the "latest" version of SQLProvider be? I still see 1.1.65 on nuget.org.
Sorry, before that, I did mean that the test projects of "build_output.txt" has now being fixed. Can you now get the MsSql test project to compile or not?
Hmm still seeing an error when running build.cmd I've attached the new build output, and another file showing that I have fetched latest from git.
what other information could I give you that would be helpful?