在构建服务器上安装F# 4.1 SDK

5
我已在我的电脑上安装了F#支持的Visual Studio 2017,我的MSBuild目标位于 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\FSharp,而F# 4.1 SDK位于 C:\Program Files (x86)\Microsoft SDKs\F#\4.1
我已安装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?
3个回答

4

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) &gt;= 4.3.0.0 AND $(TargetFSharpCoreVersion) &lt; 4.3.1.0 ">
      <PropertyGroup>
        <FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
      </PropertyGroup>
    </When>
    <When Condition="$(TargetFSharpCoreVersion) &gt;= 4.3.1.0 AND $(TargetFSharpCoreVersion) &lt; 4.4.0.0 ">
      <PropertyGroup>
        <FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
      </PropertyGroup>
    </When>
    <When Condition="$(TargetFSharpCoreVersion) &gt;= 4.4.0.0 AND $(TargetFSharpCoreVersion) &lt; 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) &gt;= 4.3.0.0 AND $(TargetFSharpCoreVersion) &lt; 4.3.1.0 ">
      <PropertyGroup>
        <FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
      </PropertyGroup>
    </When>
    <When Condition="$(TargetFSharpCoreVersion) &gt;= 4.3.1.0 AND $(TargetFSharpCoreVersion) &lt; 4.4.0.0 ">
      <PropertyGroup>
        <FSharpTargetsPath>$(MSBuildProgramFiles32)\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
      </PropertyGroup>
    </When>
    <When Condition="$(TargetFSharpCoreVersion) &gt;= 4.4.0.0 AND $(TargetFSharpCoreVersion) &lt; 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程序包的步骤。

请确认您的packages文件中包含:FSharp.Compiler.Tools和FSharp.Core。

这是因为: 它会检查FSharpTargetsPath是否存在,如果不存在,则使用packages文件夹作为源。您不希望始终使用packages文件夹,否则在用户机器上进行新的检查时,程序包将不可用并且构建将失败。 为了使此方法在构建服务器上发挥作用,需要先还原NuGet程序包,然后再进行构建。


对我们来说很有效。只需添加Fsharp.Compiler.Tools nuget即可。它会自动添加导入语句,并且唯一需要的更改是条件导入(在您的片段中最后一个)。 - Filip Staffa

1
似乎这是一个新的东西,还没有更新。
  • 安装构建服务器的四步流程(向下滚动到选项3)

http://fsharp.org/use/windows/

(4.0)

根据 MSDN 博客...

https://blogs.msdn.microsoft.com/dotnet/2017/03/07/announcing-f-4-1-and-the-visual-f-tools-for-visual-studio-2017-2/

from blog post

看起来你至少需要 .NET Core / CLI

  • 在微软网站上搜索似乎找不到任何东西...

enter image description here

最接近的东西应该是4.0工具: https://www.microsoft.com/en-us/download/details.aspx?id=48179

  • 还有原始的NuGet包(4.1)

https://www.nuget.org/packages/FSharp.Compiler.Tools https://www.nuget.org/packages/FSharp.Core

底线:我认为这个版本是如此新颖,以至于还没有发布与之前版本类似的格式。我将每隔24小时检查一次他们的网站,看是否有更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接