确认在源代码中添加注释后ASP.NET网站二进制文件未更改

确认在源代码中添加注释后ASP.NET网站二进制文件未更改,asp.net,compilation,comments,Asp.net,Compilation,Comments,我的项目团队成员需要向他的许多ASP.NET项目添加源代码注释,以提供更好的文档。项目团队的一些成员建议,如果我们添加任何源代码注释,我们应该进行彻底的回归测试,因为有些源代码可能会无意中被注释掉,并导致程序行为的改变。然后,我们还需要对应用程序执行变更管理过程,并重新部署到生产服务器 在我看来,我们应该能够添加源代码注释,重新编译源代码,并使用类似md5(或sha1)的哈希(使用类似的东西)来比较DLL之前和之后,以确认源代码注释不会影响编译版本。用一个简单的控制台应用程序测试这个概念,我发现

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

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

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


有什么想法吗?

即使版本保持不变,程序集的哈希也不起作用,每次编译后嵌入程序集中的唯一guid都会更改,每次都会创建不同的哈希。是否可以更改应用程序以使其预编译

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


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

即使版本保持不变,程序集的哈希也不起作用,每次编译后,嵌入在程序集中的唯一guid都会发生更改,每次都会创建不同的哈希。是否可以更改应用程序以使其预编译

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

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

Rohan West的回答(感谢Rohan!)让我想到了提供以下解决方案的评论:

  • 在添加代码注释之前,使用IL和外接程序重新创建代码文件。这将生成一个源代码文件目录,其中只包含核心源代码,没有注释
  • 添加代码注释
  • 使用和外接程序创建生成的源代码文件的第二个目录
  • 使用差异化工具,例如比较生成的源代码目录之前和之后,并确认源代码注释更改没有更改核心代码
      罗汉·韦斯特的回答(感谢罗汉!)让我想到了提供以下解决方案的评论:

      • 在添加代码注释之前,使用IL和外接程序重新创建代码文件。这将生成一个源代码文件目录,其中只包含核心源代码,没有注释
      • 添加代码注释
      • 使用和外接程序创建生成的源代码文件的第二个目录
      • 使用差异化工具,例如比较生成的源代码目录之前和之后,并确认源代码注释更改没有更改核心代码
      在将源代码提交到存储库之前,是否确实需要对二进制文件进行比较,而不是依赖于源代码的差异?我过去的经验告诉我,坚持二进制比较之类的东西的团队成员是受FUD驱动的,他们仍然认为软件开发中存在不可知/不可管理的“巫毒”。是否真的有必要对二进制进行比较,而不是在将源代码提交到存储库之前依赖源代码的差异?我过去的经验告诉我,坚持二进制比较之类的东西的团队成员是受FUD驱动的,他们仍然相信软件开发中存在不可知/不可管理的“巫毒”。