Как использовать IsolatedStorageFile.GetUserStoreForApplication ()

2

У меня есть приложение clickonce, и он отлично работает в процессе производства, с помощью метода:

IsolatedStorageFile.GetUserStoreForApplication()

который выполняется успешно. Когда я пытаюсь отлаживать мое приложение, он вылетает с IsolStorageException из-за того, что "идентификатор приложения вызывающего не может быть определен..", как описано здесь

При использовании этого метода все сборки, связанные с приложением, используют одно и то же изолированное хранилище. Этот метод можно использовать только тогда, когда можно определить идентификатор приложения - например, когда приложение опубликовано с помощью развертывания ClickOnce или является приложением Silverlight. Если вы попытаетесь использовать этот метод вне приложения ClickOnce или Silverlight, вы получите исключение IsolStorageException, поскольку идентификатор приложения вызывающего абонента не может быть определен.

Мой вопрос заключается в том, как использовать IsolStorageFile.GetUserStoreForApplication() и отлаживать приложение без исключений?

  • Наверное, сделать некоторые проверки?
  • или использовать индивидуальную идентификацию приложения?
  • или использовать IsolatedStorageFile.GetEnumerator для получения доступных магазинов?
  • 1
    сначала проверьте, является ли контекст активации пустым, что указывает на то, что у домена нет контекста активации, что означает, что невозможно определить личность вызывающего приложения
  • 1
    Я бы также предложил абстрагировать изолированное хранилище, чтобы тестирование можно было проводить изолированно, не влияя на эффекты.
Показать ещё 2 комментария
Теги:
isolatedstorage

1 ответ

2
Лучший ответ

Проверьте, является ли сначала контекст активации нулевым,

public IsolatedStorageFile getIsolatedStorage() {
    return AppDomain.CurrentDomain.ActivationContext == null
        ? IsolatedStorageFile.GetUserStoreForAssembly()
        : IsolatedStorageFile.GetUserStoreForApplication();
}

что указывает на то, что в домене нет контекста активации, означающего, что идентификатор приложения вызывающего абонента не может быть определен.

Я также видел еще одну реализацию

Ссылка ClickOnce и IsolatedStorage

где они проверили System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed чтобы определить, было ли приложение в данный момент System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed после развертывания

public IsolatedStorageFile getIsolatedStorage() {
    return System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed
        ? IsolatedStorageFile.GetUserStoreForApplication()
        : IsolatedStorageFile.GetUserStoreForAssembly();
}

В идеале я бы также предложил инкапсулировать Изолирующую IsolatedStorage за абстракцией, чтобы модульное тестирование также можно было сделать изолированно без эффекта детонации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню