2014-04-08 12 views
11

Tôi có một kiến ​​trúc trình cắm thêm trong đó một lớp cơ sở trừu tượng được định nghĩa trong ứng dụng chính. Nó sử dụng sự phản chiếu để tải các assembly có các triển khai có nguồn gốc của lớp cơ sở. Tôi muốn nhận được thông tin phiên bản của hội đồng có chứa các đối tượng có nguồn gốc. Đây là lớp cơ sở của tôi:GetExecutingAssembly() cho lớp dẫn xuất trong các assembly khác nhau

namespace My.AppNameSpace 
{ 
    public abstract class BaseClass 
    { 
     public Version Version 
     { 
      get 
      { 
       Assembly assembly = Assembly.GetExecutingAssembly(); 
       FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); 
       string version = fvi.FileVersion; 
       return new Version(version); 
      } 
     } 

     public abstract void DoStuff(); 
    } 
} 

Kể từ khi lớp cơ sở là một phần của lắp ráp ứng dụng chính, điều này luôn trả về thông tin phiên bản của ứng dụng thực hiện, không phải là .dll chứa thi hành lớp dẫn xuất. Tôi có thể thay đổi các phiên bản accessor là abstract, và nó hoạt động như tôi muốn. Nhưng sau đó tôi cần phải thêm cùng một số dòng mã cho mỗi plug-in thực hiện.

Có một số mẹo để nhận thông tin phiên bản của đối tượng dẫn xuất từ ​​mã trong lớp cơ sở tồn tại trong một hội đồng riêng biệt không?

Trả lời

22

Sử dụng this.GetType().Assembly để thay thế.

+0

tôi biết phải có điều gì đó đơn giản. cảm ơn! – djs

+0

** facepalm ** Tôi cần nghỉ ngơi. –

7

Nếu, từ lớp trừu tượng của bạn, bạn gọi this.GetType(), bạn sẽ nhận được loại thời gian chạy của lớp thực tế. Từ đó, bạn có thể nhận được thuộc tính Assembly thuộc loại đó.

public Version Version 
    { 
     get 
     { 
      Assembly assembly = this.GetType().Assembly; 
      FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); 
      string version = fvi.FileVersion; 
      return new Version(version); 
     } 
    } 
Các vấn đề liên quan