X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FMicrosoft.Build.Tasks%2FMicrosoft.Build.Tasks%2FAssemblyResolver.cs;h=8b51d76480ddded85b94a5db8b40aab05894f86d;hb=8d44cb69b32bd1776546b6a70b848651f37e6fe9;hp=8c21891659c4da7501ca4bccfd032dcd282257e3;hpb=731db97325c15356c2c888d47207e73bc36c05f1;p=mono.git diff --git a/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs b/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs index 8c21891659c..8b51d76480d 100644 --- a/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs +++ b/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs @@ -121,7 +121,10 @@ namespace Microsoft.Build.Tasks { if (!Directory.Exists (framework_dir)) return null; - AssemblyName key_aname = new AssemblyName (reference.ItemSpec); + AssemblyName key_aname; + if (!TryGetAssemblyNameFromFullName (reference.ItemSpec, out key_aname)) + return null; + TargetFrameworkAssemblies gac_asm; if (!target_framework_cache.TryGetValue (framework_dir, out gac_asm)) { // fill gac_asm @@ -160,7 +163,9 @@ namespace Microsoft.Build.Tasks { // Try as a filename string path = Path.GetFullPath (Path.Combine (directory, filename)); - AssemblyName aname = specific_version ? new AssemblyName (reference.ItemSpec) : null; + AssemblyName aname = null; + if (specific_version && !TryGetAssemblyNameFromFullName (reference.ItemSpec, out aname)) + return null; ResolvedReference resolved_ref = ResolveReferenceForPath (path, reference, aname, null, SearchPath.Directory, specific_version); if (resolved_ref != null) @@ -215,7 +220,10 @@ namespace Microsoft.Build.Tasks { public ResolvedReference ResolveGacReference (ITaskItem reference, bool specific_version) { - AssemblyName name = new AssemblyName (reference.ItemSpec); + AssemblyName name; + if (!TryGetAssemblyNameFromFullName (reference.ItemSpec, out name)) + return null; + if (!gac.ContainsKey (name.Name)) { LogSearchMessage ("Considered {0}, but could not find in the GAC.", reference.ItemSpec); @@ -264,7 +272,11 @@ namespace Microsoft.Build.Tasks { return null; } - ResolvedReference rr = GetResolvedReference (reference, pkg.File, new AssemblyName (pkg.FullName), + AssemblyName aname; + if (!TryGetAssemblyNameFromFullName (pkg.FullName, out aname)) + return null; + + ResolvedReference rr = GetResolvedReference (reference, pkg.File, aname, false, SearchPath.PkgConfig); rr.FoundInSearchPathAsString = String.Format ("{{PkgConfig}} provided by package named {0}", pkg.ParentPackage.Name); @@ -291,7 +303,11 @@ namespace Microsoft.Build.Tasks { return null; } - return ResolveReferenceForPath (hintpath, reference, new AssemblyName (reference.ItemSpec), + AssemblyName aname; + if (!TryGetAssemblyNameFromFullName (reference.ItemSpec, out aname)) + return null; + + return ResolveReferenceForPath (hintpath, reference, aname, String.Format ("File at HintPath {0}, is either an invalid assembly or the file does not exist.", hintpath), SearchPath.HintPath, specific_version); } @@ -313,6 +329,18 @@ namespace Microsoft.Build.Tasks { return aname; } + bool TryGetAssemblyNameFromFullName (string full_name, out AssemblyName aname) + { + aname = null; + try { + aname = new AssemblyName (full_name); + } catch (FileLoadException) { + LogSearchMessage ("Considered '{0}' as an assembly name, but it is invalid.", full_name); + } + + return aname != null; + } + internal static bool AssemblyNamesCompatible (AssemblyName a, AssemblyName b, bool specificVersion) { return AssemblyNamesCompatible (a, b, specificVersion, true);