【发布时间】:2017-03-14 20:01:20
【问题描述】:
我们注意到,在某台开发机器上,C# 解决方案的 Visual Studio(2015 更新 3)调试版本会在每个构建的 DLL 旁边生成一个 $RANDOM_SEED$ 文件。
文件的内容只是一个数字,例如
1443972318
删除文件然后重建会导致文件被重新生成,但编号不同。
在解决方案中重建单个项目(仅具有标准 C# 项目引用/依赖项 + System.Management 的项目)时也观察到此行为。
请注意,运行命令行构建,例如
msbuild <sln-file>
没有重新生成文件(用于构建完整的解决方案或单个项目)。
VS重启后,文件不再重新生成。
据我们所知,我们的任何源代码、构建后步骤或内部依赖项中都没有使用此文件名。 .NET 框架类有很多依赖项,包括 Random 和 RNGCryptoServiceProvider,还有外部依赖项。我们没有所有这些的完整源代码,因此无法彻底检查是否有任何依赖项负责。
这有点像在黑暗中拍摄,但问题是有人见过类似的东西吗?
编辑 我对这被否决并不感到惊讶 - 我很欣赏它是开放式的,但由于我目前无法重现这一点,并且它可能会产生潜在的严重后果(随机数生成器攻击?)我还是发布了它。如果我能够复制,我当然会在这里更新。
【问题讨论】:
-
不太可能是 Microsoft 文件,不是它们的命名约定。构建和想要做一些随机但可重复的事情的逻辑交叉点很小。查看那些机器上使用的单元测试运行器。
-
我今天也看到了。不过不知道它是从哪里来的。
-
我使用了这里提到的第 3 方工具serverfault.com/a/20992 - 结果是 vstest.discoveryengine.x86.exe 创建了该文件。我已经使用单个 C# 类库项目在一个新的解决方案中进行了 repro'd。甚至不需要构建,只需打开解决方案并等待测试资源管理器窗口更新就足够了。确切的exe是:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.discoveryengine.x86.exe
标签: visual-studio nunit random-seed test-explorer nunittestadapter