บทนำ
เมื่อทำงานในโปรเจกต์ .NET ที่อ้างอิงถึง COM DLL เป็นสิ่งสำคัญที่ต้องตรวจสอบว่าโปรเจกต์ของคุณรักษาเวอร์ชันที่ถูกต้องของ interop DLL ไว้ สิ่งนี้มีความสำคัญไม่เพียงแต่เพื่อการติดตามความเข้ากันได้ แต่ยังเพื่อให้แน่ใจว่าแอปพลิเคชันของคุณทำงานได้อย่างราบรื่นระหว่างเวอร์ชันอัปเดตและแพตช์ ในโพสต์บล็อกนี้ เราจะสำรวจวิธีการจัดการเวอร์ชันของการอ้างอิง COM DLL ของคุณในสภาพแวดล้อม .NET อย่างถูกต้องและจัดการกับอุปสรรคทั่วไป
ปัญหาที่พบ
ปัญหาจะเกิดขึ้นเมื่อคุณใช้ Visual Studio เพื่อเพิ่มการอ้างอิง COM ตามค่าเริ่มต้น เวอร์ชันที่กำหนดอาจไม่ตรงกับเวอร์ชันของ COM DLL ดั้งเดิม ความไม่ลงรอยกันนี้อาจทำให้เกิดความยากลำบาก โดยเฉพาะเมื่อมีการอัปเดตแพตช์ คุณอาจพบว่าตนเองถามว่า:
- ฉันจะสามารถมั่นใจได้อย่างไรว่า interop DLL ที่สร้างขึ้นมีเวอร์ชันที่ถูกต้อง?
- มีวิธีใดที่สามารถรวมหมายเลขการสร้างควบคู่กับเวอร์ชันหลักและเวอร์ชันย่อยได้หรือไม่?
มาสำรวจวิธีแก้ไขกันเถอะ!
การเข้าใจเวอร์ชันการอ้างอิง COM
ก่อนที่เราจะไปสู่การแก้ไข เป็นสิ่งสำคัญที่จะต้องเข้าใจว่าเวอร์ชันมาจากไหน:
-
ไลบรารีชนิด (Type Libraries หรือ TypeLibs): ใน COM การทำเวอร์ชันจะเกี่ยวข้องกับ Type Library มากกว่าตัว DLL เอง GUID จะหมายถึง TypeLib และหมายเลขเวอร์ชันจะสอดคล้องกับแอตทริบิวต์ VersionMajor และ VersionMinor ของ TypeLib นั้นๆ
-
การจัดเก็บใน Registry: หมายเลขเวอร์ชันจะถูกเก็บในรีจิสทรีของ Windows ภายใต้:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
ที่นี่ เวอร์ชันหลักต้องเป็นอะไรบางอย่าง ในขณะที่เวอร์ชันย่อยสามารถตั้งค่าเป็นศูนย์ ซึ่งหมายความว่าจะนำเข้าที่เวอร์ชันล่าสุดที่ตรงกัน
ขั้นตอนการจัดการเวอร์ชัน COM DLL ของคุณ
1. อ้างอิง Type Library แทนที่จะเป็น DLL
แทนที่จะอ้างอิง COM DLL โดยตรง ให้ทำการอ้างอิง Type Library ด้วยวิธีนี้ คุณจะสืบทอดเวอร์ชันที่เกี่ยวข้องกับมัน ตรวจสอบให้แน่ใจว่าเมื่อใช้ TlbImp
คุณรวมธง /asmversion
เพื่อระบุเวอร์ชันที่ต้องการ
2. ใช้ Visual Studio เพื่อตั้งค่าเวอร์ชัน
เพื่อกำหนดเวอร์ชันด้วยตนเองขณะใช้ Visual Studio การแก้ไขไฟล์ .vcproj
อาจช่วยได้ นี่เป็นตัวอย่างเพื่อเป็นแนวทาง:
<ItemGroup>
<COMReference Include="MYDLLLib">
<Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
3. ตรวจสอบการตั้งค่า Registry
หลังจากการเปลี่ยนแปลง ให้ตรวจสอบว่าหมายเลขเวอร์ชันใหม่ปรากฏในรีจิสทรีอย่างถูกต้อง ขั้นตอนการยืนยันนี้จะช่วยให้คุณมั่นใจว่าแอปพลิเคชันของคุณจะทำงานอย่างถูกต้องระหว่างการอัปเดต
4. ข้อจำกัดของการสนับสนุนเวอร์ชัน
เสียดายที่ระบบเวอร์ชันสนับสนุนเฉพาะหมายเลขเวอร์ชันหลักและหมายเลขเวอร์ชันย่อย และไม่รองรับเวอร์ชันการสร้าง สิ่งนี้ถูกกำหนดโดยไฟล์ IDL ที่เกี่ยวข้องกับ TypeLib ของคุณ หากคุณต้องการข้อมูลเวอร์ชันที่ละเอียดมากขึ้น ให้พิจารณาการใช้ขนบธรรมเนียมในการตั้งชื่อในระบบการจัดการโปรเจกต์ของคุณ
บทสรุป
การมั่นใจว่า interop DLL จาก COM DLL ที่อ้างอิงในโปรเจกต์ .NET ของคุณรักษาเวอร์ชันที่ถูกต้องนั้นอาจซับซ้อน แต่ด้วยการทำตามขั้นตอนที่ระบุข้างต้น คุณจะสามารถบรรลุแนวทางที่จัดการได้มากขึ้น จำไว้ว่า กุญแจสำคัญคือการมุ่งเน้นที่เวอร์ชัน TypeLib แทนที่จะเป็นเวอร์ชัน DLL โดยตรง และตรวจสอบการตั้งค่าในรีจิสทรีหลังการปรับเปลี่ยน
โดยการใช้วิธีการเหล่านี้ คุณจะไม่เพียงแต่หลีกเลี่ยงความหงุดหงิดจากเวอร์ชันที่ไม่ตรงกัน แต่ยังช่วยทำให้การอัปเดตของคุณเป็นไปอย่างราบรื่นและรักษาความสมบูรณ์ของแอปพลิเคชันของคุณผ่านแพตช์
หากคุณมีคำถามเพิ่มเติมหรือข้อมูลเกี่ยวกับการจัดการเวอร์ชัน COM DLL ในโปรเจกต์ .NET โปรดแชร์ประสบการณ์ของคุณ!