المحافظة على الإصدار الصحيح لملف COM dll المشار إليه في مشروع .NET
سؤال
أريد الإشارة إلى ملف COM DLL في مشروع .NET، ولكنني أريد أيضًا التأكد من أن ملف DLL للتشغيل المتداخل الذي تم إنشاؤه سيكون له الإصدار الصحيح (بحيث تعرف التصحيحات متى يجب تغيير ملف DLL).
إذا كنت تستخدم TlbImp
يمكنني تحديد الإصدار المطلوب باستخدام ملف /asmversion
العلم ولكن عندما أقوم بإضافته مباشرة من Visual Studio فإنه يحصل على إصدار لا علاقة له بإصدار COM DLL الأصلي.
حاولت تغيير الإصدار في .vcproj
ملف
<ItemGroup>
<COMReference Include="MYDLLLib">
<Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
<!-- I changed this -->
<VersionMajor>1</VersionMajor>
<!-- This too -->
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
ولكن بعد ذلك فشل المشروع في الإنشاء بسبب الخطأ التالي:
خطأ CS0246:تعذر العثور على النوع أو اسم مساحة الاسم "MYDLLLib" (هل تفتقد توجيه الاستخدام أو مرجع التجميع؟)
هل هناك أي طريقة لإنجاز ذلك دون إنشاء جميع مراجع COM الخاصة بي باستخدام TlbImp
مقدماً؟
إذا كان الجواب هو نعم هل هناك طريقة لتحديد رقم الإصدار بالإضافة إلى الإصدارات الرئيسية والثانوية؟(على سبيل المثال 1.2.42.0)
المحلول
يشير "المرشد" إلى "المرشد" الخاص بـ TypeLib وليس إلى "DLL" مباشرةً.تشير أرقام الإصدارات إلى إصدار TypeLib وليس إلى ملفات DLL.
سيأتي رقم الإصدار من ملف idl الخاص بك، وأعتقد أنه يدعم فقط الإصدار الرئيسي والثانوي وليس إصدار البناء.هل يتغير هذا الإصدار عند تعديل typelib؟
ستظهر أرقام الإصدارات في السجل تحت:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
إذا تم تعيين الإصدار الثانوي على 0، فأعتقد أنه سيتم استيراد الإصدار "الأحدث" الذي يطابق الإصدار الرئيسي، ولكن يجب تعيين الإصدار الرئيسي على شيء ما.