2010-01-17 33 views
10

Gendarme具有與以下描述的AvoidAssemblyVersionMismatchRule讓AssemblyVersion和AssemblyFileVersion匹配是否有很好的理由?

此規則檢查該[AssemblyVersion][AssemblyFileVersion]匹配時兩者都存在的組件的內部。一旦部署了應用程序,在兩個屬性中使用不同的版本號都會造成混淆。

例如,該規則將警告微軟System.dll它具有以下屬性:

[assembly: AssemblyVersion("2.0.0.0")] 
[assembly: AssemblyFileVersion("2.0.50727.3053")] 

我不同意憲兵統治。跟隨它,就不可能給你用類似於微軟使用的一個版本方案,即

  • 更新AssemblyFileVersion在每次構建,
  • 只在公共接口或以其他方式發生重大變化的變化AssemblyVersion
  • 確保AssemblyVersionAssemblyFileVersion有着共同的前綴,

,我覺得這個版本方案是設計它之所以成爲可能,以首先區分AssemblyVersionAssemblyFileVersion

我不能拿出一個強制兩個組件屬性相同的理由是一個好習慣,但也許你可以! 我會對你的意見感興趣。

如果確實沒有很好的理由,我很快就會建議憲兵開發商規則更改爲

此規則會檢查[AssemblyVersion][AssemblyFileVersion]有一個共同的,非空前綴時兩者都存在於組件中。

+1

意見==社區維基 – 2010-01-17 16:36:29

回答

9

同意,如果他們應該匹配,那麼就不需要兩個不同的屬性開始!但正如規則所言:這可能會讓人困惑。

AssemblyVersion更像是「整個應用程序的版本」,而FileVersion是單個文件的版本。如果您的應用程序由於某種原因(例如,單獨更新但需要主應用程序的特定主要版本的插件)具有不同更新週期的多個程序集,則可以爲每個不同的FileVersion提供一個通用AssemblyVersion。

此外,有時更新AssemblyVersion會非常不方便(例如,SharePoint工作流和Web部件是需要更新的PITA,因爲它們期望指定的AssemblyVersion),因此常常使用FileVersion作爲實際版本。

+1

我第二個意見 - 文件版本是跨多個版本,但公開發布之間非常有價值。一般來說,你永遠不會在公共版本之間多次改變程序集版本,但是日常的測試部門只是需要一種方法來確定一個特定的DLL來自哪個版本的一個例子......爲了能夠記錄描述在這種情況下發布報告。 由於(理想情況下)所有這些構建(爲發佈而加速)共享相同的程序集版本,因此文件版本是區分它們的正確工具。 – Adam 2011-06-19 22:52:12

4

同意,這是一個愚蠢的規則。當您遵循它時,您無法爲強壯的命名程序集部署一個嵌入式錯誤修復程序更新。除非你真的需要改變[AssemblyVersion],否則沒有什麼理由讓它們不變。也許你在修復錯誤時不應該使用該工具。具有諷刺意味的。

0

我認爲這個規則在很多情況下都是有意義的,因爲.NET框架基本上認爲兩個具有相同AssemblyVersion的程序集是可以互換的。

因此,例如,下載緩存中的舊版本不會被僅在AssemblyFileVersion中有所不同的新版本自動覆蓋。

這可能會讓普通開發人員感到困惑,因此也就是規則。

當然,如果您知道自己在做什麼並瞭解權衡,則可以忽略該規則。

相關問題