10


3

AssemblyVersionとAssemblyFileVersionを一致させる正当な理由はありますか?

Gendarmeにはhttp://www.mono-project.com/Gendarme.Rules.BadPractice#AvoidAssemblyVersionMismatchRule [AvoidAssemblyVersionMismatchRule]があり、次の説明があります。

_ このルールは、http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx ]がhttp://msdn.microsoft.com/en-usと一致することを確認します/library/system.reflection.assemblyfileversionattribute.aspx [[AssemblyFileVersion]`]が両方ともアセンブリ内に存在する場合。 両方の属性に異なるバージョン番号があると、アプリケーションがデプロイされると混乱する可能性があります。 _

たとえば、このルールは、次の属性を持つMicrosoftの `System.dll`に警告します。

[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("2.0.50727.3053")]
  • Gendarmeのルールには同意しません。*それに従うと、Microsoftで使用されているものと同様のバージョン管理スキームを使用できなくなります。

  • すべてのビルドで `AssemblyFileVersion`を更新し、

  • `AssemblyVersion`を変更するのは、パブリックインターフェイスまたはそれ以外のメジャーのみです 変更、

  • AssemblyVersion`と AssemblyFileVersion`が 共通プレフィックス、

そして、このバージョン管理スキームが、そもそも「AssemblyVersion」と「AssemblyFileVersion」を区別できるようになった設計上の理由だと思います。

両方のアセンブリ属性を強制的に等しくすることをお勧めする理由はわかりませんが、おそらくそうすることができます! あなたの意見に興味があります。

確かに正当な理由がない場合は、Gendarme開発者にルールを

_ このルールは、http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx ]およびhttp://msdn.microsoft.com/en-us/ library / system.reflection.assemblyfileversionattribute.aspx [[AssemblyFileVersion]`] *両方がアセンブリ内に存在する場合、共通の空でないプレフィックス*を持ちます。 _

3 Answer


9


同意して、それらが一致する必要がある場合、最初に2つの異なる属性が必要になることはありません! しかし、ルールが言うように:それは混乱を招く可能性があります。

AssemblyVersionは「アプリケーション全体のバージョン」に似ていますが、FileVersionは個々のファイルのバージョンです。 アプリケーションに何らかの理由で異なる更新サイクルを持つ複数のアセンブリがある場合(たとえば、個別に更新されるがメインアプリケーションの特定のメジャーリリースを必要とするプラグイン)、それぞれに異なるFileVersionを指定し、共通のAssemblyVersionを指定できます。

また、AssemblyVersionを更新するのが非常に不便な場合もあります(たとえば、SharePointワークフローとWebパーツは、指定されたAssemblyVersionを想定しているため、更新するPITAです)。そこで、FileVersionが実際のバージョンとして使用されることがよくあります。


4


同意して、これは愚かなルールです。 強力な名前付きアセンブリをフォローするときに、ドロップインバグ修正アップデートを展開できませんでした。 それ以外の場合、実際に[AssemblyVersion]を変更する必要がある場合、それらを同じにしない理由はほとんどありません。 たぶん、あなたはバグを修正するときにそのツールを使うことになっていないでしょう。 皮肉。


0


NET Frameworkは基本的に同じAssemblyVersionを持つ2つのアセンブリを交換可能と見なすため、多くのシナリオでルールが意味をなすと思います。

したがって、たとえば、ダウンロードキャッシュにある古いバージョンは、AssemblyFileVersionのみが異なる新しいバージョンによって自動的に上書きされません。

これは平均的な開発者にとって混乱を招く可能性があるため、ルールです。

もちろん、自分が何をしているかを理解し、トレードオフを理解している場合は、ルールを無視できます。