GAC是旨在包含在多个应用程序之间共享的程序集。如果是这种情况,您应该为程序集指定强名称,并将其注册到GAC中。 如果不是这样,请将程序集保留为私有程序集,并将其作为项目/ dll 引用。 备注:我并没有真正理解您的问题中“bin文件夹”的引用-这是哪个bin文件夹?
冒着被踩的风险,我要违背大众观点,说GAC应该只作为最后的选择(一个我能想到的例子是当你使用Biztalk时,它不会为每个应用程序提供bin文件夹)。GAC最初看起来像是在多个应用程序之间共享文件的好方法。但是,当你想要更新其中一个应用程序时会发生什么呢?你要么冒着破坏服务器上所有使用它的应用程序的风险,要么在GAC中得到多个版本。GAC中的多个版本并不比与各个应用程序打包的不同版本好,事实上我认为它更加困惑。当你运行Web Farm时,你会得到每个服务器一个GAC,因此如果使用GAC,则向Farm中添加新服务器的应用程序部署变得更加复杂。你还会失去在服务器上拥有单个程序集的优势。但是,暂且不考虑多个服务器问题,假设你有一个服务器,有10个应用程序都使用相同的程序集。你发现了一个只影响其中两个应用程序的程序集问题。你是否要为所有10个应用程序更新程序集,这意味着你必须测试所有10个应用程序,并且你可能会破坏其他正常工作的应用程序?还是只为出问题的应用程序更新程序集,并在下一个开发周期中为其他应用程序更新它?如果你更喜欢后者的方法,那么我认为应该避免使用GAC。
值得记住的是,默认情况下,.Net会从GAC中加载匹配的程序集,而不是从本地应用程序文件夹中加载。此外,如果程序集是强名称签名的,则从GAC加载它的性能更高。这是因为首先要进入GAC,必须检查强名称,这意味着在加载时您的应用程序不需要再次检查它。如果您从本地文件夹加载带有强名称的程序集,则每次都会检查其强名称(虽然不需要很长时间,但总体上会增加负担)。只有强名称签名的程序集才能安装到GAC中,并且您需要管理员权限才能这样做。