private NameValueCollection AssemblyAttribs(Assembly a)
{
string typeName;
string name;
string value = "";
var nvc = new NameValueCollection();
var r = new Regex(@"(\.Assembly|\.)(?<Name>[^.]*)Attribute$", RegexOptions.IgnoreCase);
foreach (object attrib in a.GetCustomAttributes(false))
{
typeName = attrib.GetType().ToString();
name = r.Match(typeName).Groups["Name"].ToString();
switch (typeName)
{
case "System.CLSCompliantAttribute":
value = ((CLSCompliantAttribute)attrib).IsCompliant.ToString(); break;
case "System.Diagnostics.DebuggableAttribute":
value = ((DebuggableAttribute)attrib).IsJITTrackingEnabled.ToString(); break;
case "System.Reflection.AssemblyCompanyAttribute":
value = ((AssemblyCompanyAttribute)attrib).Company; break;
case "System.Reflection.AssemblyConfigurationAttribute":
value = ((AssemblyConfigurationAttribute)attrib).Configuration; break;
case "System.Reflection.AssemblyCopyrightAttribute":
value = ((AssemblyCopyrightAttribute)attrib).Copyright; break;
case "System.Reflection.AssemblyDefaultAliasAttribute":
value = ((AssemblyDefaultAliasAttribute)attrib).DefaultAlias; break;
case "System.Reflection.AssemblyDelaySignAttribute":
value = ((AssemblyDelaySignAttribute)attrib).DelaySign.ToString(); break;
case "System.Reflection.AssemblyDescriptionAttribute":
value = ((AssemblyDescriptionAttribute)attrib).Description; break;
case "System.Reflection.AssemblyInformationalVersionAttribute":
value = ((AssemblyInformationalVersionAttribute)attrib).InformationalVersion; break;
case "System.Reflection.AssemblyKeyFileAttribute":
value = ((AssemblyKeyFileAttribute)attrib).KeyFile; break;
case "System.Reflection.AssemblyProductAttribute":
value = ((AssemblyProductAttribute)attrib).Product; break;
case "System.Reflection.AssemblyTrademarkAttribute":
value = ((AssemblyTrademarkAttribute)attrib).Trademark; break;
case "System.Reflection.AssemblyTitleAttribute":
value = ((AssemblyTitleAttribute)attrib).Title; break;
case "System.Resources.NeutralResourcesLanguageAttribute":
value = ((NeutralResourcesLanguageAttribute)attrib).CultureName; break;
case "System.Resources.SatelliteContractVersionAttribute":
value = ((SatelliteContractVersionAttribute)attrib).Version; break;
case "System.Runtime.InteropServices.ComCompatibleVersionAttribute":
{
var x = ((ComCompatibleVersionAttribute)attrib);
value = x.MajorVersion + "." + x.MinorVersion + "." + x.RevisionNumber + "." + x.BuildNumber; break;
}
case "System.Runtime.InteropServices.ComVisibleAttribute":
value = ((ComVisibleAttribute)attrib).Value.ToString(); break;
case "System.Runtime.InteropServices.GuidAttribute":
value = ((GuidAttribute)attrib).Value; break;
case "System.Runtime.InteropServices.TypeLibVersionAttribute":
{
var x = ((TypeLibVersionAttribute)attrib);
value = x.MajorVersion + "." + x.MinorVersion; break;
}
case "System.Security.AllowPartiallyTrustedCallersAttribute":
value = "(Present)"; break;
default:
// debug.writeline("** unknown assembly attribute '" + TypeName + "'")
value = typeName; break;
}
if (nvc[name] == null)
{
nvc.Add(name, value);
}
}
try
{
nvc.Add("CodeBase", a.CodeBase.Replace("file:///", ""));
}
catch (NotSupportedException)
{
nvc.Add("CodeBase", "(not supported)");
}
// build date
var dt = AssemblyBuildDate(a, false);
nvc.Add("BuildDate", dt == DateTime.MaxValue ? "(unknown)" :
dt.ToString("yyyy-MM-dd hh:mm tt"));
// location
try
{
nvc.Add("Location", a.Location);
}
catch (NotSupportedException)
{
nvc.Add("Location", "(not supported)");
}
// version
try
{
if (a.GetName().Version.Major == 0 && a.GetName().Version.Minor == 0)
{
nvc.Add("Version", "(unknown)");
}
else
{
nvc.Add("Version", a.GetName().Version.ToString());
}
}
catch (Exception)
{
nvc.Add("Version", "(unknown)");
}
nvc.Add("FullName", a.FullName);
return nvc;
}