Deploy Workflow
ถ้า .addin ชี้ไป bin\Debug\... ตรง ๆ คุณจะเจอปัญหา path เปลี่ยนบ่อย
แนวทางที่ดีกว่าคือตั้งให้ copy ไฟล์ไปที่ Addins folder ของ Revit โดยตรงเลย:
- copy
RevitToolkit.addinไปC:\ProgramData\Autodesk\Revit\Addins\2026\ - copy
RevitToolkit.dllและไฟล์อื่นๆ เข้าไปในโฟลเดอร์ย่อยC:\ProgramData\Autodesk\Revit\Addins\2026\RevitToolkit\
วิธีนี้ทำให้เราใช้ Relative Path ในไฟล์ .addin ได้ ซึ่งจะทำให้เราย้ายโปรเจ็กต์ไปเครื่องไหนก็ Build ติดเสมอ!
❓ ทำไมต้องใช้ระบบตัวแปร (แบบใหม่) แทนการระบุพาธตรงๆ (แบบเก่า)?
Section titled “❓ ทำไมต้องใช้ระบบตัวแปร (แบบใหม่) แทนการระบุพาธตรงๆ (แบบเก่า)?”หากคุณเคยศึกษาการทำ Deploy Target แบบทั่วไป คุณอาจคุ้นเคยกับการพิมพ์ระบุปีหรือโฟลเดอร์ปลายทางลงไปตรงๆ (Hardcode) เช่นพิมพ์ 2026 ซ้ำๆ ทุกบรรทัด แต่การปรับมาใช้โครงสร้างโปรเจ็กต์แบบจัดการด้วยตัวแปร (Dynamic Variables) มีข้อดีที่เหนือกว่าดังนี้ครับ:
- อัปเกรดรุ่น Revit ได้ง่ายในพริบตา (Future-Proofing):
- หากคุณพิมพ์เลขปี
2026ฝังลงไปในคำสั่งคัดลอกโดยตรง เมื่อถึงเวลาที่คุณต้องย้ายโปรเจ็กต์ไปใช้งานบน Revit 2027 คุณจะต้องตามไปแก้ตัวเลขปีนี้ทีละหลายจุดในโค้ดคัดลอก เสี่ยงต่อการพิมพ์ตกหล่นหรือสะกดผิดพลาด - การดึงตัวแปรมาควบคุมไว้ใน
<RevitYear>2026</RevitYear>ด้านบนสุด ทำให้เวลาต้องการเปลี่ยนรุ่นของ Revit สำหรับ Deploy คุณสามารถ แก้ไขปีแค่ที่จุดเดียว ตัวแปรพาธที่เหลือจะอัปเดตและคำนวณปลายทางใหม่ให้ทันที!
- หากคุณพิมพ์เลขปี
- ปลอดภัยและเสถียรสำหรับการเปิดบนเครื่องใหม่ (Robustness):
- มีการใส่คำสั่ง
<MakeDir>ตรวจสอบและสร้างโฟลเดอร์ปลายทางให้ก่อนการก๊อปปี้เสมอ ทำให้เมื่อคุณย้ายซอร์สโค้ดนี้ไปรันที่เครื่องอื่น หรือเครื่องที่เพิ่งติดตั้ง Revit ใหม่และยังไม่เคยสร้างโฟลเดอร์ปลั๊กอินมาก่อน ตัวระบบก็สามารถสร้างโฟลเดอร์และ Build ผ่านได้ทันทีโดยไม่แจ้ง Error
- มีการใส่คำสั่ง
- โค้ดเป็นระเบียบเรียบร้อย (Maintainability):
- ช่วยซ่อนและกรองพาธยาวเหยียดของระบบออกไป ทำให้คำสั่งคัดลอกไฟล์จริงใน
<Target>มีความกระชับ สั้น และสามารถเปิดอ่านเพื่อทำความเข้าใจได้ง่ายในครั้งเดียว
- ช่วยซ่อนและกรองพาธยาวเหยียดของระบบออกไป ทำให้คำสั่งคัดลอกไฟล์จริงใน
วิธีการแก้ไขไฟล์ โปรเจ็กต์.csproj
Section titled “วิธีการแก้ไขไฟล์ โปรเจ็กต์.csproj”ให้เปิดไฟล์ โปรเจ็กต์.csproj ของคุณขึ้นมา แล้วทำการแทรกค่าตัวแปรลงในกลุ่ม <PropertyGroup> เดิม และวางกลุ่มแท็ก <Target> ไว้ด้านล่างสุดก่อนแท็กปิด </Project> ดังตัวอย่างเต็มรูปแบบนี้ครับ (ห้ามลบโค้ดเดิมของคุณทิ้ง):
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0-windows</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <PlatformTarget>x64</PlatformTarget> <MSBuildWarningsAsMessages>MSB3277</MSBuildWarningsAsMessages>
<!-- 🟢 1. แทรกตัวแปรจัดการพาธเพิ่มเติมไว้ตรงนี้ --> <RevitYear>2026</RevitYear> <RevitAddinDir>$(ProgramData)\Autodesk\Revit\Addins\$(RevitYear)\</RevitAddinDir> <DeployDir>$(RevitAddinDir)$(AssemblyName)\</DeployDir> </PropertyGroup>
<ItemGroup> <!-- กลุ่มรายการ Reference อ้างอิงไฟล์ DLL ของ Revit ของคุณ... --> <Reference Include="RevitAPI"> <HintPath>C:\Program Files\Autodesk\Revit 2026\RevitAPI.dll</HintPath> <Private>false</Private> </Reference> </ItemGroup>
<!-- 🟢 2. วางส่วน Target สั่งก๊อปปี้ไฟล์ไว้บรรทัดล่างสุดก่อนปิด </Project> --> <Target Name="CopyRevitFiles" AfterTargets="Build"> <MakeDir Directories="$(RevitAddinDir)" /> <MakeDir Directories="$(DeployDir)" />
<Copy SourceFiles="$(TargetPath)" DestinationFiles="$(DeployDir)$(TargetFileName)" />
<Copy SourceFiles="$(ProjectDir)$(AssemblyName).addin" DestinationFiles="$(RevitAddinDir)$(AssemblyName).addin" /> </Target></Project>ผลลัพธ์ที่ต้องการ
Section titled “ผลลัพธ์ที่ต้องการ”- Revit อ่าน
.addinจากProgramData .addinชี้แบบ Relative Path ไปหา DLL ที่อยู่ในโฟลเดอร์รหัสเดียวกัน- ไม่มี Path ส่วนตัวของเครื่องคุณปะปนใน Source Code เลย!