2011-09-08 24 views
5

Supponiamo di voler visualizzare il nome completo di un assembly, dato solo un percorso per il file di assieme.ottenere il nome completo di un assembly

So che potrei scrivere un programma da riga di comando o script PowerShell abbastanza facilmente, ma il runtime include un comando che potrei usare? (Ho visto Gacutil farlo per le assemblee che si trovano nella GAC, ma sugli assembly che non sono registrati?)

risposta

5

La principale problematica parte di un-nome completo è di solito il token di chiave pubblica. È possibile ottenere inserendo questo nel Visual Studio finestra Prompt dei comandi:

sn -T path\to\your.dll 

Personalmente, trovo più facile solo per caricare la DLL in riflettore, però. Questo mostra il nome completo nel pannello in basso.

+4

+1, per capire veramente cosa viene chiesto qui. –

+0

Invece di caricarlo nel riflettore, potresti semplicemente scrivere un'app per console: D – Jamiec

+1

@Jamiec sicuro, ma ho un riflettore facilmente disponibile. –

4

È possibile ottenere questo tramite AssemblyName:

var name = AssemblyName.GetAssemblyName(path); 
var fullname = name.FullName; 

Questo evita di caricare effettivamente il gruppo in il tuo processo.

+0

spiace, ma questo non è quello che sto cercando. So come farlo in codice. Quello che cercavo era un'opzione a riga di comando, perché devo insegnare a una persona di supporto come farlo. Speravo che ci fosse un cmd integrato che mi avrebbe fatto ottenere quello che volevo - ha finito per girare il mio. TUTTAVIA - Stavo usando Assembly.ReflectionLoadFrom(). Passerò a utilizzare AssemblyName.GetAssemblyName +1 per il suggerimento AssemblyName comunque. – JMarsch

0
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name 
+0

Siamo spiacenti, questo non è quello che sto cercando. So come farlo in codice. Quello che cercavo era un'opzione a riga di comando, perché devo insegnare a una persona di supporto come farlo. Speravo che ci fosse un cmd integrato che mi avrebbe preso quello che volevo - ha finito col rotolare il mio – JMarsch

17

Penso che tu sia alla ricerca di System.Reflection.AssemblyName.GetAssemblyName:

AssemblyName name = AssemblyName.GetAssemblyName(@"C:\path\assembly.dll"); 
Console.WriteLine(name.FullName); 

A differenza della soluzione utilizzando Assembly.Load, questo non caricare l'assembly nel vostro dominio di applicazione. Ciò consentirà di ottenere AssemblyName per un assembly senza dover risolvere alcun riferimento a quell'assembly e senza eseguire alcun codice (ad esempio, i costruttori statici del modulo) nell'assembly. Ti permetterà anche di ottenere AssemblyName di un assembly che ha come target una versione di .NET Framework diversa dalla versione su cui è in esecuzione la tua applicazione.

+0

Siamo spiacenti, questo non è quello che sto cercando. So come farlo in codice.Quello che cercavo era un'opzione a riga di comando, perché devo insegnare a una persona di supporto come farlo. Speravo che ci fosse un cmd integrato che mi avrebbe fatto ottenere quello che volevo - ha finito per girare il mio. – JMarsch

+1

Forse non era quello che JMarsch cercava, ma era esattamente quello che volevo io! Grazie –

+1

Molto utile in combinazione con 'Assembly.ReflectionOnlyLoad (...)' – marsze

1

Per un'altra risposta, si può fare questo con PowerShell:

[System.Reflection.AssemblyName]::GetAssemblyName($PathToAssembly).FullName 

Questo ha il vantaggio di non dover avere installato solo per ottenere sn.exe Visual Studio, e anche che restituisce il nome completo forte per il assembly piuttosto che solo il token della chiave pubblica.

E 'abbastanza facile per avvolgere che in uno script cmdlet:

[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$true,Position=0)] 
    $Path 
) 

Process { 
    $FullPath = [System.IO.Path]::GetFullPath($Path); 
    return [System.Reflection.AssemblyName]::GetAssemblyName($FullPath).FullName; 
} 
Problemi correlati