DTE:检测自动代码

时间:2012-06-19 22:53:39

标签: envdte

我有一个小型的Visual Studio插件,它可以放下活动项目并为每个方法插入代码。 我的目标项目有Web服务引用,它创建了一堆我不关心的自动生成的refenrece文件。 有没有办法检测项目项是否是自动文件?

项目文件有标签,但ProjectItem.Properties没有。 感谢

1 个答案:

答案 0 :(得分:0)

有没有办法100%可靠地完成这项工作?我不这么认为。我能够判断文件是否自动生成的唯一方法是通过其内容或文件名。

通常,在(我知道的)C#的较新版本中生成的代码文件具有“.g”。在他们的名字。这不是一成不变的或保证(我认为Windows窗体和其他旧的生成器使用“.Designer。”),但它可以用作指示。

如果您查看不同的自动生成代码,您会看到有许多不同的标记方式。没有特定的方式是普遍的。例如,WPF代码隐藏文件中的自动生成的连接代码(隐藏的InitializeComponent()方法驻留在那里)包含标有System.CodeDom.Compiler.GeneratedCodeAttribute的部分类定义,并且这些方法都标有System.Diagnostics.DebuggerNonUserCodeAttribute

第一个属性驻留在类上,因此在通过EnvDTE方法检查代码时可能会显示该属性。您可能不得不求助于以原始方式读取文件并查找该属性。

即使这还不够,因为不同的代码生成器会以不同的方式标记其代码。键入安全的DataSet和EF生成的代码将其生成的代码标记为文件顶部的注释

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.551
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

现在怎么办?

除非你探索自动生成代码的所有不同方式,并且全部处理它们,否则没有办法(除非我遗漏了一些东西!)你可以保证跳过这些文件。你必须问问自己是否值得付出努力。