【问题标题】:How to use IsolatedStorage in a C# Console Application如何在 C# 控制台应用程序中使用 IsolatedStorage
【发布时间】:2015-06-29 14:07:10
【问题描述】:

我有一个控制台应用程序,它使用 OpenXml 生成电子表格文档。

我正在尝试使用如下代码所示的 IsolatedStorage,但它出错并显示以下消息:

无法确定调用者的应用程序身份?

这是我的做法:

    var store = IsolatedStorageFile.GetUserStoreForApplication();

    IsolatedStorageFileStream rootFile = store.CreateFile(src);
    store.CreateDirectory(tgt);

        var doc = SpreadsheetDocument.Create(rootFile, SpreadsheetDocumentType.Workbook, false);

        WorkbookPart workbookpart = doc.AddWorkbookPart();
        workbookpart.Workbook = new Workbook();

        Sheets sheets = doc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

        return doc;

我试图做这样的事情:

if (!System.ComponentModel.DesignerProperties.IsInDesignTool)
{
 // above code is here
}

但再次没有定义 DesignerProperties,我认为这是因为它是 ConsoleApp 而不是 MVC 或其他基于 UI 的系统。

非常感谢。

【问题讨论】:

  • "只有在可以确定应用程序身份的情况下才能使用此方法 - 例如,当应用程序通过 ClickOnce 部署发布或者是基于 Silverlight 的应用程序时。如果您尝试在外部使用此方法对于基于 ClickOnce 或 Silverlight 的应用程序,您将收到 IsolatedStorageException 异常,因为无法确定调用者的应用程序身份。”来自msdn.microsoft.com/en-us/library/…
  • 也许IsolatedStorageFile.GetUserStoreForAssembly 对你有用

标签: c# c#-4.0 openxml isolatedstorage isolatedstoragefile


【解决方案1】:

这很简单。根据 MSDN:

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

您不能使用GetUserStoreForApplication,因为您的应用程序不是由其 URL 定义的,Silverlight 和 ClickOnce 应用程序就是这种情况。通常的控制台应用程序没有可用于此类场景的应用程序标识。

处理此问题的一种方法是使用不同的隔离存储,例如:

IsolatedStorageFile.GetStore
(
 IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly, 
 null, null
);

使用强命名程序集也很有帮助 - 为每个程序集提供适当的唯一标识。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-09
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多