كيف يمكنني العثور على الاسم المؤهل بالكامل للتجميع؟

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

سؤال

كيف يمكنني معرفة الاسم المؤهل بالكامل للتجميع الخاص بي مثل:

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 

هل طباعة اسم مؤهل بشكل كامل تريده.

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