Lazy isolated storage creation

My library uses isolated storage, but only does it on demand. Therefore, I use Lazy<T> .

However, this throws:

System.IO.IsolatedStorage.IsolatedStorageException "Unable to determine the granted permissions for the assembly."

Does Lazy do something weird with threads that confuse isolated repository initialization?

Code example:

 using System; using System.IO.IsolatedStorage; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var thisWorks = IsolatedStorageFile.GetMachineStoreForAssembly(); thisWorks.Dispose(); var lazyStorage = new Lazy<IsolatedStorageFile>(IsolatedStorageFile.GetMachineStoreForAssembly); var thisFails = lazyStorage.Value; thisFails.Dispose(); } } } 

Full stack trace:

 System.IO.IsolatedStorage.IsolatedStorageException was unhandled Message=Unable to determine granted permission for assembly. Source=mscorlib StackTrace: Server stack trace: at System.IO.IsolatedStorage.IsolatedStorage.InitStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) at System.IO.IsolatedStorage.IsolatedStorageFile.GetMachineStoreForAssembly() at System.Lazy`1.CreateValue() Exception rethrown at [0]: at System.IO.IsolatedStorage.IsolatedStorage.InitStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) at System.IO.IsolatedStorage.IsolatedStorageFile.GetMachineStoreForAssembly() at System.Lazy`1.CreateValue() at System.Lazy`1.LazyInitValue() at System.Lazy`1.get_Value() at ConsoleApplication1.Program.Main(String[] args) in C:\Users\Andrew Davey\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs:line 19 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: 
+7
source share
1 answer

It seems like this is because you are going to the MethodGroup (and not directly with the delegate / lambda) and cannot determine where the source code came from. If you switch it to this:

 var lazyStorage = new Lazy<IsolatedStorageFile>(() => IsolatedStorageFile.GetMachineStoreForAssembly()); 

It should work fine.

+6
source

All Articles