Как я могу получить FileVersion из сборки, которая была загружена из байтов? - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть некоторые сборки, которые хранятся в поле Oracle BLOB в базе данных. Я успешно загружаю сборки, создаю экземпляры классов и т. Д. Однако я хотел бы получить доступ к AssemblyFileVersion загруженных сборок, но не могу понять, как это сделать.

Я пробовал несколько вещей, включая что-то вроде кода ниже:

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

Однако, когда сборка загружается из байтов, assembly.Location пуст, и после этого ничего хорошего не происходит.

Просто ищу толчок в правильном направлении.

Ответы [ 3 ]

2 голосов
/ 05 ноября 2011

Если атрибут AssemblyFileVersion был применен, вы не можете просто использовать:

var version = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute),
                                            false);
                      .Cast<AssemblyFileVersionAttribute>()
                      .Select(attr => attr.Version)
                      .FirstOrDefault();
if (version != null)
{
    // Got the version number...
}
1 голос
/ 05 ноября 2011

Вы можете попробовать 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 голосов
/ 05 ноября 2011

Просто получите те же байты, сохраните во временный файл и получите версию файла, если вам нужна версия файла. Сборочная версия, скорее всего, такая же, и ее легче получить (см. Ответ Джона).

...