VS2010:自动生成文件和XML文档说明

19
这实际上只是重新提问有关Visual Studio 2008的此问题。 VS2010是否提供任何功能来消除自动生成代码的CS1591编译器警告?
CS1591:公开可见类型或成员缺少XML注释
引用VS2008的问题:
这只是一个烦恼而不是问题。 我的项目包含许多自动生成的文件(使用mgmtclassgen.exe)。 当我生成XML文档时,我的美丽注释库被这些自动文件的xml文档警告所困扰。
有没有办法要么禁止为这些文件生成文档,要么仅为一组文件禁止警告CS1591? 我显然不希望修改自动生成的文件,即使只是添加抑制#pragma。
编辑: 在我的情况下,受影响的文件由WCF RIA Services生成,因此生成错误的文件是自动生成的WebContext类(MyProject.BusinessApplication.Web.g.cs)。
我无法手动修改此文件,因为它是即时生成的,所有更改都将被清除。 我也不想全局禁用警告,因为这对于我的非自动生成的代码很有帮助。
4个回答

12
我曾经遇到过类似的问题,那是在使用自动生成的 Entity Framework 类时。我通过修改模板文件解决了这个问题。显然这种方法并不适用于所有的自动生成场景,也可能不适用于你特定的 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

如果一切正常,每当您的类由Entity Framework自动生成时,它们应该被禁用/恢复的编译指示符包装。这应该抑制有关EF类中缺少XML注释的警告,而不会抑制项目级别的警告。


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>

1
类似于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>

我刚在我的博客上发布了相关内容。


0
我曾经遇到过类似的问题。我的解决方法是,在任何页面中,如果命名空间没有XML注释,请添加以下代码行,这样你就不会再遇到类似的错误了。
'/// <summary>
/// Namespace provides implementation for ABC classes.
/// </summary>
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
class NamespaceDoc
{
}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接