Skip to content

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) มีข้อดีที่เหนือกว่าดังนี้ครับ:

  1. อัปเกรดรุ่น Revit ได้ง่ายในพริบตา (Future-Proofing):
    • หากคุณพิมพ์เลขปี 2026 ฝังลงไปในคำสั่งคัดลอกโดยตรง เมื่อถึงเวลาที่คุณต้องย้ายโปรเจ็กต์ไปใช้งานบน Revit 2027 คุณจะต้องตามไปแก้ตัวเลขปีนี้ทีละหลายจุดในโค้ดคัดลอก เสี่ยงต่อการพิมพ์ตกหล่นหรือสะกดผิดพลาด
    • การดึงตัวแปรมาควบคุมไว้ใน <RevitYear>2026</RevitYear> ด้านบนสุด ทำให้เวลาต้องการเปลี่ยนรุ่นของ Revit สำหรับ Deploy คุณสามารถ แก้ไขปีแค่ที่จุดเดียว ตัวแปรพาธที่เหลือจะอัปเดตและคำนวณปลายทางใหม่ให้ทันที!
  2. ปลอดภัยและเสถียรสำหรับการเปิดบนเครื่องใหม่ (Robustness):
    • มีการใส่คำสั่ง <MakeDir> ตรวจสอบและสร้างโฟลเดอร์ปลายทางให้ก่อนการก๊อปปี้เสมอ ทำให้เมื่อคุณย้ายซอร์สโค้ดนี้ไปรันที่เครื่องอื่น หรือเครื่องที่เพิ่งติดตั้ง Revit ใหม่และยังไม่เคยสร้างโฟลเดอร์ปลั๊กอินมาก่อน ตัวระบบก็สามารถสร้างโฟลเดอร์และ Build ผ่านได้ทันทีโดยไม่แจ้ง Error
  3. โค้ดเป็นระเบียบเรียบร้อย (Maintainability):
    • ช่วยซ่อนและกรองพาธยาวเหยียดของระบบออกไป ทำให้คำสั่งคัดลอกไฟล์จริงใน <Target> มีความกระชับ สั้น และสามารถเปิดอ่านเพื่อทำความเข้าใจได้ง่ายในครั้งเดียว

วิธีการแก้ไขไฟล์ โปรเจ็กต์.csproj

Section titled “วิธีการแก้ไขไฟล์ โปรเจ็กต์.csproj”

ให้เปิดไฟล์ โปรเจ็กต์.csproj ของคุณขึ้นมา แล้วทำการแทรกค่าตัวแปรลงในกลุ่ม <PropertyGroup> เดิม และวางกลุ่มแท็ก <Target> ไว้ด้านล่างสุดก่อนแท็กปิด </Project> ดังตัวอย่างเต็มรูปแบบนี้ครับ (ห้ามลบโค้ดเดิมของคุณทิ้ง):

โปรเจ็กต์.csproj
<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 เลย!