有没有windows配置 csharp环境变量的,请教下可执行文件是哪个,下载了omnisharp-mono.zip但是lsp连不上

(defun lsp-bridge-install-omnisharp ()
  (interactive)
  (let ((url "https://gh.con.sh/https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v1.39.1/omnisharp-mono.zip")
        (down-des (if (eq system-type 'windows-nt)
                      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\omnisharp-mono.zip"
                    "/tmp/omnisharp-mono.zip"))
        (install-des (if (eq system-type 'windows-nt)
                         (format "%s.cache\\omnisharp\\" user-emacs-directory)
                       "~/.emacs.d/.cache/omnisharp/"
                       (format "%s.cache/omnisharp/" user-emacs-directory))))
    (url-copy-file url down-des 1)
    (unless (file-directory-p install-des)
      (make-directory install-des t))
    (call-process-shell-command (format "%s -xf %s -C %s" "tar" down-des install-des))
    ))

上面安装的zip里面只有OmniSharp.exe,lsp报错是找不到mono的命令,这个mono是什么东西。。

Wrote c:/Users/Administrator/AppData/Local/Temp/omnisharp-mono.zip
[LSP-Bridge] Error: can’t find command ’mono’ to start LSP server omnisharp (d:/work/StarForce/Assets/GameMain/Scripts/Game/GameBase.cs), disable lsp-bridge-mode. [2 times]

我想再windows下搞一下unity的c#开发,不知道c#到底是要安装什么环境,,有没有c#的开发者麻烦告诉我一下我需要安装什么东西。

https://download.mono-project.com/archive/6.12.0/windows-installer/mono-6.12.0.182-x64-0.msi

但是不知道是不是这个。因为还是报错

Exit server: d:/work/starforce#omnisharp
Traceback (most recent call last):
  File "d:/software/MSYS2/home/Administrator/.emacs.d/packages/lsp-bridge/lsp_bridge.py", line 129, in event_dispatcher
    self._close_file(message["content"])
  File "d:/software/MSYS2/home/Administrator/.emacs.d/packages/lsp-bridge/lsp_bridge.py", line 257, in _close_file
    get_from_path_dict(FILE_ACTION_DICT, filepath).exit()
  File "d:\software\MSYS2\home\Administrator\.emacs.d\packages\lsp-bridge\core\fileaction.py", line 295, in exit
    lsp_server.close_file(self.filepath)
  File "d:\software\MSYS2\home\Administrator\.emacs.d\packages\lsp-bridge\core\lspserver.py", line 619, in close_file
    os.kill(self.lsp_subprocess.pid, 9)
PermissionError: [WinError 5]  ܾ    ʡ 

csharp 在 Windows 下用的就是 omnisharp 吧,mono 我记得是非 Windows 平台才用的

是的。Mono 是给 Linux 和 macOS 用的。

楼主可以先试试 vscode,vscode 的 C# 插件就是用的 omnisharp。

vscode 正常以后,再找下 omnisharp 在哪里,把路径加入 Path, Emacs 应该就可以用了。

我以前用过,最近很少用 C#

vscode不行,被emacs的自定义键位已经绑架了,搞不定lsp就只能去搞lsp之前的sharp server了

ominisharp加了Path了,现在不报错了,就是lsp-bridge补全似乎连不上后端,不知道为啥。find def之类的也无效,我试试老server吧

一般打开选项 lsp-bridge-enable-log 看看 *lsp-bridge* 有没有啥内容? 一般 lsp server 配置不对, lsp server 都会在 *lsp-bridge* buffer 抱怨的。

我不是叫你用 vscode,意思是安装好vscode 正常工作后,可以直接用 vscode 给你安装的 omnisharp。

比如我安装好后,把下面这个位置加入 Path 就可以正常在Emacs 中使用了,不过我用的是 Emacs 29 内置的 eglot。

C:\Users\<你的用户名>\.vscode\extensions\ms-dotnettools.csharp-1.25.2-win32-x64\.omnisharp\1.39.2-net6.0

自己下载的话估计得下载下面两个其中一个:

  1. https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v1.39.2/omnisharp-win-x64.zip
  2. https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v1.39.2/omnisharp-win-x64-net6.0.zip

看了楼上的,我卸载了我的mono,现在错误是 Eval in Emacs: (message '"[LSP-Bridge] Error: can't find command 'mono' to start LSP server omnisharp (d:/work/StarForce/Assets/GameMain/Scripts/Game/GameBase.cs), disable lsp-bridge-mode.")

{
    "name": "omnisharp",
    "languageId": "c#",
    "command": ["mono",
                "C:\\Users\\Administrator\\.vscode\\extensions\\ms-dotnettools.csharp-1.25.2-win32-x64\\.omnisharp\\1.39.2-net6.0\\OmniSharp.exe",
                "-z",
                "-lsp"],
    "settings": {}
}

安装了windows的mono https://download.mono-project.com/archive/6.12.0/windows-installer/mono-6.12.0.182-x64-0.msi ,改用vscode的Omnisharp之后,报错是

--- Send initialize for D:/work/StarForce (omnisharp)

--- Send (6313): initialize
{
   "id": 6313,
   "method": "initialize",
   "params": {
      "processId": 18640,
      "rootPath": "D:/work/StarForce",
      "clientInfo": {
         "name": "emacs",
         "version": "GNU Emacs 28.1 (build 2, x86_64-w64-mingw32)\n of 2022-04-22"
      },
      "rootUri": "file:///D%3A/work/StarForce",
      "capabilities": {
         "workspace": {
            "configuration": true,
            "symbol": {
               "resolveSupport": {
                  "properties": []
               }
            }
         },
         "textDocument": {
            "completion": {
               "completionItem": {
                  "snippetSupport": true,
                  "deprecatedSupport": true,
                  "tagSupport": {
                     "valueSet": [
                        1
                     ]
                  }
               }
            },
            "codeAction": {
               "dynamicRegistration": false,
               "codeActionLiteralSupport": {
                  "codeActionKind": {
                     "valueSet": [
                        "quickfix",
                        "refactor",
                        "refactor.extract",
                        "refactor.inline",
                        "refactor.rewrite",
                        "source",
                        "source.organizeImports"
                     ]
                  }
               },
               "isPreferredSupport": true
            }
         }
      },
      "initializationOptions": {}
   },
   "jsonrpc": "2.0"
}
Cannot open assembly 'D:\software\MSYS2\home\Administrator/.emacs.d/.cache/omnisharp/OmniSharp.exe': File does not contain a valid CIL image.

我查了下好像是 .net core mono用错了乱七八糟的,楼上说不用mono,现在mono咋搞我有点纳闷,

windows emacs29 体验咋样? eglot 去查了下是啥东西,很香的样子,够用么,配配置确实配的很焦躁

Eglot 也是一个用在 lsp 客户端,最近合并到 Emacs 29.0.50。

Eglot 用于 C#,不需要配置,只要安装了 csharp-mode ,打开 C# 文件,M-x eglot 就可以了。

在 Windows 平台 Emacs 29 是目前最流畅的。如果不想自己编译的话,可以在这里下载 Emacs 29

https://alpha.gnu.org/gnu/emacs/pretest/windows/emacs-29/

预计明年春季发布 29.1

另外提醒下 csharp-mode 在 Emacs 并不是很好,在29.1 将会使用 tree-sitter 实现 csharp-mode,到时应该会有很大提升。

1 个赞

这个再csharp-mode的首页安装文档里不是已经让安装了么

我只求个跳转和引用就够,再配下去我就准备纯用tabnine了

这个是第三方包,29.1 会在 Emacs 内部实现。是下面这个分支,估计很快就要合并了。

1 个赞

我给你 @jidibinlin ,这是lsp-bridge在omnisharp-window.json的开发者,你可以请教他。

我感觉你还是lsp server环境没配置好。

应该是当时开发者的问题,可以给提个 pr 修一下

并且我看了下,把 omnisharp 的路径都给写死了,这样不太好

我以前写过几天,我记得安上 omnisharp 就能用了,现在微软这么搞的吗 :joy:

这个应该是看依赖,电脑上只有默认 .net 环境(.net framework)装第一个,装了 .net6 可以用第二个吧;我好久没用了,变化真快

就是安装上 omnisharp 就能用了。我说试试 vscode 是因为看到楼主用了 mono,所以才让他这样尝试,好更快确认后端使用正确。没必要一定装 vscode 的。

windows下的mono是哪个?我现在卡在mono不知道是啥,楼上不说windows没有这东西么?

建议你用vscode写c#. omnisharp对lsp 的标准遵循的不是很好,跳转和查找引用啥的会不灵。最近比较忙,估计得过阵子才能看看这个问题。