如何查看程序集的强名称?

40

我有一个项目,为它创建了一个强名称密钥文件。

如何查看我的程序集的强名称?这似乎很明显,但我找不到任何参考资料。

4个回答

42

您可以使用Strong Name工具来确定程序集是否已被强命名。在命令提示符中,您可以执行以下操作以验证它是强命名程序集。

sn -v "C:\MyAssemblyPath"

要获取公共令牌,您可以这样做

sn -T "C:\MyAssemblyPath"

你还可以使用 ReflectorILSpy 来查找公钥标记。

如果您想获取包括公钥标记在内的程序集完整名称,可以使用 Assembly.FullName

Assembly.GetExecutingAssembly().FullName;

2
那么,如果项目源代码已经加载,从Visual Studio中无法完成这个操作吗? - Jeremy Holovacs
2
sn -t 对我没用.. 我得到了“无法将密钥转换为令牌--无效的程序集公钥。” Paul Gillen的答案确实有效(-Tp),但我必须承认我很沮丧,因为这不能在VS内完成。看起来很傻,必须使用命令行来使用VISUAL studio工具。 - Jeremy Holovacs
1
是的,抱歉,应该是大写的 T(已更新答案)。在 VS 中似乎没有办法直接实现这个功能,但你可以将 sn.exe 添加到外部工具列表中,并将参数设置为 -T $(TargetPath),这样就可以直接从 VS 中访问它了。我刚刚尝试了一下,似乎可以正常工作,并且每次从“工具”菜单中选择该工具时都会显示当前项目的公钥。 - keyboardP

29
您可以使用类似 Reflector 或 ILSpy 的工具获取完全限定名称。选择程序集,它应该在顶部。对于 ILSpy 中的 XNA: // C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.dll // Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553 如果您不想使用这些工具,可以使用 Windows Explorer 和 Visual Studio 命令提示符来找出完全限定名称。
首先,右键单击程序集 DLL->属性->详细信息。在此处,您可以找到程序集的名称、版本和区域设置。
对于公共密钥,请启动 Visual Studio 命令提示符并编写: sn -Tp YourAssembly.dll 它会给您提供公共密钥。
现在,您可以伪造完全限定名称。

4
Process[] processlist = Process.GetProcesses();

foreach(Process theprocess in processlist)
{
    string strongName = "N/A";
    try
    {
        strongName = Assembly.ReflectionOnlyLoadFrom(theprocess.MainModule.FileName).FullName;
    }
    catch
    {
        // System process?
    }
    Console.WriteLine("Process: {0} ID: {1} Strong Name: {2}", theprocess.ProcessName, theprocess.Id, strongName);

如果您知道文件名,可以处理PE头以查找强名称签名

0

步骤1:通过在开始菜单中搜索“Visual Studio开发人员命令提示符”。

步骤2:C:\Windows\system32>它将出现在命令提示符上。

步骤3:根据您的意愿更改目录。您可以像这样给出您的解决方案目录 .cd D:\Learning\Projects\Biztalk\EAISchemas

步骤4:在命令提示符中,从要存储密钥文件的文件夹中,键入以下命令,然后按 ENTER:

sn /k file_name .snk

例如:sn /k ErrorHandlingProcess.snk


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接