2017-08-17 65 views
1

我刚刚继承了一个源代码很久已丢失的Web应用程序(最初编写于2010年并搁置)。该应用程序有几个与应用程序本身相关的.dll程序集,例如“applicationCORE.dll”,“applicationBI.dll”,“applicationDATA.dll”和“application.dll”如何反编译ASP.NET/C#Web应用程序

我见过this question和建议的工具(Just Decompile)很棒,创建了一个.sln和.csproj文件为我反编译的第一个程序集。我的问题是,如何将通过反编译创建的各种项目与编译的Web应用程序文件(.aspx)合并,我如何解析.aspx文件中的引用,即引用不再存在的代码隐藏文件,例如“default.aspx”引用“default.aspx.cs”,而反编译器创建一个“default.cs”文件。重命名.cs文件还是更新引用更安全?

最后,将每个dll作为解决方案中的单独项目出现吗?

我意识到这可能被认为是一个重复的问题,但似乎并没有一个在线资源通过这个过程来引导开发人员。

+0

不确定您的意思是“合并各个项目”。至于文件名等框架约定,您可能需要手动更正所有这些。将一个足够复杂的应用程序反编译成可用的源代码是一个艰难的过程,并且是丢失源代码的代价。我怀疑每个DLL都是自己的项目,我无法想象任何其他方式来构造,即使是原始的源代码。 – David

+0

对不起,我的术语可能不正确,我指的是合并Web文件与不同的项目。从您的回复中,听起来像我应该使用“application.dll”解决方案文件,手动更新引用,然后将其他“.dll”文件生成的项目(反编译后)添加到解决方案中?我知道它的苦心经历 - 在你看来,与重写看似复杂的应用程序相比,它是一条更长的道路吗? – Daniel

+0

我可能会采用创建应用程序/解决方案/等的空壳的方法。作为一种“受控环境”,然后手动将反编译的代码转换为该代码。至于什么是更长的路径,这是由你的组织来决定的。他们想要通往哪条路?一种可能会工作一段时间的胶带解决方案?具有文档和可测试性和支持的企业应用程序?中间某个地方?在正在编写的实际代码行之外,这个决定很多。 – David

回答

2

遵循David的建议,我设法从反编译的程序集中运行应用程序。这是我遵循的过程来使它工作

  1. 我已经使用反射器(在试用版)反编译各种程序集到项目。
  2. 我在Visual Studio
  3. 创建一个空白Web窗体应用程序添加我从网站上.aspx页面到项目通过Visual Studio
  4. 然后加入从反编译“application.dll”项目的.cs文件(因为这是解决方案中的网站项目。有些文件必须被重命名为在'的.aspx匹配codebehind引用。文件
  5. 每个额外的项目如applicationCore.dll,然后加入到溶液中
  6. 每个项目的是需要引用更新并且必须添加对新添加的项目的引用编辑到启动项目
  7. 由于该网站很早以前就已建成,因此有1000个语法错误。解决它们的最简单方法是使用Notepad ++和查找和替换。为了安全起见,我通过跟踪来自Visual Studio的错误而不是批量查找和替换来做这个文件,而不是批量查找和替换
  8. 当试图建立我注意到错误,因为需要的程序集丢失,所以我改变了构建输出目录的子项目到bin Web项目文件夹
  9. 我从原始网站的web.config中添加了连接字符串和设置。我一行一行地确保我没有破坏任何东西,这样我就可以追踪每次添加的结果。
  10. 最后,我有一个成功的构建!

其他步骤 还有一些我认为是由于反编译过程造成的语法错误。需要添加一些外部参考文献,并且由于项目的年龄而有轻微变化,例如, asp:AjaxScriptControl更改为asp:ScriptControl(使用Nuget添加包后)。我还必须为此应用程序安装Crystal Reports,并且必须购买Telerik许可证,因为正在使用UI组件(尽管我会在我通过应用程序工作时看到是否可以使用开放/本地备用)。

我已经登录使用凭据(我必须设置正确的开始页面),并尝试了几个基本的CRUD操作。有一些愚蠢的问题需要解决,例如身份验证无法正常工作,如果您访问受保护的页面,则无法重定向,但与最初遇到的问题相比,这些内容相对较小。

我必须说的是,每个错误都使用本网站的问题和答案解决!这一切都在6小时内完成。

相关问题