Cú pháp C# để nhận giá trị thuộc tính AssemblyInformationalVersion
của assembly là gì khi chạy? Ví dụ:Nhận giá trị AssemblyInformationalVersion của assembly.
[assembly: AssemblyInformationalVersion("1.2.3.4")]
Cú pháp C# để nhận giá trị thuộc tính AssemblyInformationalVersion
của assembly là gì khi chạy? Ví dụ:Nhận giá trị AssemblyInformationalVersion của assembly.
[assembly: AssemblyInformationalVersion("1.2.3.4")]
using System.Reflection.Assembly
using System.Diagnostics.FileVersionInfo
// ...
public string GetInformationalVersion(Assembly assembly) {
return FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;
}
http://msdn.microsoft.com/en-us/library/system.reflection.assemblyinformationalversionattribute.aspx
Hãy nhìn vào các InformationalVersion tài sản
var attr = Assembly
.GetEntryAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false)
as AssemblyInformationalVersionAttribute[];
Đây là một mảng của AssemblyInformationalVersionAttribute
. Nó không bao giờ rỗng ngay cả khi không có thuộc tính của kiểu tìm kiếm.
var attr2 = Attribute
.GetCustomAttribute(
Assembly.GetEntryAssembly(),
typeof(AssemblyInformationalVersionAttribute))
as AssemblyInformationalVersionAttribute;
Điều này có thể không có giá trị nếu thuộc tính không có mặt.
var attr3 = Attribute
.GetCustomAttributes(
Assembly.GetEntryAssembly(),
typeof(AssemblyInformationalVersionAttribute))
as AssemblyInformationalVersionAttribute[];
Tương tự như trước.
+1; nhưng bạn có thể sử dụng 'GetCustomAttribute' thay vì' GetCustomAttributes' nếu bạn biết rằng sẽ chỉ có một thuộc tính. – vcsjones
@vcsjones Chỉ bằng cách sử dụng phương thức tĩnh của 'Attribute', không sử dụng phương thức instance của' Assembly' – xanatos
Trong một số trường hợp, 'Assembly.GetEntryAssembly()' nên được thay thế bằng 'Assembly.GetExecutingAssembly()' hoặc 'Assembly. GetCallingAssembly() '. Thông thường điều này là cần thiết nếu assembly là một plugin - trong trường hợp này 'GetEntryAssembly()' sẽ trả về assembly ứng dụng host. – larsmoa
AssemblyInformationalVersionAttribute attribute =
(AssemblyInformationalVersionAttribute)Assembly.GetExecutingAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false).FirstOrDefault();
if (attribute != null)
Console.WriteLine(attribute.InformationalVersion);
+1 vì điều này cũng hoạt động với Silverlight hoặc Xbox Lakeview! – ahilsend
Thậm chí nếu câu hỏi là một chút cũ:
Tôi đề nghị một giải pháp khác nhau mà làm việc cho tôi:
Application.ProductVersion
Tôi đã có một thời gian khó tìm kiếm nó trong WPF, nó là lớp ứng dụng Winforms. :-) – Wouter
Để bổ sung cho câu trả lời lance: Bạn có thể sử dụng Application.ResourceAssembly.Location
để tìm ra đường dẫn tập tin của hội đồng của bạn. Với điều này nó có thể để có được những chuỗi AssemblyInformationalVersion chỉ trong một dòng
System.Diagnostics.FileVersionInfo.GetVersionInfo(Application.ResourceAssembly.Location).ProductVersion
Sử dụng một loại gọi trong ứng dụng của bạn, bạn chỉ có thể làm điều này:
using System.Reflection;
public static readonly string ProductVersion = typeof(MyKnownType).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;
Tất nhiên bất kỳ quá trình bạn sử dụng để có được lắp ráp thuộc tính của bạn được áp dụng cho là tốt. Lưu ý rằng điều này không dựa trên System.Diagnostics
hoặc đối tượng Application
của WinForm.
Building tắt của @ câu trả lời Aerthal, nếu bạn muốn có một lót để có được những AssemblyInformationalVersionAttribute từ một MVC Razor View:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
Xem http://stackoverflow.com/a/19008850/116895 – lance
Lưu ý rằng mã này không hoạt động nếu assembly không được tải từ tập tin hoặc UNC. Điều này có thể là trường hợp nếu assembly được nhúng vào một assembly khác (thường là khi các obfuscating assemblies) hoặc vì một số lý do khác đã được nạp bằng cách sử dụng 'Assembly.Load (byte [])' – larsmoa
Cũng không hoạt động nếu bạn đã 'mkbundle ''d ứng dụng của bạn cho Mono – Cocowalla