5

我正在使用 VSCode-Insiders 和 OmniSharp C# 智能感知没有看到 F# 类型/模块/命名空间。这是一个简单的项目:

module T1

let t = 42

和 C#:

using System;

namespace flowRunner
{
    class Program
    {
      static void Main(string[] args)
        {
            Console.WriteLine(T1.t);
        }
    }
}

通过命令行使用 dotnet build 构建工作正常。dotnet run 也可以正常工作。并且在 VS Code 中调试有效。但智能感知显示:

智能感知问题

问题:我该如何解决这个问题?我在更大的解决方案上有类似的问题,当你周围有 1K 个错误而不是错误时,这很烦人。

此外,我注意到这是从某个时间点开始发生的(假设使用一些新版本的 IDE 和/或扩展等)。

Omnisharp 日志(其中的一部分,但没有错误或警告):

[info]: OmniSharp.Services.DotNetCliService
        DotNetPath set to dotnet
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Located 2 MSBuild instance(s)
            1: Visual Studio Build Tools 2017 15.9.28307.812 - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
            2: StandAlone 16.0 - "C:\Users\dvitel\.vscode-insiders\extensions\ms-vscode.csharp-1.21.1\.omnisharp\1.34.2\.msbuild\Current\Bin"
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        MSBUILD_EXE_PATH environment variable set to 'C:\Users\dvitel\.vscode-insiders\extensions\ms-vscode.csharp-1.21.1\.omnisharp\1.34.2\.msbuild\Current\Bin\MSBuild.exe'

此外,我在 Ionide 的日志下拉列表中没有找到任何条目(我很确定它在一段时间之前就存在了)。

项目配置为具有 TargetFramework net45。但我也试过 netcoreapp2.2 - 它没有用。

配置。VS Code - 内部人士:

Version: 1.38.0-insider (user setup)
Commit: 185308c0dd317d73fe4c19dea347582dee9650de
Date: 2019-08-26T09:46:11.283Z
Electron: 4.2.9
Chrome: 69.0.3497.128
Node.js: 10.11.0
V8: 6.9.427.31-electron.0
OS: Windows_NT x64 10.0.18362

扩展(及其版本):

使用的扩展

.NET 核心 SDK:

PS C:\Users\dvitel\Documents\Visual Studio 2019\SO> dotnet --info
  Version: 2.2.6
  Commit:  7dac9b1b51

.NET Core SDKs installed:
  2.0.0 [C:\Program Files\dotnet\sdk]
  2.1.200 [C:\Program Files\dotnet\sdk]
  2.2.401 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
4

2 回答 2

4

我想我找到了答案。Omnisharp 日志指出它使用独立 16.0 MSBuild 实例。正如我在 github 上发现的,有些人处理了同样的问题。例如,这里的人解决了这个问题,但是使用 F Sharp 编译器安装了 VS Build tools 2017。

从他的 Ominsharp 日志中,选择了 Visual Studio Build Tools 2017 15.3.26730.15 实例。因此,我假设使用 omnisharp 提供的 msbuild 存在问题

不幸的是,我没有找到如何选择其他 MSBuild 实例或更改 MSBUILD_EXE_PATH 的常规方法(尝试了 omnisharp.json - 不起作用),所以我只是重命名了 Standalone 16.0 的 .msbuild 文件夹。它使用了 VS MSBUild 实例,但给出了错误“找不到指定的 SDK 'Microsoft.NET.Sdk'”,所以我运行了 VS Installer 并添加了 .NET Core 构建工具。

在这种智能工作正常之后 <ProjectReference Include="..\flow\flow.fsproj" />

作品

于 2019-08-27T16:44:39.807 回答
3

这很令人沮丧,但基本上 Omnisharp 不支持 F#,所以据我所知,我们无能为力让它在设计时工作。

要修复智能感知,您可以构建 fsharp 项目的 dll 并从.csproj. 如果您需要在 C# 和 F# 之间来回切换,您可以设置脚本(从命令行或 vscode 中的任务触发)和观察者(例如dotnet watch build)来重建 F# 项目。然后使用Omnisharp: Restart Omnisharp命令刷新,它应该把它捡起来。

免责声明:我是初学者。

于 2019-08-27T00:26:33.883 回答