+2008-02-10 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * class.c: Include Retargetable spec in assembly name.
+ * assembly.c: Always include PublicKeyToken spec in assembly name
+ (with value "null" if assembly is not signed), and include
+ Retargetable spec.
+ * icall-def.h: Added icall for Assembly.get_fullname.
+ * icall.c: Added icall returning the fullname of an assembly.
+
2008-02-09 Zoltan Varga <vargaz@gmail.com>
* class.c (mono_class_setup_vtable_general): Add a missing call to
mono_stringify_assembly_name (MonoAssemblyName *aname)
{
return g_strdup_printf (
- "%s, Version=%d.%d.%d.%d, Culture=%s%s%s",
+ "%s, Version=%d.%d.%d.%d, Culture=%s, PublicKeyToken=%s%s",
aname->name,
aname->major, aname->minor, aname->build, aname->revision,
aname->culture && *aname->culture? aname->culture: "neutral",
- aname->public_key_token [0] ? ", PublicKeyToken=" : "",
- aname->public_key_token [0] ? (char *)aname->public_key_token : "");
+ aname->public_key_token [0] ? (char *)aname->public_key_token : "null",
+ (aname->flags & ASSEMBLYREF_RETARGETABLE_FLAG) ? ", Retargetable=Yes" : "");
}
static gchar*
MonoAssembly *ta = klass->image->assembly;
g_string_append_printf (
- str, ", %s, Version=%d.%d.%d.%d, Culture=%s, PublicKeyToken=%s",
+ str, ", %s, Version=%d.%d.%d.%d, Culture=%s, PublicKeyToken=%s%s",
ta->aname.name,
ta->aname.major, ta->aname.minor, ta->aname.build, ta->aname.revision,
ta->aname.culture && *ta->aname.culture? ta->aname.culture: "neutral",
- ta->aname.public_key_token [0] ? (char *)ta->aname.public_key_token : "null");
+ ta->aname.public_key_token [0] ? (char *)ta->aname.public_key_token : "null",
+ (ta->aname.flags & ASSEMBLYREF_RETARGETABLE_FLAG) ? ", Retargetable=Yes" : "");
}
static inline void
ICALL(ASSEM_20, "get_EntryPoint", ves_icall_System_Reflection_Assembly_get_EntryPoint)
ICALL(ASSEM_21, "get_ReflectionOnly", ves_icall_System_Reflection_Assembly_get_ReflectionOnly)
ICALL(ASSEM_22, "get_code_base", ves_icall_System_Reflection_Assembly_get_code_base)
-ICALL(ASSEM_23, "get_global_assembly_cache", ves_icall_System_Reflection_Assembly_get_global_assembly_cache)
-ICALL(ASSEM_24, "get_location", ves_icall_System_Reflection_Assembly_get_location)
-ICALL(ASSEM_25, "load_with_partial_name", ves_icall_System_Reflection_Assembly_load_with_partial_name)
+ICALL(ASSEM_23, "get_fullname", ves_icall_System_Reflection_Assembly_get_fullName)
+ICALL(ASSEM_24, "get_global_assembly_cache", ves_icall_System_Reflection_Assembly_get_global_assembly_cache)
+ICALL(ASSEM_25, "get_location", ves_icall_System_Reflection_Assembly_get_location)
+ICALL(ASSEM_26, "load_with_partial_name", ves_icall_System_Reflection_Assembly_load_with_partial_name)
ICALL_TYPE(ASSEMN, "System.Reflection.AssemblyName", ASSEMN_1)
ICALL(ASSEMN_1, "ParseName", ves_icall_System_Reflection_AssemblyName_ParseName)
}
}
+static MonoString *
+ves_icall_System_Reflection_Assembly_get_fullName (MonoReflectionAssembly *assembly)
+{
+ MonoDomain *domain = mono_object_domain (assembly);
+ MonoAssembly *mass = assembly->assembly;
+ MonoString *res;
+ gchar *name;
+
+ name = g_strdup_printf (
+ "%s, Version=%d.%d.%d.%d, Culture=%s, PublicKeyToken=%s%s",
+ mass->aname.name,
+ mass->aname.major, mass->aname.minor, mass->aname.build, mass->aname.revision,
+ mass->aname.culture && *mass->aname.culture? mass->aname.culture: "neutral",
+ mass->aname.public_key_token [0] ? (char *)mass->aname.public_key_token : "null",
+ (mass->aname.flags & ASSEMBLYREF_RETARGETABLE_FLAG) ? ", Retargetable=Yes" : "");
+
+ res = mono_string_new (domain, name);
+ g_free (name);
+
+ return res;
+}
+
static void
ves_icall_System_Reflection_Assembly_FillName (MonoReflectionAssembly *assembly, MonoReflectionAssemblyName *aname)
{