IsolatedStorage,试图证明不同的隔离级别 - 不能用于域隔离

时间:2009-03-17 20:02:10

标签: c# .net assemblies appdomain isolatedstorage

我已经编辑并修剪了这个以尝试关闭它,因为该网站提示我接受答案或添加赏金。

我做了一个实验,它在控制台应用程序引用的库中调用了GetUserStoreForAssembly和GetUserStoreForDomain,但是我不明白为什么我在一个案例中获得的商店数量超过了我预期的数量而在另一个案例中的商店数量减少了。

Preet帮助我调整了实验,最后我遇到了两个略有不同的问题:

  • 当我将控制台应用程序复制到另一个目录时(因此名称保持不变),我有两个用户/程序集存储,即我希望它们共享时每个副本一个

  • 当我将我的库加载到控制台应用程序中的多个域时,当我希望它们不共享时,它们仍然使用相同的用户/程序集/域存储

到那时,问题很冷淡。我做了自己的阅读,我以为我找到了答案,所以我自己回答了这个问题,希望有人能够确认/纠正。但到目前为止,名单上没有任何机会。我只是要离开它,但后来被提示接受或添加赏金。

所以我在这里提出了我的答案,现在只需要有人添加一些有用的评论,无论是确认还是更正,我都可以接受并知道这对其他想要更好地理解隔离存储的人来说实际上是有用的:

第一个问题的可能答案:

强名称集会当然以其强名而得名。弱名称(不确定这是一个官方术语,但无论如何)由他们的URL或文件位置标识。因此,同样的弱名称被复制到不同的目录将拥有它自己独立的独立存储。

可能回答第二个问题(对此问题不太确定):

GetUserStoreForDomain返回的范围仅限于计算机,用户,应用程序和程序集,特别是在特定应用程序中运行的程序集。

我的实验创建了多个其他域,但它们都在同一个应用程序中。因此,他们都使用相同的域名存储。

因此,为了模拟域隔离,我实际上需要从两个不同的控制台应用程序引用该库。

这只有在库(以及两个控制台应用程序)都是强名称时才能正常工作。引用程序集会导致它被复制,这意味着如果它被弱化,它将具有单独的隔离存储。

我只是尝试了强大的命名整个实验,现在我按照预期获得2个域存储和1个汇编存储。

2 个答案:

答案 0 :(得分:2)

您可以在单个程序/进程中创建多个应用程序域。在appdomain中,您可以加载程序集。调用每个app域/程序集中的方法

here (appdomains)here (AssemblyIdentity)以及here

等示例

答案 1 :(得分:0)

您可以在单个程序/进程中创建多个应用程序域。在appdomain中,您可以加载程序集。调用每个app域/程序集中的方法

有例here