【问题标题】:VSCode OmniSharp/C# intellisense does not see Ionide/F# lib modules/namespacesVSCode OmniSharp/C# intellisense 看不到 Ionide/F# lib 模块/命名空间
【发布时间】:2019-08-27 00:14:57
【问题描述】:

我正在使用 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 Core 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]

【问题讨论】:

    标签: c# visual-studio-code f# omnisharp ionide


    【解决方案1】:

    我想我找到了答案。 Omnisharp 日志指出它使用独立 16.0 MSBuild 实例。正如我在 github 上发现的,有些人处理了同样的问题。例如here guy 解决了这个问题,但是安装了带有 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' specified could not be found",所以我运行了 VS Installer 并添加了 .NET Core 构建工具。

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

    【讨论】:

    • 干得好!感谢分享,我得试试看。
    • 这行得通,但我不得不明确告诉omnisharp 使用VS 的msbuild 而不是它的“独立”版本(通过omnisharp.json),因为this change
    【解决方案2】:

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

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

    免责声明:我是初学者。

    【讨论】:

    • 你的想法行得通。当我通过删除 并添加 ..\flow\bin\Debug\net45\flow 来更改 csproj .exe intellisense 开始工作。但它仍然是一种解决方法。希望看到一些修复或配置调整。
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2023-04-03
    • 2011-01-22
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多