.net - 让 AssemblyVersion 和 AssemblyFileVersion 匹配是否有充分的理由?

标签 .net attributes versioning assemblyinfo gendarme

Gendarme有一个 AvoidAssemblyVersionMismatchRule 带有以下描述:

This rule checks that the [AssemblyVersion] matches the [AssemblyFileVersion] when both are present inside an assembly. Having different version numbers in both attributes can be confusing once the application is deployed.



例如,此规则会在 Microsoft 的 System.dll 上发出警告。它具有以下属性:
[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("2.0.50727.3053")]

我不同意宪兵的规定。 遵循它将使您无法使用类似于 Microsoft 使用的版本控制方案,即
  • 更新 AssemblyFileVersion在每个构建中,
  • 更改 AssemblyVersion仅在公共(public)界面或其他重大更改上,
  • 确保 AssemblyVersionAssemblyFileVersion共享一个公共(public)前缀

  • 而且我认为这种版本控制方案是能够区分 AssemblyVersion 的设计原因。和 AssemblyFileVersion首先。

    我想不出为什么强制两个程序集属性相等是一个好习惯的原因,但也许你可以! 我会对你的意见感兴趣。

    如果确实没有充分的理由,我会很快建议宪兵开发人员将规则更改为

    This rule checks that the [AssemblyVersion] and [AssemblyFileVersion] have a common, non-empty prefix when both are present inside an assembly.

    最佳答案

    同意,如果它们应该匹配,那么一开始就不需要两个不同的属性!但正如规则所说:这可能会令人困惑。

    AssemblyVersion 更像是“整个应用程序的版本”,而 FileVersion 是单个文件的版本。如果您的应用程序具有多个具有不同更新周期的程序集,无论出于何种原因(例如,单独更新但需要主应用程序的特定主要版本的插件),那么您可以为每个程序集赋予不同的 FileVersion,但具有共同的 AssemblyVersion。

    此外,有时,更新 AssemblyVersion 确实很不方便(例如,SharePoint 工作流和 Web 部件是要更新的 PITA,因为它们需要指定的 AssemblyVersion),因此 FileVersion 通常用作真实版本。

    关于.net - 让 AssemblyVersion 和 AssemblyFileVersion 匹配是否有充分的理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081658/

    相关文章:

    c# - 2个线程处理异常行为的套接字

    ruby-on-rails - 在模型的属性名称中包含 "ID"

    python - 对 python 类同时使用 __setattr__ 和描述符

    .net - NHibernate,每个演示者的 ISession,多个演示者打开

    c# - 如何从 XmlDocument 对象中获取 XML 元素?

    .net - 用于连接到 SFTP 服务器的开源 .NET 库?

    JavaBeans:属性和特性之间有什么区别?

    version-control - 如何应对软件文档和软件本身的版本控制?

    java - 代码升级之间的 Mongodb 和 java 数据版本控制

    java - 基于Maven的Java应用程序的自动配置,版本控制和部署的可行方法是什么?