(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#的开发者麻烦告诉我一下我需要安装什么东西。
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
自己下载的话估计得下载下面两个其中一个:
- https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v1.39.2/omnisharp-win-x64.zip
- 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 就能用了,现在微软这么搞的吗
这个应该是看依赖,电脑上只有默认 .net 环境(.net framework)装第一个,装了 .net6 可以用第二个吧;我好久没用了,变化真快
就是安装上 omnisharp 就能用了。我说试试 vscode 是因为看到楼主用了 mono,所以才让他这样尝试,好更快确认后端使用正确。没必要一定装 vscode 的。
windows下的mono是哪个?我现在卡在mono不知道是啥,楼上不说windows没有这东西么?
建议你用vscode写c#. omnisharp对lsp 的标准遵循的不是很好,跳转和查找引用啥的会不灵。最近比较忙,估计得过阵子才能看看这个问题。