找回密码
 立即注册
查看: 1011|回复: 10

[笔记] Unity使用VS Code编写C#代码没有代码补全怎么解决?

[复制链接]
发表于 2020-11-25 12:41 | 显示全部楼层 |阅读模式
Unity使用VS Code编写C#代码没有代码补全怎么解决?
发表于 2020-11-25 12:42 | 显示全部楼层
这应该是 C# 插件的问题,在 omnisharp 官方 repo 下有关于这个问题的讨论 https://github.com/OmniSharp/omnisharp-roslyn/issues/371
发表于 2020-11-25 12:42 | 显示全部楼层
题目说的不是很清楚,感觉起来是没有添加 unity 的 dll 引用,或者引用不完整,或者当时插件对外部引用的支持有点点问题?
此处删除部分无影响的原答,更多内容参见下面的更新。
2020-3-5 update
我依旧不清楚应该怎么解决这个问题,不过用的久了稍微有了点发现,这或许能够提供一点帮助
在 vscode 里面我装了插件 C# 和 Unity Tools,前者用于支持 C#,后者用于支持 Unity
要建立起完善的静态分析、智能补全等功能就必须保证 csproj 工程文件没有问题,而 csproj 的维护需要依靠 unity(因为 vscode 不干这活,如果你用的 visual studio,那么 csproj 的维护应该是 vs 来完成(不确定))
曾有一段时间,我的 unity 一直不能正确生成 csproj,国内始终查不到资料,最后在国外查到了。
PS:我曾经找了那么久,这会居然一下子就找到了,难过
https://forum.unity.com/threads/generate-sln-csproj-without-visual-studio.531063/看他提问的说法,vs 是可以完成 sln/csproj 的维护工作的。
在他们讨论了几楼之后,出现了这样一段:
意思是说:出于某些(非常糟糕)的原因 Unity 决定根据偏好中设置的代码编辑器的名称来生成 sln 和项目文件。并且它(错误地)假定你不会想要 sln 文件如果你没有使用在他们列表里的某些东西。问题在于,我在使用 vscode insiders 版本并且其可执行程序的名称并不是 Unity 所期望的。将那个 exe 重命名为 code.exe 解决了这个问题。
虽然是 18 年的贴,不过就我在19年下半年碰到的情况,Unity 现在估计还是这么处理的。那么我们可以得到结论,如果你使用的是 vscode,就必须要保证两点:
    Unity 里面的外部代码编辑器(External Script Editor)要设置成 vscode你的 vscode 的可执行程序的名称得是 code.exe
      这点我其实并不确定 Unity 有没有改善,我没用 insiders 版本所以没法去进行确认(毕竟他们给 Unity 提了反馈)2020-3-31更新:有评论指出,即使是 2019.3.4f1,仍然需要把 insiders 版本的改名成 code.exe

一般情况下,到这里就没问题了。但是我后来碰到了新的问题,csproj 坏掉了,Unity 的确维护了这些文件,但是里面的内容是错的。
负责维护 sln/csproj 的这一任务有可能是一个插件来完成的:Visual Studio Code Editor
我目前用的 1.1.3 版本,1.1.4 版本在我这里会出问题(具体表现为那些 dll 的外部引用全部出错)
所以如果还存在问题,可以尝试切换这个插件的版本。
2020-5-15 update
1.20版本在我这里是没有问题了


如果以上操作依旧不能解决问题,那我也没有办法了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2020-11-25 12:43 | 显示全部楼层
折腾了好久,分享一下我的解决方法。这个问题应该是需要的.netframework版本与电脑版本不一致,我的unity生成的Assembly-CSharp.csproj里需要的版本是4.7.1,但是vscode打开显示找不到,一般来说我们不会希望为此专门去下这个版本,所以目标是把这个csproj里的TargetFrameworkVersion版本改成我们电脑里有的。这时候出现问题了,我根据网上的方法查看自己的.net版本,包括【①在文件管理器C:\Windows\Microsoft.NET\Framework查看②cmd命令查看得到的版本号③控制面板的启动或关闭windows功能查看版本】写入到csproj里都提示找不到。后来我把unity打开cs文件的方法改成用visual studio2017打开,发现vs自动提示你是否要把版本改成4.6.1。于是就知道了我电脑上对应的版本是4.6.1。修改csproj文件后成功不报错并且有了代码补全。
ps:我也是刚开始学,有人知道这个Assembly-CSharp.csproj是这么个生成方法吗。我新建项目后是没有这个文件的,我是通过unity的assetss->open C# project生成的。
另外,有人能解释一下为什么我手动查到的.net版本和真正需要的版本不一样。。。。
发表于 2020-11-25 12:43 | 显示全部楼层
下一个unity debugger 插件就行了
发表于 2020-11-25 12:44 | 显示全部楼层
不知道题主现在解决了没有,笔记本跑windows效率太低,换了个Ubuntu结果卡在Unity的IDE上了,搞了一天也没弄好,貌似只有vscode能用,但是没有自动补全写起来实在太恶心了。
发表于 2020-11-25 12:44 | 显示全部楼层
没有补全主要还是   .NET framework 库的问题吧,转个安装的方法:
framework 下载 链接: https://pan.baidu.com/s/1cOB0bc 密码: rjqn


先把下载的名为NetFx3.cab的离线安装包放到Win10系统盘C:\Windows文件夹里。
然后以管理员身份运行命令提示符,输入并回车运行以下命令:
dism /online /Enable-Feature /FeatureName:NetFx3 /Source:"%windir%" /LimitAccess
等待部署进度100%即可。
发表于 2020-11-25 12:45 | 显示全部楼层
已经找到解决办法:
卸载VS Code中的其他C#插件,安装Legacy C# Support插件就有智能提示了。
发表于 2020-11-25 12:46 | 显示全部楼层
我来讲一下我怎么做的,看了楼上的帖子得到的启发:
建立好脚本文件后,打开 Assets->open C# project
这时候系统会定位到你的项目文件夹,然后
然后用 VS2017直接打开项目 .sln 文件,然后会提示 .Framework 版本不匹配,直接忽略。
然后打开  .cs 脚本文件,写函数就会有各种提示了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2020-11-25 12:46 | 显示全部楼层
方法见
vs code 代码补全 智能提示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 23:51 , Processed in 0.108751 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表