C# 程序集名称和版本

C# 程序集名称和版本,c#,assemblies,naming-conventions,C#,Assemblies,Naming Conventions,对于程序集和发布,什么是最佳实践 我希望能够引用同一库的多个版本-解决方案包含多个项目,这些项目依赖于我们自己构建的commonutils.dll库的不同版本 由于所有依赖项都复制到bin/debug或bin/release,因此尽管每个dll文件具有不同的程序集版本号,但其中只能存在commonutils.dll的一个副本 我应该在程序集名称中包含版本号,以便能够引用库的多个版本,还是有其他方法?程序集可以在GAC(全局程序集缓存)中共存,即使它们具有相同的名称,因为版本不同。这就是.NET

对于程序集和发布,什么是最佳实践

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

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


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

程序集可以在GAC(全局程序集缓存)中共存,即使它们具有相同的名称,因为版本不同。这就是.NET Framework附带的程序集的工作方式。为了使组件能够进行GAC注册,必须满足的要求将被签署


将版本号添加到程序集的名称中只会破坏程序集生态系统的整体用途,而且是很麻烦的。要知道给定程序集的哪个版本,我只需打开“属性”窗口并检查版本。

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

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


在VS项目中,您引用了库的正确版本,但未将其部署在应用程序文件夹中;您可以在GAC中安装它(在应用程序安装期间)。

这是我一直以来的生活--

这取决于您计划使用DLL文件的目的。我将其分为两大类:

  • 死端组件。这些是EXE文件和DLL文件,您确实不打算从任何地方引用它们。只需对这些文件命名,并确保在源代码管理中标记了发布的版本号,以便随时回滚

  • 引用的程序集。强名称,以便其他程序集可以引用它的多个版本。使用全名引用它们(Assembly.Load)。在其他代码可以引用它的地方保存它的最新和最好版本的副本

  • 接下来,您可以选择是否复制本地引用。基本上,折衷可以归结为——你想从你的参考资料中获得补丁/升级吗?获得新功能可能会带来积极的价值,但另一方面,可能会有突破性的变化。我认为,这里的决定应该根据具体情况作出

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

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

    如果您正在计划一个大型的发布管理系统,那么您可能需要对此投入更多的思考和关注。对我来说(小店——两个人),这很好用。我们知道发生了什么,也不会觉得自己被束缚,不得不以一种毫无意义的方式做事


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

    有时您对程序集生态系统没有选择余地。我同意你的看法,只使用每个程序集的最新版本会很好,但这可能不是一个立即的选择。