Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找程序集的完全限定名?_C#_Deployment_Assemblies_Strongname - Fatal编程技术网

C# 如何查找程序集的完全限定名?

C# 如何查找程序集的完全限定名?,c#,deployment,assemblies,strongname,C#,Deployment,Assemblies,Strongname,如何查找程序集的完全限定名,例如: MyNamespace.MyAssembly, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 我已经设法使用SDK中的sn.exe获取了我的PublicKeyToken,但我希望能够轻松获取完整的限定名。如果可以将程序集加载到.NET应用程序中,则可以执行以下操作: typeof(SomeTypeInTheAssembly).Assembly.FullName 如

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

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

我已经设法使用SDK中的
sn.exe
获取了我的PublicKeyToken,但我希望能够轻松获取完整的限定名。

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

typeof(SomeTypeInTheAssembly).Assembly.FullName
如果不能,则可以使用ildasm.exe,它将位于以下位置:

ildasm.exe MyAssembly.dll /text
如果在其中加载程序集(DLL、EXE等),它将在底部告诉您完整的强名称。

两种方法

代码:

e、 g

或者,如果是已安装的程序集,请使用步骤从GAC获取。

用于获取当前程序集,用于获取启动所有程序集的程序集,或用于获取调用函数的代码的程序集(堆栈中的一个)


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

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

您也可以使用开源ILSpy,加载程序集后,它的全名将为
在派对晚些时候,我在代码窗口顶部的评论中显示了我的想法,但谷歌搜索了更多关于这个问题的信息,发现了这个页面:

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

这通过使用代码实现了其他答案中提到的技巧,但您不必创建项目来实现这一点-只需在提示符处键入;)

喷气式飞机或Telerik都很好。只需打开DLL,就可以立即获得名称。

这是一个无耻的复制粘贴,是获取项目输出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–>获取限定程序集名称
下。选择菜单项后,程序集名称将显示在输出窗口中。

作为一个老派的人,我更喜欢cmd而不是powershell,为此我编写了以下批处理脚本:

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

将打印所需的完全限定名。

实际上,这将为您提供程序集中某个TypeInAssembly所在的程序集,而您在编译时可能没有该程序集。我不确定“在那里某处”是否可以作为答案。该ildasm命令会导致一堆文本,格式不好。下面的几个建议更加完整。您可以在输出中搜索“MyAssembly,Version=”以找到它。如果已安装grep:ildasm.exe MyAssembly.dll/text | grep-A 1“MyAssembly,Version=“很遗憾,当程序集被混淆时,使用ildasm.exe的解决方案将无法工作。
ildasm.exe MyAssembly.dll/text
在文本中的任何位置都不包含完整的程序集名称。此方法具有误导性且不准确。此答案不符合要求,他没有要求使用118美元的插件来查找此问题。发布此方法时,Reflector是免费的。ILSpy是Reflector的免费替代品,可用于查找程序集的完全限定名称。旧的.Net Reflector 6.8.2.5是免费的,并且正在运行。现在(由JetBrains提供)是用于此目的的最佳免费选择。谢谢!使用此
AssemblyName.GetAssemblyName(assemblyPath)的C#版本结束.FullName
建议使用程序集名称的完整路径,而不仅仅是程序集名称。FWIW,如果您这样做,即使您与程序集位于同一目录中,也不起作用。Microsoft,今年是2015年。请为我们提供更好的替代方案,以获得完全限定的程序集名称。这应该是selected answerSeconding@M3579的评论,有一些赏金。这是检查此问题的最方便的方法!问题没有指定“对于当前项目”。我怀疑作者希望将此用于任何程序集,包括依赖项。
@REM fqn.bat <dll_path>
powershell -command "([system.reflection.assembly]::loadfile('%~f1')).FullName"
fqn mydll.dll