Thank you for sharing the sample code.
When Calculation mode is set to Manual, the project recalculations need to be called manually. I have added the Project.Recalculate() before saving to disc and the exception is no more raised. Please try it with the highlighted changes as mentioned in the code sample below and let us know your feedback.
private static void
CreateFile(string fileName, string saveFileName)<o:p></o:p>
{
Project
project = new Project(fileName);
project.CalculationMode = CalculationMode.Manual;
Task
Task1 = project.RootTask.Children.Add();
SetTaskData(Task1, 1);
Task
Task2 = Task1.Children.Add();
SetTaskData(Task2, 2);
Task
Task3 = Task2.Children.Add();
SetTaskData(Task3, 3);
Task
Task4 = Task2.Children.Add();
SetTaskData(Task4, 4);
Resource
rsc1 = project.Resources.Add("Resource 1");
rsc1.Set(Rsc.Type,
ResourceType.Material);
Resource
rsc2 = project.Resources.Add("Resource 2");
rsc2.Set(Rsc.Type,
ResourceType.Material);
project.ResourceAssignments.Add(Task3,
rsc1, 3);
project.ResourceAssignments.Add(Task3,
rsc2, 5);
project.ResourceAssignments.Add(Task4, rsc2,
5);
project.Recalculate();
project.Save(saveFileName,
Aspose.Tasks.Saving.SaveFileFormat.MPP);
}
private static void
UpdateFile(string fileName)
{
Project
project = new Project(fileName);
ChildTasksCollector
collector1 = new ChildTasksCollector(); // Create a
ChildTasksCollector instance
TaskUtils.Apply(project.RootTask,
collector1, 1); // Collect all the tasks from RootTask using TaskUtils
foreach (Task task in
collector1.Tasks)
{
if
(task.Children.Count == 0)
{
task.Set(Tsk.Start,
task.Get(Tsk.Start).AddDays(1));
task.Set(Tsk.Finish,
task.Get(Tsk.Finish).AddDays(5));
while
(task.Assignments.Count > 0)
task.Assignments.First().Delete();
project.ResourceAssignments.Add(task, project.Resources.First(), 5);
}
}
project.Recalculate();
project.Save(fileName, Aspose.Tasks.Saving.SaveFileFormat.MPP);
}