For an extended attribute of Lookup type, you need to define OutlineCodes that will be used to generate an extended attribute of this type. Please have a look at it for your reference and let us know your feedback.
String path = “\”;
Project project = new Project(@“Blank2010.mpp”);
OutlineCodeDefinition textOutline = new OutlineCodeDefinition();
project.OutlineCodes.Add(textOutline);
// add a mask for text field
OutlineMask mask = new OutlineMask();
mask.Type = MaskType.Characters;
textOutline.Masks.Add(mask);
OutlineValue textValue = new OutlineValue();
textValue.Value = “Text value 1”;
textValue.ValueId = 1;
textValue.Type = OutlineValueType.Text;
textValue.Description = “Text value descr 1”;
textValue.FieldGuid = Guid.NewGuid().ToString().ToUpper();
textOutline.Values.Add(textValue);
OutlineValue textValue2 = new OutlineValue();
textValue2.Value = “Text value 2”;
textValue2.ValueId = 2;
textValue2.Type = OutlineValueType.Text;
textValue2.Description = “Text value descr 2”;
textValue2.FieldGuid = Guid.NewGuid().ToString().ToUpper();
textOutline.Values.Add(textValue2);
// Add new text27 extended attribute
ExtendedAttributeDefinition taskTextAttr = new ExtendedAttributeDefinition();
taskTextAttr.ElementType = ElementType.Null;
taskTextAttr.Alias = “New text27 attribute”;
taskTextAttr.FieldId = ExtendedAttributeTask.Text27.ToString(“D”);
// add a reference to lookup table
taskTextAttr.LookupUid = textOutline.Guid;
taskTextAttr.CfType = CustomFieldType.Text;
project.ExtendedAttributes.Add(taskTextAttr);
// Add new task and assign attribute value
Aspose.Tasks.Task task = project.RootTask.Children.Add(“New task”);
task.Set(Tsk.Start, new DateTime(2016, 7, 4, 8, 0, 0));
task.Set(Tsk.Duration, project.GetDuration(8, TimeUnitType.Hour));
ExtendedAttribute taskAttrText = taskTextAttr.CreateExtendedAttribute(textValue);
task.ExtendedAttributes.Add(taskAttrText);
project.Save(path + “SavedProject.mpp”, SaveFileFormat.MPP);