在.NET中共享程序集

时间:2009-05-28 22:05:40

标签: .net assemblies

我们的应用程序使用大量自定义构建和第三方库,现在每个应用程序都有对这些程序集的私有引用,这意味着每个应用程序的bin文件夹都复制了引用的程序集。对于例如应用程序A引用log4net.dll,CustomLibA.dll,CustomLibB.dll和应用程序B也引用了log4net.dll,CustomLibA.dll,CustomLibB.dll,这些程序集存储在以下结构中。

d:\的Inetpub \ wwwroot的\ ApplicationA \仓 d:\的Inetpub \ wwwroot的\ ApplicationB \ BIN

我对此安排有以下问题:

  1. 我认为随着应用程序和引用数量的增加,这会产生性能问题,因为每个应用程序都会加载所有这些会导致虚拟地址碎片的程序集。我的假设是对的吗?

  2. 我可以组织应用程序,使所有这些应用程序从公共文件夹引用程序集,并且bin文件夹中没有私有副本吗?对于例如程序集log4net.dll,CustomLibA.dll,CustomLibB.dll组织在以下文件夹中

  3. d:\的Inetpub \ wwwroot的\应用\共同

    由以下组织的应用程序引用:

    d:\的Inetpub \ wwwroot的\ APPS \ ApplicationA d:\的Inetpub \ wwwroot的\ APPS \ ApplicationB

    这些应用程序中的bin文件夹将没有公共程序集。

    这会有用吗?我尝试通过将copy local设置为false来实现此目的,但我得到'无法加载文件或程序集xxxx'。

    我知道我可以使用GAC,但由于部署过程的性质,我想避免某些自定义构建库的GAC。

    谢谢, Hari Krishnan。

3 个答案:

答案 0 :(得分:3)

您可以随时为appdomain添加其他路径以查找其他文件夹中的引用,而不是bin或gac AppDomain.AddReferencePath

答案 1 :(得分:2)

如果您使用GAC,性能和代码共享可能会带来额外的好处。请注意,让所有应用程序引用公共共享路径不会改变每个应用程序将其自己的程序集副本加载到内存中这一事实。

共享路径为您提供的唯一好处是不必部署这些程序集的多个副本。

答案 2 :(得分:1)

我认为GAC是普通类库的最佳选择。您仍然可以将自定义库部署到本地\ bin目录。