如何在不编辑文件的情况下仅在生成的代码中禁用编译器警告

电脑车男

我有一些生成的代码,其中包含一堆编译器警告。我想在生成的文件中禁用它们,但在项目的其余部分保留这些警告,以便可以修复它们。我使用的是 Visual Studio 2019 社区版,生成的文件来自实体框架和其他 NuGet 包。

我想在不更改文件的情况下执行此操作,因此如果它们重新生成,我将不会收到警告。我也不想在整个项目范围内禁用警告,因为它们通常是有用的警告。我也不想编辑 NuGet 包,因为这将不需要升级它们,因为有新版本可用,或者可能需要对新版本进行更改。

我已经阅读了大量内容,但显然发布链接“太多”,因此我已将其删除。如果您想查看它们,请查看编辑历史记录。

有问题的文件是Reference.cs连接服务的。它的命名空间为Proxy.ProvisioningService,这个文件包含几十个类。我还有几个 Entity Framework 迁移文件,它们在完全不同的解决方案中存在相同的问题。

我有一个 GlobalSuppressions.cs 文件,我想将 CS1591(特别是)添加到其中,但我当前的条目不起作用。其他条目适用于其他警告,我尝试了以下代码的变体,包括尝试匹配其他条目的格式,但到目前为止没有任何效果。我已将“Build”从“Compile”MessageId更改Scope为“module”、“assembly”和“namespaceanddescendants”,并尝试了几种不同的方法来设置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在编译时添加指令,但该脚本对我来说似乎是一个黑客。我宁愿根本不编辑生成的代码。

我也不想把它放在这个Project -> Properties -> Build -> Suppress Warnings部分,因为我希望手写代码仍然抛出这些警告。

另一个 SE/SO 答案建议使用该GeneratedCodeAttribute属性来防止生成的文件发出警告。不幸的是,我的文件已经有了这个,它仍然在抛出警告。

另一个建议是关闭这些生成文件的警告:

抑制项目中生成的代码的警告

  1. 在解决方案资源管理器中右键单击该项目,然后单击属性。

  2. 选择代码分析选项卡。

  3. 选中从生成的代码中抑制结果复选框。

不幸的是,此选项已被选中并且不会抑制 CS1591 警告。

所以我的实际问题是:

如何从生成的代码文件中抑制警告,特别是 CS1591,而不编辑它们并且不抑制整个项目中的警告?

洛斯科斯

您说您考虑使用脚本来更新文件以添加 #pragma hack,但我想不出其他解决方案。

我认为您可以通过在 .csproj 文件中添加类似的内容来使用 MSBuild 任务轻松完成此操作:

<Target Name="DisableWarnings" BeforeTargets="CoreCompile">
    <ItemGroup>
        <AutoGeneratedFiles Include="**/*.Designer.cs" />
    </ItemGroup>
    <WriteLinesToFile File="%(AutoGeneratedFiles.FullPath)"
        Condition="!$([System.IO.File]::ReadAllText(%(AutoGeneratedFiles.FullPath)).StartsWith(&quot;#pragma warning&quot;))"
        Lines="$([System.String]::Concat(&quot;#pragma warning disable 1591&quot;,$([System.IO.File]::ReadAllText(%(AutoGeneratedFiles.FullPath))),&quot;#pragma warning restore 1591&quot;))"
        Overwrite="true"
        Encoding="Unicode" />
</Target>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不运行静态代码分析的情况下使用 Visual C++ 在我自己的代码中引起 SAL 编译器警告

如何在不得到编译器警告的情况下初始化char * args []

编译器如何在不更改参数列表的情况下重载模板函数?

如何在不参考doc的情况下获得g ++编译器的c ++的默认模式?

如何基于文件禁用Eclipse中的编译器警告?

如何在不编辑代码的情况下更改要保存的文件的名称?MatLab

如何在没有编译器警告的情况下返回对空字符串的const引用?

如何在tensorflow中不生成警告的情况下检查是否存在GPU

F#TaskBuilder:如何在不返回伪值以符合编译器约束的情况下引发异常?

TypeScript:如何在编译器不了解可达性的情况下抛出错误?

为什么在某些情况下,编译器生成的回报可达代码

如何在不编辑XAML的情况下向设计器中的网格单元添加控件?

如何避免“需要非空的情况下使用空参数”编译器警告

模板情况下的编译器警告,应包含在模板专业化中

如何在不编译CSS的情况下查看sass文件夹中的更改

编译器如何在不知道编译时大小的情况下分配内存?

如何在不编辑和禁用 azure 发布管道中的任务的情况下重新部署部分任务

如何在没有 webpack fable-loader 的情况下使用 Fable 编译器?

如何在没有主机编译器的情况下创建Cuda模块

如何在不以“监视”模式运行TypeScript编译器的情况下快速启动Deno?

如何在编译器选项设置为strict的情况下读取元素?

如何在不使编译器崩溃的情况下实现MutableCollectionType?

如何在没有编译器的情况下获得简单的Makefile教程

如何在编译器不知道的情况下更改变量的值?

如何在不停止python程序的情况下禁用pdb.set_trace()并编辑代码

如何在不知道警告 ID 的情况下禁用 Unity 中的警告?

如何在没有Kotlin编译器警告的情况下将Class <*>与Java Boxed基本类型进行比较

C如何在没有编译器警告的情况下将地址打印为十进制值(非十六进制)

如何在没有编译器警告的情况下将任意数量的参数化函数传递给构造函数