using System; using System.Reflection; using System.Globalization; class App { static void Main() { try { object obj = FromAssembly("lib"); InvokeObject(obj); obj = FromFile("lib.dll"); InvokeObject(obj); } catch(Exception e1) { Console.WriteLine(e1.Message); } } static object FromAssembly(string shortName) { Console.WriteLine("Use Assembly.Load"); AssemblyName name = new AssemblyName(); name.Name = shortName; name.Version = new Version("1.0.0.0"); name.CultureInfo = new CultureInfo(""); byte[] pkt = new byte[] {0x3b, 0xf9, 0x41, 0xbb, 0x1f, 0x72, 0x2e, 0xfe}; name.SetPublicKeyToken(pkt); Assembly a = Assembly.Load(name); Type type = a.GetType("LibraryCode"); ConstructorInfo ctor = type.GetConstructor(Type.EmptyTypes); return ctor.Invoke(null); } static object FromFile(string fileName) { System.IO.FileStream fs = System.IO.File.OpenRead(fileName); byte[] data = new byte[fs.Length]; fs.Read(data, 0, data.Length); fs.Close(); Assembly a = Assembly.Load(data); Type type = a.GetType("LibraryCode"); ConstructorInfo ctor = type.GetConstructor(Type.EmptyTypes); return ctor.Invoke(null); } static void InvokeObject(object obj) { Type type = obj.GetType(); MethodInfo mi = type.GetMethod("GetVersion"); string version = (string)mi.Invoke(obj, null); Console.WriteLine(version); } }