2011-11-04 63 views
0

我有一些程序集存儲在數據庫的Oracle BLOB字段中。我正在加載組件,創建類的實例等全部成功。但是,我想訪問加載的程序集的AssemblyFileVersion,但似乎無法找到如何去做。如何從已從字節加載的程序集中獲取FileVersion?

我已經嘗試了一些東西,包括像下面的代碼:

var assembly = Assembly.Load(plugInBytes); 
var version = FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion; 

然而,當組件被裝字節,assembly.Location是空的,並沒有什麼好之後發生的。

只是在正確的方向尋找一個微調。

+0

爲什麼當你知道位置時不從位置加載它? –

+0

@SaeedAmiri,位置在Oracle BLOB字段 –

回答

2

如果AssemblyFileVersion attribute得到了應用,你就不能使用:

var version = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), 
              false); 
         .Cast<AssemblyFileVersionAttribute>() 
         .Select(attr => attr.Version) 
         .FirstOrDefault(); 
if (version != null) 
{ 
    // Got the version number... 
} 
1

你可以嘗試SOMET

public bool GetVersion(string fileName) 
{ 
     Assembly asm = null; 
     try 
     { 
       asm = Assembly.LoadFrom(fileName); 
     } 
     catch (Exception err) 
     { 
       this._errMsg = err.Message; 
       return false; 
     } 
     if (asm != null) 
     { 
       this._info = new AssemblyInformation(); 
       this._info.Name = asm.GetName().Name; 
       this._info.Version = asm.GetName().Version.ToString(); 
       this._info.FullName = asm.GetName().ToString(); 
     } 
     else 
     { 
       this._errMsg = "Invalid assembly"; 
       return false; 
      } 
      return GetReferenceAssembly(asm); 
    } 
    public bool GetVersion(Assembly asm) 
    { 
     if (asm != null) 
     { 
       this._info = new AssemblyInformation(); 
       this._info.Name = asm.GetName().Name; 
      this._info.Version = asm.GetName().Version.ToString(); 
      this._info.FullName = asm.GetName().ToString(); 
     } 
     else 
      { 
      this._errMsg = "Invalid assembly"; 
      return false; 
      } 

      return GetReferenceAssembly(asm); 
    } 
0

就獲得相同的字節,保存到臨時文件並獲得文件版本如果你需要文件版本。大會版本可能是相同的,並且更容易獲得(參見Jon的回覆)。

+0

@AlexeiLevnekov,出於安全原因,我無法將程序集保存到磁盤 –

相關問題