2009-04-15 23 views
33

Sự khác nhau giữa FileVersion và ProductVersion của dll là gì?Sự khác nhau giữa FileVersion và ProductVersion của dll là gì?

Cụ thể trong thời gian chạy, là một được sử dụng để ràng buộc mạnh mẽ và thông tin khác?

Tôi muốn có một bộ bằng tay, và người kia tăng lên tự động (thông qua quá trình xây dựng CI của chúng tôi)

Edit: Richard đã trả lời phần tôi đã bỏ lỡ trong câu hỏi ban đầu. Đây là phiên bản Assembly mà tôi muốn điều khiển bằng tay (tăng dần với các thay đổi giao diện) trong khi đó là phiên bản File mà tôi muốn hệ thống CI của tôi tự động tăng lên với mọi bản dựng. Cảm ơn.

+0

Kiểm tra http://stackoverflow.com/a/802038 để biết một số thông tin xen kẽ về AssemblyVersion, AssemblyFileVersion và AssemblyInformationalVersion (phiên bản lắp ráp, phiên bản tệp và phiên bản sản phẩm). – user276648

Trả lời

16

Không được sử dụng để liên kết chặt chẽ (khía cạnh phiên bản của tên đầy đủ/mạnh đến từ thuộc tính AssemblyVersion).

Cả hai phiên bản tệp (từ thuộc tính AssemblyFileVersion) và phiên bản sản phẩm (từ thuộc tính AssemblyInformationalVersion) đóng góp vào tài nguyên phiên bản (như được thấy trong thuộc tính tệp của trình thám hiểm).

Khác với mục đích hiển thị/chẩn đoán, việc sử dụng thực sự duy nhất là bởi người cài đặt để xác thực tệp cần được thay thế.

Phụ lục: tại sao những điều này sẽ khác? Trả lời: Do yêu cầu phiên bản. Giữ phiên bản hội đồng tương tự có nghĩa là một phiên bản cập nhật (với phiên bản tập tin cao hơn) sẽ ràng buộc mà không thay đổi. Điều này có tác động lớn đến việc tuần tự hóa (ví dụ: quy trình công việc được lưu giữ lâu dài).

Phiên bản tệp và sản phẩm chỉ có thể khác nếu lắp ráp được đề cập không chỉ là một phần của một sản phẩm (ví dụ: thư viện của bên thứ ba có thể sử dụng lại), nếu chỉ được sử dụng trong một ứng dụng duy nhất có ít lý do để không giữ chúng giống nhau.

+1

Vì vậy, trong thực tế, tại sao chúng ta lại muốn ba cái này khác nhau? Imo AssemblyVersion nên cai trị, không? –

+0

@Peter: câu hỏi hay ... mở rộng với một số nhận xét ngắn gọn, nhưng điều đó thực sự cần một câu hỏi của riêng nó. – Richard

23

Tệp được phân phối như một phần của dự án lớn hơn. Tệp có phiên bản xây dựng cá nhân x có thể được phân phối như là một phần của phiên bản dự án y.

Để xây dựng: A.exe với phiên bản sản phẩm 1.1, có tệp B.dll và C.dll. Tất cả bắt đầu với phiên bản sản phẩm và tệp phù hợp. Sau đó, ai đó tìm thấy một lỗi nghiêm trọng trong sản phẩm. Các nhà phát triển nhìn vào nó, và vấn đề một sửa chữa mà chỉ cập nhật B.dll. Bây giờ phiên bản sản phẩm có thể cập nhật là tốt, lên 1.1.1 để giải quyết vấn đề nhỏ. Và phiên bản tập tin của B.dll cũng sẽ là 1.1.1. Nhưng A.exe và C.dll không thay đổi, và vì vậy phiên bản tệp của họ có thể vẫn là 1,1.

+0

Thankyou. Có lẽ đây được coi là kiến ​​thức phổ biến, nhưng nó sẽ là tốt đẹp nếu MS tài liệu đề cập đến điều này. – iforce2d

+2

Vì vậy, nếu chỉ có một tệp thực thi không có các tệp DLL khác, tôi có nên giữ phiên bản tệp và phiên bản sản phẩm giống nhau không và cập nhật chúng từng bước với mỗi bản phát hành mới? –

1

Có một điểm khác biệt giữa hai số này: Trong phiên bản tệp, bạn chỉ được phép sử dụng các số nguyên bằng hoặc lớn hơn 0 trong các phần phiên bản.

Trong phiên bản sản phẩm bạn được phép sử dụng bất kỳ văn bản nào, nó sẽ tạo cảnh báo, nếu nó không giải quyết được số, nhưng cảnh báo đó theo msdn là vô hại.

Bây giờ, tại sao bạn không chỉ sử dụng số trong phiên bản?
Vâng, theo phiên bản ngữ nghĩa (semver.org) phiên bản trông như thế này:.. [chính] [Tiểu] [patch] và trong bản vá bạn được phép sử dụng:

  • trước khi phát hành siêu dữ liệu sau dấu gạch ngang, ví dụ: 1.2.1-beta
  • tạo siêu dữ liệu, sau dấu cộng, ví dụ: băm ngắn từ git 1.2.1 + f0f0f0f
Các vấn đề liên quan