【问题标题】:VS2010: Autogenerated files and XML documentationVS2010:自动生成的文件和 XML 文档
【发布时间】:2011-04-07 12:20:46
【问题描述】:

这真的只是重新询问this question asked about Visual Studio 2008。 VS2010 是否提供任何功能来消除自动生成代码的 CS1591 编译器警告?

CS1591: Missing XML comment for publicly visible type or member

引用VS2008的问题:

这不仅仅是一个烦恼 问题。我的项目包含一个数字 自动生成的文件(使用 mgmtclassgen.exe)。当我生成 XML 文档,我的漂亮 注释库被xml困扰 来自这些的文档警告 自动生成文件。

有没有办法a)抑制 为这些生成文档 文件或 b) 抑制警告 CS1591 只是为了一组文件?我显然 不想修改文件 自动生成,即使只是添加 抑制编译指示。

编辑: 在我的例子中,有问题的文件是由 WCF RIA 服务生成的,所以生成错误的文件是自动生成的 WebContext 类 (MyProject.BusinessApplication.Web.g.cs)。

我无法手动修改此文件,因为它是动态生成的,所有更改都将被清除。我也不想全局禁用警告,因为它对我的非自动生成代码很有帮助。

【问题讨论】:

    标签: visual-studio-2010 visual-studio compiler-warnings documentation-generation xml-comments


    【解决方案1】:

    我在使用自动生成的实体框架类时遇到了类似的问题。我设法通过修改模板文件来解决它。这显然不适用于所有自动生成的场景,并且可能不适用于您的特定 RIA 场景,但我会在这里为可能遇到相同问题的其他人发帖。

    打开模板文件(something.tt),找到自动生成的xml注释部分

    //------------------------------------------------------------------------------
    // <auto-generated>
    //    This code was generated from a template.
    //
    //    Manual changes to this file may cause unexpected behavior in your application.
    //    Manual changes to this file will be overwritten if the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    

    在注释块之后添加以下行

    #pragma warning disable 1591 
    

    稍低于此,您应该会找到命名空间块的结束位置。它可能看起来像这样

    if (!String.IsNullOrEmpty(ObjectNamespace))
    {
        PopIndent();
    #>
    }
    

    将下面一行放在右大括号之后

    #pragma warning restore 1591
    

    如果一切正常,只要你的类是由实体框架自动生成的,它们应该被禁用/恢复杂注语句包装。这应该会抑制有关 EF 类中没有 XML cmets 的警告,而不会抑制项目级别的警告。

    【讨论】:

      【解决方案2】:

      以下文章可能会触发您解决问题的一些提示:http://lvquoc.blogspot.com/2010/11/disable-xml-comment-warning-in-workflow.html

      文章的重要部分是 Alan McBee 的评论:为了禁用 windows 工作流 VS2012+ 中生成的警告,请将其添加到项目文件的底部:

      <Target Name="XamlGeneratedCodeWarningRemoved" AfterTargets="MarkupCompilePass2">
        <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do echo #pragma warning disable 1591 > %%f.temp" />
        <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do type %%f >> %%f.temp" />
        <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do echo #pragma warning restore 1591 >> %%f.temp" />
        <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do move /y %%f.temp %%f" />
        <Message Text="Xaml Generated Code Warnings Removed: @(_GeneratedCodeFiles)" />
      </Target>
      

      【讨论】:

        【解决方案3】:

        与 Quam Loc 的解决方案类似,可以使用构建目标禁用 RIA 生成的文件中的警告:

        <Target Name="CreateRiaClientFilesTaskDisableWarnings" AfterTargets="CreateRiaClientFiles">
          <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do echo #pragma warning disable &gt; %%f.temp" />
          <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do type %%f &gt;&gt; %%f.temp" />
          <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do attrib -r %%f" />
          <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do move /y %%f.temp %%f" />
          <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do attrib +r %%f" />
          <Message Text="CreateRiaClientFilesTaskDisableWarnings: @(RiaClientGeneratedFiles)" />
        </Target>
        

        我刚刚在my blog 上发布了相关信息。

        【讨论】:

          【解决方案4】:

          我遇到了类似的问题。如果命名空间没有任何 XML 注释,我所做的是在任何页面中,只需添加以下代码行,您将不会遇到类似的错误。

          '/// <summary>
          /// Namespace provides implementation for ABC classes.
          /// </summary>
          [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
          class NamespaceDoc
          {
          }'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-23
            • 1970-01-01
            • 2015-06-02
            • 1970-01-01
            • 2018-09-07
            • 2012-06-18
            相关资源
            最近更新 更多