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

Fil*_*ffa 5 msbuild sdk f#

我已经在我的PC上安装了带有F#支持的Visual Studio 2017,我有MSBuild目标C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\FSharp和F#4.1 SDKC:\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以便构建F#使用MSBuild 15的项目失败.

如何在不安装Visual Studio的情况下安装F#4.1 SDK?

小智 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')" />
Run Code Online (Sandbox Code Playgroud)

替换项目文件的这一部分:

<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>
Run Code Online (Sandbox Code Playgroud)

使用此 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>
Run Code Online (Sandbox Code Playgroud)

确保构建服务器在构建之前具有恢复 NuGet 包的步骤

确保您的软件包文件包括:FSharp.Compiler.Tools 和 FSharp.Core

其工作原理如下:这会检查 FSharpTargetsPath 是否存在,如果不存在,则使用包文件夹作为源。您不想总是使用软件包文件夹,否则在用户计算机上重新签出时,软件包不可用并且构建将失败。为了使其在构建服务器上工作,假设您有一个步骤来在构建之前恢复 NuGet 包。