コード例 #1
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="assembly">Assembly</param>
		public AssemblyRefUser(IAssembly assembly) {
			if (assembly == null)
				throw new ArgumentNullException("asmName");

			this.version = assembly.Version ?? new Version(0, 0, 0, 0);
			this.publicKeyOrToken = assembly.PublicKeyOrToken;
			this.name = UTF8String.IsNullOrEmpty(assembly.Name) ? UTF8String.Empty : assembly.Name;
			this.locale = assembly.Culture;
			this.flags = publicKeyOrToken is PublicKey ? AssemblyAttributes.PublicKey : AssemblyAttributes.None;
		}
コード例 #2
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="name">Simple name</param>
		/// <param name="version">Version</param>
		/// <param name="publicKey">Public key or public key token</param>
		/// <exception cref="ArgumentNullException">If any of the args is invalid</exception>
		public AssemblyRefUser(UTF8String name, Version version, PublicKeyBase publicKey)
			: this(name, version, publicKey, UTF8String.Empty) {
		}
コード例 #3
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="name">Simple name</param>
		/// <param name="version">Version</param>
		/// <param name="publicKey">Public key or public key token</param>
		/// <param name="locale">Locale</param>
		/// <exception cref="ArgumentNullException">If any of the args is invalid</exception>
		public AssemblyRefUser(UTF8String name, Version version, PublicKeyBase publicKey, UTF8String locale) {
			if ((object)name == null)
				throw new ArgumentNullException("name");
			if (version == null)
				throw new ArgumentNullException("version");
			if ((object)locale == null)
				throw new ArgumentNullException("locale");
			this.name = name;
			this.version = version;
			this.publicKeyOrToken = publicKey;
			this.locale = locale;
			this.flags = publicKey is PublicKey ? AssemblyAttributes.PublicKey : AssemblyAttributes.None;
		}
コード例 #4
0
ファイル: AssemblyNameInfo.cs プロジェクト: EmilZhou/dnlib
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="asm">The assembly</param>
		public AssemblyNameInfo(IAssembly asm) {
			if (asm == null)
				return;
			var asmDef = asm as AssemblyDef;
			this.hashAlgId = asmDef == null ? 0 : asmDef.HashAlgorithm;
			this.version = asm.Version ?? new Version(0, 0, 0, 0);
			this.flags = asm.Attributes;
			this.publicKeyOrToken = asm.PublicKeyOrToken;
			this.name = UTF8String.IsNullOrEmpty(asm.Name) ? UTF8String.Empty : asm.Name;
			this.culture = UTF8String.IsNullOrEmpty(asm.Culture) ? UTF8String.Empty : asm.Culture;
		}
コード例 #5
0
ファイル: AssemblyNameInfo.cs プロジェクト: EmilZhou/dnlib
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="asmName">Assembly name info</param>
		public AssemblyNameInfo(AssemblyName asmName) {
			if (asmName == null)
				return;
			this.hashAlgId = (AssemblyHashAlgorithm)asmName.HashAlgorithm;
			this.version = asmName.Version ?? new Version(0, 0, 0, 0);
			this.flags = (AssemblyAttributes)asmName.Flags;
			this.publicKeyOrToken = (PublicKeyBase)PublicKeyBase.CreatePublicKey(asmName.GetPublicKey()) ??
							PublicKeyBase.CreatePublicKeyToken(asmName.GetPublicKeyToken());
			this.name = asmName.Name ?? string.Empty;
			this.culture = asmName.CultureInfo != null && asmName.CultureInfo.Name != null ? asmName.CultureInfo.Name : string.Empty;
		}
コード例 #6
0
ファイル: AssemblyCommands.cs プロジェクト: manojdjoshi/dnSpy
			public AssemblyRefInfo(AssemblyRef asmRef) {
				AssemblyRef = asmRef;
				OrigName = asmRef.Name;
				OrigPublicKeyOrToken = asmRef.PublicKeyOrToken;
			}
