示例#1
0
        /// <summary>
        /// Computes the string representing the strong name of the given assembly reference.
        /// </summary>
        public static string StrongName(IAssemblyReference assemblyReference)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(assemblyReference.Name.Value);
            sb.AppendFormat(CultureInfo.InvariantCulture, ", Version={0}.{1}.{2}.{3}", assemblyReference.Version.Major, assemblyReference.Version.Minor, assemblyReference.Version.Build, assemblyReference.Version.Revision);
            if (assemblyReference.Culture.Length > 0)
            {
                sb.AppendFormat(CultureInfo.InvariantCulture, ", Culture={0}", assemblyReference.Culture);
            }
            else
            {
                sb.Append(", Culture=neutral");
            }
            sb.AppendFormat(CultureInfo.InvariantCulture, ", PublicKeyToken=");
            if (IteratorHelper.EnumerableIsNotEmpty(assemblyReference.PublicKeyToken))
            {
                foreach (byte b in assemblyReference.PublicKeyToken)
                {
                    sb.Append(b.ToString("x2"));
                }
            }
            else
            {
                sb.Append("null");
            }
            if (assemblyReference.IsRetargetable)
            {
                sb.Append(", Retargetable=Yes");
            }
            return(sb.ToString());
        }
示例#2
0
        /// <summary>
        /// Computes the string representing the strong name of the given assembly reference.
        /// </summary>
        public static string StrongName(AssemblyIdentity assemblyIdentity)
        {
            Contract.Requires(assemblyIdentity != null);
            Contract.Ensures(Contract.Result <string>() != null);

            StringBuilder sb = new StringBuilder();

            sb.Append(assemblyIdentity.Name.Value);
            sb.AppendFormat(CultureInfo.InvariantCulture, ", Version={0}.{1}.{2}.{3}", assemblyIdentity.Version.Major, assemblyIdentity.Version.Minor, assemblyIdentity.Version.Build, assemblyIdentity.Version.Revision);
            if (assemblyIdentity.Culture.Length > 0)
            {
                sb.AppendFormat(CultureInfo.InvariantCulture, ", Culture={0}", assemblyIdentity.Culture);
            }
            else
            {
                sb.Append(", Culture=neutral");
            }
            sb.AppendFormat(CultureInfo.InvariantCulture, ", PublicKeyToken=");
            if (IteratorHelper.EnumerableIsNotEmpty(assemblyIdentity.PublicKeyToken))
            {
                foreach (byte b in assemblyIdentity.PublicKeyToken)
                {
                    sb.Append(b.ToString("x2", CultureInfo.InvariantCulture));
                }
            }
            else
            {
                sb.Append("null");
            }
            return(sb.ToString());
        }
示例#3
0
        /// <summary>
        /// Appends a formatted string of parameters. Enclosed in square brackets and comma-delimited.
        /// </summary>
        protected virtual void AppendPropertyParameters(IEnumerable <IParameterDefinition> parameters, NameFormattingOptions formattingOptions, StringBuilder sb)
        {
            if ((formattingOptions & NameFormattingOptions.Signature) == 0)
            {
                return;
            }
            bool isNotEmpty = IteratorHelper.EnumerableIsNotEmpty(parameters);

            if (isNotEmpty)
            {
                sb.Append('[');
            }
            bool first = true;

            foreach (IParameterTypeInformation param in parameters)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sb.Append(',');
                }
                this.AppendParameter(param, formattingOptions, sb);
            }
            if (isNotEmpty)
            {
                sb.Append(']');
            }
        }
