Belirli bir dll için PublicKeyToken nasıl bulabilirim?


198

Web.config dosyasında şöyle bir şey gibi görünen bir sağlayıcı yeniden oluşturmanız gerekir:

<membership defaultProvider="AspNetSqlMemProvider">
  <providers>
    <clear/>
    <add connectionStringName="TRAQDBConnectionString" applicationName="TRAQ" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0"
         name="AspNetSqlMemProvider"
         type="System.Web.Security.SqlMembershipProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
    />
  </providers>
</membership>

Ancak, bu derleme yüklenemez söyleyerek bir çalışma zamanı hatası alıyorum ve bunun nedeni yanlış PublicKeyToken var çünkü düşünüyorum. Montajım için PublicKeyToken'i nasıl ararım?

Alternatif olarak, bununla tamamen yanlış mı gideceğim?


Yanıtlar:


284

PowerShell'i kullanarak şu ifadeyi yürütebilirsiniz:

([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName

Çıktı aşağıda gösterildiği gibi Sürüm , Kültür ve PublicKeyToken sağlayacaktır :

MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a

1
Teşekkürler! sizin yöntem çalıştı benim için sadece sn -T dllname.dll çalıştırdığımda sadece yardım metni gösterir
Vdex

1
Mükemmel! Ekstra araçlar takmaktan kaçınır.
nirav

1
harika! Bu, PublicKeyToken (yani imzasız montajlar) olmadığında da çalışır
MovGP0

2
C # Interactive'de şunları çağırabilirsiniz: Console.WriteLine (System.Reflection.Assembly.LoadFile (@ "c: \ some.dll"). FullName);
Auri Rahimzadeh

2
Rahatsız edici bir şekilde, PowerShell.exe çağrı tamamlandıktan sonra bile dll üzerinde bir kilit tutar. Çözümümü tekrar oluşturabilmek için PowerShell konsolunu kapatmam gerekiyordu.
Cee McSharpface

141

Sn.exe yardımcı programını kullanarak :

sn -T YourAssembly.dll

veya montajın Reflektör içine yüklenmesi .


31
sn.exe genellikle C: \ Program Files (x86) \ Microsoft SDKs \ Windows altında aşağıdaki konumlardan birinde bulunabilir: C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin, C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64, C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Araçları
david.barkhuizen

Dikkat edin, anahtar büyük / küçük harfe duyarlıdır. -t (küçük harf) "anahtarı jetona dönüştüremedi - Geçersiz montaj genel anahtarı" nı verir, bu da size yanlış yönde arama gönderir.
access_granted

31

Projenize DLL eklediyseniz, csproj dosyasını açabilir ve Referans etiketine bakabilirsiniz.

Misal:

<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

23

sn -T <assembly>Visual Studio komut satırında. Bir derleme genel derleme önbelleğine yüklenmişse C:\Windows\assembly, GAC derlemeleri listesinde bulup bulmak daha kolaydır .

Özel durumunuzda, tip tam adını montaj referansıyla karıştırıyor olabilirsiniz, MSDN'ye göz atmak isteyebilirsiniz .


8

.NET Framework araçlarını kullanmak çok basittir sn.exe. Bu nedenle, Visual Studio 2008 Komut İstemi'ni açın ve sonra dll'nin ortak anahtarını almak istediğiniz klasörün üzerine gelin,

Aşağıdaki komutu kullanın,

sn –T myDLL.dll

Bu size ortak anahtar belirteci verecektir. Bunun yalnızca montajın güçlü bir şekilde imzalanması gerekiyorsa işe yarayacağı bir şeyi unutmayın.

Misal

C: \ WINNT \ Microsoft.NET \ Framework \ v3.5> sn -T EdmGen.exe

Microsoft (R) .NET Framework Güçlü Adı Yardımcı Programı Sürüm 3.5.21022.8
Telif Hakkı (c) Microsoft Corporation. Tüm hakları Saklıdır.

Genel anahtar belirteci b77a5c561934e089

Visual Studio 2013'ünüz varsa ve "VS2013 için Geliştirici Komut İstemi" ni bulamıyorsanız, nasıl düzelteceğinize buradan bir göz atın: stackoverflow.com/a/22702405/187650
juFo

Bu aracın Windows ile birlikte gelmediğini unutmayın.
Ian Boyd

4

Windows Gezgini'ni kullanıyorum, C: \ Windows \ assembly öğesine gidin, ihtiyacım olanı bulun. Özellikler'den PublicKeyToken kopyalayabilirsiniz.

Bu, Visual Studio'ya veya yüklenen diğer yardımcı programlara bağlı değildir.


3

Sadece daha fazla bilgi ekleyerek, belirtilen konumlarda sn.exe yardımcı programını bulamadım, benim durumumda C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin


Bir Visual Studio komut istemi açarsanız, yolunuzda olmalıdır.
Nattrass


2

Assembly.LoadFile (@ "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ system.data.dll"). FullName

Sonuçlanacak

System.Data, Sürüm = 4.0.0.0, Kültür = nötr, PublicKeyToken = b77a5c561934e089


1

@CRice'in dediği gibi publicKeyToken ile bağımlı birleştirme listesi almak için aşağıdaki yöntemi kullanabilirsiniz

public static int DependencyInfo(string args) 
{
    Console.WriteLine(Assembly.LoadFile(args).FullName);
    Console.WriteLine(Assembly.LoadFile(args).GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).SingleOrDefault());
    try {
        var assemblies = Assembly.LoadFile(args).GetReferencedAssemblies(); 

        if (assemblies.GetLength(0) > 0)
        {
            foreach (var assembly in assemblies)
            {
                Console.WriteLine(" - " + assembly.FullName + ", ProcessorArchitecture=" + assembly.ProcessorArchitecture);             
            }
            return 0;
        }
    }
    catch(Exception e) {
        Console.WriteLine("An exception occurred: {0}", e.Message);
        return 1;
    } 
    finally{}

    return 1;
}

Genellikle LinqPad betiği olarak kullanabilirsiniz.

DependencyInfo("@c:\MyAssembly.dll"); koddan


0

Aşağıdaki yöntemi kullanarak da kontrol edebilirsiniz.

Çalıştır'a gidin: Genel anahtara ihtiyacınız olan DLL yolunu yazın. 2 dosya bulacaksınız: 1. __AssemblyInfo_.ini 2. DLL dosyası

Bu __AssemblyInfo_.ini dosyasını not defterinde açın, burada Ortak Anahtar Simgesini görebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.