/// <summary>
        /// Called from the package class when there are options to be read out of the solution file.
        /// </summary>
        /// <param name="Stream">The stream to load the option data from.</param>
        public void LoadOptions(Stream Stream)
        {
            _BuildJobSetsCollection.Clear();

            using (BinaryReader Reader = new BinaryReader(Stream))
            {
                int SetCount = Reader.ReadInt32();

                for (int SetIdx = 0; SetIdx < SetCount; SetIdx++)
                {
                    BuildJobSet LoadedSet = new BuildJobSet();
                    LoadedSet.Name = Reader.ReadString();
                    int JobCount = Reader.ReadInt32();
                    for (int JobIdx = 0; JobIdx < JobCount; JobIdx++)
                    {
                        Utils.SafeProjectReference ProjectRef = new Utils.SafeProjectReference { FullName = Reader.ReadString(), Name = Reader.ReadString() };

                        string Config = Reader.ReadString();
                        string Platform = Reader.ReadString();
                        BuildJob.BuildJobType JobType;

                        if (Enum.TryParse(Reader.ReadString(), out JobType))
                        {
                            LoadedSet.BuildJobs.Add(new BuildJob(ProjectRef, Config, Platform, JobType));
                        }
                    }
                    _BuildJobSetsCollection.Add(LoadedSet);
                }
            }

            EnsureDefaultBuildJobSet();
            if (SetCombo.SelectedItem == null)
            {
                SetCombo.SelectedItem = _BuildJobSetsCollection[0];
            }
        }
            ////////////// BuildJob methods ///////////////////////
            public BuildJob(Utils.SafeProjectReference InProject, string InConfig, string InPlatform, BuildJobType InJobType)
            {
                _Project = InProject;
                _Config = InConfig;
                _Platform = InPlatform;
                _JobType = InJobType;

                _SolutionConfigString = Config + '|' + Platform;
                _DisplayString = GetDisplayString();
                JobStatusDisplayString = GetJobStatusString();
            }
		/// <summary>
		/// Called from the package class when there are options to be read out of the solution file.
		/// </summary>
		/// <param name="Stream">The stream to load the option data from.</param>
		public void LoadOptions(Stream Stream)
		{
			try
			{
				_BuildJobSetsCollection.Clear();

				using (BinaryReader Reader = new BinaryReader(Stream))
				{
					int SetCount = Reader.ReadInt32();

					for (int SetIdx = 0; SetIdx < SetCount; SetIdx++)
					{
						BuildJobSet LoadedSet = new BuildJobSet();
						LoadedSet.Name = Reader.ReadString();
						int JobCount = Reader.ReadInt32();
						for (int JobIdx = 0; JobIdx < JobCount; JobIdx++)
						{
							Utils.SafeProjectReference ProjectRef = new Utils.SafeProjectReference { FullName = Reader.ReadString(), Name = Reader.ReadString() };

							string Config = Reader.ReadString();
							string Platform = Reader.ReadString();
							BuildJob.BuildJobType JobType;

							if (Enum.TryParse(Reader.ReadString(), out JobType))
							{
								LoadedSet.BuildJobs.Add(new BuildJob(ProjectRef, Config, Platform, JobType));
							}
						}
						_BuildJobSetsCollection.Add(LoadedSet);
					}
				}

				EnsureDefaultBuildJobSet();
				if (SetCombo.SelectedItem == null)
				{
					SetCombo.SelectedItem = _BuildJobSetsCollection[0];
				}
			}
			catch (Exception ex)
			{
				Exception AppEx = new ApplicationException("BatchBuilder failed to load options from .suo", ex);
				Logging.WriteLine(AppEx.ToString());
				throw AppEx;
			}
		}