2

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

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

    }
}

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

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

MyApp.exe - 断言失败

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

描述:在 mscorlib 中查找资源时无限递归。这可能是 mscorlib 中的错误,也可能是某些可扩展点(例如程序集解析事件或 CultureInfo 名称)中的错误。

资源名称: Serurity_Generic

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

在此处输入图像描述

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

看起来错误发生在System.Environment.ResourceHelper.GetResourceStringCode().

这可能是什么原因?我在这个话题上找不到任何东西。

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

4

2 回答 2

3

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

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

于 2018-02-20T07:47:41.837 回答
1

就我而言,当我代码尝试在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;
于 2019-07-19T09:21:31.133 回答