コード例 #7
0
ファイル: AssemblyCommands.cs プロジェクト: arkanoid1/dnSpy
			public AssemblyRefInfo(AssemblyRef asmRef) {
				this.AssemblyRef = asmRef;
				this.OrigName = asmRef.Name;
				this.OrigPublicKeyOrToken = asmRef.PublicKeyOrToken;
			}
コード例 #8
0
        /// <summary>
        /// Figures out which of two assembly names is closer to another assembly name
        /// </summary>
        /// <param name="requested">Requested assembly name</param>
        /// <param name="a">First</param>
        /// <param name="b">Second</param>
        /// <returns>-1 if both are equally close, 0 if <paramref name="a"/> is closest, 1 if
        /// <paramref name="b"/> is closest</returns>
        public int CompareClosest(IAssembly requested, IAssembly a, IAssembly b)
        {
            if (a == b)
            {
                return(0);
            }
            if (a == null)
            {
                return(!CompareName ? 1 : UTF8String.CaseInsensitiveEquals(requested.Name, b.Name) ? 1 : 0);
            }
            if (b == null)
            {
                return(!CompareName ? 0 : UTF8String.CaseInsensitiveEquals(requested.Name, a.Name) ? 0 : 1);
            }

            // Compare the most important parts first:
            //	1. Assembly simple name
            //	2. Public key token
            //	3. Version
            //	4. Locale
            //	5. Content type

            if (CompareName)
            {
                // If the name only matches one of a or b, return that one.
                bool na = UTF8String.CaseInsensitiveEquals(requested.Name, a.Name);
                bool nb = UTF8String.CaseInsensitiveEquals(requested.Name, b.Name);
                if (na && !nb)
                {
                    return(0);
                }
                if (!na && nb)
                {
                    return(1);
                }
                if (!na && !nb)
                {
                    return(-1);
                }
            }

            if (ComparePublicKeyToken)
            {
                bool pa, pb;
                if (PublicKeyBase.IsNullOrEmpty2(requested.PublicKeyOrToken))
                {
                    // If one of them has a pkt but the other one hasn't, return the one with
                    // no pkt.
                    pa = PublicKeyBase.IsNullOrEmpty2(a.PublicKeyOrToken);
                    pb = PublicKeyBase.IsNullOrEmpty2(b.PublicKeyOrToken);
                }
                else
                {
                    // If one of them has the correct pkt, but the other one has an incorrect
                    // pkt, return the one with the correct pkt.
                    pa = PublicKeyBase.TokenEquals(requested.PublicKeyOrToken, a.PublicKeyOrToken);
                    pb = PublicKeyBase.TokenEquals(requested.PublicKeyOrToken, b.PublicKeyOrToken);
                }
                if (pa && !pb)
                {
                    return(0);
                }
                if (!pa && pb)
                {
                    return(1);
                }
            }

            if (CompareVersion && !Utils.Equals(a.Version, b.Version))
            {
                var rv = Utils.CreateVersionWithNoUndefinedValues(requested.Version);
                if (rv == new Version(0, 0, 0, 0))
                {
                    rv = new Version(ushort.MaxValue, ushort.MaxValue, ushort.MaxValue, ushort.MaxValue);
                }
                int va = Utils.CompareTo(a.Version, rv);
                int vb = Utils.CompareTo(b.Version, rv);
                if (va == 0)
                {
                    return(0);   // vb != 0 so return 0
                }
                if (vb == 0)
                {
                    return(1);   // va != 0 so return 1
                }
                if (va > 0 && vb < 0)
                {
                    return(0);
                }
                if (va < 0 && vb > 0)
                {
                    return(1);
                }
                // Now either both a and b's version > req version or both are < req version
                if (va > 0)
                {
                    // a.Version and b.Version > req.Version. Pick the one that is closest.
                    return(Utils.CompareTo(a.Version, b.Version) < 0 ? 0 : 1);
                }
                else
                {
                    // a.Version and b.Version < req.Version. Pick the one that is closest.
                    return(Utils.CompareTo(a.Version, b.Version) > 0 ? 0 : 1);
                }
            }

            if (CompareCulture)
            {
                bool la = Utils.LocaleEquals(requested.Culture, a.Culture);
                bool lb = Utils.LocaleEquals(requested.Culture, b.Culture);
                if (la && !lb)
                {
                    return(0);
                }
                if (!la && lb)
                {
                    return(1);
                }
            }

            if (CompareContentType)
            {
                bool ca = requested.ContentType == a.ContentType;
                bool cb = requested.ContentType == b.ContentType;
                if (ca && !cb)
                {
                    return(0);
                }
                if (!ca && cb)
                {
                    return(1);
                }
            }

            return(-1);
        }
