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