@ -66,16 +66,24 @@ namespace ICSharpCode.SharpDevelop.Dom
@@ -66,16 +66,24 @@ namespace ICSharpCode.SharpDevelop.Dom
return l ;
}
public static AssemblyName FindBestMatchingAssemblyName ( string name )
/// <summary>
/// Gets the full display name of the GAC assembly of the specified short name
/// </summary>
public static GacAssemblyName FindBestMatchingAssemblyName ( string name )
{
string [ ] info = name . Split ( ',' ) ;
string version = ( info . Length > 1 ) ? info [ 1 ] . Substring ( info [ 1 ] . LastIndexOf ( '=' ) + 1 ) : null ;
string publicKey = ( info . Length > 3 ) ? info [ 3 ] . Substring ( info [ 3 ] . LastIndexOf ( '=' ) + 1 ) : null ;
return FindBestMatchingAssemblyName ( new GacAssemblyName ( name ) ) ;
}
public static GacAssemblyName FindBestMatchingAssemblyName ( GacAssemblyName name )
{
string [ ] info ;
string version = name . Version ;
string publicKey = name . PublicKey ;
IApplicationContext applicationContext = null ;
IAssemblyEnum assemblyEnum = null ;
IAssemblyName assemblyName ;
Fusion . CreateAssemblyNameObject ( out assemblyName , info [ 0 ] , 0 , 0 ) ;
Fusion . CreateAssemblyNameObject ( out assemblyName , name . Name , 0 , 0 ) ;
Fusion . CreateAssemblyEnum ( out assemblyEnum , null , assemblyName , 2 , 0 ) ;
List < string > names = new List < string > ( ) ;
@ -115,7 +123,7 @@ namespace ICSharpCode.SharpDevelop.Dom
@@ -115,7 +123,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
if ( best ! = null )
return new AssemblyName ( best ) ;
return new Gac AssemblyName( best ) ;
}
// use assembly with highest version
best = names [ 0 ] ;
@ -129,7 +137,68 @@ namespace ICSharpCode.SharpDevelop.Dom
@@ -129,7 +137,68 @@ namespace ICSharpCode.SharpDevelop.Dom
best = names [ i ] ;
}
}
return new AssemblyName ( best ) ;
return new GacAssemblyName ( best ) ;
}
}
public class GacAssemblyName : IEquatable < GacAssemblyName >
{
readonly string fullName ;
readonly string [ ] info ;
public GacAssemblyName ( string fullName )
{
if ( fullName = = null )
throw new ArgumentNullException ( "fullName" ) ;
this . fullName = fullName ;
info = fullName . Split ( ',' ) ;
}
public string Name {
get {
return info [ 0 ] ;
}
}
public string Version {
get {
return ( info . Length > 1 ) ? info [ 1 ] . Substring ( info [ 1 ] . LastIndexOf ( '=' ) + 1 ) : null ;
}
}
public string PublicKey {
get {
return ( info . Length > 3 ) ? info [ 3 ] . Substring ( info [ 3 ] . LastIndexOf ( '=' ) + 1 ) : null ;
}
}
public string FullName {
get { return fullName ; }
}
public override string ToString ( )
{
return fullName ;
}
public bool Equals ( GacAssemblyName other )
{
if ( other = = null )
return false ;
else
return fullName = = other . fullName ;
}
public override bool Equals ( object obj )
{
return Equals ( obj as GacAssemblyName ) ;
}
public override int GetHashCode ( )
{
return fullName . GetHashCode ( ) ;
}
}
}