【问题标题】:Adding comments to Settings.Designer.cs向 Settings.Designer.cs 添加注释
【发布时间】:2011-01-04 16:21:48
【问题描述】:

我在我的 Visual Studio 2008 项目中使用 .Settings 文件,它从 PublicSettingsSingleFileGenerator 自动生成 Settings.Designer.cs 文件强>自定义工具。

这工作正常,但我也想在编译选项中启用“警告为错误”,以强制每个人保持 XML cmets 最新,但我不知道如何将 cmets 添加到所有元素在自动生成的代码中。

可以通过在设计视图中选择元素并在属性窗口中添加“描述”来添加实际属性。但是对于类声明或默认实例属性似乎没有办法做到这一点。

重现此问题的步骤如下

  1. 创建一个新项目
  2. 将设置文件添加到项目中
  3. 将设置文件的“Access Modifier”设置为Public
  4. 转到项目属性,构建部分
  5. 将“将警告视为错误”设置为全部
  6. 检查输出 XML 文档文件选项
  7. 构建解决方案

这是在 PublicSettingsSingleFileGenerator Settings.Designer.cs 文件中生成的代码

namespace SettingsTest {

    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
    public sealed partial class Settings1 : global::System.Configuration.ApplicationSettingsBase {

        private static Settings1 defaultInstance = ((Settings1)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings1())));

        public static Settings1 Default {
            get {
                return defaultInstance;
            }
        }
    }
}

不确定这个额外的信息是否应该成为问题部分的一部分,因为它在某种程度上指向答案

根据此链接,应用于该类的属性似乎是错误的。

http://blogs.msdn.com/b/codeanalysis/archive/2007/04/27/correct-usage-of-the-compilergeneratedattribute-and-the-generatedcodeattribute.aspx

CompilerGenerateAttribute - 此属性仅供编译器使用,表示特定的代码元素是编译器生成的。绝不应在源代码中使用此属性。”

"GeneratedCodeAttribute - 此属性供生成代码的自定义工具使用。它只能应用于反复重新生成的代码,不应由用户的模板使用预计会修改。如果生成的类型是分部类,也不应该在类型级别应用它。在这种情况下,它应该只应用于类型的生成部分中包含的各个成员。"

更新

我已经在 Microsoft Connect 网站上提出了一个错误报告,并将在我们获得更多信息时更新并接受答案http://connect.microsoft.com/VisualStudio/feedback/details/634692/publicsettingssinglefilegenerator-code-fails-when-treat-warnings-as-errors-is-set-to-all-and-xml-documentation-is-on

【问题讨论】:

  • 将警告视为错误会遇到什么问题?
  • 抱歉忘了说明,只要公共类/成员没有 XML 注释标头,编译器就会生成警告
  • 您如何以及为什么将设置文件设置为公开?
  • 如果您在设计器视图中打开设置文件,在“查看代码”按钮旁边的网格顶部有一个下拉框(仅在 2008 年)。默认是内部的,但我需要将类公开,因为我希望能够从另一个项目中引用该类。

标签: c# visual-studio-2008 settings.settings


【解决方案1】:

没有好的方法可以做到这一点,您不能在自动生成的文件中注入#pragma 警告禁用。顺便说一句,Winforms 设计器文件也存在问题。项目 + 属性,构建选项卡,抑制警告 = 1591。但这也会在您可能希望打开的位置禁用诊断。 #pragma 警告恢复不能解决这个问题。

【讨论】:

    【解决方案2】:

    很遗憾,这里存在相互冲突的问题\设置:

    • XML 文档生成将对公共成员上所有缺失的 cmets 发出警告。
    • 您已启用“将警告视为错误”(一件好事)。
    • 针对您无法更改的类(即生成的设置)发出警告。

    这样做的结果是您将警告转换为无法修复的编译器错误。您无法可靠地将 cmets 手动添加到设置类,因为它们将在下次重新生成类时丢失。

    考虑将您的设置放在一个单独的项目中并关闭该项目的 XML 文档。

    【讨论】:

    • 谢谢,我现在修改了这个问题。使用额外的项目也是一个好主意,但我目前正在坚持使用更简洁的解决方案,因为解决一个相当简单的问题似乎是一种相当尴尬的方式。
    【解决方案3】:

    Settings 是一个部分类:创建第二个空部分并对其进行注释。

    【讨论】:

    • 谢谢,这个想法适用于类声明,但也有一个默认实例(单例)属性。有什么方法可以评论这个吗?
    • 我对此进行了一些研究。根据blogs.msdn.com/b/codeanalysis/archive/2007/04/27/…,您根本不必评论此类,因为该类上的 CompilerGeneratedAttribute 应该可以防止将警告作为错误引发。我已经尝试在 VS2005 和 VS2008 中复制您的问题,但是在两个 IDE 中,我都可以将警告编译为错误(全部)、xml 文档,并且 settings.Desiginer.cs 文件中根本没有 cmets。
    • 我将通过重新创建问题的步骤更新我的问题,因为从您的链接中我认为该工具实际上是在生成错误的代码
    • 好的,基于此我将为设置创建一个包装器。将设置保留在内部并创建一个新的 XSettings 类并将该类公开。给它一个索引属性或一个返回命名设置的字符串值的 SettingByName 方法。添加 HasSetting 方法以检查设置是否存在。这样您就可以随心所欲地对其进行评论并更改底层设置文件,而不会破坏构建。
    【解决方案4】:

    Documenting (XML) Application Settings in Visual Studio 2010

    每个设置都有一个描述属性,这将反过来在生成的代码中创建 XML 注释。在 VS2010 中测试为工作。

    【讨论】:

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