سؤال

كيف يمكنني تحديد تبعيات تطبيق .NET؟يفعل ووكر التبعية العمل مع التطبيقات المدارة؟لقد قمت بتنزيل أحدث إصدار وحاولت تصنيف التطبيق، لكنه يخرج بدون الكثير من الشرح.إذا لم يعمل مع .NET، فهل هناك أداة أخرى قد تساعدني في تصحيح مشكلة تحميل DLL أثناء التشغيل؟

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

المحلول

والتبعية ووكر يعمل على ثنائيات Win32 والعادية. كل شبكة دلل وفي إكس يكون صغير جزء رأس كعب مما يجعلها تبدو وكأنها الثنائيات العادية، ولكن كل ما يقول في الأساس هو "تحميل CLR" - ذلك أن كل ما التبعية ووكر اقول لكم

.

لمعرفة أي شيء التطبيق. NET الخاص بك يعتمد في الواقع على ذلك، يمكنك استخدام ممتاز جدا rel="noreferrer"> من بوابة الأحمر. (تحرير: لاحظ أن صافي العاكس هو الآن منتج يدفع ILSpy هو الحرة والمفتوحة المصدر ومشابهة جدا.)

تحميل DLL الخاص في ذلك، انقر على الحق، واختار "تحليل" - عليك ثم نرى "يعتمد على" عنصر والتي سوف تظهر لك كل دلل الآخر (والطرق داخل تلك ودلل) التي يحتاجها

ويمكن في بعض الأحيان الحصول على اصعب الرغم من ذلك، في هذا التطبيق يعتمد على X دلل، وX دلل موجود ولكن لسبب ما لا يمكن تحميل أو التي تقع في وقت التشغيل.

لاستكشاف هذا النوع من القضايا، ومايكروسوفت لديها ملزمة عارض السجلات التي يمكن أن تظهر لك ما يحدث <م> في وقت التشغيل

نصائح أخرى

وأجد فائدة AsmSpy أداة لا تقدر بثمن إلى حل القضايا مع الجمعيات التحميل. وهو يسرد كافة المراجع تجميع التجميعات التي تمت إدارتها بما في ذلك الإصدارات التجمع.

وتشغيله في موجه الأوامر في الدليل من .dll مع الوسائط التالية:

asmspy . all

وتثبيته بسرعة مع تشوكولاتيي:

choco install asmspy

وفتح ملف التجميع في ILDASM والبحث @ وخارجي .assembly في البيان

لتصفح تبعيات كود .NET، يمكنك استخدام إمكانيات الأداة NDepend.تقترح الأداة:

على سبيل المثال يمكن أن يبدو هذا الاستعلام كما يلي:

from m in Methods 
let depth = m.DepthOfIsUsing("NHibernate.NHibernateUtil.Entity(Type)") 
where depth  >= 0 && m.IsUsing("System.IDisposable")
orderby depth
select new { m, depth }

وتكون نتيجته كالتالي:(لاحظ مقياس الكود عمق, ، 1 مخصص للمتصلين المباشرين، 2 للمتصلين بالمتصلين المباشرين...) (لاحظ أيضًا الزر تصدير إلى الرسم البياني لتصدير نتيجة الاستعلام إلى اتصل بالرسم البياني)

NDepend dependencies browsing through C# LINQ query

يبدو الرسم البياني للتبعية كما يلي:

NDepend Dependency Graph

تبدو مصفوفة التبعية كما يلي:

NDepend Dependency Matrix

مصفوفة التبعية هي بحكم الأمر الواقع أقل سهولة من الرسم البياني، ولكنه أكثر ملاءمة لتصفح الأقسام المعقدة من التعليمات البرمجية مثل:

NDepend Matrix vs Graph

تنصل:أنا أعمل في NDepend

وأنت لا تحتاج لتحميل وتثبيت تطبيقات أو أدوات كومبيوتري. يمكنك أن تفعل ذلك programitically من صافي باستخدام <لأ href = "https://msdn.microsoft.com/en-us/library/system.reflection.assembly(v=vs.110).aspx" يختلط = "noreferrer" > Assembly.GetReferencedAssemblies()

Assembly.LoadFile(@"app").GetReferencedAssemblies()

إذا كنت تستخدم toolchain مونو، يمكنك استخدام وmonodis فائدة مع حجة --assemblyref لسرد تبعيات تجميع .NET. هذا وستعمل على حد سواء .exe و.dll الملفات.

تحليل الاستخدام مثال:

monodis --assemblyref somefile.exe

الانتاج مثال (إكس):

$ monodis --assemblyref monop.exe
AssemblyRef Table
1: Version=4.0.0.0
    Name=System
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
2: Version=4.0.0.0
    Name=mscorlib
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89

الانتاج مثال (. DLL):

$ monodis --assemblyref Mono.CSharp.dll
AssemblyRef Table
1: Version=4.0.0.0
    Name=mscorlib
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
2: Version=4.0.0.0
    Name=System.Core
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
3: Version=4.0.0.0
    Name=System
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
4: Version=4.0.0.0
    Name=System.Xml
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89

تمكين تسجيل ربط التجميع، قم بتعيين قيمة التسجيل EnableLog في HKLM\Software\Microsoft\Fusion على 1.لاحظ أنه يتعين عليك إعادة تشغيل التطبيق (استخدم iisreset) حتى يكون للتغييرات أي تأثير.

نصيحة: تذكر إيقاف تشغيل تسجيل الدمج عند الانتهاء نظرًا لوجود عقوبة أداء لتشغيله.

وانه مضحك كان لي مشكلة مشابهة ولم تجد أي شيء مناسب وعلى علم جيد التبعية ووكر قديمة جدا في النهاية كتبت نفسي واحد.

وهذا يتعامل مع صافي على وجه التحديد، وسوف تظهر ما يحيل الى جمعية لديها (والمفقودين) بشكل متكرر. كما انها سوف تظهر تبعيات مكتبة الوطنية.

وانها حرة (للاستخدام الشخصي) ويتوفر هنا للمهتمين: www.netdepends.com

وملاحظات ترحيب.

http://www.amberfish.net/

وChkAsm سوف تظهر لك كل تبعيات جمعية معين في وقت واحد، بما في ذلك الإصدارات، وسهولة تمكنك من البحث عن التجميعات في القائمة. تعمل على نحو أفضل بكثير لهذا الغرض من ILSpy ( http://ilspy.net/ )، وهو ما اعتدت على استخدام لهذه المهمة.

والعاكس مفيد آخر الإضافية التي أستخدمها هي التبعية مصفوفة هيكل . انه لشيء رائع حقا أن نرى ما تستخدم الطبقات ما. بالإضافة إلى أنه مجاني.

وحاول تجميع تجميع .NET الخاص بك مع --staticlink:"Namespace.Assembly" الخيار. هذا يفرض المترجم لسحب في كل التبعيات في وقت الترجمة. إذا كان الأمر عبر تبعية هذا لا المشار إليها سوف تعطي رسالة تحذير أو الخطأ عادة مع اسم هذا التجميع.

وNamespace.Assembly هو التجمع كنت تشك في وجود مشكلة التبعية. عادة فقط بشكل ثابت ربط هذه الجمعية سوف تشير كافة التبعيات transitively.

وأفضل التطبيقات التي أرى والاستخدام، عرض غاب / دلس إشكالية: http://www.dependencywalker.com/

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