Ejemplo n.º 1
0
        private void AddIdentity(string name, string version, string hintPath)
        {
            if (name.Length == 0)
            {
                throw new AddInLoadException("Identity needs a name");
            }
            foreach (char c in name)
            {
                if (!char.IsLetterOrDigit(c) && c != '.' && c != '_')
                {
                    throw new AddInLoadException("Identity name contains invalid character: '" + c + "'");
                }
            }
            Version v = AddInReference.ParseVersion(version, hintPath);

            if (primaryVersion == null)
            {
                primaryVersion = v;
            }
            if (primaryIdentity == null)
            {
                primaryIdentity = name;
            }
            identities.Add(name, v);
        }
Ejemplo n.º 2
0
        public static AddInReference Create(Properties properties, string hintPath)
        {
            var    reference = new AddInReference(properties["addin"]);
            string version   = properties["version"];

            if (version != null && version.Length > 0)
            {
                int pos = version.IndexOf('-');
                if (pos > 0)
                {
                    reference.minimumVersion = ParseVersion(version.Substring(0, pos), hintPath);
                    reference.maximumVersion = ParseVersion(version.Substring(pos + 1), hintPath);
                }
                else
                {
                    reference.maximumVersion = reference.minimumVersion = ParseVersion(version, hintPath);
                }

                if (reference.Name == "SharpDevelop")
                {
                    // HACK: SD 4.1/4.2/4.3 AddIns work with SharpDevelop 4.4
                    // Because some 4.1 AddIns restrict themselves to SD 4.1, we extend the
                    // supported SD range.
                    if (reference.maximumVersion == new Version("4.1") || reference.maximumVersion == new Version("4.2") || reference.maximumVersion == new Version("4.3"))
                    {
                        reference.maximumVersion = new Version("4.4");
                    }
                }
            }
            reference.requirePreload = string.Equals(properties["requirePreload"], "true", StringComparison.OrdinalIgnoreCase);
            return(reference);
        }
Ejemplo n.º 3
0
        public void ReadManifestSection(XmlReader reader, string hintPath)
        {
            if (reader.AttributeCount != 0)
            {
                throw new AddInLoadException("Manifest node cannot have attributes.");
            }
            if (reader.IsEmptyElement)
            {
                throw new AddInLoadException("Manifest node cannot be empty.");
            }
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.EndElement:
                    if (reader.LocalName == "Manifest")
                    {
                        return;
                    }
                    break;

                case XmlNodeType.Element:
                    string nodeName   = reader.LocalName;
                    var    properties = Properties.ReadFromAttributes(reader);
                    switch (nodeName)
                    {
                    case "Identity":
                        AddIdentity(properties["name"], properties["version"], hintPath);
                        break;

                    case "Dependency":
                        dependencies.Add(AddInReference.Create(properties, hintPath));
                        break;

                    case "Conflict":
                        conflicts.Add(AddInReference.Create(properties, hintPath));
                        break;

                    default:
                        throw new AddInLoadException("Unknown node in Manifest section:" + nodeName);
                    }
                    break;
                }
            }
        }