我有一些存储在数据库的Oracle BLOB字段中的程序集。我正在加载程序集,创建类的实例等都成功。但是,我想访问已加载程序集的AssemblyFileVersion,但似乎无法找到如何执行它。
我尝试过很多东西,包括下面的代码:
var assembly = Assembly.Load(plugInBytes);
var version = FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
但是,当从字节加载程序集时,assembly.Location
为空,之后没有任何好处。
只是想朝着正确的方向努力。
答案 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的回复)。