53

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

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

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

4

10 回答 10

150

这是来自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。选择菜单项时,在输出窗口中会给出程序集名称。

于 2013-07-01T02:16:54.513 回答
35

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

typeof(SomeTypeInTheAssembly).Assembly.FullName

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

ildasm.exe MyAssembly.dll /text
于 2009-03-18T14:23:46.417 回答
25

派对迟到了,但在谷歌上搜索了更多关于这个问题的信息并找到了这个页面:

他描述了一个可以做到这一点的 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>

这可以通过使用代码来完成其他答案中提到的技巧,除非您不必创建项目来执行此操作 - 只需在提示符下键入即可;)

于 2013-03-07T12:01:50.087 回答
9

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

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

于 2009-03-18T14:27:44.783 回答
6

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

于 2011-08-16T16:20:27.170 回答
6

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

于 2012-08-27T09:52:46.613 回答
5

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

于 2009-03-18T14:25:15.057 回答
4

JetBrains dotPeek或 Telerik JustDecompile相当不错。只需打开 DLL,即可立即获得名称。

于 2013-03-14T15:27:04.353 回答
1

几种方式。

在代码中:

Assembly.FullName 例如

typeof(Thingy).Assembly.FullName

或者,如果它是已安装的程序集,则从 GAC 使用msdn 上这篇文章中的步骤。

于 2009-03-18T14:26:11.403 回答
1

作为老派并且比 powershell 更喜欢 cmd,我为自己编写了这个批处理脚本来做到这一点:

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

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

fqn mydll.dll 

将打印您想要的完全限定名称。

于 2019-01-24T16:31:04.233 回答