2011-10-28 22 views
6

Tôi muốn hiển thị số phiên bản ứng dụng trong ứng dụng của mình và cách đơn giản nhất để thực hiện việc này là sử dụng số phiên bản cho assembly.Không thể gọi Assembly.GetName() từ ứng dụng Silverlight của tôi

var assembly = System.Reflection.Assembly.GetExecutingAssembly(); 
var name = assembly.GetName(); 
return String.Format("Version {0}.{1}", name.Version.Major, name.Version.Minor); 

tôi có thể nhận được thực hiện lắp ráp mà không vấn đề, nhưng cuộc gọi đến GetName() trả về một MethodAccessException với thông điệp này

Nỗ lực của an ninh phương pháp minh bạch 'MainPage..ctor()' để truy cập bảo mật quan trọng phương thức 'System.Reflection.Assembly.GetName()' không thành công.

Tại sao điều này xảy ra, có bất kỳ điều gì tôi có thể làm được không và nếu không có phương tiện khác để truy xuất phiên bản lắp ráp?

Trả lời

6

Assembly.GetName được đánh dấu bằng thuộc tính SecurityCriticalAttribute thử sử dụng GetCallingAssembly().FullName và loại bỏ thông tin phiên bản ra khỏi nó.

Không sử dụng thành viên này trong đơn đăng ký của bạn. Nếu bạn làm như vậy, mã của bạn sẽ ném một MethodAccessException. Thành viên này rất quan trọng về bảo mật, trong đó hạn chế quyền sử dụng nội bộ của thư viện lớp .NET Framework cho Silverlight . [Bảo mật quan trọng]

từ: http://msdn.microsoft.com/en-us/library/9w2wdeze(VS.95).aspx

8

Tôi nhận này từ Stackoverflow (Getting runtime version of a Silverlight assembly) ... làm việc cho tôi:

public static string GetVersion() 
    { 
     string versionNumber = ParseVersionNumber(Assembly.GetExecutingAssembly()).ToString(); 
     return versionNumber; 
    } 

    private static Version ParseVersionNumber(Assembly assembly) 
    { 
     AssemblyName assemblyName = new AssemblyName(assembly.FullName); 
     return assemblyName.Version; 
    } 
Các vấn đề liên quan