问题是重新构建完全相同的代码与之前构建的结果相比会生成不同的程序集。
为什么我需要这个?我有一个T4模板,从给定的合同程序集生成某些源代码。该源代码被检入到VCS中,即使它是生成的。这是因为契约程序集的更改相对较少。然而,当它发生变化时,只要没有重新评估前面提到的T4模板,我希望构建失败。
我的计划是在生成的源文件中植入合约程序集的哈希码,例如:
// 1B-D0-06-48-02-C2-C5-C5-48-37-AA-61-66-6B-6D-01
将有一个msbuild任务在构建包含模板的项目时运行。该任务将计算合约程序集散列,并将其与生成的源代码中的散列进行比较。不相等意味着契约组件发生了变化,我们需要重新运行模板。
存储汇编版本没有帮助-在开发过程中也是如此。
另一个解决方案是在运行时将模板计算为一个临时文件,如果生成的源文件不同,则将其复制到源文件上——不需要散列。
然而,我想让开发人员注意到合同发生了变化。此时,我希望开发人员手动重新评估模板。但只在需要的时候。
我想我可以写一个复杂的代码,反映在合同程序集上,以创建其类型的某种规范表示。取这个规范表示的哈希值应该就是它。然而,这不是微不足道的,我想看看它是否可以避免。
我想我可以写一段复杂的代码,反映在合同程序集上,以创建其类型的某种规范表示
实际上,我可以做到这一点。如果使用以下参数调用:
ildasm /text /pubonly _dll_
它将打印出程序集的公共接口