private void LoadFile(FilterChain filterChain) {
            string content = null;

            try {
                content = FileUtils.ReadFile(File.FullName, filterChain,
                    Encoding);
            } catch (IOException ex) {
                throw new BuildException("The properties file could not be read.",
                    Location, ex);
            }

            PropertyDictionary properties = Project.Properties;

            PropertyTask propertyTask = new PropertyTask();
            propertyTask.Parent = this;
            propertyTask.Project = Project;

            using (StringReader sr = new StringReader(content)) {
                string line = sr.ReadLine();
                int current_line = 0;

                while (line != null) {
                    current_line++;

                    // skip empty lines and comments
                    if (String.IsNullOrEmpty(line) || line.StartsWith ("#")) {
                        line = sr.ReadLine ();
                        continue;
                    }

                    int equals_pos = line.IndexOf ('=');
                    if (equals_pos == -1)
                        throw new BuildException (string.Format(CultureInfo.InvariantCulture,
                            "Invalid property defined on line {0}.",  current_line),
                            Location);

                    string name = line.Substring(0, equals_pos).Trim();
                    string value = line.Substring (equals_pos + 1, 
                        line.Length - equals_pos - 1).Trim();

                    string expandedValue = properties.ExpandProperties(value,
                        Location);

                    propertyTask.PropertyName = name;
                    propertyTask.Value = expandedValue;
                    propertyTask.Execute();

                    line = sr.ReadLine ();
                }
            }
        }
        /// <summary>
        /// Reads the list of global properties specified in the NAnt configuration
        /// file.
        /// </summary>
        /// <param name="propertyNodes">An <see cref="XmlNodeList" /> representing global properties.</param>
        private void ProcessGlobalProperties(XmlNodeList propertyNodes)
        {
            //deals with xml info from the config file, not build document.
            foreach (XmlNode propertyNode in propertyNodes) {
                //skip special elements like comments, pis, text, etc.
                if (!(propertyNode.NodeType == XmlNodeType.Element)) {
                    continue;
                }

                // initialize task
                PropertyTask propertyTask = new PropertyTask();
                propertyTask.Parent = propertyTask.Project = Project;
                propertyTask.NamespaceManager = NamespaceManager;
                propertyTask.InitializeTaskConfiguration();
                // configure using xml node
                propertyTask.Initialize(propertyNode);
                // execute task
                propertyTask.Execute();
            }
        }