【问题标题】:How to locate Anonymous Types in source code files using Visual Studio如何使用 Visual Studio 在源代码文件中定位匿名类型
【发布时间】:2011-09-26 15:53:54
【问题描述】:

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

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

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

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

编译为:

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

并且作为程序集的根出现在 ILDASM 树中。

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

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

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

【问题讨论】:

  • 现在在使用了一天之后,我发现如果我提供“在文件中查找”类似new { Name = 的搜索查询,我大部分时间都可以找到我要查找的内容。

标签: .net visual-studio anonymous-types ildasm


【解决方案1】:

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

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

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

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

// And potentially many other source files

它们都将使用相同的泛型类型,但具有不同的类型参数。基本上,您需要以相同的顺序使用相同的属性名称来查找每个 anonymous-object-creation-expression 表达式。如果元数据中没有任何内容可以直接帮助您,我不会感到惊讶。

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

【讨论】:

  • 我们对这个问题的解释明显不同。
  • @Jason:可能。我在考虑负责生成匿名类型的源代码。毕竟,编译器不是一时兴起的。该类的代码不以源代码形式提供,但有 is 源代码会导致生成该类...如果匿名类型中的名称发生更改,那就是该源代码这将受到有效的影响。
  • @Jon @Jason:我会考虑澄清我的问题。我想要的是一种工具或技术来查找所有用法:new { Name = ?, Age = ? } 当它们存在于程序集中时——它们在什么文件中,它们在哪一行等等。
  • @Jon Skeet:是的,我以为他在寻找类型定义(他说“定位匿名类型”和“我想定位匿名类型”)。您似乎看透了这一点,并按照他的意图解释了这个问题。删除我的。 +1 你。
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多