环境.当前目录设置为system32;我怎么确定在哪里

本文关键字:在哪里 当前目录 设置 system32 环境 | 更新日期: 2023-09-27 18:05:27

我的问题是,在某个地方,不知怎么的,只是偶尔,当我的测试套件正在运行时,Environment.CurrentDirectory被设置为C:'Windows'System32。一些测试依赖于当前目录,结果失败。

我已经在我的项目中做了一个find-all,并确认我的代码没有设置该属性。我使用了大量的第三方库,所以我怀疑其中一个库正在修改当前目录。

我已经做了一些搜索,专门为当前目录更改为system32,但我一无所获。有什么常见的原因会导致这种情况发生吗?

另一种方法,同样是空的,是:我如何才能找到罪魁祸首?据我所知,当一个值改变时,我不能让Visual Studio在任何地方中断。因为它是一个环境变量,在。net库中,我不能在setter中设置断点。

我想使用procmon或其他东西,它有望记录当前目录何时发生变化,但是当它发生时它不会暂停执行,所以我仍然不知道它发生在哪里。

我只是不知道如何调试这个。什么好主意吗?或者我唯一的办法是将Environment.CurrentDirectory保存为全局只读字段,并在我的代码中专门引用它,允许修改当前目录而不受惩罚?

环境.当前目录设置为system32;我怎么确定在哪里

首先,依靠外部资源进行单元测试是一种非常糟糕的方法。当其他人测试你的代码时,基于当前目录的单元测试可能会失败。

为什么不使用Microsoft Fakes为Directory返回一个特定的值?

为了创建一个fake,在Unit Test的引用中,右键单击引用并单击"Add Fakes Assembly"。

例如,如果您的单元测试依赖于当前日期,则Fake可以使用以下代码生成另一个日期/时间:
ShimDateTime.NowGet = ()=> new DateTime(2012, 12, 21);

我推荐阅读这篇文章。它的值非常高:http://www.dotnetcurry.com/showarticle.aspx?ID=963