我的 WinForms 应用程序通过程序集名称将各种设置存储在用户隔离存储中,并且程序集是强命名的。据我了解,隔离是在程序集版本的主要部分完成的,因此将程序集版本从 2.0 更改为 2.n 并没有导致使用不同的隔离存储文件。
但是,我们即将将我们的程序集版本从 2.x 升级到 3.0,这意味着将使用一个新的隔离存储存储。我希望能够将设置从 2.x 迁移到 3。
有没有办法访问另一个程序集的隔离存储。我已经尝试过这些方面的东西:
var thisAssembly = Assembly.GetCallingAssembly();
var thisAssemblyName = thisAssembly.GetName();
var publicKey = thisAssemblyName.GetPublicKey();
var blob = new StrongNamePublicKeyBlob(publicKey);
var previousStrongName = new StrongName(blob, "appName", new Version(2, 7, 0, 0));
var previousVersionEvidence = new Evidence();
previousVersionEvidence.AddAssembly("appName");
previousVersionEvidence.AddAssembly(new Version(2, 7, 0, 0));
previousVersionEvidence.AddAssembly(previousStrongName);
var scope = IsolatedStorageScope.Assembly | IsolatedStorageScope.User;
var container = IsolatedStorageFile.GetStore(scope, previousVersionEvidence, null, previousVersionEvidence, null);
新应用程序使用相同的强名称密钥进行签名。我还尝试将以下属性添加到新程序集中:
[assembly:IsolatedStorageFilePermission(SecurityAction.RequestMinimum, Unrestricted=true, UsageAllowed=IsolatedStorageContainment.UnrestrictedIsolatedStorage)]
但是,当我调用 GetStore 时,我得到 System.Security.Policy.PolicyException:无法获取执行权限。