回答

11

您可以通过使用像反射器或ILSpy工具得到完全合格的名称。选择大会,它应该在它的顶部。对于XNA在ILSpy:

// 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

它会给你的公钥。

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

2
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。 }

11

您可以使用Strong Name工具来确定程序集是否有强命名。在命令提示符下,你可以这样做来验证它是一个强有力的命名程序集。

sn -v "C:\MyAssemblyPath" 

,并得到公众的道理,你可以做到这一点

sn -T "C:\MyAssemblyPath" 

您还可以使用ReflectorILSpy找到公钥标记。

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

Assembly.GetExecutingAssembly().FullName; 
+1

所以...没有办法从Visual Studio做到这一点,当项目源被加载,然后呢? –

+0

sn -t没有为我工作..我得到“无法将密钥转换为令牌 - 无效的程序集公钥。”保罗吉伦的答案确实有效(-Tp),但我不得不承认,我很沮丧,这不能在VS内完成。不得不求助于VISUAL studio工具的命令行似乎很愚蠢。 –

+0

对不起,它应该是一个大写'T'(更新的答案)。在VS中没有办法做到这一点似乎很奇怪,但是你可以在外部工具列表中添加'sn.exe'并将参数设置为'-T $(TargetPath)',因此可以直接从VS 。我刚刚尝试过,它似乎工作正常,并且每次从“工具”菜单中选择工具时都会显示当前项目的公钥。 – keyboardP