4

我正在使用最新的 .NET Reflector 来反汇编一个内部遗留应用程序,其源代码几乎无法恢复。我需要找到一个讨厌的错误的原因,然后可能会修补它。Reflector 像往常一样在重新创建项目结构方面做得很好,但很快我发现一些属性调用被“扩展”到它的get_()set_()方法签名中,导致源代码无法编译。

起初,我认为每个 get/set 调用都有问题。但仔细一看,其中几个是可以的,而其他的(尤其是 OleDbCommand 和 Forms.Control 属性)将生成为get_()set_()

使用正则表达式的快速 Visual Studio“搜索/替换”解决了这些情况,但这很尴尬。有没有办法让 Reflector 行为正确

编辑 1 - 下面的示例有问题的代码:

/* Generated by .NET Reflector 6.1.0.11 */
/* The variable selectCommand is a OleDbCommand. */
string parameterName = "@P" + Convert.ToString(num);
selectCommand.set_CommandText(selectCommand.get_CommandText() + " WHERE SIGLA = " + parameterName);
/*
   Expected something like this (as ugly as it may seem):
   selectCommand.CommandText = selectCommand.CommandText + " WHERE SIGLA = " + parameterName;
*/

编辑 2 - 程序集是在发布模式下构建的。

4

3 回答 3

0

您在哪里查看 Reflector 中的源代码?在当前版本(撰写本文时为 6.1.0.11)中,反汇编类型然后单击底部的“扩展方法”会生成带有代码的完整类定义,包括正确的属性语法(get { ... }set { ... }

于 2010-06-11T18:38:22.373 回答
0

反汇编为托管 C++ 会出现此问题,对吗?可能想要反汇编为 C# 代码(工具条中有下拉菜单),您将获得通常的属性。

于 2010-06-11T18:39:14.617 回答
0

因此,即使这个问题已经很老了,也永远不会得到正确的答案,您现在也许可以给ILSpy块上的新工具一个机会。

也许它会产生一些开箱即用的更好的源代码。

于 2011-04-08T12:22:04.623 回答