Соответствует ли Assembly.Evidence между повторными сборками? - PullRequest
0 голосов
/ 12 сентября 2018

Я понимаю, что повторные сборки сборки из одного и того же исходного кода создают двоичные файлы с небольшими отличиями: 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 Ответ

0 голосов
/ 13 сентября 2018

Достаточно легко проверить:

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

...