1

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

非常感谢。

4

1 回答 1

4

这很简单。根据 MSDN:

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

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

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

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

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

于 2015-06-29T14:18:04.007 回答