代码之家  ›  专栏  ›  技术社区  ›  Rohan West

如何检查程序集是否已更改

  •  3
  • Rohan West  · 技术社区  · 15 年前

    是否可以判断程序集是否已更改?

    我有一个生成名为myassembly.dll程序集的标准项目。

    在单独的项目中,我读取程序集并生成哈希。

    当我为程序集生成哈希时,每次重新编译时它都是不同的。我已将程序集版本设置为静态,是否还有其他需要更改的属性?

    class Program
    {
        static void Main(string[] args)
        {
            var array = File.ReadAllBytes(@"MyAssembly.dll");
            SHA256Managed algo = new SHA256Managed();
            var hash = algo.ComputeHash(array);
    
            Console.WriteLine(Convert.ToBase64String(hash));
        }
    }
    

    谢谢

    罗翰

    4 回复  |  直到 6 年前
        1
  •  4
  •   JMarsch    15 年前

    您可能需要使用版本号属性。哈希不起作用,因为任何时候重新编译一个程序集时,它都是不同的——即使代码根本没有更改。原因是每次编译时,编译器都会在程序集中嵌入一个guid,并将相同的guid放入相应的.pdb文件中。每次编译程序集时,guid都会更改。

    这就是调试器如何将程序集与其.pdb文件的正确版本相匹配的原因(这也是为什么必须始终将.pdb保存在所发布的任何内容上,并且不能依赖生成pdb来匹配现有程序集的原因)。

        2
  •  2
  •   user130076    15 年前

    您可以在生成哈希之后将其存储在文本文件中,然后在下次重新编译时对照它进行检查。

        3
  •  1
  •   Community Egal    7 年前

    如果是你自己管理的程序集,我建议你添加一个版本号,然后 auto-increase 每次生成该程序集时的版本号。

    然后您可以检查版本号。

        4
  •  0
  •   wolfyuk    6 年前

    This project 似乎通过分解每个文件并删除 MVID 在生成一个 MD5 搞砸。它依赖于 ildasm.exe .