Create an F# project in VSCode

    26 Jan 2017

    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
      ...