public void TestResolveConfiguration() { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestData data1 = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", new string[0], null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); entry.Continue(); Assert.Equal(entry.State, BuildRequestEntryState.Active); BuildRequest waitingRequest = CreateNewBuildRequest(-1, new string[1] { "bar" }); entry.WaitForResult(waitingRequest); entry.ResolveConfigurationRequest(-1, 2); BuildResult requiredResult = new BuildResult(waitingRequest); requiredResult.AddResultsForTarget("bar", TestUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult); Assert.Equal(entry.State, BuildRequestEntryState.Ready); }
public void TestNoCompleteToWaiting() { Assert.Throws <InternalErrorException>(() => { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary <string, string>(), "foo", new string[0], null), "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); entry.Continue(); Assert.Equal(BuildRequestEntryState.Active, entry.State); BuildResult requiredResult = new BuildResult(request); requiredResult.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.Complete(requiredResult); Assert.Equal(BuildRequestEntryState.Complete, entry.State); BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest1); } ); }
public void TestResultsWithNoMatch1() { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary <string, string>(), "foo", new string[0], null), "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); entry.Continue(); Assert.Equal(BuildRequestEntryState.Active, entry.State); BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest1); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildRequest randomRequest = CreateNewBuildRequest(3, new string[0]); BuildResult requiredResult = new BuildResult(randomRequest); requiredResult.AddResultsForTarget("bar", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); }
public void RaiseRequestBlocked(BuildRequestEntry entry, int blockingId, string blockingTarget) { if (null != OnBuildRequestBlocked) { OnBuildRequestBlocked(entry, blockingId, blockingTarget, null); } }
public void TestSimpleBuildRequest() { BuildRequestConfiguration configuration = CreateTestProject(1); try { TestTargetBuilder targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder); IConfigCache configCache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache); configCache.AddConfiguration(configuration); BuildRequest request = CreateNewBuildRequest(1, new string[1] { "target1" }); BuildRequestEntry entry = new BuildRequestEntry(request, configuration); BuildResult result = new BuildResult(request); result.AddResultsForTarget("target1", GetEmptySuccessfulTargetResult()); targetBuilder.SetResultsToReturn(result); _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry); WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed"); Assert.Equal(BuildRequestEntryState.Complete, entry.State); Assert.Equal(entry, _buildRequestCompleted_Entry); Assert.Equal(BuildResultCode.Success, _buildRequestCompleted_Entry.Result.OverallResult); } finally { DeleteTestProject(configuration); } }
public void RaiseRequestComplete(BuildRequestEntry entry) { if (null != OnBuildRequestCompleted) { OnBuildRequestCompleted(entry); } }
/// <summary> /// Set up and initialize before each test is run /// </summary> public TaskHost_Tests() { LoggingServiceFactory loggingFactory = new LoggingServiceFactory(LoggerMode.Synchronous, 1); _loggingService = loggingFactory.CreateInstance(BuildComponentType.LoggingService) as LoggingService; _customLogger = new MyCustomLogger(); _mockHost = new MockHost(); _mockHost.LoggingService = _loggingService; _loggingService.RegisterLogger(_customLogger); _elementLocation = ElementLocation.Create("MockFile", 5, 5); BuildRequest buildRequest = new BuildRequest(1 /* submissionId */, 1, 1, new List <string>(), null, BuildEventContext.Invalid, null); BuildRequestConfiguration configuration = new BuildRequestConfiguration(1, new BuildRequestData("Nothing", new Dictionary <string, string>(), "4.0", new string[0], null), "2.0"); configuration.Project = new ProjectInstance(ProjectRootElement.Create()); BuildRequestEntry entry = new BuildRequestEntry(buildRequest, configuration); BuildResult buildResult = new BuildResult(buildRequest, false); buildResult.AddResultsForTarget("Build", new TargetResult(new TaskItem[] { new TaskItem("IamSuper", configuration.ProjectFullPath) }, TestUtilities.GetSkippedResult())); _mockRequestCallback = new MockIRequestBuilderCallback(new BuildResult[] { buildResult }); entry.Builder = (IRequestBuilder)_mockRequestCallback; _taskHost = new TaskHost(_mockHost, entry, _elementLocation, null /*Don't care about the callback either unless doing a build*/); _taskHost.LoggingContext = new TaskLoggingContext(_loggingService, BuildEventContext.Invalid); }
public void TestConstructorBad() { Assert.Throws <ArgumentNullException>(() => { BuildRequestEntry entry = new BuildRequestEntry(null, null); } ); }
/// <summary> /// Shuts down the component. /// </summary> public void ShutdownComponent() { this.host = null; this.testDataProvider = null; this.testDefinition = null; this.requestCallBack = null; this.requestEntry = null; this.projectLoggingContext = null; }
public void TestSimpleStateProgression() { // Start in Ready BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary <string, string>(), "foo", Array.Empty <string>(), null), "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); Assert.Equal(entry.Request, request); Assert.Null(entry.Result); // Move to active. Should not be any results yet. IDictionary <int, BuildResult> results = entry.Continue(); Assert.Equal(BuildRequestEntryState.Active, entry.State); Assert.Null(entry.Result); Assert.Null(results); // Wait for results, move to waiting. BuildRequest waitingRequest = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); Assert.Equal(entry.Request, request); Assert.Null(entry.Result); // Provide the results, move to ready. BuildResult requiredResult = new BuildResult(waitingRequest); requiredResult.AddResultsForTarget("bar", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult); Assert.Equal(BuildRequestEntryState.Ready, entry.State); Assert.Equal(entry.Request, request); Assert.Null(entry.Result); // Continue the build, move to active. results = entry.Continue(); Assert.Equal(BuildRequestEntryState.Active, entry.State); Assert.Null(entry.Result); Assert.Single(results); Assert.True(results.ContainsKey(requiredResult.NodeRequestId)); Assert.Equal(results[requiredResult.NodeRequestId], requiredResult); // Complete the build, move to completed. BuildResult result = new BuildResult(request); result.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.Complete(result); Assert.Equal(BuildRequestEntryState.Complete, entry.State); Assert.NotNull(entry.Result); Assert.Equal(entry.Result, result); }
public QAMockTargetBuilder() { this.host = null; this.testDataProvider = null; this.testDefinition = null; this.requestCallBack = null; this.requestEntry = null; this.projectLoggingContext = null; this.buildDone = new AutoResetEvent(false); }
public void TestConstructorGood() { BuildRequest request = CreateNewBuildRequest(1, Array.Empty <string>()); BuildRequestData data = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", Array.Empty <string>(), null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); Assert.Equal(entry.Request, request); }
/// <summary> /// Builds the specified targets of an entry. The cancel event should only be set to true if we are planning /// on simulating execution time when a target is built /// </summary> public Task <BuildResult> BuildTargets(ProjectLoggingContext loggingContext, BuildRequestEntry entry, IRequestBuilderCallback callback, string[] targetNames, Lookup baseLookup, CancellationToken cancellationToken) { this.requestEntry = entry; this.projectLoggingContext = loggingContext; this.requestCallBack = callback; this.testDefinition = this.testDataProvider[entry.Request.ConfigurationId]; this.cancellationToken = cancellationToken; BuildResult result = GenerateResults(targetNames); return(Task <BuildResult> .FromResult(result)); }
public void TestConstructorGood() { BuildRequest request = CreateNewBuildRequest(1, new string[0] { }); BuildRequestData data = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", new string[0], null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.AreEqual(entry.State, BuildRequestEntryState.Ready); Assert.AreEqual(entry.Request, request); }
public void BuildRequest(NodeLoggingContext context, BuildRequestEntry entry) { Assert.Null(_builderThread); // "Received BuildRequest while one was in progress" _continueEvent = new AutoResetEvent(false); _cancelEvent = new AutoResetEvent(false); _entry = entry; entry.Continue(); _builderThread = new Thread(BuilderThreadProc); _builderThread.Start(); }
/// <summary> /// Constructor that takes in nothing. /// </summary> public QARequestBuilder() { this.host = null; this.configCache = null; this.resultsCache = null; this.builderThread = null; this.requestedEntry = null; this.cancelEvent = new AutoResetEvent(false); this.continueEvent = new AutoResetEvent(false); this.threadStarted = new ManualResetEvent(false); this.currentProjectDefinition = null; }
/// <summary> /// Constructs a project logging context. /// </summary> internal ProjectLoggingContext(NodeLoggingContext nodeLoggingContext, BuildRequestEntry requestEntry, BuildEventContext parentBuildEventContext) : this ( nodeLoggingContext, requestEntry.Request.SubmissionId, requestEntry.Request.ConfigurationId, requestEntry.RequestConfiguration.ProjectFullPath, requestEntry.Request.Targets, requestEntry.RequestConfiguration.ToolsVersion, requestEntry.RequestConfiguration.Project.PropertiesToBuildWith, requestEntry.RequestConfiguration.Project.ItemsToBuildWith, parentBuildEventContext ) { }
public void TestNoReadyToComplete() { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestData data1 = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", new string[0], null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.AreEqual(entry.State, BuildRequestEntryState.Ready); BuildResult requiredResult = new BuildResult(request); requiredResult.AddResultsForTarget("foo", TestUtilities.GetEmptySucceedingTargetResult()); entry.Complete(requiredResult); }
public void TestRequestWithReferenceCancelled() { BuildRequestConfiguration configuration = CreateTestProject(1); try { TestTargetBuilder targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder); IConfigCache configCache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache); FullyQualifiedBuildRequest[] newRequest = new FullyQualifiedBuildRequest[1] { new FullyQualifiedBuildRequest(configuration, new string[1] { "testTarget2" }, true) }; targetBuilder.SetNewBuildRequests(newRequest); configCache.AddConfiguration(configuration); BuildRequest request = CreateNewBuildRequest(1, new string[1] { "target1" }); BuildRequestEntry entry = new BuildRequestEntry(request, configuration); BuildResult result = new BuildResult(request); result.AddResultsForTarget("target1", GetEmptySuccessfulTargetResult()); targetBuilder.SetResultsToReturn(result); _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry); WaitForEvent(_newBuildRequestsEvent, "New Build Requests"); Assert.Equal(_newBuildRequests_Entry, entry); ObjectModelHelpers.AssertArrayContentsMatch(_newBuildRequests_FQRequests, newRequest); BuildResult newResult = new BuildResult(_newBuildRequests_BuildRequests[0]); newResult.AddResultsForTarget("testTarget2", GetEmptySuccessfulTargetResult()); entry.ReportResult(newResult); _requestBuilder.ContinueRequest(); Thread.Sleep(500); _requestBuilder.CancelRequest(); WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed"); Assert.Equal(BuildRequestEntryState.Complete, entry.State); Assert.Equal(entry, _buildRequestCompleted_Entry); Assert.Equal(BuildResultCode.Failure, _buildRequestCompleted_Entry.Result.OverallResult); } finally { DeleteTestProject(configuration); } }
public void TestNoReadyToWaiting() { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestData data1 = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", new string[0], null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.AreEqual(entry.State, BuildRequestEntryState.Ready); BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest1); }
public void TestNoReadyToComplete() { Assert.Throws <InternalErrorException>(() => { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestData data1 = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", Array.Empty <string>(), null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); BuildResult requiredResult = new BuildResult(request); requiredResult.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.Complete(requiredResult); } ); }
public void TestMixedWaitingRequests() { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary <string, string>(), "foo", Array.Empty <string>(), null), "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); entry.Continue(); Assert.Equal(BuildRequestEntryState.Active, entry.State); BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest1); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildRequest waitingRequest2 = CreateNewBuildRequest(-1, new string[1] { "xor" }); entry.WaitForResult(waitingRequest2); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); Assert.Null(entry.GetRequestsToIssueIfReady()); // "Entry should not be ready to issue because there are unresolved configurations" entry.ResolveConfigurationRequest(-1, 3); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildResult requiredResult1 = new BuildResult(waitingRequest1); requiredResult1.AddResultsForTarget("bar", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult1); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildResult requiredResult2 = new BuildResult(waitingRequest2); requiredResult2.AddResultsForTarget("xor", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult2); Assert.Equal(BuildRequestEntryState.Ready, entry.State); }
/// <summary> /// Build a request entry /// </summary> /// <param name="entry"></param> public void BuildRequest(NodeLoggingContext nodeLoggingContext, BuildRequestEntry entry) { this.requestedEntry = entry; if (null == this.requestedEntry.RequestConfiguration.Project) { Project mockProject = new Project(XmlReader.Create(new System.IO.StringReader( @"<Project ToolsVersion='4.0' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'> <Target Name='t'> </Target> </Project>"))); this.requestedEntry.RequestConfiguration.Project = mockProject.CreateProjectInstance(); } this.currentProjectDefinition = this.testDataProvider[this.requestedEntry.Request.ConfigurationId]; this.requestedEntry.Continue(); this.builderThread = new Thread(BuilderThreadProc); this.builderThread.Name = "Builder Thread for Request: " + entry.Request.ConfigurationId.ToString(); this.builderThread.Start(); }
private void NewBuildRequestsCallback(BuildRequestEntry entry, FullyQualifiedBuildRequest[] requests) { _newBuildRequests_FQRequests = requests; _newBuildRequests_BuildRequests = new BuildRequest[requests.Length]; _newBuildRequests_Entry = entry; int index = 0; foreach (FullyQualifiedBuildRequest request in requests) { IConfigCache configCache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache); BuildRequestConfiguration matchingConfig = configCache.GetMatchingConfiguration(request.Config); BuildRequest newRequest = CreateNewBuildRequest(matchingConfig.ConfigurationId, request.Targets); entry.WaitForResult(newRequest); _newBuildRequests_BuildRequests[index++] = newRequest; } _newBuildRequestsEvent.Set(); }
public void TestNoReadyToWaiting() { Assert.Throws <InternalErrorException>(() => { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestData data1 = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", Array.Empty <string>(), null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); Assert.Equal(BuildRequestEntryState.Ready, entry.State); BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest1); } ); }
public Task <BuildResult> BuildTargets(ProjectLoggingContext loggingContext, BuildRequestEntry entry, IRequestBuilderCallback callback, string[] targets, Lookup baseLookup, CancellationToken cancellationToken) { _requestBuilderCallback = callback; if (cancellationToken.WaitHandle.WaitOne(1500)) { BuildResult result = new BuildResult(entry.Request); foreach (string target in targets) { result.AddResultsForTarget(target, BuildResultUtilities.GetEmptyFailingTargetResult()); } return(Task <BuildResult> .FromResult(result)); } if (_newRequests != null) { string[] projectFiles = new string[_newRequests.Length]; PropertyDictionary <ProjectPropertyInstance>[] properties = new PropertyDictionary <ProjectPropertyInstance> [_newRequests.Length]; string[] toolsVersions = new string[_newRequests.Length]; for (int i = 0; i < projectFiles.Length; ++i) { projectFiles[i] = _newRequests[i].Config.ProjectFullPath; properties[i] = new PropertyDictionary <ProjectPropertyInstance>(_newRequests[i].Config.GlobalProperties); toolsVersions[i] = _newRequests[i].Config.ToolsVersion; } _requestBuilderCallback.BuildProjects(projectFiles, properties, toolsVersions, _newRequests[0].Targets, _newRequests[0].ResultsNeeded); if (cancellationToken.WaitHandle.WaitOne(1500)) { BuildResult result = new BuildResult(entry.Request); foreach (string target in targets) { result.AddResultsForTarget(target, BuildResultUtilities.GetEmptyFailingTargetResult()); } return(Task <BuildResult> .FromResult(result)); } } return(Task <BuildResult> .FromResult(_cache.GetResultForRequest(entry.Request))); }
public void TestMissingProjectFile() { TestTargetBuilder targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder); IConfigCache configCache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache); BuildRequestConfiguration configuration = new BuildRequestConfiguration(1, new BuildRequestData("testName", new Dictionary <string, string>(), "3.5", Array.Empty <string>(), null), "2.0"); configCache.AddConfiguration(configuration); BuildRequest request = CreateNewBuildRequest(1, new string[1] { "target1" }); BuildRequestEntry entry = new BuildRequestEntry(request, configuration); _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry); WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed"); Assert.Equal(BuildRequestEntryState.Complete, entry.State); Assert.Equal(entry, _buildRequestCompleted_Entry); Assert.Equal(BuildResultCode.Failure, _buildRequestCompleted_Entry.Result.OverallResult); Assert.Equal(typeof(InvalidProjectFileException), _buildRequestCompleted_Entry.Result.Exception.GetType()); }
public void TestMultipleWaitingRequests() { BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" }); BuildRequestData data1 = new BuildRequestData("foo", new Dictionary <string, string>(), "foo", Array.Empty <string>(), null); BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0"); BuildRequestEntry entry = new BuildRequestEntry(request, config); entry.Continue(); Assert.Equal(BuildRequestEntryState.Active, entry.State); BuildRequest waitingRequest1 = CreateNewBuildRequest(2, new string[1] { "bar" }); entry.WaitForResult(waitingRequest1); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildRequest waitingRequest2 = CreateNewBuildRequest(2, new string[1] { "xor" }); entry.WaitForResult(waitingRequest2); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildResult requiredResult1 = new BuildResult(waitingRequest1); requiredResult1.AddResultsForTarget("bar", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult1); Assert.Equal(BuildRequestEntryState.Waiting, entry.State); BuildResult requiredResult2 = new BuildResult(waitingRequest2); requiredResult2.AddResultsForTarget("xor", BuildResultUtilities.GetEmptySucceedingTargetResult()); entry.ReportResult(requiredResult2); Assert.Equal(BuildRequestEntryState.Ready, entry.State); }
/// <summary> /// Log that a project has started if it has no parent (the first project) /// </summary> /// <param name="requestEntry">The build request entry for this project.</param> /// <returns>The BuildEventContext to use for this project.</returns> internal ProjectLoggingContext LogProjectStarted(BuildRequestEntry requestEntry) { ErrorUtilities.VerifyThrow(this.IsValid, "Build not started."); return new ProjectLoggingContext(this, requestEntry, requestEntry.Request.ParentBuildEventContext); }
private void BuildRequestCompletedCallback(BuildRequestEntry entry) { _buildRequestCompleted_Entry = entry; _buildRequestCompletedEvent.Set(); }
/// <summary> /// Log that a project has started if it has no parent (the first project) /// </summary> /// <param name="requestEntry">The build request entry for this project.</param> /// <returns>The BuildEventContext to use for this project.</returns> internal ProjectLoggingContext LogProjectStarted(BuildRequestEntry requestEntry) { ErrorUtilities.VerifyThrow(this.IsValid, "Build not started."); return(new ProjectLoggingContext(this, requestEntry, requestEntry.Request.ParentBuildEventContext)); }