如何找到装配的完全限定名称?

时间:2009-03-18 14:21:51

标签: c# deployment assemblies strongname

如何查找程序集的完全限定名称,例如:

MyNamespace.MyAssembly, version=1.0.3300.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089

我已经设法使用SDK中的sn.exe来获取我的PublicKeyToken,但我想轻松获得完整的限定名称。

10 个答案:

答案 0 :(得分:128)

这是来自I Note It Down的无耻复制粘贴,是获取项目输出的FQN的简单方法:

Open Visual Studio
Go to Tools –> External Tools –> Add
    Title: Get Qualified Assembly Name
    Command: Powershell.exe
    Arguments: -command "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
    Check "Use Output Window".

新工具显示在Tools –> Get Qualified Assembly Name下方。选择菜单项后,将在输出窗口中显示程序集名称。

答案 1 :(得分:29)

如果可以将程序集加载到.NET应用程序中,则可以执行以下操作:

typeof(SomeTypeInTheAssembly).Assembly.FullName

如果你不能,那么你可以使用ildasm.exe,它会在某处:

ildasm.exe MyAssembly.dll /text

答案 2 :(得分:24)

晚会,但搜索了更多有关此问题的信息并找到了此页:

他描述了一个可以做到这一点的powershell函数。所以。我以前从未使用过PowerShell,但我想我会尝试一下:

C:\> cd PATH_TO_ASSEMBLY   
C:\PATH_TO_ASSEMBLY>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\PATH_TO_ASSEMBLY> [System.Reflection.AssemblyName]::GetAssemblyName('System.Data.SQLite.dll').FullName
System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
PS C:\PATH_TO_ASSEMBLY>

这是通过使用代码在其他答案中提到的技巧,除了您不必创建项目来执行此操作 - 只需在提示符处输入;)

答案 3 :(得分:9)

使用Assembly.GetExecutingAssembly()获取当前程序集,使用Assembly.GetEntryAssembly()获取启动它的程序集,或使用Assembly.GetCallingAssembly()获取调用函数的代码程序集(一个在堆栈中。)

如果您拥有正确的程序集,请使用FullName属性,如其他答案中所示。

答案 4 :(得分:6)

此外,如果您正在寻找GAC中已有的程序集的完全限定名称,您可以启动Visual Studio命令提示符(设置正确路径的最简单方法)并使用gacutil /l列出所有程序集他们各自的FQN。使用gacutil /l <yourassemblyname>过滤列表可以更轻松地找到您要查找的内容。

答案 5 :(得分:5)

如果您在Reflector中加载程序集(DLL,EXE等),它会告诉您底部的完整强名称。

答案 6 :(得分:5)

您也可以使用开源ILSpy,在加载程序集后,它的全名将是 在代码窗口顶部的注释中显示

答案 7 :(得分:4)

JetBrains dotPeek或Telerik JustDecompile非常好。只需打开DLL,就可以立即获得名称。

答案 8 :(得分:1)

夫妻俩。

在代码中:

Assembly.FullName  例如

typeof(Thingy).Assembly.FullName

或者,如果是已安装的程序集,则使用步骤in this post on msdn从GAC进行。

答案 9 :(得分:0)

我是个老派,喜欢cmd而不是Powershell,所以我为这个脚本编写了自己的代码:

@REM fqn.bat <dll_path>
powershell -command "([system.reflection.assembly]::loadfile('%~f1')).FullName"

%~f1将第一个参数扩展为绝对路径,因此运行:

fqn mydll.dll 

将打印您想要的标准名称。