如何从已从字节加载的程序集中获取FileVersion?

时间:2011-11-04 22:35:15

标签: c# .net-4.0 assemblies

我有一些存储在数据库的Oracle BLOB字段中的程序集。我正在加载程序集,创建类的实例等都成功。但是,我想访问已加载程序集的AssemblyFileVersion,但似乎无法找到如何执行它。

我尝试过很多东西,包括下面的代码:

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

但是,当从字节加载程序集时,assembly.Location为空,之后没有任何好处。

只是想朝着正确的方向努力。

3 个答案:

答案 0 :(得分: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 :(得分:1)

你可以尝试一下

 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);
    }

答案 2 :(得分:0)

如果需要文件版本,只需获取相同的字节,保存到临时文件并获取文件版本。汇编版本可能相同且更容易获得(参见Jon的回复)。