سؤال

أحاول إنشاء تطبيق يمكن أن يعدل الخصائص في IL لإنشاء تطبيق مختلف قليلاً. EG Client A تطبيق تشغيل وتسمية على ملصق Winform يقرأ "Client A:". يقوم العميل B بتشغيل التطبيق ويقول التسمية "Client B". من السهل أن أعرف استخدام ملفات التكوين أو ملفات الموارد ولكن هذا ليس خيارًا لهذا المشروع. يجب أن يكون البرنامج الرئيسي قادرًا على إنشاء ملف .exe ديناميكيًا بناءً على بعض حقول النماذج التي أدخلها المستخدم.

كان حلي هو إنشاء مستقل قابل للتنفيذ يحتوي على جميع العناصر التي احتاجها لجعل الديناميكية. بعد ذلك ، استخدمت ildasm لتوليد IL واعتقدت أنه يمكنني استخدام هذه العلامات IL والبديل للعناصر التي أردت أن أجعلها ديناميكية. يمكنني بعد ذلك استبدال هذه العلامات في وقت التشغيل بعد أن ملأ المستخدم النموذج باستخدام regex وما إلى ذلك. المشكلة هي ، إذا قمت بإعادة حفظ ملف IL الذي تم إنشاؤه بواسطة ildasm كإحدى المحاولة ومحاولة تشغيله. أنا فقط أطلق وحدة التحكم ولا أفعل شيئًا.

هل أنا ذاهب حول هذا بالطريقة الخاطئة؟ لم أكن أرغب في الخوض في الانعكاس لأن الديناميكي. exe هو واحد بسيط حقًا واعتقدت أن الهندسة العكسية مع ildasm ستكون الأسرع.

أنت أفكار ومؤشرات موضع تقدير كبير. توني

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

المحلول

هل يتم توليده القابل للتنفيذ في الموقع؟ أو هل تقوم بإنشاء القابل للتنفيذ للعميل ثم شحن النتيجة؟

إذا كنت الشخص الذي يولد القابل للتنفيذ ، فيمكنك وضع البيانات/الكود الخاص بالعميل في DLL منفصل وتضمينه في حالتك القابلة للتنفيذ كمورد ، وتحميله عند حدوث حدث AppDomain.CurrentDomain.AssemblyResolve.

وبهذه الطريقة ، يمكنك التحكم في الإصدار على البيانات الخاصة بالعميل.

نصائح أخرى

عندما تقول "إعادة توحيد" الملف الذي تم إنشاؤه بواسطة ildasm وتشغيله ، هل تقصد أنك تقوم بتشغيل جميع ملفات IL من خلال ilasm (مترجم Microsoft IL)؟ إذا لم يكن الأمر كذلك ، فقد ترغب في تجربة ذلك. كن حذرًا جدًا عند أداء الاستبدال الخاص بك لأن IL لديه بعض المتطلبات المحددة تمامًا وأن ILASM ليس مسامحة مثل المترجمين الأعلى مثل CSC و VBC.

تستطيع ايضا استخذام mono.cecil لتعديل ملفات التجميع ، وبهذه الطريقة لا تضطر إلى شحن IL إلى عملائك.

إذا كنت ستستمر على طريق شحن المصدر وتجميعه ، فيمكنك إنجاز نفس الشيء دون إشراك IL عن طريق شحن مصدر C# وتجميعه في الموقع منذ ذلك الحين CSC يتم تضمينه في الإطار.

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