36

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

我怎样才能知道我的程序集的强名称是什么?似乎这应该很明显,但我找不到任何参考。

4

4 回答 4

36

您可以使用强名称工具来确定程序集是否具有强名称。在命令提示符下,您可以执行此操作来验证它是一个强命名程序集。

sn -v "C:\MyAssemblyPath"

并获得公共令牌,你可以这样做

sn -T "C:\MyAssemblyPath"

您还可以使用ReflectorILSpy来查找公钥令牌。

如果要获取程序集的全名,包括公共令牌,可以使用Assembly.FullName

Assembly.GetExecutingAssembly().FullName;
于 2013-06-29T01:36:55.757 回答
27

您可以使用 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

它会给你公钥。

现在您可以伪造完全限定名称。

于 2013-06-29T01:36:59.710 回答
3
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 标头以查找强名称签名。}

于 2013-06-29T01:35:42.913 回答
0

第 1 步:通过在开始菜单上搜索 Visual Studio 的开发人员命令提示符。

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

第 3 步:根据需要更改目录。您可以提供解决方案目录,如 .cd D:\Learning\Projects\Biztalk\EAISchemas

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

sn /k 文件名 .snk

示例:sn /k ErrorHandlingProcess.snk

于 2020-11-15T14:51:23.430 回答