كيف يمكنني التوقيع بقوة على DLL خارجي مع الحفاظ على بيانات التعريف الخاصة به؟

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

  •  29-09-2019
  •  | 
  •  

سؤال

لدي بعض المكتبات التي أستخدمها في مشروعي غير موقعة. نظرًا لأن طلبي موقّع بقوة ، يجب أن تكون المكتبات كذلك.

أوقع هذه المكتبات باستخدام:

"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\ildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe" /dll /key=MyKey.snk library.il

المشكلة هي أن أي بيانات تعريف ، مثل أرقام الإصدار ، تضيع في DLL الموقعة الآن. هذه مشكلة لأن بعض التبعيات الآن بين المكتبات مكسورة. كيف يمكنني الاحتفاظ بأرقام الإصدار دون اللجوء إلى تجميع الكود المصدري لتلك المكتبات بالفعل؟

تحديث

إنه في الواقع DLL معين يوضح هذه المشكلة واكتشفت أنه تم تصميمه باستخدام Ilmerge. ربما هذا يسبب المشكلة. فقط لكي تكون واضحًا: يحتوي DLL الذي ينتجه Ilmerge على البيانات الوصفية المناسبة ، فقط بعد تفكيكها وإعادة تجميعها ، تختفي البيانات الوصفية.

تحديث 2

لقد فتحت DLL في Reflector ويبدو أن رقم الإصدار لا يزال موجودًا على الأقل. كنت أتحقق من استخدام علامة تبويب/تفاصيل خصائص الملف في Windows Explorer طوال الوقت. لذلك أعتقد أن هذا هو البيان المفقود بدلاً من ذلك.

هل كانت مفيدة؟

المحلول

أنا أتساءل لماذا يحدث هذا. لديّ خبرة جيدة جدًا في تجميع الرحلة المستديرة باستخدام ilasm و ildasm على التجميعات غير الموقعة والموقعة بالمثل. هل يمكنك التحقق من إخراج البيانات الوصفية بواسطة ILASM لا يزال يحتوي على معلومات الإصدار (أسفل نطاق التجميع):

.assembly ConsoleApplication1
{
  //...
  .hash algorithm 0x00008004
  .ver 1:0:0:0
} 

فقط تم فحصه مرة أخرى ، "يعمل على جهازك" (باستخدام مفاتيح سطر الأوامر نفسه كما فعلت).

ما سوف يضيع في الواقع هو FileVersion السمة (تلك التي تراها في Windows Explorer عند التحول فوق التجميع. التجميع السمة هي لا تزال موجودة وصحيح. هل يمكن أن تكون مربكا الاثنين؟ فقط AssemblyVersion مهم لمعلومات الربط. انظر الى هذا لذلك بعد لمزيد من المعلومات.

آمل أن أتمكن من المساعدة ، وإلا فستحتاج إلى توفير المزيد من السياق.

نصائح أخرى

إذا كان لديك الكود المصدري ، فما عليك سوى إعادة ترجمة المكتبات بأسماء قوية - فالفكين وإعادة التجميع عادةً ما يعمل بشكل جيد ، لكنه لا يزال اختراقًا.

للحفاظ على التبعيات بين المكتبات العاملة ، تحتاج إلى تحديث المراجع في الكود .L لاستخدام المفتاح العام للتجميع الذي يشيرون إليه ، وإلا فإنهم سيحاولون الرجوع إلى نسخة غير موقعة من التجميع ، وبالتالي تفشل في تحميلها في وقت التشغيل.

يمكنك القيام بذلك باليد ، لكنه يصبح مملاً للغاية بعد 2 أو 3 تجميعات. حل سريع لهذا هو الموقع, ، الذي يتعامل مع الكثير من الصعوبات التي ينطوي عليها الأمر ، ويقوم بعمل رائع - عادة ما يكون سريعًا ونظيفًا.

(لاحظ أنه في الوقت الحاضر تم بناؤه مقابل إصدار .NET قديم. إذا كنت تستخدم مجموعات C# 4/.NET 4 ، فستحتاج إلى تنزيل المصدر ، وتغييره لاستهداف .NET 4 وإعادة بناءه للحصول على Signer.exe التي سوف تتعامل بشكل صحيح مع مجموعات .NET 4).

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