アセンブリファイルのパスのみを指定して、アセンブリのフルネームを表示するとします。アセンブリのフルネームを取得
私はコマンドラインプログラムやpowershellスクリプトを簡単に書くことができますが、ランタイムには使用できるコマンドが含まれていますか? (私はGACにあるアセンブリのためにそれを行うが、登録されていないアセンブリについてGacutilを見てきた?)
アセンブリファイルのパスのみを指定して、アセンブリのフルネームを表示するとします。アセンブリのフルネームを取得
私はコマンドラインプログラムやpowershellスクリプトを簡単に書くことができますが、ランタイムには使用できるコマンドが含まれていますか? (私はGACにあるアセンブリのためにそれを行うが、登録されていないアセンブリについてGacutilを見てきた?)
フルネームのメイン問題部分は、通常、公開キートークンです。あなたは、Visual Studioコマンドプロンプト]ウィンドウにこれを入力することで、それを得ることができます。
sn -T path\to\your.dll
個人的に、私はそれが簡単だけでリフレクターにDLLをロードするために見つけ、しかし。下のパネルにフルネームが表示されます。
あなたはAssemblyNameを経由して、これを取得することができます:
var name = AssemblyName.GetAssemblyName(path);
var fullname = name.FullName;
これは実際にアセンブリをロード回避しますあなたのプロセス。
申し訳ありませんが、これは私が探しているものではありません。私はコードでそれを行う方法を知っています。私がサポートする人にこれを行う方法を教えなければならないので、私が後にしたのはコマンドラインオプションでした。私は私が望んでいたものを得るための組み込みのcmdがあることを望んでいた。しかし、私はAssembly.ReflectionLoadFrom()を使用していました。とにかくAssemblyNameチップのAssemblyName.GetAssemblyName +1を使用するように切り替えます。 – JMarsch
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
申し訳ありませんが、これは私が探しているものではありません。私はコードでそれを行う方法を知っています。私がサポートする人にこれを行う方法を教えなければならないので、私が後にしたのはコマンドラインオプションでした。私は、私が望むものを得ることができる内蔵のcmdがあることを期待していました。ここで尋ねられていることを実際に理解するために、私自身は – JMarsch
私はあなたがSystem.Reflection.AssemblyName.GetAssemblyNameを探していると思う:Assembly.Loadを使用したソリューションとは異なり
AssemblyName name = AssemblyName.GetAssemblyName(@"C:\path\assembly.dll");
Console.WriteLine(name.FullName);
、これはあなたのAppDomainにアセンブリをロードしません。これにより、アセンブリに含まれる参照を解決せずに、アセンブリ内のコード(例:モジュール静的コンストラクタ)を実行しなくてもアセンブリのAssemblyNameを取得できます。また、アプリケーションが実行されているバージョンとは異なるバージョンの.NET Frameworkを対象とするアセンブリのAssemblyNameを取得することもできます。別の答えのために
、あなたは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;
}
+1を振り回しました。 –
リフレクターにロードするのではなく、コンソールアプリを書くことができます:D – Jamiec
@Jamiec確かですが、リフレクターをすぐに利用できます。 –