Соответствует ли Assembly.Evidence между повторными сборками?

Я понимаю, что повторные сборки сборки из одного и того же исходного кода создают двоичные файлы с небольшими отличиями: http://blog.paranoidcoding.com/2016/04/05/deterministic-builds-in-roslyn.html

  • MVID: GUID, идентифицирующий PE, который заново генерируется для каждого PE, созданного компилятором 1.
  • ID PDB: GUID, идентифицирующий PDB, соответствующий PDB, который генерируется заново при каждой сборке.
  • Отметка даты / времени: секунды с начала эпохи, которые рассчитываются для каждой сборки.

Что это означает для Assembly.Evidence? Согласовано ли это между повторными сборками (из одного и того же исходного кода)?

Особенно, Assembly.Evidence.OfType<Hash>, Как вычисляется хеш? Это зависит от переменных выше? В идеале для меня хеш будет зависеть от остальной части сборки, за исключением идентификаторов, которые меняются.

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) не соответствует между сборками.

Другие вопросы по тегам