سؤال

أقوم حاليًا بكتابة Snapin PowerShell يحتوي على تبعيات محددة على تجميعات الوضع المختلط (التجميعات التي تحتوي على التعليمات البرمجية الأصلية) التي تستهدف X64 أو X86 على وجه التحديد. لديّ نسختين من التجميع التابع ، لكنني أتساءل عن أفضل السبل لإدارة بناء ونشر هذا Snapin ، على وجه التحديد:

  1. هل من الضروري أن يكون لديك نسختان من Snapin ، واحد x86 وواحد x64 ، واستخدام نسختين مختلفتين من InstallUtil لتثبيته ، مرة واحدة لكل بنية؟
  2. على افتراض أن رقم 1 صحيح ، فهل يوصى بتثبيت الإصدارين المختلفين من Snapin في أدلة "ملفات البرامج" المختلفة و "ملفات البرامج (x86)؟
  3. ما هي الطريقة المثالية (الأقل متاعب) لتنظيم زوج من المشاريع التي تشترك في كل شيء ما عدا مرجع واحد ، من أجل البناء للبنية المختلفة؟
  4. إذا تم تجميع Snapin كـ "anycpu" ، ويتم تحميل كل من DLLs التابعة في GAC ، فهل سيحمل وقت التشغيل التجميع الصحيح من GAC استنادًا إلى بنية مضيف PowerShell قيد التشغيل حاليًا؟
  5. هل هناك وسيلة بقعة لوقت التشغيل ديناميكيًا ، في وقت التشغيل ، اختيار DLL المعتمد الذي يجب تحميله (إذا لم يكن بإمكانه ، لأسباب مختلفة ، تثبيت في GAC) دون الركض في الصداع مع سياقات تحميل التجميع؟
هل كانت مفيدة؟

المحلول 2

انتهى بي الأمر بإنشاء وحدة نمطية (شكرًا ، ريتشارد!) ، لكن هذا لم يحل المشكلات المتعلقة ببنية المعالج. من أجل حل ذلك ، وضعت كلا الإصدارين من DLL التابع في دليل الوحدة النمطية ، وفي كل مُنشئ لكل CMDLT ، وضعت بعض رمز التهيئة (الذي يتم تشغيله مرة واحدة فقط) لتحميل الإصدار المناسب من DLL التابع.

شكرا ، كل ، على المؤشرات.

نصائح أخرى

مارك ، لدينا هذا الموقف بالذات مع ملحقات مجتمع PowerShell مع إصدارات 32 بت و 64 بت من 7Zip.dll. يمكنك بسهولة العمل حول هذا عن طريق pinvoking إلى التحميل في وقت مبكر من بدء التشغيل Snapin (أو قبل أن تحتاج إلى الاتصال إلى DLL الأصلي). يمكنك بعد ذلك اختبار ما إذا كنت عملية 32 بت أو 64 بت (intptr.size) ثم قم بتحميل DLL الصحيح يدويًا باستخدام pinvoke loadlibrary. بعد ذلك ، سيلاحظ Dllimport ("yournative.dll") أن DLL تم تحميله بالفعل واستخدام DLL.

ألقِ نظرة على هذين ملفات رمز مصدر PSCX:http://pscx.codeplex.com/sourcecontrol/changeset/view/74794؟projectName=PSCX#1358100 http://pscx.codeplex.com/sourcecontrol/changeset/view/74794؟projectName=PSCX#1358102

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