Create an F# project in VSCode

directions by Beat Tschanz

Prerequisites

Step-by-step instructions

  • Create new directory
  • Move to new directory
  • At the console type Code . or open VSCode and then open the new directory you just created
  • Press [Shift] [Command/Ctrl] [P] and type F#
  • Select New Project
  • Choose classlib or console or other project type for the production project
  • Choose the project directory (if left empty, current directory will be used)
  • Provide a project name (using production.fsproj for this example)
  • Press [Shift] [Command/Ctrl] [P] and type FAKE
  • Choose Default build, you should see an output similar to this:

    Checking Paket version (downloading latest stable)...
    Paket.exe 3.33.5 is up to date.
    Paket version 3.33.5
    0 seconds - ready.
    Building project with version: LocalBuild
    Shortened DependencyGraph for Target Build:
    <== Build
     <== Clean
    ...
    
  • Press [Shift] [Command/Ctrl] [P] and type F#
  • Select New Project
  • Choose fsunit for test code
  • Choose the project directory (if left empty current directory will be used)
  • Provide a project name (using test.fsproj for this example)
  • Open up the test.fsproj file
  • Press [Shift] [Command/Ctrl] [P] and type F#
  • Select Add Project Reference
  • Choose test.fsproj project as the project that you want to edit
  • Choose production.fsproj project as the reference you want to add
  • Verify that test.fsproj has been changed and contains a reference to production.fsproj

    ...
    <ItemGroup>
      <ProjectReference Include="../production/production.fsproj">
        <Name>production.fsproj</Name>
        <Project>{df896c20-dc7e-4d4d-90da-546d6154d641}</Project>
      </ProjectReference>
    </ItemGroup>
    ...
    
  • Press [Shift] [Command/Ctrl] [P] and type paket
  • Select Add Nuget Package
  • Type Nunit.Console
  • Verify that paket.dependencies gets updated with new dependency

    source https://www.nuget.org/api/v2
    nuget FAKE
    nuget FSharp.Core
    nuget FsUnit
    nuget FsCheck
    nuget nunit.console // <- !!!This line should be present!!!
    
  • Open build.fsx

  • Add open Fake.Testing after open Fake

    open Fake
    open Fake.Testing // <--!!!Add this line!!!
    
  • Add the test task

    let testAssemblies = !! (buildDir + "*Tests.dll") // <--!!!Add this line!!!
    Target "UnitTests" (fun _ -> testAssemblies |> NUnit3 id) // <--!!!Add this line!!!
    
  • Add UnitTests to the build

    "Clean"
    ==> "Build"
    ==> "UnitTests" // <--!!!Add this line!!!
    ==> "Deploy"
    RunTargetOrDefault "Build"
    
  • Press [Shift] [Command/Ctrl] [P] and type FAKE

  • Choose build
  • Choose UnitTests, you should see an output similar to this:

    Checking Paket version (downloading latest stable)...
    Paket.exe 3.33.5 is up to date.
    Paket version 3.33.5
    0 seconds - ready.
    Building project with version: LocalBuild
    Shortened DependencyGraph for Target UnitTests:
    <== UnitTests
     <== Build
        <== Clean
    ...      
    

    Voila!

Bonus

  • Press [Shift] [Command/Ctrl] [B]
  • Should show an error and you can choose to edit. Edit the configuration to run the build script

    {
      // See https://go.microsoft.com/fwlink/?LinkId=733558
      // for the documentation about the tasks.json format
      "version": "0.1.0",
      "command": "./build.sh", // <--!!!Modify this line to call your build script (build.sh on mac/linux) or (build.cmd on windows)!!!
      "isShellCommand": true,
      "args": [], // <--!!!Modify this line to remove arguments!!!
      "showOutput": "always"
    }
    
  • Press [Shift] [Command/Ctrl] [B], you should see an output similar to this:

    Checking Paket version (downloading latest stable)...
    Paket.exe 3.33.5 is up to date.
    Paket version 3.33.5
    0 seconds - ready.
    Building project with version: LocalBuild
    Shortened DependencyGraph for Target Build:
    <== Build
     <== Clean
    ...
    
Related Blogs

Get content like this straight to your inbox!

Software is our passion.

We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.