لا يستطيع برنامج Fusion Loader العثور على ملف DLL الموجود بالفعل

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

  •  10-07-2019
  •  | 
  •  

سؤال

هل لدى أي شخص أي فكرة عما قد يتسبب في تخطي أداة تحميل Fusion لملف DLL دون أي تحذير أو إقرار؟

عندما أحاول القيام بذلك (في C#) من تطبيق سطر الأوامر

Assembly.LoadFrom("c:\\Deploy\\bin\\WebServices.dll")

أنا أرى هذا:

""غير قادر على تحميل واحد أو أكثر من الأنواع المطلوبة.قم باسترداد الخاصية LoaderExceptions لمزيد من المعلومات."

يحتوي ملف DLL هذا على تبعية على Platform.DLL، ولكن فشل تحميل تلك التبعية، لذلك يطرح هذا السطر من التعليمات البرمجية استثناءً.عندما أتحقق من رسالة تحميل تجميع Fusion، هذا ما أراه:

=== Pre-bind state information ===
LOG: DisplayName = Platform, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null (Fully-specified)

...

LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\config\\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.DLL.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.DLL.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.EXE.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.EXE.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.DLL.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.DLL.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.EXE.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.EXE.

الشيء هو، DLL يكون حاضر في c:\Deploy\bin\Platform.DLL, ، مع الإصدار الصحيح وعدم وجود مفتاح عام موقّع.

الأشياء التي فكرت بها:
1.ربما تكون بالفعل تبعية لـ Platform.DLL معطلة، مما يسبب هذا السلوك؟(لقد طاردت شجرة التبعية في Reflector ولكن لم أجد أي ملفات DLL مفقودة)
2.ربما يكون هناك عدم تطابق في الإصدار/التصحيح، أو 64 بت مقابل 32 بت؟ولكن تم بناء كل شيء على نفس الجهاز
3.ربما أخطأت في قراءة السجلات، لكن ألا يجب أن يتوقف الأمر عندما يصل إلى ملف DLL الذي يعثر عليه؟لا أرى رسالة "ناجحة" أو "غير ناجحة" في هذا السجل.أعرف فقط أنه فشل بسبب الاستثناء.

ملاحظة المزيد من التفاصيل التقنية:
بيئة الجهاز هي Windows 2008 64 بت، مع تثبيت .NET 2.0 و3.0 و3.5.
يعمل هذا التطبيق نفسه بشكل جيد على جهاز آخر (Vista 32-bit)، مع نفس بنية الدليل وملفات DLL، على الرغم من أنها تم إنشاؤها على هذا الجهاز

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

المحلول

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

ولكن من أين يتم تشغيل تطبيق سطر الأوامر؟إذا كان مجلد Debug، فهناك بعض الأشياء التي يمكنك تجربتها

  1. لديك ملفات dll التابعة في نفس المجلد
  2. قم بالتوقيع على التجميع والمرجع من خلال ملف .config بالتنسيق التالي

    <dependentAssembly>
        <assemblyIdentity name="WebServices.dll" publicKeyToken="<whatever this public key it>" />
        <codeBase version="1.0.0.0" href="..\WebServices.dll" />
    </dependentAssembly>
    
  3. قم بالتوقيع عليها ثم قم بوضع التجميعات التابعة في GAC.

ربما أكون بعيدًا ولكن هذه بعض الأشياء التي يجب تجربتها.

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