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