리소스를 만들고 작업과 연결하십시오
MPP 파일로 작업하는 동안 리소스를 생성하고 프로젝트의 작업에 연결해야 할 수도 있습니다. 이 기사에서는 .NET 응용 프로그램에 MPP 파일을로드하고 vSTO 및 .NET 용 aspose.tasks를 사용하여 작업에 리소스를 할당하는 방법을 보여줍니다.
소개
프로젝트 스케줄링에서 자원을 작업과 연관하면 작업량 계획, 비용 추정 및 진행 상황 추적이 가능합니다. 자원은 일반적으로 사람, 장비 또는 자재를 나타내며 의미있는 프로젝트 분석의 핵심입니다.
이 기사는 프로그래밍 방식으로 다음과 같은 방법을 보여줍니다.
- Microsoft 프로젝트 파일에 새로운 리소스를 추가하십시오.
- 해당 리소스를 작업에 할당하십시오.
이 기능은 레거시 VSTO Interop과 .NET API 용 현대적인 Aspose.tasks를 모두 사용하여 시연됩니다.
VSTO를 사용하여 리소스 및 작업에 대한 링크를 작성하십시오
리소스를 만들고 Microsoft Office Interop을 사용하여 작업에 연결하려면 :
- 비주얼 스튜디오 프로젝트를 만듭니다.
- com 탭에서 Microsoft Project 12.0 객체 라이브러리에 대한 참조를 추가하십시오.
microsoft.office.interop.msproject
를 가져옵니다.- 아래 코드 샘플을 사용하십시오.
스크린 샷 전후에 Gantt 및 리소스보기의 프로젝트 구조를 보여줍니다.
📎 입력 파일 : 간트 차트보기
📎 입력 파일 : 리소스 시트보기
VSTO 코드 예제
1Microsoft.Office.Interop.MSProject.Application projectApplication = new Application();
2object missingValue = System.Reflection.Missing.Value;
3
4projectApplication.FileOpenEx(@"SampleProject.mpp",
5 missingValue, missingValue, missingValue, missingValue,
6 missingValue, missingValue, missingValue, missingValue,
7 missingValue, missingValue, PjPoolOpen.pjPoolReadOnly,
8 missingValue, missingValue, missingValue, missingValue,
9 missingValue);
10
11Microsoft.Office.Interop.MSProject.Project project = projectApplication.ActiveProject;
12
13int iResourceId = 1;
14
15foreach (Task tsk in project.Tasks)
16{
17 string developer = "Developer0" + iResourceId;
18 project.Resources.Add(developer, iResourceId);
19 tsk.Assignments.Add(tsk.ID, iResourceId, missingValue);
20 iResourceId++;
21}
22
23projectApplication.FileCloseAll(Microsoft.Office.Interop.MSProject.PjSaveType.pjSave);
Output file: Gantt chart view
Output file: Resource sheet view
Notes
- Resources are added sequentially and assigned per task.
- The
Assignments.Add
method requires task and resource identifiers. - COM interop requires careful lifecycle and reference management.
Create Resources and Link to Tasks using Aspose.Tasks for .NET
To accomplish the same using Aspose.Tasks:
- Create a Visual Studio project.
- Add a reference to Aspose.Tasks via the .NET tab.
- Import the
Aspose.Tasks
namespace. - Use the example code provided below.
1Project project = new Project("New Project.mpp");
2
3// Declare ChildTasksCollector class object
4ChildTasksCollector collector = new ChildTasksCollector();
5
6// Use TaskUtils to get all children tasks in RootTask
7TaskUtils.Apply(project.RootTask, collector, 0);
8
9// Define Resources
10for (int i = 0; i <= 4; i++)
11{
12 // Add resource to project
13 Resource newResource = project.Resources.Add("Developer0" + i);
14 newResource.Set(Rsc.Type, ResourceType.Work);
15
16 // Define assignment
17 ResourceAssignment newResourceAssignment = project.ResourceAssignments.Add((Task)collector.Tasks[i], newResource);
18}
19
20project.Save("CreateResourcesAndLinkToTasks_out.mpp", SaveFileFormat.MPP);
Highlights
- Resources are added via the
project.Resources.Add
method. - Assignments are linked to tasks using
project.ResourceAssignments.Add(task, resource)
. - The API is concise, fully managed, and compatible with server environments.
Comparison Table
Feature | VSTO / Interop | Aspose.Tasks for .NET |
---|---|---|
Microsoft Project required | ✅ Yes | ❌ No |
Platform support | 🖥 Windows only | ✅ Cross-platform |
Deployment-friendly | ❌ Requires Office runtime | ✅ Self-contained .NET |
API verbosity | ⚠ High | ✅ Minimal and intuitive |
Assignment method | Assignments.Add(taskID, resourceID) | ResourceAssignments.Add(task, res) |
Output file format flexibility | Limited | ✅ MPP, XML, PDF, HTML, etc. |
Summary
Creating and assigning resources is a key step in building a realistic and trackable project plan. While VSTO offers native access to Microsoft Project’s object model, it comes with limitations in portability, scalability, and code complexity.
Aspose.Tasks for .NET provides a high-level API that enables efficient resource management in MPP files — all without requiring Microsoft Project to be installed. This makes it the ideal solution for web apps, services, and cross-platform .NET workloads.
For related scenarios, check out: