在C#编译时散列源代码

时间:2012-11-12 11:14:26

标签: c# reflection hash compilation

拥有其他开发人员使用的服务器,我当前会记录他们使用的dll版本。我这样做是让使用Reflection的客户端检索其版本:

Assembly.GetEntryAssembly().GetName().Version.ToString();  

这很好,但是因为它来自使用TFS的dev并自己构建,我无法看到它们是否有最新版本的源代码。是否有一个技巧,比如编译标记,可以轻松地生成源代码的哈希值?

注意:我已尝试发送dll的MD5(使用assembly.Location),但由于哈希值在2次编译之间发生变化,因此无用(我猜在生成的dll中有一些编译时间戳) )。

3 个答案:

答案 0 :(得分:0)

这是大多数协作问题,然后编码。 在您发现该版本是旧版本的那一刻。请注意它们。 如果真正的版本不是旧版本,那意味着开发人员在制作buold之前没有增加版本ID,这是错误的。

换句话说,在人们之间进行组织,而不是依赖这些工具(如果有的话)。你试图创建一个复杂的工具,这将有助于你避免错误,但人类将找到一种方法来重新制作它们。

所以最好在你们之间建立稳固的关系结构,imo。

答案 1 :(得分:0)

在预构建事件上创建一个工具,以便对代码文件进行哈希/最后写入时间。

将结果写入cs文件或嵌入式资源文件。

结果文件必须在上述操作中排除。

为防止跳过构建(最新)功能不起作用,请在写入前比较文件。

如果你在IDE中打开文件,那么在构建时会得到一个“从外面改变”的提示。

答案 2 :(得分:-1)

似乎没有简单的方法可以做到。