Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Environment.CurrentDirectory设置为system32;我如何确定在哪里?_C#_.net_Windows_Visual Studio - Fatal编程技术网

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

C# Environment.CurrentDirectory设置为system32;我如何确定在哪里?,c#,.net,windows,visual-studio,C#,.net,Windows,Visual Studio,我的问题是,当我的测试套件正在运行时,Environment.CurrentDirectory会在某个地方,以某种方式,并且只是偶尔设置为C:\Windows\System32。一些测试依赖于当前目录,结果失败 我已经在我的项目中完成了“全部查找”,并确认我的任何代码都没有设置该属性。不过我使用了很多第三方库,所以我怀疑其中一个正在修改当前目录 我已经做了一些搜索,专门搜索当前目录改为system32,但结果是空的。是否有一些常见的原因导致这种情况发生 另一种方法也同样是空谈,那就是:我该如何追

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

我已经在我的项目中完成了“全部查找”,并确认我的任何代码都没有设置该属性。不过我使用了很多第三方库,所以我怀疑其中一个正在修改当前目录

我已经做了一些搜索,专门搜索当前目录改为system32,但结果是空的。是否有一些常见的原因导致这种情况发生

另一种方法也同样是空谈,那就是:我该如何追查罪犯?据我所知,我不能让VisualStudio在某个值发生更改时中断任何位置。因为它是一个环境变量并且在.NET库中,所以我不能在setter中设置断点

我曾想过使用procmon或其他东西,希望它能记录当前目录发生更改的时间,但它不会在发生更改时暂停执行,所以我仍然不知道它发生在哪里


我只是不知道如何调试这个。有什么想法吗?或者是我保存
环境的唯一途径。CurrentDirectory
到一个全局只读字段,并在我的代码中专门引用该字段,允许修改当前目录而不受惩罚?

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

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

为了创建假货,在单元测试的引用中,右键单击引用并单击“添加假货组件”

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

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

我建议读这篇文章。它的价值非常高:

为什么您的测试需要知道当前目录是什么?确定正在运行的程序集的路径不是更好吗?@stuartd相信我,如果我写了它们,它们就不会依赖于当前目录。。。这是一个很好的观点,但是,这可能是毫无意义的,因为没有什么真正应该使用ebvieonment变量。这将是非常不方便的,因为他将不得不为每个单元测试重新创建垫片,只是为了修复第三方库的奇怪行为。我宁愿这样做,1)使测试不依赖于
环境。CurrentDirectory
路径,或2)尝试查找导致此问题的库并修复它,或3)使用@stuartd建议的执行程序集路径。您还需要注意的是,Microsoft Fakes仅在Visual Studio Ultimate上可用。有业务逻辑也使用当前目录,因此严格来说,它与单元测试无关。也就是说,您可能仍然是对的,因为使用它的所有东西可能都应该使用执行程序集的路径。当然,使用当前目录是有正当理由的,这意味着回答问题是有价值的,所以我希望你不介意我现在不接受这个答案。