Вопрос

Предположим, я хочу отобразить полное имя сборки, с учетом всего пути к файлу сборки.

Я знаю, что мог бы легко написать программу командной строки или сценарий PowerShell, но включает ли время выполнения команду, которую я мог бы использовать? (Я видел, как Гакутил делал это для собраний, которые находятся в 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, это не загрузит сборку в ваше приложение. Это позволит вам получить сборочное именем для сборки без необходимости разрешения каких -либо ссылок, которые есть в Ассамблеи, и без какого -либо кода (например, статические конструкторы модуля) в сборке. Это даже позволит вам получить сборочную имени сборки, которая нацелена на версию .NET Framework, которая отличается от версии, на которой работает ваше приложение.

Вы можете получить это через Ассамблея имени:

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

Это избегает фактической загрузки сборки в ваш процесс.

Для другого ответа вы можете сделать это с PowerShell:

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

Это имеет то преимущество в том, что не нужно установить Visual Studio, чтобы получить sn.exe, а также то, что он возвращает полное сильное имя для сборки, а не только токен открытого ключа.

Достаточно легко обернуть это в сценарий командлета:

[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