【问题标题】:SuppressMessage compiler warning CS1591 for generated code (xsd.exe)生成代码 (xsd.exe) 的 SuppressMessage 编译器警告 CS1591
【发布时间】:2022-11-30 04:42:30
【问题描述】:

我在几个项目中使用工具 xsd.exe 为我的数据模型生成类。 在我的 csproj 中打开文档文件生成时,编译器开始显示许多类型的警告:CS1591:Missing XML comment for publicly visible type or member 指向生成的构造函数。

由于这是一种预期的行为,我试图弄清楚如何抑制这些警告。 但仅适用于包含在单个源文件中的xsd.exe 生成的类型。 下次运行时,文件内容将被替换为xsd.exe。 对该文件的任何修改都将在该过程中丢失。 所以在文件中添加 #pragma warning disable 不是这里的解决方案 (有时我什至使用一个构建目标来重新生成构建代码)。

但是 .NET 似乎有一个针对这种情况的内置机制:SuppressMessageAttribute 在程序集级别 (Microsoft Docs: Suppress warnings)。

所以我去创建了一个文件GlobalSuppressions.cs,内容如下:

[assembly: SuppressMessage("Compiler",
                           "CS1591:MissingXmlCommentForPubliclyVisibleTypeOrMember",
                           Justification = "Generated code",
                           Scope = "member",
                           Target = "M:Company.IO.Component.Concrete.Configuration.ConfigItem.#ctor")]

但是压制被忽略了。

有人有什么想法吗?

【问题讨论】:

  • 完全不清楚为什么在源文件中使用 pragma 指令抑制消息对您不起作用。
  • 因为源文件是由'xsd.exe'生成的。从我的架构中重新生成源代码只会删除我之前添加到文件中的内容——正如我在问题中所写的那样(可能有点不清楚,将对其进行编辑)。
  • 好吧,假设您在构建过程中自动执行了代码生成步骤。只需再添加一个步骤,获取 xsd.exe 工具的输出,添加 pragma 指令,然后重新保存文件。
  • 多年来我发现,大多数时候“官方方式”更让人头疼而不是值得,这取决于“官方”是谁。
  • 注意:不需要对问题进行编辑日志。编辑问题时,您可以指定编辑摘要。任何有兴趣的人都可以通过单击“x 前编辑”链接或查看时间线来查看更改内容和编辑摘要。

标签: c# .net code-analysis suppress-warnings xsd.exe


【解决方案1】:

我找到了一个无需操作生成的源文件的解决方案。

短的

.editorconfig 可以放在生成的源文件的目录中。 文件中包含的规则仅适用于此目录和后代。

  1. 在仅包含生成的源文件的单独目录中输出生成的代码
  2. .editorconfig 添加到该目录
  3. 根据需要在.editorconfig中配置消息严重性

    在我的例子中,这看起来如下

    目录结构

    Configuration
      Schema
        .editorconfig  # applied to code files in this directory only
        schema.xsd     # template for xsd.exe
        schema.cs      # generated by xsd.exe
    Project.csproj
    Code.cs
    

    .editorconfig的内容

    # message severity for generated code files
    [*.cs]
    dotnet_diagnostic.CS1591.severity = none
    

    如果我将代码直接生成到 obj/ 文件夹,将其命名为 schema.g.cs,这可能会更好。 但我想将生成的文件保留在存储库中。 这可能会在以后更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多