using System.IO;
using System.Diagnostics;
using System.Text;
-using System.Reflection;
using System.Collections;
using System.Globalization;
using System.Runtime.InteropServices;
using Mono.Security;
using Mono.Security.Cryptography;
+using IKVM.Reflection;
+
namespace Mono.Tools {
public class Driver {
private static bool silent;
static bool in_bootstrap;
+ private static Universe _universe;
public static int Main (string [] args)
{
AssemblyName an = null;
try {
- assembly = Assembly.LoadFrom (name);
+ assembly = ReflectionOnlyLoadFrom (name);
} catch {
WriteLine (string.Format (failure_msg, name) + "The file specified is not a valid assembly.");
return false;
}
}
+ private static Universe GetUniverse () {
+ if (_universe == null) {
+ _universe = new Universe (UniverseOptions.MetadataOnly);
+ }
+ return _universe;
+ }
+
+ private static Assembly ReflectionOnlyLoadFrom (string fileName)
+ {
+ return GetUniverse ().LoadFile (fileName);
+ }
+ private static AssemblyName GetCorlibName ()
+ {
+ return GetUniverse ().Mscorlib.GetName ();
+ }
+
private static bool CheckReferencedAssemblies (AssemblyName an)
{
- AppDomain d = null;
try {
- Assembly a = Assembly.LoadFrom (an.CodeBase);
- AssemblyName corlib = typeof (object).Assembly.GetName ();
+ Assembly a = ReflectionOnlyLoadFrom (an.CodeBase);
+ AssemblyName corlib = GetCorlibName ();
foreach (AssemblyName ref_an in a.GetReferencedAssemblies ()) {
if (ref_an.Name == corlib.Name) // Just do a string compare so we can install on diff versions
} catch (Exception e) {
WriteLine (e.ToString ()); // This should be removed pre beta3
return false;
- } finally {
- if (d != null) {
- try {
- AppDomain.Unload (d);
- } catch { }
- }
}
return true;
static bool LoadConfig (bool quiet)
{
- MethodInfo config = typeof (System.Environment).GetMethod ("GetMachineConfigPath",
- BindingFlags.Static | BindingFlags.NonPublic);
+ System.Reflection.MethodInfo config = typeof (System.Environment).GetMethod ("GetMachineConfigPath",
+ System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
if (config != null) {
string path = (string) config.Invoke (null, null);
// Note: MustVerify is based on the original token (by design). Public key
// remapping won't affect if the assembly is verified or not.
- if (StrongNameManager.MustVerify (an)) {
+ if (StrongNameManager.MustVerify (new System.Reflection.AssemblyName (an.FullName))) {
RSA rsa = CryptoConvert.FromCapiPublicKeyBlob (publicKey, 12);
StrongName sn = new StrongName (rsa);
if (sn.Verify (assemblyFile)) {
public static extern int symlink (string oldpath, string newpath);
private static string GetGacDir () {
- PropertyInfo gac = typeof (System.Environment).GetProperty ("GacPath",
- BindingFlags.Static|BindingFlags.NonPublic);
+ System.Reflection.PropertyInfo gac = typeof (System.Environment).GetProperty ("GacPath",
+ System.Reflection.BindingFlags.Static|System.Reflection.BindingFlags.NonPublic);
if (gac == null) {
WriteLine ("ERROR: Mono runtime not detected, please use " +
"the mono runtime for gacutil.exe");
Environment.Exit (1);
}
- MethodInfo get_gac = gac.GetGetMethod (true);
+ System.Reflection.MethodInfo get_gac = gac.GetGetMethod (true);
return (string) get_gac.Invoke (null, null);
}
private static string GetLibDir () {
- MethodInfo libdir = typeof (System.Environment).GetMethod ("internalGetGacPath",
- BindingFlags.Static|BindingFlags.NonPublic);
+ System.Reflection.MethodInfo libdir = typeof (System.Environment).GetMethod ("internalGetGacPath",
+ System.Reflection.BindingFlags.Static|System.Reflection.BindingFlags.NonPublic);
if (libdir == null) {
WriteLine ("ERROR: Mono runtime not detected, please use " +
"the mono runtime for gacutil.exe");