كيف يمكنني العثور على الاسم المؤهل بالكامل للتجميع؟
-
20-08-2019 - |
سؤال
كيف يمكنني معرفة الاسم المؤهل بالكامل للتجميع الخاص بي مثل:
MyNamespace.MyAssembly, version=1.0.3300.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089
لقد تمكنت من الحصول على PublicKeyToken الخاص بي باستخدام sn.exe
في SDK، ولكنني أرغب في الحصول بسهولة على الاسم المؤهل الكامل.
المحلول
إذا يمكنك تحميل التجميع في تطبيق .NET، يمكنك القيام به:
typeof(SomeTypeInTheAssembly).Assembly.FullName
إذا كنت لا تستطيع بعد ذلك يمكنك استخدام ildasm.exe وسيكون في مكان ما هناك:
ildasm.exe MyAssembly.dll /text
نصائح أخرى
هذا هو نسخة ولصق وقح من لقد لاحظت ذلك وهي طريقة بسيطة للحصول على FQN لمخرجات المشروع:
Open Visual Studio
Go to Tools –> External Tools –> Add
Title: Get Qualified Assembly Name
Command: Powershell.exe
Arguments: -command "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
Check "Use Output Window".
تظهر الأداة الجديدة تحت Tools –> Get Qualified Assembly Name
.عند تحديد عنصر القائمة، يتم إعطاء اسم التجميع في نافذة الإخراج.
تأخرت في حضور الحفلة، ولكن بحثت في Google عن المزيد حول هذه المشكلة ووجدت هذه الصفحة:
ويصف وظيفة بوويرشيل التي يمكنها القيام بذلك.لذا.لم أستخدم بوويرشيل من قبل، ولكنني فكرت في تجربته:
C:\> cd PATH_TO_ASSEMBLY
C:\PATH_TO_ASSEMBLY>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:\PATH_TO_ASSEMBLY> [System.Reflection.AssemblyName]::GetAssemblyName('System.Data.SQLite.dll').FullName
System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
PS C:\PATH_TO_ASSEMBLY>
يؤدي هذا إلى تنفيذ الحيلة المذكورة في الإجابات الأخرى باستخدام التعليمات البرمجية، باستثناء أنك لست مضطرًا إلى إنشاء مشروع للقيام بذلك - فقط اكتب بعيدًا في الموجه؛)
استخدم Assembly.GetExecutingAssembly () للحصول على التجمع الحالي، استخدم Assembly.GetEntryAssembly () لتحصل على التجميع الذي بدأ كل شيء، أو استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getcallingassembly.aspx" يختلط = "noreferrer" > Assembly.GetCallingAssembly () للحصول على تجميع التعليمات البرمجية التي تسمى الدالة (واحد لأعلى في مكدس).
وبمجرد الانتهاء من التجميع الصحيح، استخدم الخاصية FullName، كما هو مبين في إجابات أخرى.
وأيضا إذا كنت تبحث عن اسم مؤهل لاختيار جمعية وبالفعل في GAC يمكنك إطلاق مشروع Visual موجه ستوديو الأوامر (أسهل طريقة لضبط المسارات الصحيحة) واستخدام gacutil /l
لسرد كافة المجالس مع FQNs كل منهما. استخدام gacutil /l <yourassemblyname>
لتصفية القائمة لتجد بسهولة ما كنت تبحث عنه.
إذا كنت تحميل التجميع (DLL، EXE، الخ) في العاكس وسوف اقول لك اسم واضح الكامل في الأسفل.
ويمكنك أيضا استخدام المصدر المفتوح ILSpy، بعد تحميل التجميع الخاص بك انها سوف يكون الاسم الكامل diplayed في تصريحات في الجزء العلوي من إطار التعليمات البرمجية
dotPeek أو Telerik <لأ href = "http://www.telerik.com/ المنتجات / decompiler.aspx "يختلط =" نوفولو "> JustDecompile جيدة جدا. مجرد فتح DLL ولديك اسم على الفور.
وطرق زوجين.
في كود:
Assembly.FullName مثلا
typeof(Thingy).Assembly.FullName
وأو، إذا به جمعية المثبتة، من GAC باستخدام الخطوات في هذا الرد MSDN .
ويجري المدرسة القديمة وتروق كمد أفضل من بوويرشيل، كتبت نفسي هذا السيناريو دفعة للقيام بذلك:
@REM fqn.bat <dll_path>
powershell -command "([system.reflection.assembly]::loadfile('%~f1')).FullName"
وو%~f1
يوسع المعلمة الأولى أن يكون مسار مطلق والجري ذلك:
fqn mydll.dll
هل طباعة اسم مؤهل بشكل كامل تريده.