2010-01-17 8 views
10

GendarmeAvoidAssemblyVersionMismatchRule với mô tả sau đây:Có lý do chính đáng nào để cho phép AssemblyVersion và AssemblyFileVersion khớp nhau không?

Quy tắc này sẽ kiểm tra rằng [AssemblyVersion] phù hợp với [AssemblyFileVersion] khi xuất hiện cả hai bên trong một assembly. Việc có các số phiên bản khác nhau trong cả hai thuộc tính có thể gây nhầm lẫn khi ứng dụng được triển khai.

Ví dụ, quy tắc này sẽ cảnh báo trên của Microsoft System.dll trong đó có các thuộc tính sau:

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

Tôi không đồng ý với quy tắc Gendarme của. Tiếp theo nó sẽ làm cho nó không thể cho bạn sử dụng một chương trình phiên bản tương tự như được sử dụng bởi Microsoft, đó là

  • cập nhật AssemblyFileVersion trên mỗi build,
  • thay đổi AssemblyVersion chỉ trên giao diện công cộng hoặc những thay đổi khác lớn,
  • chắc chắn rằng AssemblyVersionAssemblyFileVersion chia sẻ một tiền tố chung,

và tôi nghĩ rằng chương trình phiên bản này là lý do tại sao nó thiết kế đã có thể thực hiện để phân biệt giữa AssemblyVersionAssemblyFileVersion ngay từ đầu.

Tôi không thể đưa ra lý do tại sao buộc cả hai thuộc tính lắp ráp phải bằng nhau là một thực hành tốt, nhưng có thể bạn có thể! Tôi sẽ quan tâm đến ý kiến ​​của bạn.

Nếu thực sự không có lý do chính đáng, tôi sẽ sớm đề nghị các nhà phát triển Gendarme để thay đổi quy tắc để

Quy tắc này sẽ kiểm tra rằng [AssemblyVersion][AssemblyFileVersion]có một tiền tố chung, không có sản phẩm nào khi cả hai đều có mặt trong một hội đồng.

+1

ý kiến ​​== cộng đồng wiki –

Trả lời

9

Đồng ý, nếu chúng khớp nhau thì sẽ không cần phải có hai thuộc tính khác nhau để bắt đầu! Nhưng như quy tắc nói: Nó có thể gây nhầm lẫn.

AssemblyVersion giống như "Phiên bản của toàn bộ ứng dụng của bạn" trong khi FileVersion là phiên bản của một tệp riêng lẻ. Nếu ứng dụng của bạn có nhiều assembly có Update Cycles khác nhau vì bất kỳ lý do gì (ví dụ, Plugins được cập nhật riêng nhưng yêu cầu một bản phát hành chính cụ thể của ứng dụng chính), thì bạn có thể cung cấp cho mỗi FileVersion khác nhau nhưng có một AssemblyVersion phổ biến. Ngoài ra, đôi khi, nó thực sự bất tiện để cập nhật AssemblyVersion (ví dụ, SharePoint Workflow và Web Parts là PITA để cập nhật vì chúng mong đợi một AssemblyVersion), vì vậy FileVersion thường được sử dụng như phiên bản thực.

+1

Tôi thứ hai ý kiến ​​này - Phiên bản tệp có giá trị cao trên nhiều bản dựng, nhưng giữa các bản phát hành công khai. Nói chung bạn sẽ không bao giờ thay đổi phiên bản lắp ráp nhiều hơn một lần giữa các phiên bản công khai, nhưng từ ngày này qua ngày khác, bộ phận kiểm thử của bạn chỉ là một ví dụ cần xác định xem xây dựng một DLL cụ thể đến từ ... phát hành báo cáo trong trường hợp này. Bởi vì (lý tưởng) tất cả các bản dựng (sắp xếp cho bản phát hành) có cùng phiên bản lắp ráp, thì phiên bản tệp là công cụ thích hợp để phân biệt chúng. – Adam

4

Đồng ý, đây là quy tắc ngớ ngẩn. Bạn không thể triển khai bản cập nhật sửa lỗi thả xuống cho một hội đồng được đặt tên mạnh khi bạn theo dõi nó. Có một vài lý do khác không làm cho chúng giống nhau nếu bạn thực sự phải thay đổi [AssemblyVersion]. Có thể bạn không được phép sử dụng công cụ đó khi sửa lỗi. Trớ trêu thay.

0

Tôi nghĩ quy tắc có ý nghĩa trong nhiều trường hợp, vì .NET Framework về cơ bản xem xét hai hội đồng có cùng AssemblyVersion có thể hoán đổi cho nhau.

Vì vậy, ví dụ: phiên bản cũ trong Bộ nhớ cache tải xuống sẽ không tự động bị ghi đè bởi phiên bản mới chỉ khác nhau trong AssemblyFileVersion.

Điều này có thể gây nhầm lẫn cho nhà phát triển trung bình, do đó là quy tắc.

Tất nhiên, nếu bạn biết mình đang làm gì và hiểu được sự cân bằng, bạn có thể bỏ qua quy tắc.