Додавання нового завдання з aspose.tasks vs vsto
Працюючи з файлами Microsoft Project (MPP/XML), вам часто потрібно додавати нові завдання до проектів. У цій статті показано, як завантажувати файли MPP у ваші програми .NET та додати нові завдання, використовуючи традиційні API VSTO Interop та сучасний Aspope.Tasks для .NET бібліотеки.
Огляд
Можливість програмного управління завданнями є важливими для автоматизованих робочих процесів планування проекту. Ця стаття демонструє, як вставити нові завдання у файли Microsoft Project за допомогою двох підходів:
- Microsoft Office Automation (VSTO): покладається на встановлену програму Microsoft Project та COM Interop.
- aspose.tasks для .net: окрема бібліотека .NET, яка не вимагає встановлення проекту Microsoft.
Обидва приклади ілюструють один і той же сценарій - додавання єдиного завдання під назвою " Task1 "
- щоб допомогти вам чітко зрозуміти відмінності в синтаксисі, залежності та моделі програмування.
Додайте завдання за допомогою VSTO
Наступний код демонструє, як додати нове завдання до наявного файлу .mpp
за допомогою VSTO (інструменти Visual Studio для Office). Цей підхід залежить від COM Interop і вимагає встановлення проекту Microsoft та належним чином ліцензією на машину.
1Microsoft.Office.Interop.MSProject.Application projectApplication = new Application();
2
3object missingValue = System.Reflection.Missing.Value;
4
5projectApplication.FileOpenEx(@"C:\Project1.mpp",
6 missingValue, missingValue, missingValue, missingValue,
7 missingValue, missingValue, missingValue, missingValue,
8 missingValue, missingValue, PjPoolOpen.pjPoolReadOnly,
9 missingValue, missingValue, missingValue, missingValue,
10 missingValue);
11
12Microsoft.Office.Interop.MSProject.Project project = projectApplication.ActiveProject;
13
14Microsoft.Office.Interop.MSProject.Task task;
15task = project.Tasks.Add("Task1", 1);
16
17task.Start = "8/23/2012";
18task.Duration = 3 * 8 * 60; // Duration in minutes (3 working days * 8 hours/day * 60 minutes)
19task.Text1 = "Task1";
20
21projectApplication.FileCloseAll(Microsoft.Office.Interop.MSProject.PjSaveType.pjSave);
Notes
- Duration must be specified in minutes, which is less intuitive compared to using time units directly.
- The API requires careful handling of optional parameters (
Missing.Value
) and COM resource cleanup. - The project file must be opened via
FileOpenEx
and explicitly saved and closed usingFileCloseAll
.
Add a Task Using Aspose.Tasks for .NET
In contrast, the code below shows how to accomplish the same task using Aspose.Tasks for .NET. This API works independently of Microsoft Project and is ideal for web applications, services, and containerized environments.
1Project project = new Project("New Project.mpp");
2
3Task task = project.RootTask.Children.Add("Task1");
4task.Set(Tsk.ActualStart, DateTime.Parse("23-Aug-2012"));
5
6// Set duration in hours
7task.Set(Tsk.Duration, project.GetDuration(24, TimeUnitType.Hour));
8task.Set(Tsk.DurationFormat, TimeUnitType.Day);
9
10project.Save("AddNewTask_out.xml", SaveFileFormat.XML);
Highlights
- Tasks are created using a clean object model under
RootTask.Children
. - Duration can be specified in hours, days, or other units using
TimeUnitType
. - The
Set
method provides type-safe, field-specific updates to task properties. - No COM interop or Office installation is required — the code runs cross-platform.
Summary
Aspect | VSTO / Interop | Aspose.Tasks for .NET |
---|---|---|
Requires MS Project | ✅ Yes | ❌ No |
Dependency Type | COM (Microsoft.Office.Interop.MSProject) | Pure .NET |
Cross-platform support | ❌ Windows-only | ✅ Windows, Linux, macOS (via .NET) |
Deployment suitability | ⚠ Desktop/server only | ✅ Web, containers, serverless |
Code complexity | ⚠ High (verbose, boilerplate-heavy) | ✅ Simple and expressive |
Aspose.Tasks enables modern, scalable, and maintainable solutions for working with Microsoft Project formats. Migrating from VSTO unlocks better deployment flexibility, improved reliability, and a more developer-friendly API surface.
To continue exploring, check out the following pages: