mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.3 KiB
93 lines
2.3 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
|
|
namespace ICSharpCode.SharpDevelop.Dom |
|
{ |
|
/// <summary> |
|
/// Similar to System.Reflection.AssemblyName, but does not raise an exception |
|
/// on invalid assembly names. (See SD2-1307) |
|
/// </summary> |
|
public sealed class DomAssemblyName : IEquatable<DomAssemblyName> |
|
{ |
|
readonly string fullAssemblyName; |
|
readonly string shortName, culture, publicKeyToken; |
|
readonly Version version; |
|
|
|
public DomAssemblyName(string fullAssemblyName) |
|
{ |
|
this.fullAssemblyName = fullAssemblyName; |
|
string[] components = fullAssemblyName.Split(','); |
|
shortName = components[0]; |
|
for (int i = 1; i < components.Length; i++) { |
|
string val = components[i].Trim(); |
|
int pos = val.IndexOf('='); |
|
if (pos > 0) { |
|
switch (val.Substring(0, pos)) { |
|
case "Version": |
|
string versionText = val.Substring(pos + 1); |
|
Version.TryParse(versionText, out version); |
|
break; |
|
case "Culture": |
|
culture = val.Substring(pos + 1); |
|
break; |
|
case "PublicKeyToken": |
|
publicKeyToken = val.Substring(pos + 1); |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
|
|
public string FullName { |
|
get { return fullAssemblyName; } |
|
} |
|
|
|
public string ShortName { |
|
get { return shortName; } |
|
} |
|
|
|
public Version Version { |
|
get { return version; } |
|
} |
|
|
|
public string Culture { |
|
get { return culture; } |
|
} |
|
|
|
public string PublicKeyToken { |
|
get { return publicKeyToken; } |
|
} |
|
|
|
public override string ToString() |
|
{ |
|
return fullAssemblyName; |
|
} |
|
|
|
public override int GetHashCode() |
|
{ |
|
return fullAssemblyName.GetHashCode(); |
|
} |
|
|
|
public override bool Equals(object obj) |
|
{ |
|
return Equals(obj as DomAssemblyName); |
|
} |
|
|
|
public bool Equals(DomAssemblyName other) |
|
{ |
|
return other != null && fullAssemblyName == other.fullAssemblyName; |
|
} |
|
|
|
internal static DomAssemblyName[] Convert(System.Reflection.AssemblyName[] names) |
|
{ |
|
if (names == null) return null; |
|
DomAssemblyName[] n = new DomAssemblyName[names.Length]; |
|
for (int i = 0; i < names.Length; i++) { |
|
n[i] = new DomAssemblyName(names[i].FullName); |
|
} |
|
return n; |
|
} |
|
} |
|
}
|
|
|