0

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

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

4

1 回答 1

0

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

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

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

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

即使这也不是足够的信息,因为不同的代码生成器会以不同的方式标记它们的代码。类型安全的数据集和 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>
//------------------------------------------------------------------------------

现在怎么办?

除非您探索标记自动生成代码的所有不同方式并处理它们,否则没有任何方式(除非我遗漏了什么!)您可以保证跳过这些文件。您必须问自己是否值得付出努力。

于 2012-06-20T13:17:24.890 回答