1

在混淆 .NET 程序集(使用 Dotfuscator)的过程中,我发现自己正在调整事物的重命名方式。这通常涉及查看 ILDASM 中的程序集并将类型追溯到定义它的源代码文件。

通常这是一个简单的过程。但我发现定位匿名类型非常困难——尤其是在大型程序集中。

如果我试图查找匿名类型的位置,例如以下代码行:

new { Name = 'Gene', Age = 30 }

编译为:

<>f__AnonymousType0`2'<'<Name>j__TPar','<Age>j__TPar'>`

并在 ILDASM 树中显示为程序集的根。

如果我想在源代码中定位匿名类型,我将没有太多帮助:

  • 没有命名空间
  • 没有可搜索的符号
  • 解决方案导航器中没有任何内容
  • 类视图中没有任何内容
  • 对象浏览器中没有任何内容

我错过了什么吗?是否有任何工具可以帮助在代码文件中定位匿名类型?

4

1 回答 1

3

显然,匿名类本身的代码不存在于原始源代码中,但是有源代码导致匿名类的创建,我认为这就是您要查找的内容。但是,可能涉及多个源文件。

例如,在您的示例中,可能有:

Class1.cs:
    var x = new { Name = "Jon", Age = 10 };

Class2.cs:
    var y = new { Name = 100, Age = 10m };

// And potentially many other source files

两者都将使用相同的泛型类型,但具有不同的类型参数。基本上,您需要以相同的顺序使用相同的属性名称查找每个匿名对象创建表达式表达式。如果元数据中没有任何内容可以直接帮助您,我不会感到惊讶。

编辑:当然,生成的代码将包含对匿名类型的构造函数的引用 - 所以你可以寻找它。目前尚不清楚您使用的是什么工具,但在 IL 中搜索匿名类型的名称会很好用。

于 2011-09-26T15:59:49.337 回答