示例#4
0
文件: UnitHelper.cs 项目: xornand/cci
        /// <summary>
        /// Computes the string representing the strong name of the given assembly reference.
        /// </summary>
        public static string StrongName(IAssemblyReference assemblyReference)
        {
            Contract.Requires(assemblyReference != null);
            Contract.Ensures(Contract.Result <string>() != null);

            StringBuilder sb = StringBuilderCache.Acquire();

            sb.AppendQuoted(assemblyReference.Name.Value);
            sb.AppendFormat(CultureInfo.InvariantCulture, ", Version={0}.{1}.{2}.{3}", assemblyReference.Version.Major, assemblyReference.Version.Minor, assemblyReference.Version.Build, assemblyReference.Version.Revision);
            if (assemblyReference.Culture.Length > 0)
            {
                sb.AppendFormat(CultureInfo.InvariantCulture, ", Culture=");
                sb.AppendQuoted(assemblyReference.Culture);
            }
            else
            {
                sb.Append(", Culture=neutral");
            }
            sb.AppendFormat(CultureInfo.InvariantCulture, ", PublicKeyToken=");
            if (IteratorHelper.EnumerableIsNotEmpty(assemblyReference.PublicKeyToken))
            {
                foreach (byte b in assemblyReference.PublicKeyToken)
                {
                    sb.Append(b.ToString("x2", CultureInfo.InvariantCulture));
                }
            }
            else
            {
                sb.Append("null");
            }
            if (assemblyReference.IsRetargetable)
            {
                sb.Append(", Retargetable=Yes");
            }
            if (assemblyReference.ContainsForeignTypes)
            {
                sb.Append(", ContentType=WindowsRuntime");
            }
            return(StringBuilderCache.GetStringAndRelease(sb));
        }
示例#5
0
        /// <summary>
        /// Returns true if the given object is an identifier that identifies the same object as this identifier.
        /// </summary>
        //^ [Confined]
        public sealed override bool Equals(object /*?*/ obj)
        {
            if (obj == (object)this)
            {
                return(true);
            }
            AssemblyIdentity /*?*/ otherAssembly = obj as AssemblyIdentity;

            if (otherAssembly == null)
            {
                return(false);
            }
            if (this.Name.UniqueKeyIgnoringCase != otherAssembly.Name.UniqueKeyIgnoringCase)
            {
                return(false);
            }
            if (this.Version != otherAssembly.Version)
            {
                return(false);
            }
            if (string.Compare(this.Culture, otherAssembly.Culture, StringComparison.OrdinalIgnoreCase) != 0)
            {
                return(false);
            }
            if (IteratorHelper.EnumerableIsNotEmpty(this.PublicKeyToken))
            {
                return(IteratorHelper.EnumerablesAreEqual(this.PublicKeyToken, otherAssembly.PublicKeyToken));
            }
            else
            {
                if (this.Location.Length == 0 || otherAssembly.Location.Length == 0)
                {
                    return(true);
                }
                return(string.Compare(this.Location, otherAssembly.Location, StringComparison.OrdinalIgnoreCase) == 0);
            }
        }
示例#6
0
        /// <summary>
        /// Returns true if the given object is an identifier that identifies the same object as this identifier.
        /// </summary>
        //^ [Confined]
        public sealed override bool Equals(object /*?*/ obj)
        {
            if (obj == (object)this)
            {
                return(true);
            }
            AssemblyIdentity /*?*/ otherAssembly = obj as AssemblyIdentity;

            if (otherAssembly == null)
            {
                return(false);
            }
            if (this.Name.UniqueKeyIgnoringCase != otherAssembly.Name.UniqueKeyIgnoringCase)
            {
                return(false);
            }
            if (this.Version != otherAssembly.Version)
            {
                return(false);
            }
            if (string.Compare(this.Culture, otherAssembly.Culture, StringComparison.OrdinalIgnoreCase) != 0)
            {
                return(false);
            }
            if (IteratorHelper.EnumerableIsNotEmpty(this.PublicKeyToken))
            {
                return(IteratorHelper.EnumerablesAreEqual(this.PublicKeyToken, otherAssembly.PublicKeyToken));
            }
            else
            {
                // This can be dangerous! Returning true here means that weakly named assemblies are assumed to be the
                // same just because their name is the same. So two assemblies from different locations but the same name
                // should *NOT* be allowed.
                return(true);
            }
        }