突然的结论

统一版本是2020.1然后,骑士如果您用作 IDE
禁止常见警告您可能需要小心设置。
Unity2020.1~ と Rider を使うとこういう罠を踏むかも

背景

你在用骑手吗?不用说,它是 JetBrains 出品的专门用于 C# 开发的 IDE。
好点数不胜数,但其中代码补全功能和代码自动生成功能特别精彩,我想Unity区用的人不少。
今天我踩到了一个与Rider有关的陷阱,让我来介绍一下。

Alt(选项)+ Enter

使用 Alt(Option) + Enter,Rider 为您提供上下文代码完成和代码生成建议。

其中,下面的案例比较方便,我也经常用

我有一个已经有构造函数的类
当您在此处添加 private 成员变量并希望在构造函数中初始化该成员变量时(通常在使用 DI 时)
将光标放在该成员变量上按 Alt(Option)+Enter
如果选择“Initialize field from constructor”快速操作
任意增加已有构造函数的参数 + 在已有构造函数中初始化

这就是它的意思。 “这很简单,但超级方便。”

具体有这样一个类(本例假设使用了VContainer,进行了构造函数注入)
Unity2020.1~ と Rider を使うとこういう罠を踏むかも

    private MyStopWatch _stopWatch;

到成员变量,按 Alt (Option) + Enter 并从 Quick Actions 中选择“Initialize field from constructor”,如果您也希望使用构造函数对其进行初始化
Unity2020.1~ と Rider を使うとこういう罠を踏むかも

然后,
Unity2020.1~ と Rider を使うとこういう罠を踏むかも

这样,在构造函数中初始化的代码就自动生成了。

超级方便,不是吗?
仅此一项就不会让您想购买Rider吗? (有费用,但应该值得!)

然而

是的。方便的。
但在我的环境中,总有一天使用私有成员变量,这一系列操作不再可能
Unity2020.1~ と Rider を使うとこういう罠を踏むかも
像这样,不显示目标“Initialize field from constructor”。e.为什么?

更有趣的是(?)如果将成员变量访问作业设置为public,“Initialize field from constructor”将作为候选出现。
“我是不是对Rider的设置做错了什么?”

解决不了~~~

(*顺便说一句,使用ctorf 代码段,您还可以自动生成使用构造函数初始化所有字段的代码,但是这样会生成一个新的构造函数并且它变得重载,所以我根本不想要它。不存在的解决方案。堆栈溢出也有类似的交流。 )

顺便问一下,原因是什么?

禁止常见警告

在这里,我们回到开始。
原因是团结 2020.1介绍自禁止常见警告那是设定。

这是小金博客虽然也有介绍,但粗略来说,在Unity中比较容易出现警告忽视就是这样的设定。

通过打开这个设置,几乎可以忽略的警告不会出现,所以很好,但问题是它会通过这个检查生成(更新)。项目 (csproj) 文件是。

由于 csproj 文件是文本文件,因此可以使用文本编辑器等查看内容,但在其中
<NoWarn>0649,0169</NoWarn>
你可以找到设置我认为这是因为 Unity 在创建 csproj 文件时处理了它并添加了它。

实际上,这两个 0169 之一是导致此问题的原因。

一直流到踩到陷阱

如果选中此 Suppress Common Warnings in Unity 设置,CS0169 "private field 'XXXX' was never used" 将被抑制

0169(和 0649)也在 csproj 文件中添加为 NoWarn

原因不明,但似乎 Rider 会选择以这个警告为触发的快速行动,并通过压制警告
Initialize field from constructor”将不再作为候选人出现

我踩到了组合。谁该受责备

补充

顺便说一句,如果你创建一个名为 csc.rsp 的文件并在其中写入-nowarn:0169,同样的警告抑制也会添加到 csproj 文件中,所以
(这也是小金博客(看喜欢)
即使在 Unity2020.1 之前的版本中,它似乎也会发生。
(如果您认为 Rider 的完成候选者很奇怪,最好怀疑 csc.rsp 文件的存在。)

和这个禁止常见警告环境,默认开启就像是...
所以似乎还有其他人在不知不觉中踏入这个陷阱。
我写这篇文章是为了提醒和提醒。

奖金

csproj文件创建时间

csproj 是在 Unity 端创建的,但除非更新 csproj 文件,否则 NoWarn 0169 不会仅通过更改 Unity 端的设置而消失。
如果添加或删除一个cs文件,它会更新,但我认为将csproj文件删除一次也是一个好主意。肯定会更新。

我要压制 CS0649

如果你压制CS0169,我想你已经明白Rider的候选人有点好,但是CS0649的警告很烦人,所以我想压制它。
如果

csc.rsp
-nowarn:0649

最好将仅指定 0649 的文件放在 Assets 下。
(但是,这个0649也成为Rider候选人之一的触发的可能性不为0,所以请您自担风险。)

有一个美好的骑士生活。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308626761.html

相关文章:

  • 2021-12-08
  • 2022-12-23
  • 2021-09-25
  • 2021-06-05
  • 2021-06-06
  • 2022-12-23
  • 2021-05-20
猜你喜欢
  • 2022-12-23
  • 2021-09-22
  • 2021-10-16
  • 2021-05-14
  • 2021-09-03
  • 2021-09-09
  • 2021-11-30
相关资源
相似解决方案