我使用外部工具生成了一些C#代码。每个生成的类都有一个属性GeneratedCodeAttribute。为什么我的生成器会创建此属性?
答案 0 :(得分:13)
此属性已设置,因为此代码是由工具生成的,而不是由人类生成的:)您可能会问它的用途是什么? MSDN告诉我们:
GeneratedCodeAttribute类可以 由代码分析工具使用 识别计算机生成的代码,和 提供基于的分析 工具和工具的版本 生成了代码。
答案 1 :(得分:6)
第一个链接是它的文档,第二个链接是对它的详细描述,代码生成器为什么产生它,以及代码分析器如何使用它。
http://msdn.microsoft.com/en-us/library/system.codedom.compiler.generatedcodeattribute.aspx
和
这会回答你的问题吗?
答案 2 :(得分:1)
发生器最有可能使用它来找回它创建的元素,以便执行更新。请注意,如果您修改生成的代码:根据工具行为,您可能会在进一步更新时失去修改。
答案 3 :(得分:1)
一个潜在用途是某些覆盖工具可以根据指定的属性跳过代码。您可以告诉NCover忽略具有此属性的代码。
答案 4 :(得分:-1)
这是Microsoft博客文章Correct usage of the CompilerGeneratedAttribute and the GeneratedCodeAttribute中的相关文本,以防最终从他们的站点中消失(这很常见)。
2007年4月27日
代码分析,FxCop和代码度量标准都广泛使用CompilerGeneratedAttribute和GeneratedCodeAttribute来区分用户编写的代码和工具以及编译器生成的代码。
以下描述了此行为:
Visual Studio 2005和FxCop 1.35中的代码分析
Visual Studio 2008和FxCop 1.36中的代码分析
Visual Studio 2008中的代码指标
不幸的是,在Microsoft内部和外部都有许多不正确使用这些属性的情况,这篇博客文章试图使正确使用这些属性的事情变得更加清晰。
...
GeneratedCodeAttribute
此属性供生成代码的自定义工具使用。它仅应应用于一遍又一遍地重新生成的代码,并且不应被期望用户修改的模板所使用。如果所生成的类型是部分类,则也不应在类型级别应用它。在这种情况下,应仅将其应用于类型的生成部分中包含的单个成员。
例如,以下内容显示了此属性的不正确用法(在类型级别将其应用于部分类):
[GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0" )]
internal sealed partial class Settings : ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get { return defaultInstance; }
}
[UserScopedSettingAttribute()]
[DebuggerNonUserCodeAttribute()]
[DefaultSettingValueAttribute("")]
public string MySetting
{
get { return ((string)(this["MySetting"])); }
set { this["MySetting"] = value; }
}
}
以下显示了此属性的正确用法:
internal sealed partial class Settings : ApplicationSettingsBase
{
[GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0" )]
private static Settings defaultInstance = ((Settings)(ApplicationSettingsBase.Synchronized(new Settings())));
[GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
public static Settings Default
{
get { return defaultInstance; }
}
[GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
[UserScopedSettingAttribute()]
[DebuggerNonUserCodeAttribute()]
[DefaultSettingValueAttribute("")]
public string MySetting
{
get { return ((string)(this["MySetting"])); }
set { this["MySetting"] = value; }
}
}