添加对来自 GAC 的程序集和不是来自 GAC 的程序集的引用之间的差异(从部署的角度来看)?
Differences (from the deployment point of view ) between adding a reference to an assembly from GAC and an assembly NOT from GAC?
当我将位于 GAC (%SystemRoot% \assembly)
中的引用添加到我的项目和不在 GAC 中的程序集(从部署的角度来看)时会发生什么?我的意思是从部署的角度向项目添加 SHARED 引用和 Private 引用之间的区别?
我们通常不使用 GAC,更喜欢将所有依赖项存储在 %installdir%
文件夹本身中。我想这就是您所说的私有引用,而不是 GAC 安装的共享引用。这是我的理由。
GAC 要求对程序集进行版本控制和强命名。虽然 dot net 确实提供了一些出色的版本控制方法,但它也确实让(新手)程序员感到困惑。程序集版本、文件版本、应用程序版本的全部负担以及了解程序集中的哪种更改会影响这些版本中的哪个版本的全部负担来了。此外,GAC 和强名称只与程序集版本有关。
版本控制影响补丁。对于 GACed dll,patchig 是有问题的,如果不是不可能的话。
安装到 GAC 需要管理员权限。如果您的目标受众中有很大一部分是企业用户,并且您的应用更像是试用软件,那么这将是一个大问题。
依赖于 GAC 的应用程序不是 xcopy 可分发的。它必须由安装程序正确安装。例如,我的应用程序带有命令行实用程序。通常不应该安装诸如此类的东西。人们期望 exe 在计算机之间 copy/paste。我需要做的就是让他们复制整个文件夹。
所以从部署的角度来看,GAC 并不是那么有益。由于生成,它确实提供了一些性能优势,但只有当性能瓶颈是 CPU 时才会显示出来。我的应用程序在网络和数据库中存在性能瓶颈,因此本机代码无济于事。不过,这可能不是您的情况,因此请评估您的选择。
另一件事是,不使用 GAC 也没有坏处。我在一个安装程序中捆绑了四个应用程序。用户勾选要安装的。都有 90% 的通用 DLL。安装后,这 90 个 dll 确实会在所有应用程序文件夹(程序 files\myapp1、myapp2)中重复出现,但安装程序足够智能,可以只携带所有这些文件的一个副本。所以安装程序大小不会增加。 installed 大小增加了,但这在今天的 Tera 字节磁盘中无关紧要。没有人关注应用程序的安装大小。大家关心的,就是安装程序下载的时间。 GAC 对此无能为力。
当然,dot-net 框架自带的框架 DLL 最好从 GAC 使用,不要随身携带。
当我将位于 GAC (%SystemRoot% \assembly)
中的引用添加到我的项目和不在 GAC 中的程序集(从部署的角度来看)时会发生什么?我的意思是从部署的角度向项目添加 SHARED 引用和 Private 引用之间的区别?
我们通常不使用 GAC,更喜欢将所有依赖项存储在 %installdir%
文件夹本身中。我想这就是您所说的私有引用,而不是 GAC 安装的共享引用。这是我的理由。
GAC 要求对程序集进行版本控制和强命名。虽然 dot net 确实提供了一些出色的版本控制方法,但它也确实让(新手)程序员感到困惑。程序集版本、文件版本、应用程序版本的全部负担以及了解程序集中的哪种更改会影响这些版本中的哪个版本的全部负担来了。此外,GAC 和强名称只与程序集版本有关。
版本控制影响补丁。对于 GACed dll,patchig 是有问题的,如果不是不可能的话。
安装到 GAC 需要管理员权限。如果您的目标受众中有很大一部分是企业用户,并且您的应用更像是试用软件,那么这将是一个大问题。
依赖于 GAC 的应用程序不是 xcopy 可分发的。它必须由安装程序正确安装。例如,我的应用程序带有命令行实用程序。通常不应该安装诸如此类的东西。人们期望 exe 在计算机之间 copy/paste。我需要做的就是让他们复制整个文件夹。
所以从部署的角度来看,GAC 并不是那么有益。由于生成,它确实提供了一些性能优势,但只有当性能瓶颈是 CPU 时才会显示出来。我的应用程序在网络和数据库中存在性能瓶颈,因此本机代码无济于事。不过,这可能不是您的情况,因此请评估您的选择。
另一件事是,不使用 GAC 也没有坏处。我在一个安装程序中捆绑了四个应用程序。用户勾选要安装的。都有 90% 的通用 DLL。安装后,这 90 个 dll 确实会在所有应用程序文件夹(程序 files\myapp1、myapp2)中重复出现,但安装程序足够智能,可以只携带所有这些文件的一个副本。所以安装程序大小不会增加。 installed 大小增加了,但这在今天的 Tera 字节磁盘中无关紧要。没有人关注应用程序的安装大小。大家关心的,就是安装程序下载的时间。 GAC 对此无能为力。
当然,dot-net 框架自带的框架 DLL 最好从 GAC 使用,不要随身携带。