gpt4 book ai didi

资源查找期间的 C# 无限递归

转载 作者:行者123 更新时间:2023-12-05 04:07:11 26 4
gpt4 key购买 nike

这段代码有问题:

if (_updater.IsNewVersionAvailable())
{
_isolatedStorageFile.CreateDirectory("Folder");
_isolatedStorageFile.CreateDirectory("Folder2");

foreach (string file in Directory.GetFiles(_sharedFilesFolder + "\\Folder"))
{
string fileName = Path.GetFileName(file);
//_isolatedStorageFile.CreateFile(fileName); // <- same problem

using (var outputStream = _isolatedStorageFile.OpenFile("Folder/" + fileName, FileMode.Create, FileAccess.Write)) // <- here is the problem (I tried with backslash (\\) and also doesnt work.
{
using (var inputStream = File.OpenRead(file))
{
inputStream.CopyTo(outputStream);
}
}
}
}

当我运行调用这段代码的 MS 测试时,出现此错误:

error1

error2

隔离存储里面的文件夹创建正常(我无法创建文件)最奇怪的是,有一次当我开始测试时,文件已经创建 - 它运行了 1/20。

有什么想法吗?

最佳答案

您可以尝试的一件事是,在遇到无限递归问题之前将其插入您的代码中(来自 herehere):

try
{
throw new NotImplementedException();
}
catch (NotImplementedException ex)
{
}

我只是想找出一个问题,我们打算从隔离存储中检索一些东西,但它卡在了这个 inf 递归中。我正在浏览 .Net 和 MSTest 源,似乎:

  1. 文件不存在。它试图从 FileStream.Init > WinIOError 中抛出 FileNotFoundException。
  2. 为了抛出异常,它尝试使用 Environment.GetResourceString("IO.FileNotFound_FileName", str), str) 获取字符串。从那里您可以使用诸如 InternalGetSatelliteAssembly 之类的函数。它正在尝试定位 mscorlib。
  3. 与此同时,MSTest 定义了一个 AssemblyResolver 监听器,此时会调用它。它将遍历某些路径,对它们执行 File.Exists 检查。
  4. File.Exist 将检查对该文件的权限。对于代码访问权限,它将抛出带有参数的 SecurityException:Environment.GetResourceString("Security_Generic")。
  5. 循环回到第 2 点。
  6. (IsolatedStorage 永远无法捕获 FileNotFoundException,因此它不会创建新的异常。)

NotImplementedException 或 AgrumentException 似乎强制加载 mscorlib,从而避免了循环。不过,也许还有另一种方法可以让它更容易找到。

关于资源查找期间的 C# 无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868767/

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