c#4.0-如何在c#控制台应用程序中使用IsolatedStorage

本文关键字:应用程序 IsolatedStorage 控制台 c#4 | 更新日期: 2023-09-27 18:00:24

我有一个控制台应用程序,它使用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的系统。

非常感谢。

c#4.0-如何在c#控制台应用程序中使用IsolatedStorage

这是非常直接的。根据MSDN:

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

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

处理这种情况的一种方法是使用不同的隔离存储,例如:

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

它也有助于使用强命名程序集,这为每个程序集提供了适当的唯一标识。