2011-09-08 12 views
5

Derleme isminin yalnızca bir yolunu göstererek, bir derlemenin tam adını görüntülemek istiyorum.Bir montajın tam adını alma

Bir komut satırı programı veya powershell betiğini yeterince yazabileceğimi biliyorum, ancak çalışma zamanı kullanabileceğim bir komut içeriyor mu? (GAC olan meclisleri için bunu yapmak gacutil görülen, ancak kayıtlı olmayan meclisleri hakkında ettik?)

cevap

5

tam adının ana sorunlu kısım genellikle ortak anahtar belirteci olduğunu. Visual Studio komut istemi Window içine bu girerek edinebilirsiniz:

sn -T path\to\your.dll 

Şahsen, daha kolay sadece reflektör içine dll yüklemek bulmak, gerçi. Bu, alt paneldeki tam adı gösterir.

+4

+1'i yuvarladım. –

+0

Reflektöre yüklemek yerine, bir konsol uygulaması yazabilirsiniz: D – Jamiec

+1

@Jamiec elbette, ancak reflektörüm hazırda mevcut. –

4

Sen AssemblyName üzerinden bu alabilirsiniz:

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

Bu aslında içine montajını yüklemez sürecin.

+0

Maalesef bu benim aradığım şey bu değil. Kodda nasıl yapılacağını biliyorum. Daha sonra neyim bir komut satırı seçeneğiydi, çünkü bir destek elemanına bunun nasıl yapılacağını öğretmeliyim. İstediğimi bana ulaştıracak yerleşik bir cmd olmasını umuyordum - kendi başıma yuvarlayarak sona erdi. NASIL - Assembly.ReflectionLoadFrom() kullanıyordum. Ben AssemblyName.GetAssemblyName +1 AssemblyName ucu için zaten kullanmak için geçiş yapacağız. – JMarsch

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

Üzgünüz, bu aradığım şey değil. Kodda nasıl yapılacağını biliyorum. Daha sonra neyim bir komut satırı seçeneğiydi, çünkü bir destek elemanına bunun nasıl yapılacağını öğretmeliyim. İstediğimi bana ulaştıracak yerleşik bir cmd olduğunu umuyordum - aslında burada sorulan şeyin ne olduğunu anlamak için kendi – JMarsch

17

Sana System.Reflection.AssemblyName.GetAssemblyName aradığınız düşünüyorum: Assembly.load kullanarak çözümü aksine

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

, bu AppDomain montaj yüklemez. Bu, derleme için herhangi bir kodun (örn. Modül statik yapıcılar) çalıştırılmadan ve herhangi bir kodun (örn. Modül statik yapıcılar) çalıştırılmasına gerek kalmadan derleme için AssemblyName almanıza izin verecektir. Hatta, uygulamanızın çalıştığı sürümden farklı bir .NET Framework sürümünü hedefleyen bir derlemenin AssemblyName değerini almanıza bile izin verir. Bu sadece sn.exe almak için Visual Studio olması gerek yok avantajına sahiptir

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

ve ayrıca için tam kesin adı döndürdüğünü:

başka yanıt için
+0

Üzgünüz, bu aradığım şey değil. Kodda nasıl yapılacağını biliyorum.Daha sonra neyim bir komut satırı seçeneğiydi, çünkü bir destek elemanına bunun nasıl yapılacağını öğretmeliyim. İstediğimi bana ulaştıracak yerleşik bir cmd olmasını umuyordum - kendi başıma yuvarlayarak sona erdi. – JMarsch

+1

JMarsch'ın aradığı şey tam olarak bulamadı, ama tam olarak istediğim şey buydu! Teşekkürler –

+1

Assembly.ReflectionOnlyLoad (...) 'ile birlikte çok kullanışlıdır – marsze

1

, sen PowerShell ile yapabilirsiniz Sadece genel anahtar belirteci yerine montaj.

Bir cmdlet komut o sarmak için yeterince kolay:

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

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