1

OpenXml を使用してスプレッドシート ドキュメントを生成するコンソール アプリケーションがあります。

以下のコードに示すように、IsolatedStorage を使用しようとしていますが、次のメッセージでエラーが発生しています。

呼び出し元のアプリケーション ID を判別できませんか?

これが私がやっている方法です:

    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 は定義されていません。これは、MVC やその他の UI ベースのシステムではなく、ConsoleApp であるためだと思います。

どうもありがとう。

4

1 に答える 1

4

これはかなり簡単です。MSDN によると:

このメソッドを使用すると、アプリケーションに関連付けられたすべてのアセンブリで同じ分離ストアが使用されます。このメソッドは、アプリケーション ID を特定できる場合にのみ使用できます。たとえば、アプリケーションが ClickOnce 配置によって公開されている場合や、Silverlight ベースのアプリケーションである場合などです。ClickOnce または Silverlight ベースのアプリケーションの外部でこのメソッドを使用しようとすると、呼び出し元のアプリケーション ID を判別できないため、IsolatedStorageException 例外が発生します。

GetUserStoreForApplicationSilverlight や ClickOnce アプリケーションの場合と同様に、アプリケーションは URL で定義されていないため、は使用できません。通常のコンソール アプリケーションには、このようなシナリオで使用するアプリケーション ID がありません。

これを処理する 1 つの方法は、別の分離ストレージを使用することです。次に例を示します。

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

厳密な名前のアセンブリも使用すると役立ちます。これにより、各アセンブリを適切に一意に識別できます。

于 2015-06-29T14:18:04.007 に答える