/// <summary>
		/// Evaluates the specified condition in the project.
		/// WARNING: EvaluateCondition might add a temporary property group and remove it again,
		/// which invalidates enumerators over the list of property groups!
		/// </summary>
		internal static bool EvaluateCondition(MSBuild.Project project,
		                                       string condition)
		{
			const string propertyName = "MSBuildInternalsEvaluateConditionDummyPropertyName";
			MSBuild.BuildPropertyGroup pGroup = project.AddNewPropertyGroup(true);
			pGroup.AddNewProperty(propertyName, "ConditionFalse");
			pGroup.AddNewProperty(propertyName, "ConditionTrue").Condition = condition;
			bool result = project.GetEvaluatedProperty(propertyName) == "ConditionTrue";
			project.RemovePropertyGroup(pGroup);
			return result;
		}
		internal static void EnsureCorrectTempProject(MSBuild.Project baseProject,
		                                              string configuration, string platform,
		                                              ref MSBuild.Project tempProject)
		{
			if (configuration == null && platform == null) {
				// unload temp project
				if (tempProject != null && tempProject != baseProject) {
					tempProject.ParentEngine.UnloadAllProjects();
				}
				tempProject = null;
				return;
			}
			if (configuration == null)
				configuration = baseProject.GetEvaluatedProperty("Configuration");
			if (platform == null)
				platform = baseProject.GetEvaluatedProperty("Platform");
			
			if (tempProject != null
			    && tempProject.GetEvaluatedProperty("Configuration") == configuration
			    && tempProject.GetEvaluatedProperty("Platform") == platform)
			{
				// already correct
				return;
			}
			if (baseProject.GetEvaluatedProperty("Configuration") == configuration
			    && baseProject.GetEvaluatedProperty("Platform") == platform)
			{
				tempProject = baseProject;
				return;
			}
			// create new project
			
			// unload old temp project
			if (tempProject != null && tempProject != baseProject) {
				tempProject.ParentEngine.UnloadAllProjects();
			}
			try {
				MSBuild.Engine engine = CreateEngine();
				tempProject = engine.CreateNewProject();
				// tell MSBuild the path so that projects containing <Import Project="relativePath" />
				// can be loaded
				tempProject.FullFileName = baseProject.FullFileName;
				MSBuildBasedProject.InitializeMSBuildProject(tempProject);
				tempProject.LoadXml(baseProject.Xml);
				tempProject.SetProperty("Configuration", configuration);
				tempProject.SetProperty("Platform", platform);
			} catch (Exception ex) {
				ICSharpCode.Core.MessageService.ShowWarning(ex.ToString());
				tempProject = baseProject;
			}
		}