Как найти полное имя сборки? - PullRequest
46 голосов
/ 18 марта 2009

Как узнать полное имя моей сборки, например:

MyNamespace.MyAssembly, version=1.0.3300.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089

Мне удалось получить свой PublicKeyToken, используя sn.exe в SDK, но я хотел бы легко получить полное квалифицированное имя.

Ответы [ 10 ]

130 голосов
/ 01 июля 2013

Это бесстыдная копия-вставка из I Note It Down , и это простой способ получить 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. При выборе пункта меню имя сборки дается в окне вывода.

29 голосов
/ 18 марта 2009

Если вы можете загрузить сборку в приложение .NET, вы можете сделать:

typeof(SomeTypeInTheAssembly).Assembly.FullName

Если вы не можете, то можете использовать ildasm.exe, и он будет где-то там:

ildasm.exe MyAssembly.dll /text
24 голосов
/ 07 марта 2013

Опоздал на вечеринку, но погуглил еще об этой проблеме и нашел эту страницу:

Он описывает функцию powershell, которая может сделать это. Так. Я никогда раньше не использовал PowerShell, но я решил попробовать:

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>

Это делает трюк, упомянутый в других ответах, с использованием кода, за исключением того, что вам не нужно создавать проект, чтобы сделать это - просто введите в командной строке;)

9 голосов
/ 18 марта 2009

Используйте Assembly.GetExecutingAssembly () , чтобы получить текущую сборку, используйте Assembly.GetEntryAssembly () , чтобы получить сборку, которая все начала, или используйте Assembly.GetCallingAssembly () , чтобы получить сборку кода, который вызвал вашу функцию (один в стеке).

Как только вы получите правильную сборку, используйте свойство FullName, как указано в других ответах.

6 голосов
/ 16 августа 2011

Кроме того, если вы ищете полное имя для сборки, уже находящейся в GAC, вы можете запустить командную строку Visual Studio (самый простой способ указать правильные пути) и использовать gacutil /l, чтобы вывести список всех сборок с соответствующими им. FQNs. Используйте gacutil /l <yourassemblyname> для фильтрации списка, чтобы легче было найти то, что вы ищете.

5 голосов
/ 27 августа 2012

Вы также можете использовать ILSpy с открытым исходным кодом, после загрузки сборки его полное имя отображается в комментариях вверху окна кода

5 голосов
/ 18 марта 2009

Если вы загрузите сборку (DLL, EXE и т. Д.) В Reflector , в нижней части появится полное строгое имя.

4 голосов
/ 14 марта 2013

JetBrains dotPeek или Telerik JustDecompile вполне хороши. Просто откройте DLL и сразу получите имя.

1 голос
/ 18 марта 2009

Пара способов.

В коде:

Assembly.FullName например

typeof(Thingy).Assembly.FullName

или, если это установленная сборка, из GAC, используя шаги в этом сообщении в msdn .

0 голосов
/ 24 января 2019

Будучи старой школой и предпочитая cmd лучше, чем powershell, я написал для себя этот пакетный скрипт:

@REM fqn.bat <dll_path>
powershell -command "([system.reflection.assembly]::loadfile('%~f1')).FullName"

%~f1 расширяет первый параметр до абсолютного пути, поэтому выполняется:

fqn mydll.dll 

Напечатает полное имя, которое вы хотите.

...