【问题标题】:How to use IsolatedStorageFile.GetUserStoreForApplication()如何使用 IsolatedStorageFile.GetUserStoreForApplication()
【发布时间】:2018-10-23 17:04:03
【问题描述】:

我有一个 clickonce 应用程序,它在生产中运行良好,使用方法:

IsolatedStorageFile.GetUserStoreForApplication()

成功执行。 当我尝试调试我的应用程序时,由于“无法确定调用者的应用程序身份。”as described here

使用此方法时,与应用程序关联的所有程序集都使用相同的隔离存储。仅当可以确定应用程序身份时才能使用此方法 - 例如,当应用程序通过 ClickOnce 部署发布或者是基于 Silverlight 的应用程序时。如果您尝试在基于 ClickOnce 或 Silverlight 的应用程序之外使用此方法,您将收到一个 IsolatedStorageException 异常,因为无法确定调用者的应用程序标识。

我的问题是如何使用IsolatedStorageFile.GetUserStoreForApplication() 并无异常地调试应用程序?

  • 可能做一些检查?
  • 还是使用自定义应用程序身份?
  • 或使用IsolatedStorageFile.GetEnumerator 来获取可用存储?

【问题讨论】:

  • 首先检查激活上下文是否为空,这表明该域没有激活上下文意味着无法确定调用者的应用程序身份
  • 我还建议抽象出IsolatedStorage,以便可以在隔离的情况下进行测试而不会产生连锁反应
  • 这里的答案也证明很有帮助stackoverflow.com/a/47694201/5233410
  • 谢谢,如果无法执行 GetUserStoreForApplication,我最终会检查 ActivationContext 并回退到 GetUserStoreForAssembly

标签: c# isolatedstorage


【解决方案1】:

先检查激活上下文是否为空,

public IsolatedStorageFile getIsolatedStorage() {
    return AppDomain.CurrentDomain.ActivationContext == null
        ? IsolatedStorageFile.GetUserStoreForAssembly()
        : IsolatedStorageFile.GetUserStoreForApplication();
}

这表明该域没有激活上下文,这意味着无法确定调用者的应用程序身份。

我还看到了另一个实现

参考ClickOnce and IsolatedStorage

他们检查了System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed 以确定应用程序当前是否在部署后被点击

public IsolatedStorageFile getIsolatedStorage() {
    return System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed
        ? IsolatedStorageFile.GetUserStoreForApplication()
        : IsolatedStorageFile.GetUserStoreForAssembly();
}

理想情况下,我还建议将IsolatedStorage 封装在一个抽象后面,这样单元测试也可以单独进行而不会产生连锁反应。

【讨论】:

    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2012-02-29
    • 2019-02-09
    相关资源
    最近更新 更多