public void TestTranslationWithEmptyDictionary() { TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", new Dictionary <string, object>(), new Dictionary <string, string>()); ((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if !FEATURE_ASSEMBLYLOADCONTEXT Assert.Equal(config.TaskLocation, deserializedConfig.TaskLocation); #endif Assert.NotNull(deserializedConfig.TaskParameters); Assert.Equal(config.TaskParameters.Count, deserializedConfig.TaskParameters.Count); Assert.NotNull(deserializedConfig.GlobalProperties); Assert.Equal(config.GlobalProperties.Count, deserializedConfig.GlobalProperties.Count); }
public void ConstructorWithEmptyName() { Assert.Throws <InternalErrorException>(() => { TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, String.Empty, @"c:\my tasks\mytask.dll", null); } ); }
/// <summary> /// The task has been completed /// </summary> private void CompleteTask() { ErrorUtilities.VerifyThrow(_isTaskExecuting == false, "The task should be done executing before CompleteTask."); if (_nodeEndpoint.LinkStatus == LinkStatus.Active) { TaskHostTaskComplete taskCompletePacketToSend; lock (_taskCompleteLock) { ErrorUtilities.VerifyThrowInternalNull(_taskCompletePacket, "taskCompletePacket"); taskCompletePacketToSend = _taskCompletePacket; _taskCompletePacket = null; } _nodeEndpoint.SendData(taskCompletePacketToSend); } _currentConfiguration = null; // If the task has been canceled, the event will still be set. // If so, now that we've completed the task, we want to shut down // this node -- with no reuse, since we don't know whether the // task we canceled left the node in a good state or not. if (_taskCancelledEvent.WaitOne(0, false)) { _shutdownReason = NodeEngineShutdownReason.BuildComplete; _shutdownEvent.Set(); } }
public void ConstructorWithEmptyName() { Assert.Throws <InternalErrorException>(() => { TaskHostConfiguration config = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: String.Empty, taskLocation: @"c:\my tasks\mytask.dll", isTaskInputLoggingEnabled: false, taskParameters: null, globalParameters: null, warningsAsErrors: null, warningsAsMessages: null); } ); }
public void TestTranslationWithNullDictionary() { TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null); ((INodePacketTranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if FEATURE_ASSEMBLY_LOADFROM Assert.Equal(config.TaskLocation, config.TaskLocation); #endif Assert.Null(deserializedConfig.TaskParameters); }
public void TestTranslationWithITaskItemInDictionary() { IDictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add("TaskItemValue", new TaskItem("Foo")); TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters); ((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if FEATURE_ASSEMBLY_LOADFROM Assert.Equal(config.TaskLocation, deserializedConfig.TaskLocation); #endif Assert.NotNull(deserializedConfig.TaskParameters); Assert.Equal(config.TaskParameters.Count, deserializedConfig.TaskParameters.Count); TaskHostPacketHelpers.AreEqual((ITaskItem)config.TaskParameters["TaskItemValue"].WrappedParameter, (ITaskItem)deserializedConfig.TaskParameters["TaskItemValue"].WrappedParameter); }
public void ConstructorWithEmptyLocation() { Assert.Throws <InternalErrorException>(() => { TaskHostConfiguration config = new TaskHostConfiguration(1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", String.Empty, null); } ); }
public void ConstructorWithNullName() { Assert.Throws <InternalErrorException>(() => { TaskHostConfiguration config = new TaskHostConfiguration(1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, null, @"c:\my tasks\mytask.dll", null); } ); }
/// <summary> /// Configure the task host according to the information received in the /// configuration packet /// </summary> private void HandleTaskHostConfiguration(TaskHostConfiguration taskHostConfiguration) { ErrorUtilities.VerifyThrow(_isTaskExecuting == false, "Why are we getting a TaskHostConfiguration packet while we're still executing a task?"); _currentConfiguration = taskHostConfiguration; // Kick off the task running thread. _taskRunnerThread = new Thread(new ParameterizedThreadStart(RunTask)); _taskRunnerThread.Name = "Task runner for task " + taskHostConfiguration.TaskName; _taskRunnerThread.Start(taskHostConfiguration); }
public void TestTranslationWithNullDictionary() { TaskHostConfiguration config = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null); ((INodePacketTranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.AreEqual(config.TaskName, deserializedConfig.TaskName); Assert.AreEqual(config.TaskLocation, config.TaskLocation); Assert.IsNull(deserializedConfig.TaskParameters); }
public void TestTranslationWithITaskItemArrayInDictionary() { IDictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add("TaskItemArrayValue", new ITaskItem[] { new TaskItem("Foo"), new TaskItem("Baz") }); TaskHostConfiguration config = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: parameters, globalParameters: null, warningsAsErrors: null, warningsNotAsErrors: null, warningsAsMessages: null); ((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if !FEATURE_ASSEMBLYLOADCONTEXT Assert.Equal(config.TaskLocation, deserializedConfig.TaskLocation); #endif Assert.NotNull(deserializedConfig.TaskParameters); Assert.Equal(config.TaskParameters.Count, deserializedConfig.TaskParameters.Count); ITaskItem[] itemArray = (ITaskItem[])config.TaskParameters["TaskItemArrayValue"].WrappedParameter; ITaskItem[] deserializedItemArray = (ITaskItem[])deserializedConfig.TaskParameters["TaskItemArrayValue"].WrappedParameter; TaskHostPacketHelpers.AreEqual(itemArray, deserializedItemArray); }
public void TestTranslationWithNullDictionary() { var expectedGlobalProperties = new Dictionary <string, string> { ["Property1"] = "Value1", ["Property2"] = "Value2" }; TaskHostConfiguration config = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: null, globalParameters: expectedGlobalProperties, warningsAsErrors: null, warningsNotAsErrors: null, warningsAsMessages: null); ((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if !FEATURE_ASSEMBLYLOADCONTEXT Assert.Equal(config.TaskLocation, deserializedConfig.TaskLocation); #endif Assert.Null(deserializedConfig.TaskParameters); Assert.Equal(expectedGlobalProperties, deserializedConfig.GlobalProperties); }
public void TestTranslationWithValueTypesInDictionary() { IDictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add("Text", "Foo"); parameters.Add("BoolValue", false); TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", #if FEATURE_ASSEMBLY_LOADFROM @"c:\MyTasks\MyTask.dll", #else new AssemblyName("MyTask"), #endif parameters); ((INodePacketTranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if FEATURE_ASSEMBLY_LOADFROM Assert.Equal(config.TaskLocation, config.TaskLocation); #endif Assert.NotNull(deserializedConfig.TaskParameters); Assert.Equal(config.TaskParameters.Count, deserializedConfig.TaskParameters.Count); Assert.Equal(config.TaskParameters["Text"].WrappedParameter, deserializedConfig.TaskParameters["Text"].WrappedParameter); Assert.Equal(config.TaskParameters["BoolValue"].WrappedParameter, deserializedConfig.TaskParameters["BoolValue"].WrappedParameter); }
public void TestValidConstructors() { TaskHostConfiguration config = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null); TaskHostConfiguration config2 = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null); IDictionary <string, object> parameters = new Dictionary <string, object>(); TaskHostConfiguration config3 = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters); IDictionary <string, object> parameters2 = new Dictionary <string, object>(); parameters2.Add("Text", "Hello!"); parameters2.Add("MyBoolValue", true); parameters2.Add("MyITaskItem", new TaskItem("ABC")); parameters2.Add("ItemArray", new ITaskItem[] { new TaskItem("DEF"), new TaskItem("GHI"), new TaskItem("JKL") }); TaskHostConfiguration config4 = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters2); }
public void TestTranslationWithWarningsAsErrors() { HashSet <string> WarningsAsErrors = new HashSet <string>(); WarningsAsErrors.Add("MSB1234"); WarningsAsErrors.Add("MSB1235"); WarningsAsErrors.Add("MSB1236"); WarningsAsErrors.Add("MSB1237"); TaskHostConfiguration config = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: null, globalParameters: null, warningsAsErrors: WarningsAsErrors, warningsNotAsErrors: null, warningsAsMessages: null); ((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if !FEATURE_ASSEMBLYLOADCONTEXT Assert.Equal(config.TaskLocation, deserializedConfig.TaskLocation); #endif Assert.NotNull(deserializedConfig.WarningsAsErrors); config.WarningsAsErrors.SequenceEqual(deserializedConfig.WarningsAsErrors, StringComparer.Ordinal).ShouldBeTrue(); }
public void TestTranslationWithValueTypesInDictionary() { IDictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add("Text", "Foo"); parameters.Add("BoolValue", false); TaskHostConfiguration config = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters); ((INodePacketTranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.AreEqual(config.TaskName, deserializedConfig.TaskName); Assert.AreEqual(config.TaskLocation, config.TaskLocation); Assert.IsNotNull(deserializedConfig.TaskParameters); Assert.AreEqual(config.TaskParameters.Count, deserializedConfig.TaskParameters.Count); Assert.AreEqual(config.TaskParameters["Text"].WrappedParameter, deserializedConfig.TaskParameters["Text"].WrappedParameter); Assert.AreEqual(config.TaskParameters["BoolValue"].WrappedParameter, deserializedConfig.TaskParameters["BoolValue"].WrappedParameter); }
public void TestTranslationWithNullDictionary() { var expectedGlobalProperties = new Dictionary <string, string> { ["Property1"] = "Value1", ["Property2"] = "Value2" }; TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null, expectedGlobalProperties); ((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); #if FEATURE_ASSEMBLY_LOADFROM Assert.Equal(config.TaskLocation, deserializedConfig.TaskLocation); #endif Assert.Null(deserializedConfig.TaskParameters); Assert.Equal(expectedGlobalProperties, deserializedConfig.GlobalProperties); }
public void TestTranslationWithITaskItemArrayInDictionary() { IDictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add("TaskItemArrayValue", new ITaskItem[] { new TaskItem("Foo"), new TaskItem("Baz") }); TaskHostConfiguration config = new TaskHostConfiguration(1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters); ((INodePacketTranslatable)config).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration; Assert.Equal(config.TaskName, deserializedConfig.TaskName); Assert.Equal(config.TaskLocation, config.TaskLocation); Assert.NotNull(deserializedConfig.TaskParameters); Assert.Equal(config.TaskParameters.Count, deserializedConfig.TaskParameters.Count); ITaskItem[] itemArray = (ITaskItem[])config.TaskParameters["TaskItemArrayValue"].WrappedParameter; ITaskItem[] deserializedItemArray = (ITaskItem[])deserializedConfig.TaskParameters["TaskItemArrayValue"].WrappedParameter; TaskHostPacketHelpers.AreEqual(itemArray, deserializedItemArray); }
public void ConstructorWithNullLocation() { Assert.Throws <InternalErrorException>(() => { TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", null, null); } ); }
public void TestValidConstructors() { TaskHostConfiguration config = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: null, globalParameters: null, warningsAsErrors: null, warningsAsMessages: null); TaskHostConfiguration config2 = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: null, globalParameters: null, warningsAsErrors: null, warningsAsMessages: null); IDictionary <string, object> parameters = new Dictionary <string, object>(); TaskHostConfiguration config3 = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: parameters, globalParameters: null, warningsAsErrors: null, warningsAsMessages: null); IDictionary <string, object> parameters2 = new Dictionary <string, object>(); parameters2.Add("Text", "Hello!"); parameters2.Add("MyBoolValue", true); parameters2.Add("MyITaskItem", new TaskItem("ABC")); parameters2.Add("ItemArray", new ITaskItem[] { new TaskItem("DEF"), new TaskItem("GHI"), new TaskItem("JKL") }); TaskHostConfiguration config4 = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: parameters2, globalParameters: null, warningsAsErrors: null, warningsAsMessages: null); HashSet <string> WarningsAsErrors = new HashSet <string>(); WarningsAsErrors.Add("MSB1234"); WarningsAsErrors.Add("MSB1235"); WarningsAsErrors.Add("MSB1236"); WarningsAsErrors.Add("MSB1237"); TaskHostConfiguration config5 = new TaskHostConfiguration( nodeId: 1, startupDirectory: Directory.GetCurrentDirectory(), buildProcessEnvironment: null, culture: Thread.CurrentThread.CurrentCulture, uiCulture: Thread.CurrentThread.CurrentUICulture, #if FEATURE_APPDOMAIN appDomainSetup: #if FEATURE_APPDOMAIN null, #endif lineNumberOfTask: #endif 1, columnNumberOfTask: 1, projectFileOfTask: @"c:\my project\myproj.proj", continueOnError: _continueOnErrorDefault, taskName: "TaskName", taskLocation: @"c:\MyTasks\MyTask.dll", isTaskInputLoggingEnabled: false, taskParameters: parameters2, globalParameters: null, warningsAsErrors: WarningsAsErrors, warningsAsMessages: null); }
/// <summary> /// Task runner method /// </summary> private void RunTask(object state) { _isTaskExecuting = true; OutOfProcTaskHostTaskResult taskResult = null; TaskHostConfiguration taskConfiguration = state as TaskHostConfiguration; IDictionary <string, TaskParameter> taskParams = taskConfiguration.TaskParameters; // We only really know the values of these variables for sure once we see what we received from our parent // environment -- otherwise if this was a completely new build, we could lose out on expected environment // variables. _debugCommunications = taskConfiguration.BuildProcessEnvironment.ContainsValueAndIsEqual("MSBUILDDEBUGCOMM", "1", StringComparison.OrdinalIgnoreCase); _updateEnvironment = !taskConfiguration.BuildProcessEnvironment.ContainsValueAndIsEqual("MSBuildTaskHostDoNotUpdateEnvironment", "1", StringComparison.OrdinalIgnoreCase); _updateEnvironmentAndLog = taskConfiguration.BuildProcessEnvironment.ContainsValueAndIsEqual("MSBuildTaskHostUpdateEnvironmentAndLog", "1", StringComparison.OrdinalIgnoreCase); try { // Change to the startup directory NativeMethodsShared.SetCurrentDirectory(taskConfiguration.StartupDirectory); if (_updateEnvironment) { InitializeMismatchedEnvironmentTable(taskConfiguration.BuildProcessEnvironment); } // Now set the new environment SetTaskHostEnvironment(taskConfiguration.BuildProcessEnvironment); // Set culture Thread.CurrentThread.CurrentCulture = taskConfiguration.Culture; Thread.CurrentThread.CurrentUICulture = taskConfiguration.UICulture; string taskName = taskConfiguration.TaskName; string taskLocation = taskConfiguration.TaskLocation; // We will not create an appdomain now because of a bug // As a fix, we will create the class directly without wrapping it in a domain _taskWrapper = new OutOfProcTaskAppDomainWrapper(); taskResult = _taskWrapper.ExecuteTask ( this as IBuildEngine, taskName, taskLocation, taskConfiguration.ProjectFileOfTask, taskConfiguration.LineNumberOfTask, taskConfiguration.ColumnNumberOfTask, taskConfiguration.AppDomainSetup, taskParams ); } catch (Exception e) { if (e is ThreadAbortException) { // This thread was aborted as part of Cancellation, we will return a failure task result taskResult = new OutOfProcTaskHostTaskResult(TaskCompleteType.Failure); } else if (ExceptionHandling.IsCriticalException(e)) { throw; } else { taskResult = new OutOfProcTaskHostTaskResult(TaskCompleteType.CrashedDuringExecution, e); } } finally { try { _isTaskExecuting = false; IDictionary <string, string> currentEnvironment = CommunicationsUtilities.GetEnvironmentVariables(); currentEnvironment = UpdateEnvironmentForMainNode(currentEnvironment); if (taskResult == null) { taskResult = new OutOfProcTaskHostTaskResult(TaskCompleteType.Failure); } lock (_taskCompleteLock) { _taskCompletePacket = new TaskHostTaskComplete ( taskResult, currentEnvironment ); } foreach (TaskParameter param in taskParams.Values) { // Tell remoting to forget connections to the parameter RemotingServices.Disconnect(param); } // Restore the original clean environment CommunicationsUtilities.SetEnvironment(_savedEnvironment); } catch (Exception e) { lock (_taskCompleteLock) { // Create a minimal taskCompletePacket to carry the exception so that the TaskHostTask does not hang while waiting _taskCompletePacket = new TaskHostTaskComplete(new OutOfProcTaskHostTaskResult(TaskCompleteType.CrashedAfterExecution, e), null); } } finally { // Call CleanupTask to unload any domains and other necessary cleanup in the taskWrapper _taskWrapper.CleanupTask(); // The task has now fully completed executing _taskCompleteEvent.Set(); } } }
public void TestValidConstructors() { TaskHostConfiguration config = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null); TaskHostConfiguration config2 = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", null); IDictionary <string, object> parameters = new Dictionary <string, object>(); TaskHostConfiguration config3 = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters); IDictionary <string, object> parameters2 = new Dictionary <string, object>(); parameters2.Add("Text", "Hello!"); parameters2.Add("MyBoolValue", true); parameters2.Add("MyITaskItem", new TaskItem("ABC")); parameters2.Add("ItemArray", new ITaskItem[] { new TaskItem("DEF"), new TaskItem("GHI"), new TaskItem("JKL") }); TaskHostConfiguration config4 = new TaskHostConfiguration( 1, Directory.GetCurrentDirectory(), null, #if FEATURE_THREAD_CULTURE Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, #else CultureInfo.CurrentCulture, CultureInfo.CurrentCulture, #endif #if FEATURE_APPDOMAIN null, #endif 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", @"c:\MyTasks\MyTask.dll", parameters2); }
public void ConstructorWithEmptyLocation() { TaskHostConfiguration config = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, "TaskName", String.Empty, null); }
public void ConstructorWithNullName() { TaskHostConfiguration config = new TaskHostConfiguration(1, Environment.CurrentDirectory, null, Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture, null, 1, 1, @"c:\my project\myproj.proj", _continueOnErrorDefault, null, @"c:\my tasks\mytask.dll", null); }