public object ReadFile (FilePath file, Type expectedType, IProgressMonitor monitor)
		{
			if (file == null || monitor == null)
				return null;

			ProtobuildModule module;
			try {
				ProjectExtensionUtil.BeginLoadOperation();
				module = new ProtobuildModule();
				monitor.BeginTask(GettextCatalog.GetString("Loading Protobuild module: {0}", file), 1);
				var projectLoadMonitor = monitor as IProjectLoadProgressMonitor;
				if (projectLoadMonitor != null)
					projectLoadMonitor.CurrentSolution = module;
				LoadModule(module, file, monitor);
			} catch (Exception ex) {
				monitor.ReportError(GettextCatalog.GetString("Could not load Protobuild module: {0}", file), ex);
				throw;
			} finally {
				ProjectExtensionUtil.EndLoadOperation();
				monitor.EndTask();
			}

			return module;
		}
		void LoadModule (ProtobuildModule module, FilePath file, IProgressMonitor monitor)
		{
			module.Load(file, monitor);
		}
		private async Task<TargetEvaluationResult> RunDefinitionTarget(ProtobuildModule module, ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
		{
			var project = await module.GetShadowProject(this, monitor, configuration);
			var value = await project.RunTarget(monitor, target, configuration, context);
			if (target == ProjectService.BuildTarget) {
				module.OnDefinitionBuilt(this);
			}
			return value;
		}