У меня есть приложение clickonce, и он отлично работает в процессе производства, с помощью метода:
IsolatedStorageFile.GetUserStoreForApplication()
который выполняется успешно. Когда я пытаюсь отлаживать мое приложение, он вылетает с IsolStorageException из-за того, что "идентификатор приложения вызывающего не может быть определен..", как описано здесь
При использовании этого метода все сборки, связанные с приложением, используют одно и то же изолированное хранилище. Этот метод можно использовать только тогда, когда можно определить идентификатор приложения - например, когда приложение опубликовано с помощью развертывания ClickOnce или является приложением Silverlight. Если вы попытаетесь использовать этот метод вне приложения ClickOnce или Silverlight, вы получите исключение IsolStorageException, поскольку идентификатор приложения вызывающего абонента не может быть определен.
Мой вопрос заключается в том, как использовать IsolStorageFile.GetUserStoreForApplication() и отлаживать приложение без исключений?
Проверьте, является ли сначала контекст активации нулевым,
public IsolatedStorageFile getIsolatedStorage() {
return AppDomain.CurrentDomain.ActivationContext == null
? IsolatedStorageFile.GetUserStoreForAssembly()
: IsolatedStorageFile.GetUserStoreForApplication();
}
что указывает на то, что в домене нет контекста активации, означающего, что идентификатор приложения вызывающего абонента не может быть определен.
Я также видел еще одну реализацию
Ссылка ClickOnce и IsolatedStorage
где они проверили System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
чтобы определить, было ли приложение в данный момент System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
после развертывания
public IsolatedStorageFile getIsolatedStorage() {
return System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
? IsolatedStorageFile.GetUserStoreForApplication()
: IsolatedStorageFile.GetUserStoreForAssembly();
}
В идеале я бы также предложил инкапсулировать Изолирующую IsolatedStorage
за абстракцией, чтобы модульное тестирование также можно было сделать изолированно без эффекта детонации.