在源中添加注释后,确认ASP.NET网站二进制文件不会更改

时间:2009-10-02 19:32:24

标签: asp.net compilation code-comments

我的项目团队成员需要在他的许多ASP.NET项目中添加源代码注释,以提供更好的文档。如果我们添加任何源代码注释,项目团队的一些成员建议我们进行彻底的回归测试,因为很可能会有一些源代码无意中被注释掉并导致程序行为发生变化。然后,我们还需要通过管理变更程序并重新部署到我们的生产服务器。

在我看来,我们应该能够添加源代码注释,重新编译源代码,并使用类似md5(或sha1)哈希(使用fciv之类的东西)来比较之前的并在DLL之后确认源代码注释没有影响编译版本。使用简单的控制台应用程序测试这个概念,我发现问题是如果DLL的版本递增,二进制文件的哈希值将会改变。如果我可以从二进制文件中删除清单,也许我可以对二进制文件进行苹果对比。

作为一项额外的挑战,这些ASP.NET应用程序使用ASP.NET网站编译模型,其中代码是动态编译的(大概是%SystemRoot%\ Microsoft.NET \ Framework \ version \ Temporary ASP.NET Files文件夹)第一次访问该站点而不是Web应用程序模型,其中所有项目代码都编译到bin文件夹中的单个程序集中。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

即使版本保持不变,程序集的散列也不起作用,在每次编译后,嵌入在程序集内部的唯一guid会发生变化,每次都会创建一个不同的散列。是否可以更改应用程序以便预编译?

有一个名为bitdiffer的工具可以比较装配并报告任何差异。作为集成测试的一部分,您可以针对新构建运行该工具,并将其与生产中的构建进行比较。这将确保只有代码更改的程序集才会被释放。

还有一个名为ndepends的工具,它具有用于比较程序集的api。这很酷!

答案 1 :(得分:1)

Rohan West的回答(谢谢Rohan!)引导我发表了bitdiffer评论,提供了以下解决方案:

  • 在添加代码注释之前,请使用ReflectorReflector.FileDisassembler加载项从IL重新创建代码文件。这将生成一个源代码文件目录,其中只包含核心源代码而没有注释。
  • 添加代码注释。
  • 使用ReflectorReflector.FileDisassembler加载项创建第二个生成的源代码文件目录。
  • 使用差异工具(如WinMerge)比较生成的源代码目录之前和之后,并确认源代码注释更改未更改核心代码。