gpt4 book ai didi

c# - Environment.CurrentDirectory 设置为 system32;我如何确定在哪里?

转载 作者:可可西里 更新时间:2023-11-01 14:24:17 26 4
gpt4 key购买 nike

我的问题是,当我的测试套件运行时,Environment.CurrentDirectory 在某处以某种方式且只是偶尔被设置为 C:\Windows\System32。一些测试依赖于当前目录,因此失败。

我在我的项目中进行了一次查找,并确认我的代码中没有任何一个设置了该属性。不过,我使用了许多第 3 方库,所以我怀疑其中之一正在修改当前目录。

我专门针对更改为 system32 的当前目录进行了一些搜索,但结果是空的。发生这种情况是否有一些常见原因?

另一种同样是空洞的方法是:我怎样才能找到罪魁祸首?据我所知,当值发生变化时,我无法让 Visual Studio 在任何地方中断。因为它是一个环境变量并且在 .NET 库中,所以我无法在 setter 中设置断点。

我想到了使用 procmon 之类的东西,它希望在当前目录发生变化时记录下来,但是当它发生时它不会暂停执行,所以我仍然不知道它发生在哪里。

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

最佳答案

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

为什么不使用 Microsoft Fakes 返回目录的特定值?

为了创建假的,在单元测试的引用中,右键单击引用并单击“添加假程序集”。

例如,如果您的单元测试依赖于当前日期,则 Fake 可以使用以下代码生成另一个日期/时间:

ShimDateTime.NowGet = ()=> new DateTime(2012, 12, 21);

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

关于c# - Environment.CurrentDirectory 设置为 system32;我如何确定在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com