2011-09-08 3 views
5

アセンブリファイルのパスのみを指定して、アセンブリのフルネームを表示するとします。アセンブリのフルネームを取得

私はコマンドラインプログラムやpowershellスクリプトを簡単に書くことができますが、ランタイムには使用できるコマンドが含まれていますか? (私はGACにあるアセンブリのためにそれを行うが、登録されていないアセンブリについてGacutilを見てきた?)

答えて

5

フルネームのメイン問題部分は、通常、公開キートークンです。あなたは、Visual Studioコマンドプロンプト]ウィンドウにこれを入力することで、それを得ることができます。

sn -T path\to\your.dll 

個人的に、私はそれが簡単だけでリフレクターにDLLをロードするために見つけ、しかし。下のパネルにフルネームが表示されます。

+4

+1を振り回しました。 –

+0

リフレクターにロードするのではなく、コンソールアプリを書くことができます:D – Jamiec

+1

@Jamiec確かですが、リフレクターをすぐに利用できます。 –

4

あなたはAssemblyNameを経由して、これを取得することができます:

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

これは実際にアセンブリをロード回避しますあなたのプロセス。

+0

申し訳ありませんが、これは私が探しているものではありません。私はコードでそれを行う方法を知っています。私がサポートする人にこれを行う方法を教えなければならないので、私が後にしたのはコマンドラインオプションでした。私は私が望んでいたものを得るための組み込みのcmdがあることを望んでいた。しかし、私はAssembly.ReflectionLoadFrom()を使用していました。とにかくAssemblyNameチップのAssemblyName.GetAssemblyName +1を使用するように切り替えます。 – JMarsch

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

申し訳ありませんが、これは私が探しているものではありません。私はコードでそれを行う方法を知っています。私がサポートする人にこれを行う方法を教えなければならないので、私が後にしたのはコマンドラインオプションでした。私は、私が望むものを得ることができる内蔵のcmdがあることを期待していました。ここで尋ねられていることを実際に理解するために、私自身は – JMarsch

17

私はあなたがSystem.Reflection.AssemblyName.GetAssemblyNameを探していると思う:Assembly.Loadを使用したソリューションとは異なり

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

、これはあなたのAppDomainにアセンブリをロードしません。これにより、アセンブリに含まれる参照を解決せずに、アセンブリ内のコード(例:モジュール静的コンストラクタ)を実行しなくてもアセンブリのAssemblyNameを取得できます。また、アプリケーションが実行されているバージョンとは異なるバージョンの.NET Frameworkを対象とするアセンブリのAssemblyNameを取得することもできます。別の答えのために

+0

申し訳ありませんが、これは私が探しているものではありません。私はコードでそれを行う方法を知っています。私がサポートする人にこれを行う方法を教えなければならないので、私が後にしたのはコマンドラインオプションでした。私は私が望んでいたものを得るための組み込みのcmdがあることを望んでいた。 – JMarsch

+1

JMarschが探していたものではなかったかもしれませんが、まさに自分が望んだものでした! Thanks –

+1

'Assembly.ReflectionOnlyLoad(...)'と組み合わせて非常に便利です。 – marsze

1

、あなたはPowerShellのでこれを行うことができます。

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

をこれだけのsn.exeを取得するために、Visual Studioがインストールされている必要がないという利点があり、また、それがための完全な厳密な名前を返すことアセンブリだけではなく、公開鍵トークンを使用します。

コマンドレットのスクリプトでそれをラップするために十分に簡単です:

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

Process { 
    $FullPath = [System.IO.Path]::GetFullPath($Path); 
    return [System.Reflection.AssemblyName]::GetAssemblyName($FullPath).FullName; 
} 
関連する問題