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的系统。
非常感谢。
这是非常直接的。根据MSDN:
使用此方法时,与应用程序关联的所有程序集都使用相同的隔离存储。只有当可以确定应用程序标识时,才能使用此方法,例如,当应用程序通过ClickOnce部署发布或是基于Silverlight的应用程序时。如果您尝试在基于ClickOnce或Silverlight的应用程序之外使用此方法,则会收到IsolatedStorageException异常,因为无法确定调用方的应用程序标识。
您不能使用GetUserStoreForApplication
,因为您的应用程序不是由其URL定义的,Silverlight和ClickOnce应用程序就是这样。通常的控制台应用程序没有用于这种场景的应用程序标识。
处理这种情况的一种方法是使用不同的隔离存储,例如:
IsolatedStorageFile.GetStore
(
IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly,
null, null
);
它也有助于使用强命名程序集,这为每个程序集提供了适当的唯一标识。