質問

アセンブリファイルへのパスのみを与えられて、アセンブリのフルネームを表示したいとします。

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

役に立ちましたか?

解決

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

sn -T path\to\your.dll

個人的には、DLLをリフレクターにロードするだけで簡単です。これは、下のパネルのフルネームを示しています。

他のヒント

system.reflection.assemblyname.getAssemblynameを探していると思います。

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

Assembly.loadを使用するソリューションとは異なり、これはアセンブリをAppDomainにロードしません。これにより、アセンブリが持っている参照を解決することなく、アセンブリ内のコード(モジュール静的コンストラクターなど)を実行することなく、アセンブリのアセンブリ名を取得できます。これにより、アプリケーションが実行されているバージョンとは異なる.NETフレームワークのバージョンをターゲットにするアセンブリのアセンブリ名を取得できます。

これを介して取得できます AssemblyName:

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

これにより、実際にアセンブリをプロセスにロードすることができません。

別の答えについては、PowerShellでこれを行うことができます。

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

これには、取得するためだけにビジュアルスタジオをインストールする必要がないという利点があります sn.exe, また、公開キーのトークンではなく、アセンブリの完全な強い名前を返すこと。

cmdletスクリプトでそれをラップするのは簡単です:

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

Process {
    $FullPath = [System.IO.Path]::GetFullPath($Path);
    return [System.Reflection.AssemblyName]::GetAssemblyName($FullPath).FullName;
}
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top