C#中[Temp]特性实现及VS Code手动触发编译器警告方法咨询
问题1:现有生态是否存在对应特性
- .NET官方和Unity生态原生没有提供专门的
[Temp]类特性,常用的类似标记确实只有原生的[Obsolete]特性,你没找到对应实现是正常情况。 - 社区也没有形成通用的标准
[Temp]特性实现,同类需求基本都是开发者根据需求自定义的。
问题2:自定义特性触发编译器警告的实现方案
这个需求完全可以实现,有两种不同成本的实现方式,你可以根据自己的需求选择:
方案1:直接复用[Obsolete]特性(最快实现)
你不需要自定义特性,直接给Obsolete指定固定的提示内容即可,代码如下:
// 标记临时方法 [Obsolete("你仍有未移除的临时代码")] void TempTestFunction() { // 临时代码逻辑 }
这个方式不需要任何额外配置,C#编译器原生就会抛出警告,VS Code的C#扩展(OmniSharp或者C# Dev Kit)会直接识别并在问题面板、代码行上展示警告,完全符合你的需求。
方案2:自定义[Temp]特性 + Roslyn分析器(定制化更强)
如果你一定要单独的[Temp]特性标记,和Obsolete做区分,就需要配合Roslyn代码分析器实现:
- 首先定义空的
TempAttribute特性类:
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)] public class TempAttribute : Attribute { }
- 实现一个自定义的Roslyn分析器,扫描整个项目的代码节点,只要标记了
[Temp]特性就抛出你指定的警告内容。 - 把分析器打包成Nuget包或者直接导入到Unity项目中,VS Code的C#扩展会自动加载分析器规则,编译和编辑时都会实时弹出对应的警告。
Unity环境下使用Roslyn分析器需要注意:Unity 2020.1及以上版本原生支持引入自定义Roslyn分析器,你只需要把分析器的dll放到项目中,在Plugin的导入设置里勾选「Roslyn Analyzer」即可生效。
内容的提问来源于stack exchange,提问作者giorgio_developer
相关产品推荐
相关产品推荐

