المحافظة على الإصدار الصحيح لملف COM dll المشار إليه في مشروع .NET

StackOverflow https://stackoverflow.com/questions/41832

  •  09-06-2019
  •  | 
  •  

سؤال

أريد الإشارة إلى ملف 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، فأعتقد أنه سيتم استيراد الإصدار "الأحدث" الذي يطابق الإصدار الرئيسي، ولكن يجب تعيين الإصدار الرئيسي على شيء ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top