如何仅对指定代码区域启用CS1591、CS1573等编译器警告?
问题原因
你之前通过MSBuild的<NoWarn>配置全局屏蔽警告时,相当于在编译器层面完全过滤了CS1591、CS1573这两个警告ID,编译器不会生成对应的警告信息,因此代码中的#pragma warning restore指令无法识别到对应的警告,自然不会生效。
解决方案1:适合局部任意代码区域启用警告
步骤1:调整项目全局屏蔽规则
删除项目文件中原来的两行NoWarn配置:
<NoWarn>$(NoWarn);1591</NoWarn> <!-- CS1591: Missing XML comment for publicly visible type or member --> <NoWarn>$(NoWarn);1573</NoWarn> <!-- CS1573: Parameter '' has no matching param tag in the XML comment -->
在项目根目录新增一个全局C#文件(比如命名为GlobalSuppressions.cs,确保文件被包含到项目编译列表中),写入以下内容:
#pragma warning disable CS1591 // 缺少对公共可见类型/成员的XML注释 #pragma warning disable CS1573 // 参数在XML注释中没有匹配的param标签
这个方案的效果和你原来的全局屏蔽完全一致,但因为是通过C#预编译指令实现的全局屏蔽,后续可以用#pragma指令灵活控制局部区域的警告开关。
步骤2:局部恢复警告
在需要启用警告的代码区域添加恢复指令即可,你之前写的代码现在可以正常生效:
#pragma warning restore CS1591,CS1573 // 以下代码缺少XML注释时会正常抛出警告 public class Undocumented { public void AlsoUndocumented(bool undocumented = true) { } } // 如需在后续代码重新关闭警告,再加disable指令即可 #pragma warning disable CS1591,CS1573
解决方案2:适合整个文件启用警告
如果只需要给某几个指定文件开启警告,不需要控制更小的代码区域,可以不用改全局配置,直接在项目文件中覆盖对应文件的屏蔽规则即可:
<ItemGroup> <!-- 把Update的值替换为你要启用警告的文件路径 --> <Compile Update="Services/NeedXmlCommentService.cs"> <NoWarn /> <!-- 清空该文件的全局NoWarn继承规则 --> </Compile> </ItemGroup>
内容的提问来源于stack exchange,提问作者Steven Liekens
相关产品推荐
相关产品推荐

