ลงทะเบียน .addin
Revit จะไม่โหลด DLL ของคุณจนกว่าจะมีไฟล์ .addin
ตัวอย่าง:
<?xml version="1.0" encoding="utf-8" standalone="no"?><RevitAddIns> <!-- กำหนดประเภทเป็น Command เนื่องจากเราเพิ่งสร้างปุ่มคำสั่งเอาไว้ในไฟล Command.cs --> <AddIn Type="Command"> <!-- ชื่อ Plugin รวม --> <Name>RevitToolkit</Name> <!-- ตำแหน่งของ DLL อ้างอิงจากโฟลเดอร์ \Addins\2026\ (แนะนำให้ใส่ Subfolder แบบนี้) --> <Assembly>RevitToolkit\RevitToolkit.dll</Assembly> <!-- GUID เฉพาะตัวของโปรเจ็กต์ (ใช้ Tool อย่าง guidgen เพื่อสร้างใหม่ทุกครั้งห้ามก๊อปปี้คนอื่น) --> <AddInId>E8AD8FD2-04D9-4A3A-A8B6-C93CB6C7C489</AddInId> <!-- ชื่อ Namespace แบบเติม . และชื่อ Class (ต้องสะกดให้เป๊ะตามโค้ด C#) --> <FullClassName>RevitToolkit.Command</FullClassName> <!-- ค่าชื่อปุ่ม (บังคับต้องมีหากเป็นประเภท Command) --> <Text>RevitToolkit Hello</Text> <!-- ข้อมูลผู้พัฒนา (มักเอาไว้สำหรับโชว์ใน Dialog) --> <VendorId>PREMIX</VendorId> <VendorDescription>Premix Company - Software Dev Team</VendorDescription> </AddIn></RevitAddIns>ตำแหน่งที่ Revit อ่าน
Section titled “ตำแหน่งที่ Revit อ่าน”C:\ProgramData\Autodesk\Revit\Addins\2026\🔍 เจาะลึกความหมายของแต่ละ Tag ใน Manifest (.addin)
Section titled “🔍 เจาะลึกความหมายของแต่ละ Tag ใน Manifest (.addin)”ไฟล์ .addin หรือ Manifest File ทำหน้าที่เสมือน “บัตรประชาชนอย่างเป็นทางการ” ของปลั๊กอิน เพื่อส่งสัญญาณให้ Revit โหลดรหัสของเราเข้ามาประมวลผล นี่คือหน้าที่อย่างละเอียดของแท็กแต่ละบรรทัดครับ:
1. <AddIn Type="Command"> หรือ <AddIn Type="Application">
Section titled “1. <AddIn Type="Command"> หรือ <AddIn Type="Application">”- ทำหน้าที่อะไร: กำหนดสถาปัตยกรรมของปลั๊กอิน:
Type="Command": ใช้รันคำสั่งย่อยเมื่อกดปุ่ม เหมาะกับสคริปต์สั้นๆ หรือการทำงานแล้วจบ คลาสปลายทางต้องสืบทอดจากIExternalCommandType="Application": เหมาะสำหรับการวาดเครื่องมือ Ribbon เมนู หรือคอยดักฟังการแจ้งเตือนของโปรแกรม (Events) ตลอดอายุการเปิดโปรแกรม คลาสปลายทางต้องสืบทอดจากIExternalApplication
2. <Name>
Section titled “2. <Name>”- ทำหน้าที่อะไร: ชื่อสำหรับระบุตัวตนปลั๊กอิน (มักตั้งให้ตรงกับชื่อโปรเจ็กต์) ใช้ในการควบคุมเปิด/ปิดการโหลดภายในหลังบ้านของ Revit
3. <Assembly>
Section titled “3. <Assembly>”- ทำหน้าที่อะไร: เส้นทาง (Path) ไปยังไฟล์คอมไพล์หลัก
.dllของเรา - ข้อแนะนำพิเศษ: ควรตั้งเป็นเส้นทางสัมพัทธ์ (Relative Path) เช่น
RevitToolkit\RevitToolkit.dllแทนการใส่ Drive อักษรตายตัว เพื่อความสะดวกในการย้ายโปรเจ็กต์หรือนำไปแจกจ่ายเครื่องอื่น
4. <AddInId> (GUID)
Section titled “4. <AddInId> (GUID)”- ทำหน้าที่อะไร: รหัสประจำตัวชิ้นเดียวในโลก (Globally Unique Identifier) ของตัวปลั๊กอิน
- ทำไมห้ามก๊อปปี้คนอื่น: Revit ใช้ ID นี้ในการลงทะเบียนป้องกันการโหลดโค้ดขัดแย้งเชิงหน่วยความจำ หากมีปลั๊กอิน 2 ตัวใช้ GUID ชนกัน Revit จะเลือกโหลดเพียงตัวแรกและดีดแจ้งเตือนตัวที่สองพังทันที! (สร้าง GUID ใหม่ได้จากหน้าต่างเครื่องมือใน Visual Studio เมนู
Tools > Create GUID)
5. <FullClassName>
Section titled “5. <FullClassName>”- ทำหน้าที่อะไร: เส้นทางแบบเต็มรูปแบบเพื่อเจาะจงจุดรันงาน ในรูปแบบ
Namespace.ClassName(เช่นRevitToolkit.CommandหรือRevitToolkit.App) - ทำไมต้องระวัง: ต้องสะกดอักษรพิมพ์ใหญ่-เล็ก ให้ตรงกับโค้ด C# 100% มิฉะนั้น Revit จะไม่สามารถหาทางเข้าคลาสทำงานเจอและจะเด้งล้มเหลวทันทีที่คลิกปุ่ม
6. <Text>
Section titled “6. <Text>”- ทำหน้าที่อะไร: ข้อความที่จะไปปรากฏอยู่ใต้ปุ่มคำสั่งในแท็บ
Add-ins > External Tools(แท็กนี้จะใช้งานได้เฉพาะประเภทType="Command"เท่านั้น หากใช้Applicationจะต้องลบแท็กนี้ออกเพื่อป้องกันการ Error)
7. <VendorId> และ <VendorDescription>
Section titled “7. <VendorId> และ <VendorDescription>”- ทำหน้าที่อะไร: รหัสย่อและข้อความผู้พัฒนาโปรแกรม ใช้ระบุลิขสิทธิ์ของนักพัฒนาหรือบริษัทเมื่อเกิดคำถามการทำงาน ช่วยให้ผู้ใช้ทราบว่าปลั๊กอินตัวนี้ผลิตโดยใคร