【发布时间】:2021-02-25 18:37:11
【问题描述】:
我有一些生成的代码有一堆编译器警告。我想在生成的文件中禁用它们,但将这些警告保留在项目的其余部分中,以便可以修复它们。我正在使用 Visual Studio 2019 社区版,生成的文件来自 Entity Framework 和其他 NuGet 包。
我想在不更改文件的情况下执行此操作,因此如果它们重新生成,我将不会收到警告。我也不想在项目范围内禁用警告,因为它们通常是有用的警告。我也不想编辑 NuGet 包,因为这要么不需要升级它们,因为有新版本可用,要么可能不得不对新版本进行更改。
我已经阅读了大量内容,但显然发布链接“太多”,所以我删除了它们。如果您想查看它们,请查看编辑历史记录。
有问题的文件是连接服务的Reference.cs。它有Proxy.ProvisioningService 的命名空间,这个文件包含几十个类。我还有几个实体框架迁移文件,它们在完全不同的解决方案中存在相同的问题。
我有一个 GlobalSuppressions.cs 文件,我想将 CS1591(特别是)添加到其中,但我当前的条目不起作用。其他条目适用于其他警告,我尝试了以下代码的变体,包括尝试匹配其他条目的格式,但到目前为止没有任何效果。我已经从“编译”更改了“构建”,删除了MessageId,将Scope 更改为“模块”、“程序集”和“命名空间和后代”,并且我尝试了几种不同的方法来设置Target.
[assembly: SuppressMessage("Build", "CS1591:Missing XML comment for publicly visible type or member", Justification = "Generated code", MessageId = "CS1591", Scope = "namespaceanddescendants", Target = "Proxy.ProvisioningService")]
在其中一个站外链接中,它建议我右键单击错误,转到Suppress -> In Suppression File,但这不是列出的选项。这是我在GlobalSuppressions.cs 文件中无法做到的线索吗?
我尝试让 Visual Studio 2019 社区版自动抑制菜单项 Analyze -> Build And Suppress Active Issues -> For Project 的警告,但这只是在文件中添加了一堆 #pragma 指令,如果文件已重新生成,我想避免。
其中一个链接的答案建议编写一个脚本以在编译时添加 #pragma 指令,但该脚本对我来说似乎是一个 hack。我宁愿根本不编辑生成的代码。
我也不想把它放在Project -> Properties -> Build -> Suppress Warnings 部分,因为我希望手写代码仍然会抛出这些警告。
另一个 SE/SO 答案建议使用 GeneratedCodeAttribute 属性来防止生成的文件发出警告。不幸的是,我的文件已经有这个并且它仍然抛出警告。
另一个建议是关闭这些生成文件的警告:
抑制项目中生成代码的警告
在解决方案资源管理器中右键单击项目,然后单击属性。
选择代码分析选项卡。
选中从生成的代码中抑制结果复选框。
很遗憾,此选项已被选中,并且不会抑制 CS1591 警告。
所以我的实际问题是:
如何从生成的代码文件中抑制警告,特别是 CS1591,而不对其进行编辑,也不在整个项目中抑制警告?
【问题讨论】:
-
但是......你有一个有效的答案,但你显然不喜欢它......这是在脚本中添加#pragma。无论如何它都是生成的代码,所以我不明白你为什么认为这是一个黑客。也许你应该开始喜欢这种方法?我的意思是,你的老板正在处理你的案子。 他会问你是否用“hack”修复它吗?
-
[SuppressMessage] 仅适用于代码分析警告,CS1591 不适用,它是编译器警告。这确实需要更智能的代码生成,无论是#pragma 还是对错误文档注释的修复。由于这是显而易见的,但没有考虑到,全球压制是可能的结果。通过在自己的程序集中隔离自动生成的代码来限制其影响。
-
1) 我认为您可能能够在整个职业生涯中都没有在仅 Windows VS 项目(尤其是 .NET 项目)中看到 Makefile,某些行业肯定不会将它们用于 .NET。 2)“文本墙”问题的一个可能解决方案是将研究与学术风格的短链接列表(如
[0](link][1](link)[2](link))链接起来,但很难说。 3) 我认为“我找到了解决我的问题的方法,但我不喜欢它”这种形式的问题没有任何问题,这就是研究工作的真实样子。 -
不幸的是,您遇到了一个晦涩难懂的问题,这是 Roomba 的天然猎物。晦涩是因为无论出于何种原因它显然具有低 SEO 汁液,因为它解决的问题是平凡的(抑制设计不良的第三方代码中的滋扰警告),所以不酷。真正的答案可能是“错误代码生成器的作者来修复他们的东西”,读者可能会认为当代码生成器更新时这个问题会消失。破解别人的错误并不“酷”,不如热门的新语言功能酷。
-
话虽如此,我并不是说 1) 对生成器作者进行错误修复是可行的,2) 你不应该尝试破解它,否则破解是不值得的讨论,3)你不应该关心警告并尝试摆脱它们,4)不酷或晦涩的问题是不好的,或者 5)这里发生的事情是一件好事,我只是告诉你它是怎么回事,所以是基于投票的,喜欢与否受欢迎程度是问题成功的一个因素。有时在这里获得某些问题的答案只是浪费时间,研究工作本身无法解决问题。
标签: c# visual-studio-2019 suppress-warnings generated-code