【问题标题】:How can I see the strong name of my assembly?如何查看我的程序集的强名称?
【发布时间】:2013-06-29 01:19:49
【问题描述】:

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

我如何知道我的程序集的强名称是什么?看起来这应该很明显,但我找不到任何参考。

【问题讨论】:

    标签: c# visual-studio visual-studio-2012 .net-assembly strongname


    【解决方案1】:

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

    sn -v "C:\MyAssemblyPath"
    

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

    sn -T "C:\MyAssemblyPath"
    

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

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

    Assembly.GetExecutingAssembly().FullName;
    

    【讨论】:

    • 所以...没有办法从 Visual Studio 执行此操作,当项目源加载时,然后?
    • sn -t 对我不起作用。我收到“无法将密钥转换为令牌——无效的程序集公钥”。 Paul Gillen 的回答确实有效(-Tp),但我不得不承认我很沮丧,因为这不能在 VS 中完成。不得不求助于 VISUAL 工作室工具的命令行似乎很愚蠢。
    • 是的对不起,它应该是大写的T(更新的答案)。看起来很奇怪,在 VS 中没有办法做到这一点,但您可以将 sn.exe 添加到外部工具列表并将参数设置为 -T $(TargetPath),因此可以直接从 VS 访问它。我刚刚尝试过,它似乎工作正常,现在每次从Tools 菜单中选择该工具时都会显示当前项目的公钥。
    【解决方案2】:

    您可以使用 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 资源管理器和 Visual Studio 命令提示符找出完全限定名称。

    首先,右键单击程序集 DLL -> 属性 -> 详细信息。在这里您可以找到您的程序集的名称、版本和文化。

    对于公钥,启动 Visual Studio 命令提示符并写入:

    sn -Tp YourAssembly.dll

    它会给你公钥。

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

    【讨论】:

      【解决方案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 headers to find the strong name signature。 }

      【讨论】:

        【解决方案4】:

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

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

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

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

        sn /k 文件名.snk

        示例:sn /k ErrorHandlingProcess.snk

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多