سؤال

حسنا، بعد القيام طن من البحث ومحاولة تقريبا كل تمكنت CPP REDIST يمكن أن أجد وكذلك محاولة نسخ دلس بلدي محليا إلى دليل تنفيذ التطبيق لا أستطيع معرفة ما تبعيات أنا في عداد المفقودين لهذا مختلطة مكتبة واسطة.

وأساسا لدي كبير C # تطبيق وأنا أحاول أن استخدام مكتبة الوضع المختلط الذي أدليت به. على الجهاز التطوير يعمل الكمال (طبعا) ولكن نشرها عندما تحتاج المكتبة ليتم تحميلها على استثناءات استخدامه خارج بسبب تبعيات المفقودين CRT (افترض).

ولقد استخدمت التبعية ووكر للتحقق من كافة DLLs المشار إليها وضمان وجودها على الجهاز نشر مع أي حظ، وأنا أتساءل عما اذا كان ربما حان بعض التبعيات التي تحتاج إلى المسجل الذي أنا في عداد المفقودين، ولكن لا أستطيع معرفة ما.

وأحصل على استثناء التالية عندما يحاول الرمز إلى مثيل فئة من مكتبة الوضع المختلط.

<اقتباس فقرة>   

واستثناء التفاصيل:   System.IO.FileLoadException: تعذر   تحميل الملف أو التجميع 'USADSI.MAPI،   الإصدار = 1.0.3174.25238،   الثقافة = محايدة الأمر PublicKeyToken = فارغة '   أو أحد تبعياته. هذه   فشل التطبيق لبدء   لأن تكوين التطبيق   غير صحيح. إعادة تثبيت   التطبيق قد حل هذه المشكلة.   (استثناء من HRESULT: 0x800736B1)

وأنا تجميع المكتبة باستخدام SP1 VS2008 مع / مسح: oldSyntax المحدد

.

والظاهر وسيطة يبدو مثل هذا:

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

لا أستطيع تقديم أي مزيد من المعلومات حسب الحاجة، للأسف أنا لا ضليعا في جعل المكتبات وضع مختلط لذلك هذا وقد القيت لي.

وإذا كان أي شخص يمكن أن تقدم أي نصيحة أود أن نقدر ذلك!

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

المحلول

هل نشر مكتبات على الجهاز المستهدف؟ تسديدة بعيدة: منذ لديك الاعتماد على رمز 32 بت، يجب تعيين منصة الهدف في علامة التبويب الملكية بناء على إلى x86

وتحرير: مشكلة تبادل لاطلاق النار جنبا إلى جنب مع حل المشاكل في Sxstrace.exe فائدة ، وهي متاحة على ويندوز فيستا.

نصائح أخرى

وعادة لقد وجدت أن PRAGMA تعليق أسلوب decleration واضح على أن تكون أكثر من ذلك بكثير خالية من الأخطاء، من ماينتينينسي المطور وعلى كل جهة عمل بناء. ال اضح XML هي <وأ href = "http://blogs.msdn.com/vcblog/archive/2008/08/12/bugs-fixed-in-mfc-in-visual-studio-2008-sp1.aspx" يختلط = "نوفولو noreferrer"> natoriously اللخبطة .

ووfimiluarity مع كيفية عمل رابط وتجميع المعتاد من التعليمات البرمجية C وحقيقة أنك ببساطة تاك هذا في، على واحد من الملفات المصدر، وتبقي كل شيء قليلا شعور أكثر "معا"؛

#pragma comment(linker, \
    "\"/manifestdependency:type='Win32' "\
    "name='Microsoft.Windows.Common-Controls' "\
    "version='6.0.0.0' "\
    "processorArchitecture='*' "\
    "publicKeyToken='6595b64144ccf1df' "\
    "language='*'\"")

وكان لي مشكلة مماثلة هي المرة الأولى التي نشرت 2005 التطبيق VS على الجهاز المستهدف - كان لجلب على DLL MSVCRT80. أنت تقول لديك بالفعل مكتبة وقت التشغيل VS 2008 هناك؟

وETA: أيضا، سؤال سخيف، ولكن هل أنت متأكد من أنك على حد سواء وقت التشغيل CRT (ربط أعلاه) <م> و في وقت التشغيل .NET، مع نفس الإصدار الذي جمعت ضد (ربما 3.5)؟ وربما كنت أعرف بالفعل هذا (ولا سيما بالنظر إلى النتيجة الخاص بك) ولكنهم 2 أشياء مختلفة.

ولقد وجدت الحل الذي يبدو للعمل على الرغم من أنني لا أحب ذلك كثيرا.

وكان لي لنسخ المجلدات:

وMicrosoft.VC90.CRT وMicrosoft.VC90.MFC

ومن: ملفات البرنامج \ مايكروسوفت البصرية ستوديو 9.0 \ VC \ REDIST \ X86

وفي دليل التطبيق نشرها، أنا فقط لا يمكن معرفة لماذا يبدو هذا للعمل وفعل على redistributables شيء.

وتحرير: وعند النظر إلى الظاهر أنا ربما لا تحتاج إلى نسخ الدليل MFC

وأفضل طريقة لحل هذه المشكلة هو تحميل رصد عملية وهو خال من: http://technet.microsoft.com/en-us/sysinternals/bb896645. ASPX

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

وأنا دائما استخدام هذا عندما تواجه نفس المشكلة - إذا شغل مايكروسوفت فقط في اسم الملف في استثناء القيت سيكون كل من الأسهل

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