บทนำ

เมื่อทำงานในโปรเจกต์ .NET ที่อ้างอิงถึง COM DLL เป็นสิ่งสำคัญที่ต้องตรวจสอบว่าโปรเจกต์ของคุณรักษาเวอร์ชันที่ถูกต้องของ interop DLL ไว้ สิ่งนี้มีความสำคัญไม่เพียงแต่เพื่อการติดตามความเข้ากันได้ แต่ยังเพื่อให้แน่ใจว่าแอปพลิเคชันของคุณทำงานได้อย่างราบรื่นระหว่างเวอร์ชันอัปเดตและแพตช์ ในโพสต์บล็อกนี้ เราจะสำรวจวิธีการจัดการเวอร์ชันของการอ้างอิง COM DLL ของคุณในสภาพแวดล้อม .NET อย่างถูกต้องและจัดการกับอุปสรรคทั่วไป

ปัญหาที่พบ

ปัญหาจะเกิดขึ้นเมื่อคุณใช้ Visual Studio เพื่อเพิ่มการอ้างอิง COM ตามค่าเริ่มต้น เวอร์ชันที่กำหนดอาจไม่ตรงกับเวอร์ชันของ COM DLL ดั้งเดิม ความไม่ลงรอยกันนี้อาจทำให้เกิดความยากลำบาก โดยเฉพาะเมื่อมีการอัปเดตแพตช์ คุณอาจพบว่าตนเองถามว่า:

  • ฉันจะสามารถมั่นใจได้อย่างไรว่า interop DLL ที่สร้างขึ้นมีเวอร์ชันที่ถูกต้อง?
  • มีวิธีใดที่สามารถรวมหมายเลขการสร้างควบคู่กับเวอร์ชันหลักและเวอร์ชันย่อยได้หรือไม่?

มาสำรวจวิธีแก้ไขกันเถอะ!

การเข้าใจเวอร์ชันการอ้างอิง COM

ก่อนที่เราจะไปสู่การแก้ไข เป็นสิ่งสำคัญที่จะต้องเข้าใจว่าเวอร์ชันมาจากไหน:

  1. ไลบรารีชนิด (Type Libraries หรือ TypeLibs): ใน COM การทำเวอร์ชันจะเกี่ยวข้องกับ Type Library มากกว่าตัว DLL เอง GUID จะหมายถึง TypeLib และหมายเลขเวอร์ชันจะสอดคล้องกับแอตทริบิวต์ VersionMajor และ VersionMinor ของ TypeLib นั้นๆ

  2. การจัดเก็บใน 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 โปรดแชร์ประสบการณ์ของคุณ!