IsolatedStorageFileStream导致断言失败

时间:2018-02-20 07:01:35

标签: c# windows-7 isolatedstoragefile

我决定将临时存储用于临时文件:

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForDomain())
{
    using (IsolatedStorageFileStream userStream = new IsolatedStorageFileStream("UserSettings.set", FileMode.Create, isoStore))
    {

    }
}

我从此计算机上的示例中获取此代码。只有这个代码的最小项目也成功运行。

但是,在我当前项目中执行IsolatedStorageFileStream构造函数后,会出现以下消息:

  

MyApp.exe - 断言失败

     

表达式:[mscorlib递归资源查找错误]

     

Desctiprion:mscorlib中资源查找期间的无限重复。   这可能是mscorlib中的错误,或者可能是某种可扩展性   诸如程序集解析事件或CultureInfo名称之类的点。

     

资源名称:Serurity_Generic

在这条消息中我可以看到相当大的堆栈跟踪(它从调用IsolatedStorageFileStream构造函数开始):

enter image description here

此外,我无法从此代码中捕获异常。

System.Environment.ResourceHelper.GetResourceStringCode()看起来错误。

可能的原因是什么?我无法找到关于这个话题的任何内容。

删除C:\Users\user\AppData\Local\IsolatedStorage文件夹并不能解决问题(我确定只有我的文件夹)。

2 个答案:

答案 0 :(得分:1)

查看堆栈跟踪,基本问题来自LongPathFile.GetLength。路径中可能存在一些无效字符,或者可能是权限问题。没有确切的错误代码很难说。 然后,.NET尝试加载与错误代码相关的错误消息,并在某些时候进入Costura.AssemblyLoader(这必须是您的代码或您正在引用的某个库)。看起来AssemblyLoader订阅了AssemblyResolve事件,并且在获取正确的程序集方面做得很差,因为它实际上会导致无限递归。

简而言之:修复程序集加载程序,然后你就能得到真正的错误。

答案 1 :(得分:0)

在我的情况下,当我的代码尝试在IsolatedStorage中创建 new 文件时,确实在某些机器上发生了。正如InfernumDeus注释中正确提到的那样,只有在计算机具有非英语有效语言环境设置时,它才会发生。以下代码解决了我的问题:

var currentCulture = Thread.CurrentThread.CurrentCulture;
var currentUiCulture = Thread.CurrentThread.CurrentUICulture;

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

var traceFileStream = new IsolatedStorageFileStream("system_log.txt", FileMode.OpenOrCreate, FileAccess.Write);

Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentUiCulture;