2011-09-26 116 views
1

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

通常这是一个简单的过程。但是我发现定位匿名类型非常困难 - 特别是在大型组装中。

如果我试图找到一个匿名类型,位置,如下面的代码行:

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

这是编译为:

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

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

如果我想定位在源代码中的匿名类型,我离开没有太大的帮助:

  • 没有命名空间
  • 没有符号对
  • 在解决方案导航
  • 没有搜索
  • Class View中没有内容
  • Object Browser中没有内容

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

+0

现在经过这一天的工作,我发现如果我提供“在文件中查找”搜索查询就像'new {Name ='我可以找到我大部分时间都在寻找的东西。 –

回答

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中搜索匿名类型的名称会使用这些用法。

+0

我们清楚地解释了这个问题的不同之处。 – jason

+0

@Jason:可以。我正在考虑负责生成匿名类型的源代码。毕竟,编译器不会随心所欲地做到这一点。该类的代码不可用于源代码形式,但*有*源代码可导致该类被生成......并且如果匿名类型中的名称发生更改,则该源代码将*有效*受影响。 –

+0

@Jon @Jason:我会考虑澄清我的问题。我想要的是找到所有用法的工具或技术:'new {Name =?,Age =? }当它们存在于一个程序集中时 - 它们在哪个文件中,它们在哪一行等等。 –

相关问题