To found the issue, you can created your own Build-target to the fsproj-file first:
<Target Name="Build">
<Message Text="Ext = $(MSBuildExtensionsPath)" />
<Message Text="Tools = $(MSBuildToolsVersion)" />
<Message Text="msb32 = $(MSBuildExtensionsPath32)" />
<Message Text="targ = $(TargetFrameworkIdentifier)" />
<Message Text="fs = $(FSharpTargetsPath)" />
<Message Text="vs = $(VisualStudioVersion)" />
</Target>
The issue is probably that there is a condition saying something like
<PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0'">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
but with recent Visual Studio the condition is not met or the path is actually somewhere else,
like in VisualStudio\v$(MSBuildToolsVersion)\FSharp\
and not in VisualStudio\v$(VisualStudioVersion)\FSharp\
so as a quick fix
you can fallback it to something else like
<PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0' And Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0' And Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\FSharp\')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>