Что такое $RANDOM_SEED $файл, созданный сборкой Visual Studio для решения С#?

Мы заметили, что на какой-то машине-разработчике версия отладки Visual Studio (2015 update 3) для решения С# создавала файл $RANDOM_SEED $вместе со всеми встроенными DLL.

Содержимое файла - это всего лишь одно число, например. 1443972318

Удаление файлов (ов), а затем восстановление привело к восстановлению файла с другим номером.

Это поведение наблюдалось также при перестройке одного проекта в решении (которое имеет только стандартные ссылки на С# refs/dependencies + System.Management).

Обратите внимание, что выполнение сборки командной строки, например. msbuild <sln-file> не регенерировать файл (для создания полного решения или одного проекта).

После перезапуска VS файл больше не восстанавливается.

Насколько нам известно, это имя файла не используется ни в одном из наших исходных кодов, post build steps или внутренних зависимостей. Существует довольно много зависимостей от классов .NET Framework, включая Random и RNGCryptoServiceProvider, а также внешние зависимости. У нас нет полного исходного кода для всех них, поэтому невозможно проверить исчерпывающе, если какая-либо из зависимостей несет ответственность.

Это немного выстрел в темноте, но вопрос Кто-нибудь видел что-то похожее на это?

ИЗМЕНИТЬ Я не удивлен, что это было приостановлено - я понимаю, что это довольно открыто, но поскольку я в настоящее время не могу воспроизвести это, и поскольку это может иметь потенциально серьезные последствия (атака генератора случайных чисел?), Я все равно разместил его. Если я смогу воспроизвести, я, конечно, буду обновляться здесь.

Ответы

Ответ 1

У меня тот же файл. После короткого расследования я признал себя виновным: этот файл создается адаптером NUnit 3.x. (Вы можете проверить его в AdapterSettings.cs из исходного кода адаптера NUnit).

Ответ 2

Файл используется NUnit, чтобы гарантировать, что мы используем одно и то же случайное начальное значение для генерации случайных тестовых случаев как в процессах обнаружения, так и при выполнении. Это необходимо, потому что IDE использует два разных процесса для выполнения адаптера. Это не требуется (или создавалось) при запуске адаптера под vstest.console.exe.