0

我知道从相同源代码重复构建程序集会产生差异很小的二进制文件:http: //blog.paranoidcoding.com/2016/04/05/deterministic-builds-in-roslyn.html

  • MVID:识别PE的GUID,它为编译器1生成的每个PE新生成。
  • PDB ID:识别 PDB 匹配 PDB 的 GUID,在每次构建时新生成。
  • 日期/时间戳:自每个构建计算的纪元以来的秒数。

这对Assembly.Evidence意味着什么?重复构建(来自相同的源代码)之间是否一致?

特别是,Assembly.Evidence.OfType<Hash>。哈希是如何计算的?它取决于上面的变量吗?对我来说,理想情况下,哈希将取决于程序集的其余部分,不包括变化的标识符。

4

1 回答 1

-1

很容易测试:

using System;
using System.Reflection;
using System.Security.Policy;

namespace PlayAreaCSCon
{
    internal static class Program
    {
        static void Main(string[] args)
        {
            foreach(var b in (new Hash(Assembly.GetExecutingAssembly()).SHA1))
            {
                Console.Write("{0} ", b);
            }
            Console.WriteLine();
            Console.WriteLine("Complete");
            Console.ReadLine();
        }
    }
}

第一次运行:

142 101 89 23 98 132 149 74 68 183 142 168 97 165 177 25 31 209 15 108
Complete

进行清理/构建,然后再次运行:

58 42 138 106 209 240 236 116 168 108 220 244 104 190 71 211 254 9 11 176
Complete

所以,不,Assembly.Evidence(特别是任何涉及Hash)在构建之间是不一致的。

于 2018-09-13T10:58:14.870 回答