|
|
Tuesday, January 01, 2008 #
| Please spread the word if you like this content! |
|
|
|
|
| |
Greetings, Been playing around with Reflection a bit. I wanted to determine if any of an assembly's dependencies have been loaded from the GAC or not. Here's the code snippet for you to play around with: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; using System.Runtime.InteropServices; using System.Runtime.CompilerServices;
#region assembly info // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("TestForm")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Big Uncle Simon Co.")] [assembly: AssemblyProduct("TestForm")] [assembly: AssemblyCopyright("Copyright © Simon \"The Big Goose\" Duvall, Inc 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("dafca86f-596b-44f3-be6d-173464c82a32")]
// Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] #endregion
namespace TestForm { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } public class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { DataTable table = ReflectionClass.Class1.Do();
this.dataGridView1.DataSource = table; foreach (DataGridViewColumn dgvc in this.dataGridView1.Columns) dgvc.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; }
#region Windows Form Designer generated code
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); }
private void InitializeComponent() { this.panel1 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); this.button1 = new System.Windows.Forms.Button(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); this.panel1.SuspendLayout(); this.panel2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); this.SuspendLayout(); // // panel1 // this.panel1.Controls.Add(this.button1); this.panel1.Dock = System.Windows.Forms.DockStyle.Left; this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(200, 492); this.panel1.TabIndex = 0; // // panel2 // this.panel2.Controls.Add(this.dataGridView1); this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; this.panel2.Location = new System.Drawing.Point(200, 0); this.panel2.Name = "panel2"; this.panel2.Size = new System.Drawing.Size(674, 492); this.panel2.TabIndex = 1; // // button1 // this.button1.Location = new System.Drawing.Point(13, 13); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(172, 23); this.button1.TabIndex = 0; this.button1.Text = "Do It"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // dataGridView1 // this.dataGridView1.AllowUserToAddRows = false; this.dataGridView1.AllowUserToDeleteRows = false; this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.Location = new System.Drawing.Point(0, 0); this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.ReadOnly = true; this.dataGridView1.RowHeadersVisible = false; this.dataGridView1.Size = new System.Drawing.Size(674, 492); this.dataGridView1.TabIndex = 0; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(874, 492); this.Controls.Add(this.panel2); this.Controls.Add(this.panel1); this.Name = "Form1"; this.Text = "Form1"; this.panel1.ResumeLayout(false); this.panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); this.ResumeLayout(false);
}
private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Panel panel2; private System.Windows.Forms.DataGridView dataGridView1;
#endregion } } namespace ReflectionClass { static public class Class1 { const string version = "{0}.{1}.{2}.{3}.{4}.{5}"; // got the below from http://www.bytemycode.com/snippets/snippet/242/ // left it is spanish, because so so cooool.... static public DataTable PivotearTabla(DataTable source) { //Crear la tabla DataTable dest = new DataTable();
// Primera columna del pivoteo //dest.Columns.Add("<cambiar>"); dest.Columns.Add(".");
//Agregar las columnas (y sus nombres o cabeceras) a la nueva tabla foreach (DataRow r in source.Rows) { dest.Columns.Add(r[0].ToString()); }
//Agregar las filas vacias, con el nombre en la columna cero (0) for (int i = 1; i < source.Columns.Count; i++) { DataRow fila = dest.NewRow(); fila[0] = source.Columns[i].ColumnName; dest.Rows.Add(fila); }
//agregar data for (int fil = 0; fil < source.Rows.Count; fil++) { for (int col = 1; col < source.Columns.Count; col++) { dest.Rows[col - 1][fil + 1] = source.Rows[fil][col]; } }
dest.AcceptChanges(); return dest; } static private DataTable GetTableSchema() { DataTable table = new DataTable(); table.Columns.Add("Name", typeof(String)); table.Columns.Add("Full Name", typeof(String)); table.Columns.Add("Version", typeof(String)); table.Columns.Add("GAC'd", typeof(Boolean)); table.Columns.Add("Img RT Ver.", typeof(String)); table.Columns.Add("GUID", typeof(String)); return table; } static public DataTable Do() { DataTable table = GetTableSchema(); AssemblyName[] _names = Assembly.GetEntryAssembly().GetReferencedAssemblies(); List<AssemblyName> names = new List<AssemblyName>(_names); names.Add(Assembly.GetEntryAssembly().GetName()); foreach (AssemblyName name in names) { Assembly a = Assembly.Load(name); object[] os = a.GetCustomAttributes(false); foreach (object o in os) { Type t = o.GetType(); FieldInfo[] fis = t.GetFields(); foreach(FieldInfo fi in fis) { string tmp = String.Format("{0}.{1}", t.Name, fi.Name); if (!table.Columns.Contains(tmp)) { table.Columns.Add(tmp, typeof(String)); table.AcceptChanges(); } } PropertyInfo[] pis = t.GetProperties(); foreach (PropertyInfo pi in pis) { string tmp = String.Format("{0}.{1}", t.Name, pi.Name); if (!table.Columns.Contains(tmp)) { table.Columns.Add(tmp, typeof(String)); table.AcceptChanges(); } } }
DataRow newrow = table.NewRow(); newrow["Name"] = name.Name; newrow["Full Name"] = name.FullName; newrow["Version"] = String.Format(version, name.Version.Major, name.Version.MajorRevision, name.Version.Minor, name.Version.MinorRevision, name.Version.Revision, name.Version.Build); newrow["GAC'd"] = a.GlobalAssemblyCache; newrow["Img RT Ver."] = a.ImageRuntimeVersion;
foreach (object o in os) { Type t = o.GetType(); FieldInfo[] fis = t.GetFields(); foreach (FieldInfo fi in fis) { string tmp = String.Format("{0}.{1}", t.Name, fi.Name); newrow[tmp] = fi.GetValue(o).ToString(); } PropertyInfo[] pis = t.GetProperties(); foreach (PropertyInfo pi in pis) { string tmp = String.Format("{0}.{1}", t.Name, pi.Name); newrow[tmp] = pi.GetValue(o, null).ToString(); } } table.Rows.Add(newrow); }
return PivotearTabla(table); } } } I'll be updating with a better formatter for the code here later on. Cheers.
| Please spread the word if you like this content! |
|
|
|
|
| |
( this post has been blanked out, due to stupidity...)
~zagnut
Archives
- September, 2010 (1)
- August, 2010 (3)
- July, 2010 (5)
- May, 2010 (1)
- April, 2010 (1)
- December, 2009 (1)
- November, 2009 (1)
- October, 2009 (2)
- September, 2009 (2)
- August, 2009 (2)
- July, 2009 (1)
- June, 2009 (1)
- May, 2009 (3)
- April, 2009 (4)
- March, 2009 (3)
- February, 2009 (3)
- January, 2009 (3)
- December, 2008 (1)
- November, 2008 (2)
- October, 2008 (4)
- September, 2008 (1)
- August, 2008 (1)
- July, 2008 (3)
- June, 2008 (3)
- May, 2008 (4)
- April, 2008 (1)
- March, 2008 (2)
- February, 2008 (1)
- January, 2008 (3)
- December, 2007 (3)
- September, 2007 (1)
- August, 2007 (1)
- June, 2007 (1)
- May, 2007 (2)
- February, 2007 (1)
- December, 2006 (2)
- November, 2006 (4)
- September, 2006 (1)
- August, 2006 (1)
- May, 2006 (3)
Post Categories
| |
| 30 | 31 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 10 | 11 | 12 | | 13 | 14 | 15 | 16 | 17 | 18 | 19 | | 20 | 21 | 22 | 23 | 24 | 25 | 26 | | 27 | 28 | 29 | 30 | 31 | 1 | 2 | | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|