【问题标题】:F# core .NET framework on Linux build how-toLinux 上的 F# 核心 .NET 框架构建操作指南
【发布时间】:2018-09-25 08:18:19
【问题描述】:

我正在尝试在 Ubuntu 17.10 (Mono 4.6.2) 上构建 F# 项目(控制台),但是我遇到了 F# 核心 .NET 问题。作为参考,我正在使用 Visual Studio Code 1.21.2 和 ionide 扩展(新项目和 FAKE 构建)。下面是输出。

我尝试添加对不同版本 Fsharp.core 的显式引用,例如4.2, 4.3.4 没有运气。

我应该去哪里解决这个问题?

Finished Target: InstallDotNetCLI
Starting Target: Restore (==> InstallDotNetCLI)
/home/lear/.local/share/dotnetcore/dotnet restore
  Restoring packages for /home/lear/src/fsTest/fsTest/fsTest.fsproj...
/home/lear/src/fsTest/fsTest/fsTest.fsproj : error NU1100: Unable to resolve 'FSharp.Core (>= 4.3.4)' for '.NETFramework,Version=v4.6.1'.
  Restore failed in 99.61 ms for /home/lear/src/fsTest/fsTest/fsTest.fsproj.
Running build failed.


 <ItemGroup>
    <PackageReference Update="FSharp.Core" Version="4.3.4" />
  </ItemGroup>

项目文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="fsTest.fsproj">
      <Name>fsTest.fsproj</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="fsTest.fs" />
    <None Include="App.config" />
  </ItemGroup>
  <Import Project="..\.paket\Paket.Restore.targets" />
</Project>

我将此说明用作设置的参考: Four easy steps for installing F# on Ubuntu Linux (2017-07-03)

【问题讨论】:

  • 您的项目似乎针对的是完整的 .NET 框架而不是 .NET Core。你能显示项目文件的最上面几行吗?
  • 公平地说,我相信 ionide 扩展故意打算通过单声道定位整个框架。 (fsharp 核心并不意味着 .net 核心)
  • 您应该尝试创建一个新项目。或者也清除obj 文件夹并删除带有ProjectReference 的ItemGroup。你需要mono吗?如果没有,您可以通过dotnet new CLI 快速创建一个 dotnet 核心项目。

标签: f# dotnet-cli ionide


【解决方案1】:

项目文件指定了错误的TargetFramework。将其更改为例如netcoreapp2.0 Target Framework Moniker 应该修复构建。

【讨论】:

  • 好点;但是构建仍然失败//home/lear/.local/share/dotnetcore/sdk/2.0.2/NuGet.targets(792,5):错误MSB4006:在涉及目标“_GenerateRestoreProjectPathWalk”的目标依赖图中存在循环依赖”。 [/home/lear/src/fsTest/fsTest/fsTest.fsproj] 正在为 /home/lear/src/fsTest/fsTest/fsTest.fsproj 恢复包... /home/lear/src/fsTest/fsTest/fsTest.fsproj :错误NU1108:检测到循环。 /home/lear/src/fsTest/fsTest/fsTest.fsproj : 错误 NU1108: fsTest -> fsTest.
  • 现在正在建设中;唯一的问题是这是一个dll?我想要一个exe文件??我该怎么做或 dot net core 只生成 dll?
  • 您可以使用 dotnet YourProject.dll 运行 dll 或针对特定运行时发布,例如dotnet publish -c Release -r ubuntu.16.10-x64,另见docs.microsoft.com/en-us/dotnet/core/rid-catalogdocs.microsoft.com/en-us/dotnet/core/tools/…
  • 如果您需要更多后续帮助,不妨再问一个 SO 问题。
【解决方案2】:

您尝试构建/恢复的项目正在引用自身。只需从 fsproj 文件中删除这部分:

<ItemGroup>
    <ProjectReference Include="fsTest.fsproj">
      <Name>fsTest.fsproj</Name>
    </ProjectReference>
  </ItemGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2011-12-14
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多