【问题标题】:IsolatedStorageFileStream lead to assert failureIsolatedStorageFileStream 导致断言失败
【发布时间】:2018-07-30 11:28:23
【问题描述】:

我决定对临时文件使用隔离存储:

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

    }
}

我从在这台计算机上运行的示例中获取了这段代码。仅包含此代码的最小项目也成功运行。

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

MyApp.exe - 断言失败

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

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

资源名称:Seurity_Generic

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

我也无法从这段代码中捕获异常。

System.Environment.ResourceHelper.GetResourceStringCode() 中似乎发生了错误。

这可能是什么原因?我找不到有关此主题的任何内容。

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

【问题讨论】:

    标签: c# windows-7 isolatedstoragefile


    【解决方案1】:

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

    简而言之:修复该程序集加载器,然后您将能够得到真正的错误。

    【讨论】:

    • 它确实看起来像库中的一个错误:github.com/Fody/Costura/issues/138 据我了解,在尝试解析程序集时,它会在引用的程序集上调用 GetName,这会导致引用的程序集被加载。所以它返回到 AssemblyResolve,然后再次调用 GetName,然后返回到 AssemblyResolve,依此类推。
    • 你是对的。我不得不将当前线程的文化更改为“en-US”来修复它。
    【解决方案2】:

    在我的例子中,当我的代码尝试在 IsolatedStorage 中创建 文件时,在某些机器上确实发生了这种情况。正如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;
    

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2020-10-19
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      相关资源
      最近更新 更多