什么是由Visual Studio构建C#解决方案生成的$RANDOM_SEED$文件?

16
我们注意到在某个开发机器上,使用 Visual Studio (2015 update 3) 调试生成 C# 解决方案时,将会在每个构建的 DLL 旁边生成一个 $RANDOM_SEED$ 文件。
该文件的内容只是一个单独的数字,例如:1443972318
删除这些文件并重新构建会导致该文件重新生成,并带有不同的数字。
当重新构建解决方案中的单个项目时(仅具有标准 C# 项目引用/依赖项 + System.Management 的项目),也观察到了这种行为。
请注意,运行命令行构建,例如:msbuild <sln-file> 并不能重新生成文件(对于完整解决方案或单个项目的构建)。 重启 VS 后,该文件不再重新生成。 据我们所知,这个文件名没有在我们的源代码、后构建步骤或内部依赖项中使用。包括 Random 和 RNGCryptoServiceProvider 在内的 .NET 框架类有很多依赖项,还有外部依赖项。我们没有所有这些的完整源代码,因此不可能详尽地检查哪些依赖项负责。
这可能有点无从下手,但问题是是否有人见过类似的情况? 编辑:我并不惊讶这已被投票降低 - 我明白这是相当开放式的问题,但由于我目前无法复现这个问题,而且它可能有潜在的严重后果(随机数生成器攻击?),我还是发布了这篇文章。如果我能够复制,我当然会在这里更新。

1
不太可能是微软文件,也不符合他们的命名规则。建立和想要做一些随机但可重复的事情的逻辑交集很小。看看那些机器上正在使用的单元测试运行程序。 - Hans Passant
我今天也看到了这个,但不知道它是从哪里来的。 - Anders Marzi Tornblad
1
我使用了这里提到的第三方工具http://serverfault.com/a/20992 - 结果发现vstest.discoveryengine.x86.exe创建了该文件。我已经在一个新的解决方案中复制了一个单独的C#类库项目。甚至不需要构建,只需打开解决方案并等待测试资源管理器窗口更新即可。确切的exe是:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.discoveryengine.x86.exe - Nick Baker
2个回答

12

我有同样的文件。 经过简短调查,我发现罪魁祸首是: 这个文件是由NUnit 3.x测试适配器创建的。 (你可以在NUnit适配器源代码的AdapterSettings.cs中查看)。


https://github.com/nunit/nunit3-vs-adapter/blob/master/src/NUnitTestAdapter/AdapterSettings.cs,是关于编程的内容。是关于NUnit 3测试适配器v3.5.1的设置。 - Nick Baker
仍然不确定随机种子值的确切用法,或者导致它被写入文件的条件是什么。此外,在 NUnit 测试适配器文档中也找不到任何关于这个问题的内容... - Nick Baker

11

该文件用于NUnit,以确保我们在发现和执行过程中使用相同的随机种子值来生成随机测试用例。这是必需的,因为IDE使用两个不同的进程来执行适配器。在vstest.console.exe下运行适配器时实际上不需要(也不会创建)该文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接