【问题标题】:Create Your Own .NET Assembly Cache创建您自己的 .NET 程序集缓存
【发布时间】:2009-04-04 04:11:21
【问题描述】:

在我正在编写的 .net 应用程序中,我需要在本地缓存来自不同位置的程序集,以便即使原始位置不可用,我的应用程序也可以使用它们。我不能使用 GAC(主要是因为我想要可移植性,还因为程序集可能没有签名)。

有谁知道已经支持此功能的任何 .net 代码?我需要缓存能够告诉我特定程序集是否已经在缓存中,并且还可以处理不同版本的程序集。我可能不得不求助于编写自己的程序集缓存,但我想我会问这个问题,因为如果已经完成,我真的不想“重新发明轮子”。

【问题讨论】:

    标签: .net caching assemblies


    【解决方案1】:

    Mono project 必须(重新)实现 GAC,它可以在 Windows 上运行。我会从那里开始。

    【讨论】:

      【解决方案2】:

      我最终不得不编写自己的程序集缓存...

      以下是它的基本工作原理,以便在其他人需要实现自己的程序集缓存时为他们提供帮助:

      • 缓存是应用程序中具有相应包装类的文件夹。
      • 在缓存中安装程序集的方法会返回一个字符串“token”(安装程序集的名称),调用者可以保存该字符串并在以后检索该程序集。
      • 检索程序集的方法采用令牌并返回封装缓存程序集信息的对象。

      安装程序集时,首先将传入程序集的位与每个已缓存程序集的位进行比较,并确定该程序集是否已安装(如果所有位都相同,则它们显然必须执行相同的操作)。如果程序集已安装,则返回先前缓存的程序集的名称。如果尚未安装,则通过在缓存文件夹中查找程序集名称的可用变体来允许安装多个版本(例如,程序集.dll、程序集 - (2).dll、程序集 - (3).dll 等) ,将程序集缓存在文件夹中,并将其缓存名称返回给调用者。

      就安全性和强命名而言,在我的应用程序中进行强名称验证是没有意义的,因为这将是 Bruce Payette 所说的“草坪侏儒缓解”(攻击者只能四处走动的安全对策)。如果攻击者决定毒化程序集,他还可以访问存储强名称的位置,并且可以轻松地将其更改为他的强名称。最终用户有责任仅使用来自他信任的来源的程序集。如果用户安装了恶意程序集,那是他的错,不是我的。尽管如此,为了给用户提供更多保护,我的应用程序中外部程序集的使用将默认禁用。不过,对于其他应用程序,实施强名称验证作为额外的安全层可能是有意义的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 2010-10-30
        • 2011-11-30
        • 2014-05-22
        • 2022-11-21
        • 1970-01-01
        相关资源
        最近更新 更多