VSCode OmniSharp/C# 智能感知看不到 Ionide/F# lib 模块/命名空间

dvi*_*tel 5 c# f# omnisharp visual-studio-code ionide

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

module T1

let t = 42
Run Code Online (Sandbox Code Playgroud)

和 C#:

using System;

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

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

另外,我在 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
Run Code Online (Sandbox Code Playgroud)

扩展(及其版本):

使用的扩展

.NET核心SDK:

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

drk*_*mtr 3

这令人沮丧,但本质上 Omnisharp 不支持 F#,因此据我所知,我们无能为力使其在设计时正常工作。

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

免责声明:我是初学者。

  • 你的想法可行。当我通过删除 <ProjectReference Include="..\flow\flow.fsproj" /> 并添加 <Reference Include="flow.exe"> <HintPath>..\flow\bin\Debug\net45\flow 来更改 csproj 时.exe</HintPath> </Reference> intellisense 开始工作。但这仍然是一种解决方法。希望看到一些修复或配置调整。 (3认同)