コード例 #9
0
        AssemblyRef ReadAssemblyRef()
        {
            var asmRef = new AssemblyRefUser();

            if (ownerModule != null)
            {
                ownerModule.UpdateRowId(asmRef);
            }

            asmRef.Name = ReadAssemblyNameId();
            SkipWhite();
            if (PeekChar() != ',')
            {
                return(asmRef);
            }
            ReadChar();

            while (true)
            {
                SkipWhite();
                int c = PeekChar();
                if (c == -1 || c == ']')
                {
                    break;
                }
                if (c == ',')
                {
                    ReadChar();
                    continue;
                }

                string key = ReadId();
                SkipWhite();
                if (PeekChar() != '=')
                {
                    continue;
                }
                ReadChar();
                string value = ReadId();

                switch (key.ToUpperInvariant())
                {
                case "VERSION":
                    asmRef.Version = Utils.ParseVersion(value);
                    break;

                case "CONTENTTYPE":
                    if (value.Equals("WindowsRuntime", StringComparison.OrdinalIgnoreCase))
                    {
                        asmRef.ContentType = AssemblyAttributes.ContentType_WindowsRuntime;
                    }
                    else
                    {
                        asmRef.ContentType = AssemblyAttributes.ContentType_Default;
                    }
                    break;

                case "RETARGETABLE":
                    if (value.Equals("Yes", StringComparison.OrdinalIgnoreCase))
                    {
                        asmRef.IsRetargetable = true;
                    }
                    else
                    {
                        asmRef.IsRetargetable = false;
                    }
                    break;

                case "PUBLICKEY":
                    if (value.Equals("null", StringComparison.OrdinalIgnoreCase) ||
                        value.Equals("neutral", StringComparison.OrdinalIgnoreCase))
                    {
                        asmRef.PublicKeyOrToken = new PublicKey();
                    }
                    else
                    {
                        asmRef.PublicKeyOrToken = PublicKeyBase.CreatePublicKey(Utils.ParseBytes(value));
                    }
                    break;

                case "PUBLICKEYTOKEN":
                    if (value.Equals("null", StringComparison.OrdinalIgnoreCase) ||
                        value.Equals("neutral", StringComparison.OrdinalIgnoreCase))
                    {
                        asmRef.PublicKeyOrToken = new PublicKeyToken();
                    }
                    else
                    {
                        asmRef.PublicKeyOrToken = PublicKeyBase.CreatePublicKeyToken(Utils.ParseBytes(value));
                    }
                    break;

                case "CULTURE":
                case "LANGUAGE":
                    if (value.Equals("neutral", StringComparison.OrdinalIgnoreCase))
                    {
                        asmRef.Culture = UTF8String.Empty;
                    }
                    else
                    {
                        asmRef.Culture = value;
                    }
                    break;
                }
            }

            return(asmRef);
        }
コード例 #10
0
ファイル: ModuleLoader.cs プロジェクト: CCob/dnMerge
 void Add(PublicKeyBase a)
 {
 }
コード例 #11
0
 string GetFullName(PublicKeyBase pkBase)
 {
     return(Utils.GetAssemblyNameString(name, version, culture, pkBase, Attributes));
 }
コード例 #12
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="name">Simple name</param>
 /// <param name="version">Version</param>
 /// <param name="publicKey">Public key or public key token</param>
 /// <exception cref="ArgumentNullException">If any of the args is invalid</exception>
 public AssemblyRefUser(UTF8String name, Version version, PublicKeyBase publicKey)
     : this(name, version, publicKey, UTF8String.Empty)
 {
 }