web-dev-qa-db-ja.com

アセンブリの厳密な名前を確認するにはどうすればよいですか?

プロジェクトがあり、そのための厳密な名前のキーファイルを作成しました。

アセンブリの厳密な名前を知るにはどうすればよいですか?これは明らかなように思えますが、それについての言及は見つかりません。

25
Jeremy Holovacs

ReflectorやILSpyなどのツールを使用して、完全修飾名を取得できます。アセンブリを選択すると、その上にあるはずです。 ILSpyのXNAの場合:

// C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.dll // Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553

これらのツールを使用したくない場合は、WindowsエクスプローラーとVisual Studioコマンドプロンプトを使用して完全修飾名を把握できます。

最初に、Assembly DLL-> Properties-> Details。]を右クリックします。ここで、Assemblyの名前、バージョン、およびカルチャを確認できます。

公開キーについては、Visual Studioコマンドプロンプトを起動して次のように記述します。

sn -Tp YourAssembly.dll

公開鍵が提供されます。

これで、完全修飾名を偽造できます。

21
Patedam

Strong Name ツールを使用して、アセンブリに厳密な名前が付けられているかどうかを判断できます。コマンドプロンプトでは、これを実行して、それが厳密な名前のアセンブリであることを確認できます。

sn -v "C:\MyAssemblyPath"

そして、公開トークンを取得するには、これを行うことができます

sn -T "C:\MyAssemblyPath"

Reflector または ILSpy を使用して公開鍵トークンを見つけることもできます。

パブリックトークンを含むアセンブリの完全な名前を取得する場合は、 Assembly.FullName を使用できます。

Assembly.GetExecutingAssembly().FullName;
22
keyboardP
Process[] processlist = Process.GetProcesses();

foreach(Process theprocess in processlist)
{
    string strongName = "N/A";
    try
    {
        strongName = Assembly.ReflectionOnlyLoadFrom(theprocess.MainModule.FileName).FullName;
    }
    catch
    {
        // System process?
    }
    Console.WriteLine("Process: {0} ID: {1} Strong Name: {2}", theprocess.ProcessName, theprocess.Id, strongName);

ファイル名がわかっている場合は、 PEヘッダーを使用して厳密な名前の署名を見つける を処理できます。 }

3
Jeremy Thompson