首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序集名称和版本

程序集名称和版本
EN

Stack Overflow用户
提问于 2008-09-18 15:12:51
回答 3查看 2.4K关注 0票数 3

当涉及到装配和发布时,什么被认为是最佳实践?

我希望能够引用同一个库的多个版本-解决方案包含多个项目,这些项目依赖于我们自己构建的commonutils.dll库的不同版本。

由于所有依赖项都被复制到bin/debug或bin/release中,因此尽管每个commonutils.dll文件具有不同的程序集版本号,但在那里只能存在DLL的单个副本。

我是否应该在程序集名称中包括版本号,以便能够引用一个库的多个版本,或者是否有其他方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-18 15:27:54

这就是我一直以来的生活方式--

这取决于您计划使用DLL文件做什么。我将它们分为两大类:

  1. 死端程序集。这些是你不打算从任何地方引用的EXE文件和DLL文件。只需对它们进行弱命名,并确保在源代码管理中标记了您发布的版本号,这样您就可以回滚whenever.
  2. Referenced程序集。对它们进行强命名,以便其他程序集可以引用它的多个版本。使用全名来引用它们(Assembly.Load)。将其最新和最好版本的副本保存在其他代码可以引用它的位置。

接下来,您可以选择是否复制本地引用。基本上,权衡可以归结为--你想从你的推荐人那里获取补丁/升级吗?获得新功能可能会带来积极的价值,但另一方面,也可能会有一些破坏性的变化。我认为,这里的决定应该根据具体情况来决定。

在Visual Studio中进行开发时,默认情况下将使用最新版本进行编译,但一旦编译,引用程序集将需要编译时使用的特定版本。

您的最后决定是复制本地或不复制。基本上,如果您已经有了部署引用的程序集的机制,请将其设置为false。

如果你正在计划一个大型的发布管理系统,你可能不得不在这方面投入更多的精力和精力。对于我(小商店--两个人)来说,这很好用。我们知道正在发生什么,并且不会因为必须以一种没有意义的方式做事情而感到克制。

一旦到达运行时,就可以将想要的任何东西Assembly.Load到application domain中。然后,您可以使用Assembly.GetType到达您想要的类型。如果您的类型存在于多个加载的程序集中(例如,在同一项目的多个版本中),则可能会出现AmbiguousMatchException异常。为了解决这个问题,您需要从程序集变量的实例中获取类型,而不是从静态Assembly.GetType方法中获取。

票数 1
EN

Stack Overflow用户

发布于 2008-09-18 15:19:48

程序集可以在GAC (全局程序集缓存)中共存,即使它们具有相同的名称,但版本不同。这就是.NET框架发布的程序集的工作方式。为使程序集能够被GAC注册而必须满足的要求是要签名的。

将版本号添加到程序集的名称只是违背了程序集生态系统的整个目的,并且是繁琐的IMHO。要了解给定程序集的版本,只需打开“属性”窗口并检查版本即可。

票数 3
EN

Stack Overflow用户

发布于 2008-09-18 15:24:53

为不同的程序集版本提供不同的名称是最简单的方法,而且肯定有效。

如果您的程序集(commonutils.dll)是强名称的(即签名的),您可以考虑将其安装在GAC (全局程序集缓存-您可以在GAC中并排安装同一程序集的不同版本)中,因此调用应用程序会自动从那里获得正确的版本,因为.NET类型包含程序集版本信息。

在VS项目中,您引用了正确版本的库,但是没有将其部署在应用程序文件夹中;而是将其安装在GAC中(在应用程序设置期间)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/93455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档