كيف يمكنني تحديد تبعيات تطبيق .NET؟
-
03-07-2019 - |
سؤال
كيف يمكنني تحديد تبعيات تطبيق .NET؟يفعل ووكر التبعية العمل مع التطبيقات المدارة؟لقد قمت بتنزيل أحدث إصدار وحاولت تصنيف التطبيق، لكنه يخرج بدون الكثير من الشرح.إذا لم يعمل مع .NET، فهل هناك أداة أخرى قد تساعدني في تصحيح مشكلة تحميل DLL أثناء التشغيل؟
المحلول
والتبعية ووكر يعمل على ثنائيات Win32 والعادية. كل شبكة دلل وفي إكس يكون صغير جزء رأس كعب مما يجعلها تبدو وكأنها الثنائيات العادية، ولكن كل ما يقول في الأساس هو "تحميل CLR" - ذلك أن كل ما التبعية ووكر اقول لكم
.لمعرفة أي شيء التطبيق. NET الخاص بك يعتمد في الواقع على ذلك، يمكنك استخدام ممتاز جدا rel="noreferrer"> من بوابة الأحمر. (تحرير: لاحظ أن صافي العاكس هو الآن منتج يدفع ILSpy هو الحرة والمفتوحة المصدر ومشابهة جدا.)
تحميل DLL الخاص في ذلك، انقر على الحق، واختار "تحليل" - عليك ثم نرى "يعتمد على" عنصر والتي سوف تظهر لك كل دلل الآخر (والطرق داخل تلك ودلل) التي يحتاجها
ويمكن في بعض الأحيان الحصول على اصعب الرغم من ذلك، في هذا التطبيق يعتمد على X دلل، وX دلل موجود ولكن لسبب ما لا يمكن تحميل أو التي تقع في وقت التشغيل.
لاستكشاف هذا النوع من القضايا، ومايكروسوفت لديها ملزمة عارض السجلات التي يمكن أن تظهر لك ما يحدث <م> في وقت التشغيل م>
نصائح أخرى
وأجد فائدة AsmSpy أداة لا تقدر بثمن إلى حل القضايا مع الجمعيات التحميل. وهو يسرد كافة المراجع تجميع التجميعات التي تمت إدارتها بما في ذلك الإصدارات التجمع.
وتشغيله في موجه الأوامر في الدليل من .dll
مع الوسائط التالية:
asmspy . all
وتثبيته بسرعة مع تشوكولاتيي:
choco install asmspy
وفتح ملف التجميع في ILDASM والبحث @ وخارجي .assembly في البيان
لتصفح تبعيات كود .NET، يمكنك استخدام إمكانيات الأداة NDepend.تقترح الأداة:
- أ الرسم البياني التبعية
- أ مصفوفة التبعية,
- وأيضا بعض استعلامات C# LINQ يمكن تحريرها (أو إنشاؤها) لتصفح التبعيات.
على سبيل المثال يمكن أن يبدو هذا الاستعلام كما يلي:
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
وأنت لا تحتاج لتحميل وتثبيت تطبيقات أو أدوات كومبيوتري. يمكنك أن تفعل ذلك 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
وملاحظات ترحيب.
وChkAsm سوف تظهر لك كل تبعيات جمعية معين في وقت واحد، بما في ذلك الإصدارات، وسهولة تمكنك من البحث عن التجميعات في القائمة. تعمل على نحو أفضل بكثير لهذا الغرض من ILSpy ( http://ilspy.net/ )، وهو ما اعتدت على استخدام لهذه المهمة.
والعاكس مفيد آخر الإضافية التي أستخدمها هي التبعية مصفوفة هيكل . انه لشيء رائع حقا أن نرى ما تستخدم الطبقات ما. بالإضافة إلى أنه مجاني.
وحاول تجميع تجميع .NET الخاص بك مع --staticlink:"Namespace.Assembly"
الخيار. هذا يفرض المترجم لسحب في كل التبعيات في وقت الترجمة. إذا كان الأمر عبر تبعية هذا لا المشار إليها سوف تعطي رسالة تحذير أو الخطأ عادة مع اسم هذا التجميع.
وNamespace.Assembly
هو التجمع كنت تشك في وجود مشكلة التبعية. عادة فقط بشكل ثابت ربط هذه الجمعية سوف تشير كافة التبعيات transitively.
وأفضل التطبيقات التي أرى والاستخدام، عرض غاب / دلس إشكالية: http://www.dependencywalker.com/