我在PC上安装了支持F#支持的Visual Studio 2017,C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\FSharp
中的MSBuild目标和C:\Program Files (x86)\Microsoft SDKs\F#\4.1
中的F#4.1 SDK
我已经为Visual Studio 2017安装了构建工具(来自https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15),但没有安装F#SDK的选项,因此使用MSBuild 15构建F#项目失败。
如何在不安装Visual Studio的情况下安装F#4.1 SDK?
答案 0 :(得分:4)
可以安装MSI,但尚未在MSDN上发布 但很快就会出现。
您可以在此处跟踪问题:在GitHub上:
“将FSharp Tools MSI部署到MSDN#2553” https://github.com/Microsoft/visualfsharp/issues/2553
Kevin Ransom
答案 1 :(得分:3)
在SDK可以单独安装之前的短期修复是向项目文件添加一个指令,以在NuGet包文件夹中查找Microsoft.FSharp.Targets文件。以下是我采取的解决此问题的步骤:
确保您使用VS.NET 2017中的新F#项目,因为它具有此指令:
<Import Project="..\packages\FSharp.Compiler.Tools.4.1.17\build\FSharp.Compiler.Tools.props" Condition="Exists('..\packages\FSharp.Compiler.Tools.4.1.17\build\FSharp.Compiler.Tools.props')" />
替换项目文件的这一部分:
<Choose>
<When Condition="$(TargetFSharpCoreVersion) >= 4.3.0.0 AND $(TargetFSharpCoreVersion) < 4.3.1.0 ">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<When Condition="$(TargetFSharpCoreVersion) >= 4.3.1.0 AND $(TargetFSharpCoreVersion) < 4.4.0.0 ">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<When Condition="$(TargetFSharpCoreVersion) >= 4.4.0.0 AND $(TargetFSharpCoreVersion) < 4.4.1.0 ">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\4.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\4.1\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
</Choose>
使用此XML:
<Choose>
<When Condition="$(TargetFSharpCoreVersion) >= 4.3.0.0 AND $(TargetFSharpCoreVersion) < 4.3.1.0 ">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<When Condition="$(TargetFSharpCoreVersion) >= 4.3.1.0 AND $(TargetFSharpCoreVersion) < 4.4.0.0 ">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<When Condition="$(TargetFSharpCoreVersion) >= 4.4.0.0 AND $(TargetFSharpCoreVersion) < 4.4.1.0 ">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\4.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\4.1\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
</Choose>
<!-- This is needed for TeamCity where F# SDK is only available via NuGet right now - hopefully can be removed at some point once the SDK is available for install -->
<PropertyGroup Condition="!Exists('$(FSharpTargetsPath)')">
<FSharpTargetsPath>$(FscToolPath)\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
确保构建服务器在执行构建之前有一个恢复NuGet包步骤
确保包文件包括:FSharp.Compiler.Tools和FSharp.Core
其工作原理如下: 这将检查FSharpTargetsPath是否存在,以及是否使用packages文件夹作为源。您不希望始终使用packages文件夹,否则在用户计算机上的新结帐时,包不可用,并且构建将失败。为了在构建服务器上工作,这假定您有一个步骤来恢复构建之前的NuGet包。
答案 2 :(得分:1)
似乎新东西还没有更新。
http://fsharp.org/use/windows/
(4.0)
似乎你至少需要.NET Core / CLI
最贴近的是4.0工具: https://www.microsoft.com/en-us/download/details.aspx?id=48179
https://www.nuget.org/packages/FSharp.Compiler.Tools https://www.nuget.org/packages/FSharp.Core