static bool ReSign (string assemblyName, RSA key, bool quiet)
{
// this doesn't load the assembly (well it unloads it ;)
// http://weblogs.asp.net/nunitaddin/posts/9991.aspx
AssemblyName an = null;
try {
an = AssemblyName.GetAssemblyName (assemblyName);
}
catch {
}
if (an == null) {
Console.WriteLine ("Unable to load assembly: {0}", assemblyName);
return false;
}
StrongName sign = new StrongName (key);
byte[] token = an.GetPublicKeyToken ();
// first, try to compare using a mapped public key (e.g. ECMA)
bool same = Compare (sign.PublicKey, StrongNameManager.GetMappedPublicKey (token));
if (!same) {
// second, try to compare using the assembly public key
same = Compare (sign.PublicKey, an.GetPublicKey ());
if (!same) {
// third (and last) chance, try to compare public key token
same = Compare (sign.PublicKeyToken, token);
}
}
if (same) {
bool signed = sign.Sign (assemblyName);
if (!quiet || !signed) {
Console.WriteLine (signed ? "Assembly {0} signed." : "Couldn't sign the assembly {0}.",
assemblyName);
}
return signed;
}
Console.WriteLine ("Couldn't sign the assembly {0} with this key pair. Public key of assembly did not match signing public key.", assemblyName);
return false;
}