Hôm nay tôi nhận được một Phiên bản được chỉ định cho 'phiên bản sản phẩm' không có định dạng cảnh báo 'major.minor.build.revision' bình thường.Tại sao cảnh báo CS1607 "Phiên bản được chỉ định cho 'phiên bản sản phẩm' không có định dạng 'major.minor.build.revision' bình thường" được tạo?
Nó liên quan đến việc sử dụng AssemblyInformationalVersionAttribute
.
thuộc tính lắp ráp của tôi là:
[assembly: AssemblyInformationalVersion("XXX 1.1.0")]
[assembly: System.Runtime.InteropServices.ComVisible(false)]
Về cơ bản trình biên dịch phàn nàn về XXX 1.1.0
rằng không giống như x.y.z.r
. Từ MSDN:
Phiên bản thông tin cung cấp thông tin phiên bản bổ sung cho một hội đồng, theo định dạng chuỗi. Nó chỉ dành cho mục đích thông tin và không được sử dụng trong thời gian chạy. Mặc dù bạn có thể chỉ định bất kỳ văn bản nào, thông báo cảnh báo xuất hiện khi biên dịch nếu chuỗi không ở định dạng được sử dụng bởi số phiên bản lắp ráp hoặc nếu định dạng đó ở định dạng nhưng chứa ký tự đại diện. Cảnh báo này là vô hại.
Vì vậy, họ cho biết cảnh báo là vô hại có thể xảy ra. Vấn đề là, nó phá vỡ xây dựng của tôi. Tôi thậm chí không thể ngăn chặn cảnh báo CS1607 (tôi đã thử rằng ở cấp độ dự án, không có hiệu lực) như được đề xuất trong lỗi sau http://connect.microsoft.com/VisualStudio/feedback/details/275197/assemblyinformationalversion-should-not-generate-cs1607
Thực tế, mọi thứ đều ổn (không cảnh báo) cho đến khi tôi thêm tài nguyên cục bộ vào dự án của mình. Trước đây tôi đã có một tệp MyResources.resx
trong dự án. Tôi đã thêm một tệp địa phương MyResources.fr.resx
và tài nguyên này là nguồn của cảnh báo (hoặc ít nhất: nếu tôi xóa tệp này khỏi dự án, nó sẽ biên dịch mà không cần cảnh báo).
Tôi không thấy bất kỳ mối liên hệ giữa CS1607 (liên quan đến x64 vs x86), AssemblyInformationalVersionAttribute
và một tập tin tài nguyên cục bộ ...
Làm thế nào tôi có thể sửa chữa dự án của tôi để tôi có thể sử dụng XXX 1.1.0
như AssemblyInformationalVersionAttribute
mà không cần bất kỳ (thậm chí vô hại) cảnh báo?
Tôi không phải là OK với việc ngăn chặn cảnh báo CS1607 (có thể hữu ích trong trường hợp tham chiếu sai), nhưng tôi thậm chí không quản lý để ngăn chặn nó.
Lưu ý rằng tôi thấy nó là CS1607 bởi googling, trình biên dịch không bao giờ trả lại mã cảnh báo thực tế.
Cũng lưu ý mục tiêu dự án của tôi .Net 2.0 và chuyển sang .Net 4.0 khắc phục sự cố (nhưng tất nhiên tôi không thể thực hiện việc này).
Mọi lời giải thích đều được hoan nghênh.
PS: CS1607: The version specified for the 'file version' is not in the normal 'major.minor.build.revision' format in .NET là câu hỏi không liên quan (không phải về AssemblyInformationalVersion
)
EDIT: Cảm ơn Hans passant. Từ câu trả lời của bạn, tôi hiểu AssemblyInformationalVersion
được sử dụng để tạo ra hai giá trị ProductVersion
có sẵn trong cấu trúc Win32 VersionInfo
.
- Nếu thuộc tính
AssemblyInformationalVersion
trống, thìAssemblyVersion
được sử dụng thay thế. - Nếu
AssemblyInformationalVersion
làx.y.z
, cả hai giá trịProductVersion
làx.y.z
. - Nếu
AssemblyInformationalVersion
là một chuỗi khác, giá trị số củaProductVersion
không được đặt (0.0.0
) và chỉ giá trị văn bảnProductVersion
được đặt.
Những gì tôi không hiểu, là tại sao cảnh báo CS1607 chỉ được tạo bởi trình biên dịch dưới một số trường hợp cụ thể: trong trường hợp của tôi chỉ khi dự án chứa các file resx cục bộ và nhắm Net 2.0.
Tôi đã sử dụng một chuỗi trong AssemblyInformationalVersion
trong nhiều năm mà không có bất kỳ cảnh báo nào cho đến ngày hôm qua, khi tôi thêm một resx được bản địa hóa vào dự án.
Tôi OK khi không có số ProductVersion
giá trị được đặt (như bạn đã nói, chỉ giá trị văn bản và có thể đọc được là quan trọng với tôi), nhưng có cách nào để ngăn cảnh báo không được nâng lên không?
EDIT 2:
tôi đã tạo ra một mẫu giải pháp rất nhỏ đó chứng tỏ vấn đề: http://sharesend.com/mb371c3l
- Đầu tiên biên soạn: CS1607 dự kiến huy động bởi trình biên dịch.
- Sau đó xóa
Logon.aspx.fr.resx
và xây dựng lại tất cả: không còn cảnh báo trên máy tính của tôi vì lý do không xác định.
Cảm ơn rất nhiều câu trả lời chi tiết. Tôi đã chỉnh sửa câu hỏi gốc để thêm một số thông tin cơ bản về sự hiểu biết của tôi về vấn đề này. Vui lòng xem bản chỉnh sửa. – ken2k
Tôi không nhận được nó, nó phải được rõ ràng bởi bây giờ lý do tại sao bạn * nên * nhận được cảnh báo. Điều không rõ ràng là lý do tại sao bạn * không * nhận được cảnh báo trước đây. Hoặc có thể bạn đã làm và bạn đã làm điều gì đó không thể hiểu được khiến cho việc xây dựng thất bại trong cảnh báo. Điều đó không thực sự quan trọng, làm những gì bạn cần làm để không làm cho việc xây dựng thất bại. Với việc sử dụng số phiên bản thực thay vì "XXX 1.1.0" làm giải pháp hiển nhiên. –
@ HansPassant Vâng, nó hoàn toàn rõ ràng lý do tại sao tôi nên nhận được cảnh báo. Điều không rõ đối với tôi là tại sao cảnh báo đột nhiên xuất hiện _today_, và không phải trong hai năm qua cho cùng một mã (xem câu hỏi của tôi về những thay đổi mà tôi đã thực hiện ngày hôm nay). Rất tiếc, tôi không thể sửa "XXX 1.1.0" thành "1.1.0" vì một số lý do (tôi không thể thay đổi cách ProductVersion văn bản được hiển thị, bởi vì tôi đã gửi rất nhiều phiên bản của mình bằng mẫu này) . Muốn tôi cố gắng đạt được là _hide_ cảnh báo này cho hội đồng này rất cụ thể, vì vậy xây dựng của tôi không thất bại (tôi cấu hình TFS để từ chối xây dựng trong trường hợp cảnh báo). – ken2k