【问题标题】:Install F# 4.1 SDK on build server在构建服务器上安装 F# 4.1 SDK
【发布时间】:2017-03-08 18:31:50
【问题描述】:

我已经在我的 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?

【问题讨论】:

    标签: f# sdk msbuild


    【解决方案1】:

    有一个可以安装的 MSI,它还没有在 MSDN 上发布。
    但很快就会。

    您可以在此处跟踪问题:在 GitHub 上:

    “将 FSharp Tools MSI 部署到 MSDN #2553” https://github.com/Microsoft/visualfsharp/issues/2553

    凯文·兰森

    【讨论】:

      【解决方案2】:

      在可以单独安装 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 包的步骤

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

      它起作用的原因如下: 这将检查 FSharpTargetsPath 是否存在,如果不存在,则使用 packages 文件夹作为源。您不想总是使用包文件夹,否则在用户机器上的全新结帐时,包不可用并且构建将失败。为了在构建服务器上工作,假设您在构建之前有一个步骤来恢复 NuGet 包。

      【讨论】:

      • 为我们工作。添加 Fsharp.Compiler.Tools nuget 就足够了。它自动添加导入语句并添加唯一需要的更改是条件导入(最后在您的 sn-p)
      【解决方案3】:

      好像新东西还没更新。

      • 为构建服务器安装的四步过程(向下滚动到选项 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/

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

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

      最接近的是 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 小时检查一次,看看他们是否在他们的网站上更新。

      【讨论】:

        猜你喜欢
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        相关资源
        最近更新 更多