2009-05-28 96 views
4

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

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

我对这个安排如下问题:

  1. 我认为这将创造性能问题随着应用程序数量和引用的增长而增加,因为每个应用程序都会加载所有这些会导致虚拟地址碎片的程序集。我的假设是否正确?

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

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

和参考通过按如下方式组织的应用:

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

这些应用程序中的bin文件夹不会有共同的组件。

这项工作?我试图通过设置复制本地为false来做到这一点,但我得到'无法加载文件或程序集xxxx'。

我知道我可以使用GAC,但由于部署过程的特性,我想避免使用GAC来处理特定的定制库。

谢谢, 哈里克里希南。

+0

这些东西的一个很好的参考是CLR的前三章通过C# – 2009-05-28 22:11:07

回答

2

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

共享路径将给您带来的唯一好处是不必部署这些程序集的多个副本。

3

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

+1

取决于你使用的框架以及 AppDomain.CurrentDomain。AppendPrivatePath(path) and AppDomainSetup adSetup = new AppDomainSetup(); adSetup.PrivateBinPath =路径 – 2009-05-28 22:13:11

1

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

+0

只要组件是强命名的。 – 2009-05-28 22:32:07

+0

我同意GAC是最适合分享的地方。我们正在GAC中安装第三方库。但是由于我们的部署过程,某些定制库在一个月内会发布几个版本,并将其部署到GAC中会很麻烦。 – 2009-05-29 17:34:08